arize-phoenix 5.7.0__tar.gz → 5.8.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.
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/PKG-INFO +3 -5
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/README.md +2 -2
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/pyproject.toml +0 -1
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/config.py +19 -3
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/helpers/playground_clients.py +123 -36
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/helpers/playground_spans.py +173 -76
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/input_types/InvocationParameters.py +7 -8
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/mutations/chat_mutations.py +46 -65
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/subscriptions.py +210 -158
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/types/ChatCompletionSubscriptionPayload.py +5 -3
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/app.py +14 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/grpc_server.py +3 -1
- arize_phoenix-5.8.0/src/phoenix/server/static/.vite/manifest.json +78 -0
- arize_phoenix-5.7.0/src/phoenix/server/static/assets/components-Csu8UKOs.js → arize_phoenix-5.8.0/src/phoenix/server/static/assets/components-MllbfxfJ.js +168 -150
- arize_phoenix-5.7.0/src/phoenix/server/static/assets/index-Bk5C9EA7.js → arize_phoenix-5.8.0/src/phoenix/server/static/assets/index-BVO2YcT1.js +2 -2
- arize_phoenix-5.7.0/src/phoenix/server/static/assets/pages-UeWaKXNs.js → arize_phoenix-5.8.0/src/phoenix/server/static/assets/pages-BHfC6jnL.js +394 -300
- arize_phoenix-5.7.0/src/phoenix/server/static/assets/vendor-CtqfhlbC.js → arize_phoenix-5.8.0/src/phoenix/server/static/assets/vendor-BEuNhfwH.js +1 -1
- arize_phoenix-5.7.0/src/phoenix/server/static/assets/vendor-arizeai-C_3SBz56.js → arize_phoenix-5.8.0/src/phoenix/server/static/assets/vendor-arizeai-Bskhzyjm.js +1 -1
- arize_phoenix-5.7.0/src/phoenix/server/static/assets/vendor-codemirror-wfdk9cjp.js → arize_phoenix-5.8.0/src/phoenix/server/static/assets/vendor-codemirror-DLlXCf0x.js +1 -1
- arize_phoenix-5.7.0/src/phoenix/server/static/assets/vendor-recharts-BiVnSv90.js → arize_phoenix-5.8.0/src/phoenix/server/static/assets/vendor-recharts-CRqhvLYg.js +1 -1
- arize_phoenix-5.8.0/src/phoenix/version.py +1 -0
- arize_phoenix-5.7.0/src/phoenix/server/static/.vite/manifest.json +0 -78
- arize_phoenix-5.7.0/src/phoenix/version.py +0 -1
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/.gitignore +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/IP_NOTICE +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/LICENSE +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/__init__.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/auth.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/core/__init__.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/core/embedding_dimension.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/core/model.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/core/model_schema.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/core/model_schema_adapter.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/datetime_utils.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/db/README.md +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/db/__init__.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/db/alembic.ini +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/db/bulk_inserter.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/db/engines.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/db/enums.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/db/facilitator.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/db/helpers.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/db/insertion/__init__.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/db/insertion/constants.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/db/insertion/dataset.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/db/insertion/document_annotation.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/db/insertion/evaluation.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/db/insertion/helpers.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/db/insertion/span.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/db/insertion/span_annotation.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/db/insertion/trace_annotation.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/db/insertion/types.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/db/migrate.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/db/migrations/__init__.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/db/migrations/env.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/db/migrations/script.py.mako +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/db/migrations/versions/10460e46d750_datasets.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/db/migrations/versions/3be8647b87d8_add_token_columns_to_spans_table.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/db/migrations/versions/cd164e83824f_users_and_tokens.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/db/migrations/versions/cf03bd6bae1d_init.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/db/models.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/exceptions.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/experiments/__init__.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/experiments/evaluators/__init__.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/experiments/evaluators/base.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/experiments/evaluators/code_evaluators.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/experiments/evaluators/llm_evaluators.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/experiments/evaluators/utils.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/experiments/functions.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/experiments/tracing.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/experiments/types.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/experiments/utils.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/inferences/__init__.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/inferences/errors.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/inferences/fixtures.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/inferences/inferences.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/inferences/schema.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/inferences/validation.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/logging/__init__.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/logging/_config.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/logging/_filter.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/logging/_formatter.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/metrics/README.md +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/metrics/__init__.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/metrics/binning.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/metrics/metrics.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/metrics/mixins.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/metrics/retrieval_metrics.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/metrics/timeseries.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/metrics/wrappers.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/pointcloud/__init__.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/pointcloud/clustering.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/pointcloud/pointcloud.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/pointcloud/projectors.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/pointcloud/umap_parameters.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/py.typed +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/__init__.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/README.md +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/__init__.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/auth.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/context.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/dataloaders/__init__.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/dataloaders/annotation_summaries.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/dataloaders/average_experiment_run_latency.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/dataloaders/cache/__init__.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/dataloaders/cache/two_tier_cache.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/dataloaders/dataset_example_revisions.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/dataloaders/dataset_example_spans.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/dataloaders/document_evaluation_summaries.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/dataloaders/document_evaluations.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/dataloaders/document_retrieval_metrics.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/dataloaders/experiment_annotation_summaries.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/dataloaders/experiment_error_rates.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/dataloaders/experiment_run_annotations.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/dataloaders/experiment_run_counts.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/dataloaders/experiment_sequence_number.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/dataloaders/latency_ms_quantile.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/dataloaders/min_start_or_max_end_times.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/dataloaders/project_by_name.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/dataloaders/record_counts.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/dataloaders/span_annotations.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/dataloaders/span_dataset_examples.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/dataloaders/span_descendants.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/dataloaders/span_projects.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/dataloaders/token_counts.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/dataloaders/trace_row_ids.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/dataloaders/user_roles.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/dataloaders/users.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/exceptions.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/helpers/__init__.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/helpers/dataset_helpers.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/helpers/playground_registry.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/input_types/AddExamplesToDatasetInput.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/input_types/AddSpansToDatasetInput.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/input_types/ChatCompletionInput.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/input_types/ChatCompletionMessageInput.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/input_types/ClearProjectInput.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/input_types/ClusterInput.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/input_types/Coordinates.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/input_types/CreateDatasetInput.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/input_types/CreateSpanAnnotationInput.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/input_types/CreateTraceAnnotationInput.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/input_types/DataQualityMetricInput.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/input_types/DatasetExampleInput.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/input_types/DatasetSort.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/input_types/DatasetVersionSort.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/input_types/DeleteAnnotationsInput.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/input_types/DeleteDatasetExamplesInput.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/input_types/DeleteDatasetInput.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/input_types/DeleteExperimentsInput.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/input_types/DimensionFilter.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/input_types/DimensionInput.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/input_types/GenerativeModelInput.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/input_types/Granularity.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/input_types/PatchAnnotationInput.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/input_types/PatchDatasetExamplesInput.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/input_types/PatchDatasetInput.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/input_types/PerformanceMetricInput.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/input_types/SpanAnnotationSort.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/input_types/SpanSort.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/input_types/TemplateOptions.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/input_types/TimeRange.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/input_types/TraceAnnotationSort.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/input_types/UserRoleInput.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/input_types/__init__.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/interceptor.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/mutations/__init__.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/mutations/api_key_mutations.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/mutations/dataset_mutations.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/mutations/experiment_mutations.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/mutations/export_events_mutations.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/mutations/project_mutations.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/mutations/span_annotations_mutations.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/mutations/trace_annotations_mutations.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/mutations/user_mutations.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/openapi/__init__.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/openapi/main.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/openapi/schema.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/queries.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/routers/__init__.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/routers/auth.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/routers/embeddings.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/routers/oauth2.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/routers/utils.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/routers/v1/__init__.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/routers/v1/datasets.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/routers/v1/evaluations.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/routers/v1/experiment_evaluations.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/routers/v1/experiment_runs.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/routers/v1/experiments.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/routers/v1/pydantic_compat.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/routers/v1/spans.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/routers/v1/traces.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/routers/v1/utils.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/schema.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/types/Annotation.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/types/AnnotationSummary.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/types/AnnotatorKind.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/types/ApiKey.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/types/AuthMethod.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/types/ChatCompletionMessageRole.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/types/Cluster.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/types/CreateDatasetPayload.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/types/DataQualityMetric.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/types/Dataset.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/types/DatasetExample.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/types/DatasetExampleRevision.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/types/DatasetValues.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/types/DatasetVersion.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/types/Dimension.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/types/DimensionDataType.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/types/DimensionShape.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/types/DimensionType.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/types/DimensionWithValue.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/types/DocumentEvaluationSummary.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/types/DocumentRetrievalMetrics.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/types/EmbeddingDimension.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/types/EmbeddingMetadata.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/types/Evaluation.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/types/EvaluationSummary.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/types/Event.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/types/EventMetadata.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/types/ExampleRevisionInterface.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/types/Experiment.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/types/ExperimentAnnotationSummary.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/types/ExperimentComparison.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/types/ExperimentRun.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/types/ExperimentRunAnnotation.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/types/ExportedFile.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/types/Functionality.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/types/GenerativeModel.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/types/GenerativeProvider.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/types/Inferences.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/types/InferencesRole.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/types/LabelFraction.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/types/MimeType.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/types/Model.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/types/NumericRange.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/types/PerformanceMetric.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/types/Project.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/types/PromptResponse.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/types/Retrieval.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/types/ScalarDriftMetricEnum.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/types/Segments.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/types/SortDir.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/types/Span.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/types/SpanAnnotation.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/types/SystemApiKey.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/types/TemplateLanguage.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/types/TimeSeries.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/types/Trace.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/types/TraceAnnotation.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/types/UMAPPoints.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/types/User.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/types/UserApiKey.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/types/UserRole.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/types/ValidationResult.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/types/VectorDriftMetricEnum.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/types/__init__.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/types/node.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/types/pagination.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/utils.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/bearer_auth.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/dml_event.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/dml_event_handler.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/email/__init__.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/email/sender.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/email/templates/__init__.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/email/templates/password_reset.html +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/email/types.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/jwt_store.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/main.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/oauth2.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/openapi/__init__.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/prometheus.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/rate_limiters.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/static/apple-touch-icon-114x114.png +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/static/apple-touch-icon-120x120.png +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/static/apple-touch-icon-144x144.png +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/static/apple-touch-icon-152x152.png +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/static/apple-touch-icon-180x180.png +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/static/apple-touch-icon-72x72.png +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/static/apple-touch-icon-76x76.png +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/static/apple-touch-icon.png +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/static/assets/vendor-DxkFTwjz.css +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/static/assets/vendor-three-DwGkEfCM.js +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/static/favicon.ico +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/static/modernizr.js +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/telemetry.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/templates/__init__.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/templates/index.html +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/thread_server.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/types.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/services.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/session/__init__.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/session/client.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/session/data_extractor.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/session/evaluation.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/session/session.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/settings.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/trace/__init__.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/trace/attributes.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/trace/dsl/README.md +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/trace/dsl/__init__.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/trace/dsl/filter.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/trace/dsl/helpers.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/trace/dsl/query.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/trace/errors.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/trace/evaluation_conventions.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/trace/exporter.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/trace/fixtures.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/trace/otel.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/trace/projects.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/trace/schemas.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/trace/span_evaluations.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/trace/span_json_decoder.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/trace/span_json_encoder.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/trace/trace_dataset.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/trace/utils.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/trace/v1/__init__.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/trace/v1/evaluation_pb2.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/trace/v1/evaluation_pb2.pyi +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/utilities/__init__.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/utilities/client.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/utilities/deprecation.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/utilities/error_handling.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/utilities/json.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/utilities/logging.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/utilities/project.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/utilities/re.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/utilities/span_store.py +0 -0
- {arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/utilities/template_formatters.py +0 -0
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: arize-phoenix
|
|
3
|
-
Version: 5.
|
|
3
|
+
Version: 5.8.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
|
|
7
7
|
Project-URL: Source, https://github.com/Arize-ai/phoenix
|
|
8
8
|
Author-email: Arize AI <phoenix-devs@arize.com>
|
|
9
9
|
License: Elastic-2.0
|
|
10
|
-
License-File: IP_NOTICE
|
|
11
|
-
License-File: LICENSE
|
|
12
10
|
Keywords: Explainability,Monitoring,Observability
|
|
13
11
|
Classifier: Programming Language :: Python
|
|
14
12
|
Classifier: Programming Language :: Python :: 3.9
|
|
@@ -131,7 +129,7 @@ Description-Content-Type: text/markdown
|
|
|
131
129
|
<a href="https://docs.arize.com/phoenix/">
|
|
132
130
|
<img src="https://img.shields.io/static/v1?message=Docs&logo=data:image/png;base64,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&labelColor=grey&color=blue&logoColor=white&label=%20"/>
|
|
133
131
|
</a>
|
|
134
|
-
<a target="_blank" href="https://join.slack.com/t/arize-ai/shared_invite/zt-
|
|
132
|
+
<a target="_blank" href="https://join.slack.com/t/arize-ai/shared_invite/zt-22vj03k4k-MlrNEwv5WeswapTs0kNCBw">
|
|
135
133
|
<img src="https://img.shields.io/static/v1?message=Community&logo=slack&labelColor=grey&color=blue&logoColor=white&label=%20"/>
|
|
136
134
|
</a>
|
|
137
135
|
<a target="_blank" href="https://twitter.com/ArizePhoenix">
|
|
@@ -237,7 +235,7 @@ For details about tracing integrations and example applications, see the [OpenIn
|
|
|
237
235
|
|
|
238
236
|
Join our community to connect with thousands of AI builders.
|
|
239
237
|
|
|
240
|
-
- 🌍 Join our [Slack community](https://join.slack.com/t/arize-ai/shared_invite/zt-
|
|
238
|
+
- 🌍 Join our [Slack community](https://join.slack.com/t/arize-ai/shared_invite/zt-22vj03k4k-MlrNEwv5WeswapTs0kNCBw).
|
|
241
239
|
- 📚 Read our [documentation](https://docs.arize.com/phoenix).
|
|
242
240
|
- 💡 Ask questions and provide feedback in the _#phoenix-support_ channel.
|
|
243
241
|
- 🌟 Leave a star on our [GitHub](https://github.com/Arize-ai/phoenix).
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
<a href="https://docs.arize.com/phoenix/">
|
|
8
8
|
<img src="https://img.shields.io/static/v1?message=Docs&logo=data:image/png;base64,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&labelColor=grey&color=blue&logoColor=white&label=%20"/>
|
|
9
9
|
</a>
|
|
10
|
-
<a target="_blank" href="https://join.slack.com/t/arize-ai/shared_invite/zt-
|
|
10
|
+
<a target="_blank" href="https://join.slack.com/t/arize-ai/shared_invite/zt-22vj03k4k-MlrNEwv5WeswapTs0kNCBw">
|
|
11
11
|
<img src="https://img.shields.io/static/v1?message=Community&logo=slack&labelColor=grey&color=blue&logoColor=white&label=%20"/>
|
|
12
12
|
</a>
|
|
13
13
|
<a target="_blank" href="https://twitter.com/ArizePhoenix">
|
|
@@ -113,7 +113,7 @@ For details about tracing integrations and example applications, see the [OpenIn
|
|
|
113
113
|
|
|
114
114
|
Join our community to connect with thousands of AI builders.
|
|
115
115
|
|
|
116
|
-
- 🌍 Join our [Slack community](https://join.slack.com/t/arize-ai/shared_invite/zt-
|
|
116
|
+
- 🌍 Join our [Slack community](https://join.slack.com/t/arize-ai/shared_invite/zt-22vj03k4k-MlrNEwv5WeswapTs0kNCBw).
|
|
117
117
|
- 📚 Read our [documentation](https://docs.arize.com/phoenix).
|
|
118
118
|
- 💡 Ask questions and provide feedback in the _#phoenix-support_ channel.
|
|
119
119
|
- 🌟 Leave a star on our [GitHub](https://github.com/Arize-ai/phoenix).
|
|
@@ -146,9 +146,10 @@ ENV_PHOENIX_SMTP_VALIDATE_CERTS = "PHOENIX_SMTP_VALIDATE_CERTS"
|
|
|
146
146
|
Whether to validate SMTP server certificates. Defaults to true.
|
|
147
147
|
"""
|
|
148
148
|
|
|
149
|
-
#
|
|
149
|
+
# API extension settings
|
|
150
150
|
ENV_PHOENIX_FASTAPI_MIDDLEWARE_PATHS = "PHOENIX_FASTAPI_MIDDLEWARE_PATHS"
|
|
151
151
|
ENV_PHOENIX_GQL_EXTENSION_PATHS = "PHOENIX_GQL_EXTENSION_PATHS"
|
|
152
|
+
ENV_PHOENIX_GRPC_INTERCEPTOR_PATHS = "PHOENIX_GRPC_INTERCEPTOR_PATHS"
|
|
152
153
|
|
|
153
154
|
|
|
154
155
|
def server_instrumentation_is_enabled() -> bool:
|
|
@@ -656,7 +657,7 @@ def get_env_db_logging_level() -> int:
|
|
|
656
657
|
|
|
657
658
|
|
|
658
659
|
def get_env_fastapi_middleware_paths() -> list[tuple[str, str]]:
|
|
659
|
-
env_value = os.getenv(
|
|
660
|
+
env_value = os.getenv(ENV_PHOENIX_FASTAPI_MIDDLEWARE_PATHS, "")
|
|
660
661
|
paths = []
|
|
661
662
|
for entry in env_value.split(","):
|
|
662
663
|
entry = entry.strip()
|
|
@@ -671,7 +672,7 @@ def get_env_fastapi_middleware_paths() -> list[tuple[str, str]]:
|
|
|
671
672
|
|
|
672
673
|
|
|
673
674
|
def get_env_gql_extension_paths() -> list[tuple[str, str]]:
|
|
674
|
-
env_value = os.getenv(
|
|
675
|
+
env_value = os.getenv(ENV_PHOENIX_GQL_EXTENSION_PATHS, "")
|
|
675
676
|
paths = []
|
|
676
677
|
for entry in env_value.split(","):
|
|
677
678
|
entry = entry.strip()
|
|
@@ -685,6 +686,21 @@ def get_env_gql_extension_paths() -> list[tuple[str, str]]:
|
|
|
685
686
|
return paths
|
|
686
687
|
|
|
687
688
|
|
|
689
|
+
def get_env_grpc_interceptor_paths() -> list[tuple[str, str]]:
|
|
690
|
+
env_value = os.getenv(ENV_PHOENIX_GRPC_INTERCEPTOR_PATHS, "")
|
|
691
|
+
paths = []
|
|
692
|
+
for entry in env_value.split(","):
|
|
693
|
+
entry = entry.strip()
|
|
694
|
+
if entry:
|
|
695
|
+
if ":" not in entry:
|
|
696
|
+
raise ValueError(
|
|
697
|
+
f"Invalid interceptor entry '{entry}'. Expected format 'file_path:ClassName'."
|
|
698
|
+
)
|
|
699
|
+
file_path, object_name = entry.split(":", 1)
|
|
700
|
+
paths.append((file_path.strip(), object_name.strip()))
|
|
701
|
+
return paths
|
|
702
|
+
|
|
703
|
+
|
|
688
704
|
def _get_logging_level(env_var: str, default_level: int) -> int:
|
|
689
705
|
logging_level = os.getenv(env_var)
|
|
690
706
|
if not logging_level:
|
{arize_phoenix-5.7.0 → arize_phoenix-5.8.0}/src/phoenix/server/api/helpers/playground_clients.py
RENAMED
|
@@ -1,13 +1,12 @@
|
|
|
1
|
+
import asyncio
|
|
1
2
|
import importlib.util
|
|
3
|
+
import inspect
|
|
4
|
+
import json
|
|
5
|
+
import time
|
|
2
6
|
from abc import ABC, abstractmethod
|
|
3
7
|
from collections.abc import AsyncIterator, Callable, Iterator
|
|
4
|
-
from
|
|
5
|
-
|
|
6
|
-
Any,
|
|
7
|
-
Mapping,
|
|
8
|
-
Optional,
|
|
9
|
-
Union,
|
|
10
|
-
)
|
|
8
|
+
from functools import wraps
|
|
9
|
+
from typing import TYPE_CHECKING, Any, Hashable, Mapping, Optional, Union
|
|
11
10
|
|
|
12
11
|
from openinference.instrumentation import safe_json_dumps
|
|
13
12
|
from openinference.semconv.trace import SpanAttributes
|
|
@@ -15,10 +14,14 @@ from strawberry import UNSET
|
|
|
15
14
|
from strawberry.scalars import JSON as JSONScalarType
|
|
16
15
|
from typing_extensions import TypeAlias, assert_never
|
|
17
16
|
|
|
18
|
-
from phoenix.
|
|
19
|
-
|
|
20
|
-
|
|
17
|
+
from phoenix.evals.models.rate_limiters import (
|
|
18
|
+
AsyncCallable,
|
|
19
|
+
GenericType,
|
|
20
|
+
ParameterSpec,
|
|
21
|
+
RateLimiter,
|
|
22
|
+
RateLimitError,
|
|
21
23
|
)
|
|
24
|
+
from phoenix.server.api.helpers.playground_registry import PROVIDER_DEFAULT, register_llm_client
|
|
22
25
|
from phoenix.server.api.input_types.GenerativeModelInput import GenerativeModelInput
|
|
23
26
|
from phoenix.server.api.input_types.InvocationParameters import (
|
|
24
27
|
BoundedFloatInvocationParameter,
|
|
@@ -42,16 +45,99 @@ from phoenix.server.api.types.GenerativeProvider import GenerativeProviderKey
|
|
|
42
45
|
if TYPE_CHECKING:
|
|
43
46
|
from anthropic.types import MessageParam
|
|
44
47
|
from openai.types import CompletionUsage
|
|
45
|
-
from openai.types.chat import
|
|
46
|
-
ChatCompletionMessageParam,
|
|
47
|
-
ChatCompletionMessageToolCallParam,
|
|
48
|
-
)
|
|
48
|
+
from openai.types.chat import ChatCompletionMessageParam, ChatCompletionMessageToolCallParam
|
|
49
49
|
|
|
50
50
|
DependencyName: TypeAlias = str
|
|
51
51
|
SetSpanAttributesFn: TypeAlias = Callable[[Mapping[str, Any]], None]
|
|
52
52
|
ChatCompletionChunk: TypeAlias = Union[TextChunk, ToolCallChunk]
|
|
53
53
|
|
|
54
54
|
|
|
55
|
+
class KeyedSingleton:
|
|
56
|
+
_instances: dict[Hashable, "KeyedSingleton"] = {}
|
|
57
|
+
|
|
58
|
+
def __new__(cls, *args: Any, **kwargs: Any) -> "KeyedSingleton":
|
|
59
|
+
if "singleton_key" in kwargs:
|
|
60
|
+
singleton_key = kwargs.pop("singleton_key")
|
|
61
|
+
elif args:
|
|
62
|
+
singleton_key = args[0]
|
|
63
|
+
args = args[1:]
|
|
64
|
+
else:
|
|
65
|
+
raise ValueError("singleton_key must be provided")
|
|
66
|
+
|
|
67
|
+
instance_key = (cls, singleton_key)
|
|
68
|
+
if instance_key not in cls._instances:
|
|
69
|
+
instance = super().__new__(cls)
|
|
70
|
+
cls._instances[instance_key] = instance
|
|
71
|
+
return cls._instances[instance_key]
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
class PlaygroundRateLimiter(RateLimiter, KeyedSingleton):
|
|
75
|
+
"""
|
|
76
|
+
A rate rate limiter class that will be instantiated once per `singleton_key`.
|
|
77
|
+
"""
|
|
78
|
+
|
|
79
|
+
def __init__(self, singleton_key: Hashable, rate_limit_error: Optional[type[BaseException]]):
|
|
80
|
+
super().__init__(
|
|
81
|
+
rate_limit_error=rate_limit_error,
|
|
82
|
+
max_rate_limit_retries=3,
|
|
83
|
+
initial_per_second_request_rate=2.0,
|
|
84
|
+
maximum_per_second_request_rate=10.0,
|
|
85
|
+
enforcement_window_minutes=1,
|
|
86
|
+
rate_reduction_factor=0.5,
|
|
87
|
+
rate_increase_factor=0.01,
|
|
88
|
+
cooldown_seconds=5,
|
|
89
|
+
verbose=False,
|
|
90
|
+
)
|
|
91
|
+
|
|
92
|
+
# TODO: update the rate limiter class in phoenix.evals to support decorated sync functions
|
|
93
|
+
def _alimit(
|
|
94
|
+
self, fn: Callable[ParameterSpec, GenericType]
|
|
95
|
+
) -> AsyncCallable[ParameterSpec, GenericType]:
|
|
96
|
+
@wraps(fn)
|
|
97
|
+
async def wrapper(*args: Any, **kwargs: Any) -> GenericType:
|
|
98
|
+
self._initialize_async_primitives()
|
|
99
|
+
assert self._rate_limit_handling_lock is not None and isinstance(
|
|
100
|
+
self._rate_limit_handling_lock, asyncio.Lock
|
|
101
|
+
)
|
|
102
|
+
assert self._rate_limit_handling is not None and isinstance(
|
|
103
|
+
self._rate_limit_handling, asyncio.Event
|
|
104
|
+
)
|
|
105
|
+
try:
|
|
106
|
+
try:
|
|
107
|
+
await asyncio.wait_for(self._rate_limit_handling.wait(), 120)
|
|
108
|
+
except asyncio.TimeoutError:
|
|
109
|
+
self._rate_limit_handling.set() # Set the event as a failsafe
|
|
110
|
+
await self._throttler.async_wait_until_ready()
|
|
111
|
+
request_start_time = time.time()
|
|
112
|
+
if inspect.iscoroutinefunction(fn):
|
|
113
|
+
return await fn(*args, **kwargs) # type: ignore
|
|
114
|
+
else:
|
|
115
|
+
return fn(*args, **kwargs)
|
|
116
|
+
except self._rate_limit_error:
|
|
117
|
+
async with self._rate_limit_handling_lock:
|
|
118
|
+
self._rate_limit_handling.clear() # prevent new requests from starting
|
|
119
|
+
self._throttler.on_rate_limit_error(request_start_time, verbose=self._verbose)
|
|
120
|
+
try:
|
|
121
|
+
for _attempt in range(self._max_rate_limit_retries):
|
|
122
|
+
try:
|
|
123
|
+
request_start_time = time.time()
|
|
124
|
+
await self._throttler.async_wait_until_ready()
|
|
125
|
+
if inspect.iscoroutinefunction(fn):
|
|
126
|
+
return await fn(*args, **kwargs) # type: ignore
|
|
127
|
+
else:
|
|
128
|
+
return fn(*args, **kwargs)
|
|
129
|
+
except self._rate_limit_error:
|
|
130
|
+
self._throttler.on_rate_limit_error(
|
|
131
|
+
request_start_time, verbose=self._verbose
|
|
132
|
+
)
|
|
133
|
+
continue
|
|
134
|
+
finally:
|
|
135
|
+
self._rate_limit_handling.set() # allow new requests to start
|
|
136
|
+
raise RateLimitError(f"Exceeded max ({self._max_rate_limit_retries}) retries")
|
|
137
|
+
|
|
138
|
+
return wrapper
|
|
139
|
+
|
|
140
|
+
|
|
55
141
|
class PlaygroundStreamingClient(ABC):
|
|
56
142
|
def __init__(
|
|
57
143
|
self,
|
|
@@ -150,10 +236,12 @@ class OpenAIStreamingClient(PlaygroundStreamingClient):
|
|
|
150
236
|
api_key: Optional[str] = None,
|
|
151
237
|
) -> None:
|
|
152
238
|
from openai import AsyncOpenAI
|
|
239
|
+
from openai import RateLimitError as OpenAIRateLimitError
|
|
153
240
|
|
|
154
241
|
super().__init__(model=model, api_key=api_key)
|
|
155
242
|
self.client = AsyncOpenAI(api_key=api_key)
|
|
156
243
|
self.model_name = model.name
|
|
244
|
+
self.rate_limiter = PlaygroundRateLimiter(model.provider_key, OpenAIRateLimitError)
|
|
157
245
|
|
|
158
246
|
@classmethod
|
|
159
247
|
def dependencies(cls) -> list[DependencyName]:
|
|
@@ -174,19 +262,16 @@ class OpenAIStreamingClient(PlaygroundStreamingClient):
|
|
|
174
262
|
invocation_name="max_tokens",
|
|
175
263
|
canonical_name=CanonicalParameterName.MAX_COMPLETION_TOKENS,
|
|
176
264
|
label="Max Tokens",
|
|
177
|
-
default_value=UNSET,
|
|
178
265
|
),
|
|
179
266
|
BoundedFloatInvocationParameter(
|
|
180
267
|
invocation_name="frequency_penalty",
|
|
181
268
|
label="Frequency Penalty",
|
|
182
|
-
default_value=UNSET,
|
|
183
269
|
min_value=-2.0,
|
|
184
270
|
max_value=2.0,
|
|
185
271
|
),
|
|
186
272
|
BoundedFloatInvocationParameter(
|
|
187
273
|
invocation_name="presence_penalty",
|
|
188
274
|
label="Presence Penalty",
|
|
189
|
-
default_value=UNSET,
|
|
190
275
|
min_value=-2.0,
|
|
191
276
|
max_value=2.0,
|
|
192
277
|
),
|
|
@@ -194,13 +279,11 @@ class OpenAIStreamingClient(PlaygroundStreamingClient):
|
|
|
194
279
|
invocation_name="stop",
|
|
195
280
|
canonical_name=CanonicalParameterName.STOP_SEQUENCES,
|
|
196
281
|
label="Stop Sequences",
|
|
197
|
-
default_value=UNSET,
|
|
198
282
|
),
|
|
199
283
|
BoundedFloatInvocationParameter(
|
|
200
284
|
invocation_name="top_p",
|
|
201
285
|
canonical_name=CanonicalParameterName.TOP_P,
|
|
202
286
|
label="Top P",
|
|
203
|
-
default_value=UNSET,
|
|
204
287
|
min_value=0.0,
|
|
205
288
|
max_value=1.0,
|
|
206
289
|
),
|
|
@@ -208,20 +291,16 @@ class OpenAIStreamingClient(PlaygroundStreamingClient):
|
|
|
208
291
|
invocation_name="seed",
|
|
209
292
|
canonical_name=CanonicalParameterName.RANDOM_SEED,
|
|
210
293
|
label="Seed",
|
|
211
|
-
default_value=UNSET,
|
|
212
294
|
),
|
|
213
295
|
JSONInvocationParameter(
|
|
214
296
|
invocation_name="tool_choice",
|
|
215
297
|
label="Tool Choice",
|
|
216
298
|
canonical_name=CanonicalParameterName.TOOL_CHOICE,
|
|
217
|
-
default_value=UNSET,
|
|
218
|
-
hidden=True,
|
|
219
299
|
),
|
|
220
300
|
JSONInvocationParameter(
|
|
221
301
|
invocation_name="response_format",
|
|
222
302
|
label="Response Format",
|
|
223
303
|
canonical_name=CanonicalParameterName.RESPONSE_FORMAT,
|
|
224
|
-
default_value=UNSET,
|
|
225
304
|
),
|
|
226
305
|
]
|
|
227
306
|
|
|
@@ -240,7 +319,8 @@ class OpenAIStreamingClient(PlaygroundStreamingClient):
|
|
|
240
319
|
openai_messages = [self.to_openai_chat_completion_param(*message) for message in messages]
|
|
241
320
|
tool_call_ids: dict[int, str] = {}
|
|
242
321
|
token_usage: Optional["CompletionUsage"] = None
|
|
243
|
-
|
|
322
|
+
throttled_create = self.rate_limiter.alimit(self.client.chat.completions.create)
|
|
323
|
+
async for chunk in await throttled_create(
|
|
244
324
|
messages=openai_messages,
|
|
245
325
|
model=self.model_name,
|
|
246
326
|
stream=True,
|
|
@@ -370,20 +450,16 @@ class OpenAIO1StreamingClient(OpenAIStreamingClient):
|
|
|
370
450
|
invocation_name="max_completion_tokens",
|
|
371
451
|
canonical_name=CanonicalParameterName.MAX_COMPLETION_TOKENS,
|
|
372
452
|
label="Max Completion Tokens",
|
|
373
|
-
default_value=UNSET,
|
|
374
453
|
),
|
|
375
454
|
IntInvocationParameter(
|
|
376
455
|
invocation_name="seed",
|
|
377
456
|
canonical_name=CanonicalParameterName.RANDOM_SEED,
|
|
378
457
|
label="Seed",
|
|
379
|
-
default_value=UNSET,
|
|
380
458
|
),
|
|
381
459
|
JSONInvocationParameter(
|
|
382
460
|
invocation_name="tool_choice",
|
|
383
461
|
label="Tool Choice",
|
|
384
462
|
canonical_name=CanonicalParameterName.TOOL_CHOICE,
|
|
385
|
-
default_value=UNSET,
|
|
386
|
-
hidden=True,
|
|
387
463
|
),
|
|
388
464
|
]
|
|
389
465
|
|
|
@@ -409,7 +485,8 @@ class OpenAIO1StreamingClient(OpenAIStreamingClient):
|
|
|
409
485
|
|
|
410
486
|
tool_call_ids: dict[int, str] = {}
|
|
411
487
|
|
|
412
|
-
|
|
488
|
+
throttled_create = self.rate_limiter.alimit(self.client.chat.completions.create)
|
|
489
|
+
response = await throttled_create(
|
|
413
490
|
messages=openai_messages,
|
|
414
491
|
model=self.model_name,
|
|
415
492
|
tools=tools or NOT_GIVEN,
|
|
@@ -544,6 +621,7 @@ class AnthropicStreamingClient(PlaygroundStreamingClient):
|
|
|
544
621
|
super().__init__(model=model, api_key=api_key)
|
|
545
622
|
self.client = anthropic.AsyncAnthropic(api_key=api_key)
|
|
546
623
|
self.model_name = model.name
|
|
624
|
+
self.rate_limiter = PlaygroundRateLimiter(model.provider_key, anthropic.RateLimitError)
|
|
547
625
|
|
|
548
626
|
@classmethod
|
|
549
627
|
def dependencies(cls) -> list[DependencyName]:
|
|
@@ -556,14 +634,12 @@ class AnthropicStreamingClient(PlaygroundStreamingClient):
|
|
|
556
634
|
invocation_name="max_tokens",
|
|
557
635
|
canonical_name=CanonicalParameterName.MAX_COMPLETION_TOKENS,
|
|
558
636
|
label="Max Tokens",
|
|
559
|
-
default_value=UNSET,
|
|
560
637
|
required=True,
|
|
561
638
|
),
|
|
562
639
|
BoundedFloatInvocationParameter(
|
|
563
640
|
invocation_name="temperature",
|
|
564
641
|
canonical_name=CanonicalParameterName.TEMPERATURE,
|
|
565
642
|
label="Temperature",
|
|
566
|
-
default_value=UNSET,
|
|
567
643
|
min_value=0.0,
|
|
568
644
|
max_value=1.0,
|
|
569
645
|
),
|
|
@@ -571,13 +647,11 @@ class AnthropicStreamingClient(PlaygroundStreamingClient):
|
|
|
571
647
|
invocation_name="stop_sequences",
|
|
572
648
|
canonical_name=CanonicalParameterName.STOP_SEQUENCES,
|
|
573
649
|
label="Stop Sequences",
|
|
574
|
-
default_value=UNSET,
|
|
575
650
|
),
|
|
576
651
|
BoundedFloatInvocationParameter(
|
|
577
652
|
invocation_name="top_p",
|
|
578
653
|
canonical_name=CanonicalParameterName.TOP_P,
|
|
579
654
|
label="Top P",
|
|
580
|
-
default_value=UNSET,
|
|
581
655
|
min_value=0.0,
|
|
582
656
|
max_value=1.0,
|
|
583
657
|
),
|
|
@@ -585,8 +659,6 @@ class AnthropicStreamingClient(PlaygroundStreamingClient):
|
|
|
585
659
|
invocation_name="tool_choice",
|
|
586
660
|
label="Tool Choice",
|
|
587
661
|
canonical_name=CanonicalParameterName.TOOL_CHOICE,
|
|
588
|
-
default_value=UNSET,
|
|
589
|
-
hidden=True,
|
|
590
662
|
),
|
|
591
663
|
]
|
|
592
664
|
|
|
@@ -608,9 +680,11 @@ class AnthropicStreamingClient(PlaygroundStreamingClient):
|
|
|
608
680
|
"model": self.model_name,
|
|
609
681
|
"system": system_prompt,
|
|
610
682
|
"max_tokens": 1024,
|
|
683
|
+
"tools": tools,
|
|
611
684
|
**invocation_parameters,
|
|
612
685
|
}
|
|
613
|
-
|
|
686
|
+
throttled_stream = self.rate_limiter._alimit(self.client.messages.stream)
|
|
687
|
+
async with await throttled_stream(**anthropic_params) as stream:
|
|
614
688
|
async for event in stream:
|
|
615
689
|
if isinstance(event, anthropic_types.RawMessageStartEvent):
|
|
616
690
|
self._attributes.update(
|
|
@@ -622,6 +696,18 @@ class AnthropicStreamingClient(PlaygroundStreamingClient):
|
|
|
622
696
|
self._attributes.update(
|
|
623
697
|
{LLM_TOKEN_COUNT_COMPLETION: event.message.usage.output_tokens}
|
|
624
698
|
)
|
|
699
|
+
elif (
|
|
700
|
+
isinstance(event, anthropic_streaming.ContentBlockStopEvent)
|
|
701
|
+
and event.content_block.type == "tool_use"
|
|
702
|
+
):
|
|
703
|
+
tool_call_chunk = ToolCallChunk(
|
|
704
|
+
id=event.content_block.id,
|
|
705
|
+
function=FunctionCallChunk(
|
|
706
|
+
name=event.content_block.name,
|
|
707
|
+
arguments=json.dumps(event.content_block.input),
|
|
708
|
+
),
|
|
709
|
+
)
|
|
710
|
+
yield tool_call_chunk
|
|
625
711
|
elif isinstance(
|
|
626
712
|
event,
|
|
627
713
|
(
|
|
@@ -629,6 +715,7 @@ class AnthropicStreamingClient(PlaygroundStreamingClient):
|
|
|
629
715
|
anthropic_types.RawContentBlockDeltaEvent,
|
|
630
716
|
anthropic_types.RawMessageDeltaEvent,
|
|
631
717
|
anthropic_streaming.ContentBlockStopEvent,
|
|
718
|
+
anthropic_streaming.InputJsonEvent,
|
|
632
719
|
),
|
|
633
720
|
):
|
|
634
721
|
# event types emitted by the stream that don't contain useful information
|