arize-phoenix 5.5.2__tar.gz → 5.7.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.5.2 → arize_phoenix-5.7.0}/PKG-INFO +4 -7
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/README.md +1 -1
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/pyproject.toml +5 -8
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/config.py +50 -8
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/core/model.py +3 -3
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/core/model_schema.py +41 -50
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/core/model_schema_adapter.py +17 -16
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/datetime_utils.py +2 -2
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/db/bulk_inserter.py +10 -20
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/db/engines.py +2 -1
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/db/enums.py +2 -2
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/db/helpers.py +8 -7
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/db/insertion/dataset.py +9 -19
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/db/insertion/document_annotation.py +14 -13
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/db/insertion/helpers.py +6 -16
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/db/insertion/span_annotation.py +14 -13
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/db/insertion/trace_annotation.py +14 -13
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/db/insertion/types.py +19 -30
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/db/migrations/versions/3be8647b87d8_add_token_columns_to_spans_table.py +8 -8
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/db/models.py +28 -28
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/experiments/evaluators/base.py +2 -1
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/experiments/evaluators/code_evaluators.py +4 -5
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/experiments/evaluators/llm_evaluators.py +157 -4
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/experiments/evaluators/utils.py +3 -2
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/experiments/functions.py +10 -21
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/experiments/tracing.py +2 -1
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/experiments/types.py +20 -29
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/experiments/utils.py +2 -1
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/inferences/errors.py +6 -5
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/inferences/fixtures.py +6 -5
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/inferences/inferences.py +37 -37
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/inferences/schema.py +11 -10
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/inferences/validation.py +13 -14
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/logging/_formatter.py +3 -3
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/metrics/__init__.py +5 -4
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/metrics/binning.py +2 -1
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/metrics/metrics.py +2 -1
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/metrics/mixins.py +7 -6
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/metrics/retrieval_metrics.py +2 -1
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/metrics/timeseries.py +5 -4
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/metrics/wrappers.py +2 -2
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/pointcloud/clustering.py +3 -4
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/pointcloud/pointcloud.py +7 -5
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/pointcloud/umap_parameters.py +2 -1
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/dataloaders/annotation_summaries.py +12 -19
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/dataloaders/average_experiment_run_latency.py +2 -2
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/dataloaders/cache/two_tier_cache.py +3 -2
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/dataloaders/dataset_example_revisions.py +3 -8
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/dataloaders/dataset_example_spans.py +2 -5
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/dataloaders/document_evaluation_summaries.py +12 -18
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/dataloaders/document_evaluations.py +3 -7
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/dataloaders/document_retrieval_metrics.py +6 -13
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/dataloaders/experiment_annotation_summaries.py +4 -8
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/dataloaders/experiment_error_rates.py +2 -5
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/dataloaders/experiment_run_annotations.py +3 -7
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/dataloaders/experiment_run_counts.py +1 -5
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/dataloaders/experiment_sequence_number.py +2 -5
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/dataloaders/latency_ms_quantile.py +21 -30
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/dataloaders/min_start_or_max_end_times.py +7 -13
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/dataloaders/project_by_name.py +3 -3
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/dataloaders/record_counts.py +11 -18
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/dataloaders/span_annotations.py +3 -7
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/dataloaders/span_dataset_examples.py +3 -8
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/dataloaders/span_descendants.py +3 -7
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/dataloaders/span_projects.py +2 -2
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/dataloaders/token_counts.py +12 -19
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/dataloaders/trace_row_ids.py +3 -7
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/dataloaders/user_roles.py +3 -3
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/dataloaders/users.py +3 -3
- arize_phoenix-5.7.0/src/phoenix/server/api/helpers/__init__.py +12 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/helpers/dataset_helpers.py +10 -9
- arize_phoenix-5.7.0/src/phoenix/server/api/helpers/playground_clients.py +671 -0
- arize_phoenix-5.7.0/src/phoenix/server/api/helpers/playground_registry.py +70 -0
- arize_phoenix-5.7.0/src/phoenix/server/api/helpers/playground_spans.py +325 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/input_types/AddExamplesToDatasetInput.py +2 -2
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/input_types/AddSpansToDatasetInput.py +2 -2
- arize_phoenix-5.7.0/src/phoenix/server/api/input_types/ChatCompletionInput.py +38 -0
- arize_phoenix-5.7.0/src/phoenix/server/api/input_types/ChatCompletionMessageInput.py +24 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/input_types/ClusterInput.py +2 -2
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/input_types/DeleteAnnotationsInput.py +1 -3
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/input_types/DeleteDatasetExamplesInput.py +2 -2
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/input_types/DeleteExperimentsInput.py +1 -3
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/input_types/DimensionFilter.py +4 -4
- arize_phoenix-5.7.0/src/phoenix/server/api/input_types/GenerativeModelInput.py +17 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/input_types/Granularity.py +1 -1
- arize_phoenix-5.7.0/src/phoenix/server/api/input_types/InvocationParameters.py +163 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/input_types/PatchDatasetExamplesInput.py +2 -2
- arize_phoenix-5.7.0/src/phoenix/server/api/input_types/TemplateOptions.py +10 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/mutations/__init__.py +4 -0
- arize_phoenix-5.7.0/src/phoenix/server/api/mutations/chat_mutations.py +374 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/mutations/dataset_mutations.py +4 -4
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/mutations/experiment_mutations.py +1 -2
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/mutations/export_events_mutations.py +7 -7
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/mutations/span_annotations_mutations.py +4 -4
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/mutations/trace_annotations_mutations.py +4 -4
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/mutations/user_mutations.py +4 -4
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/openapi/schema.py +2 -2
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/queries.py +61 -72
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/routers/oauth2.py +4 -4
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/routers/v1/datasets.py +22 -36
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/routers/v1/evaluations.py +6 -5
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/routers/v1/experiment_evaluations.py +2 -2
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/routers/v1/experiment_runs.py +2 -2
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/routers/v1/experiments.py +4 -4
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/routers/v1/spans.py +13 -12
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/routers/v1/traces.py +5 -5
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/routers/v1/utils.py +5 -5
- arize_phoenix-5.7.0/src/phoenix/server/api/schema.py +49 -0
- arize_phoenix-5.7.0/src/phoenix/server/api/subscriptions.py +441 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/AnnotationSummary.py +3 -3
- arize_phoenix-5.7.0/src/phoenix/server/api/types/ChatCompletionSubscriptionPayload.py +44 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/Cluster.py +8 -7
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/Dataset.py +5 -4
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/Dimension.py +3 -3
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/DocumentEvaluationSummary.py +8 -7
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/EmbeddingDimension.py +6 -5
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/EvaluationSummary.py +3 -3
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/Event.py +7 -7
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/Experiment.py +3 -3
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/ExperimentComparison.py +2 -4
- arize_phoenix-5.7.0/src/phoenix/server/api/types/GenerativeProvider.py +40 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/Inferences.py +9 -8
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/InferencesRole.py +2 -2
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/Model.py +2 -2
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/Project.py +11 -18
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/Segments.py +3 -3
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/Span.py +45 -7
- arize_phoenix-5.7.0/src/phoenix/server/api/types/TemplateLanguage.py +9 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/TimeSeries.py +8 -7
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/Trace.py +2 -2
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/UMAPPoints.py +6 -6
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/User.py +3 -3
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/node.py +1 -3
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/pagination.py +4 -4
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/utils.py +2 -4
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/app.py +76 -37
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/bearer_auth.py +4 -10
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/dml_event.py +3 -3
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/dml_event_handler.py +10 -24
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/grpc_server.py +3 -2
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/jwt_store.py +22 -21
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/main.py +17 -4
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/oauth2.py +3 -2
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/rate_limiters.py +5 -8
- arize_phoenix-5.7.0/src/phoenix/server/static/.vite/manifest.json +78 -0
- arize_phoenix-5.7.0/src/phoenix/server/static/assets/components-Csu8UKOs.js +1612 -0
- arize_phoenix-5.5.2/src/phoenix/server/static/assets/index-DCzakdJq.js → arize_phoenix-5.7.0/src/phoenix/server/static/assets/index-Bk5C9EA7.js +2 -2
- arize_phoenix-5.5.2/src/phoenix/server/static/assets/pages-CAL1FDMt.js → arize_phoenix-5.7.0/src/phoenix/server/static/assets/pages-UeWaKXNs.js +337 -442
- arize_phoenix-5.5.2/src/phoenix/server/static/assets/vendor-6IcPAw_j.js → arize_phoenix-5.7.0/src/phoenix/server/static/assets/vendor-CtqfhlbC.js +6 -6
- arize_phoenix-5.5.2/src/phoenix/server/static/assets/vendor-arizeai-DRZuoyuF.js → arize_phoenix-5.7.0/src/phoenix/server/static/assets/vendor-arizeai-C_3SBz56.js +2 -2
- arize_phoenix-5.5.2/src/phoenix/server/static/assets/vendor-codemirror-DVE2_WBr.js → arize_phoenix-5.7.0/src/phoenix/server/static/assets/vendor-codemirror-wfdk9cjp.js +1 -1
- arize_phoenix-5.5.2/src/phoenix/server/static/assets/vendor-recharts-DwrexFA4.js → arize_phoenix-5.7.0/src/phoenix/server/static/assets/vendor-recharts-BiVnSv90.js +1 -1
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/templates/index.html +1 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/thread_server.py +1 -1
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/types.py +17 -29
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/services.py +8 -3
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/session/client.py +12 -24
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/session/data_extractor.py +3 -3
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/session/evaluation.py +1 -2
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/session/session.py +26 -21
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/trace/attributes.py +16 -28
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/trace/dsl/filter.py +17 -21
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/trace/dsl/helpers.py +3 -3
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/trace/dsl/query.py +13 -22
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/trace/fixtures.py +11 -17
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/trace/otel.py +5 -15
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/trace/projects.py +3 -2
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/trace/schemas.py +2 -2
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/trace/span_evaluations.py +9 -8
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/trace/span_json_decoder.py +3 -3
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/trace/span_json_encoder.py +2 -2
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/trace/trace_dataset.py +6 -5
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/trace/utils.py +6 -6
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/utilities/deprecation.py +3 -2
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/utilities/error_handling.py +3 -2
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/utilities/json.py +2 -1
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/utilities/logging.py +2 -2
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/utilities/project.py +1 -1
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/utilities/re.py +3 -4
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/utilities/template_formatters.py +16 -5
- arize_phoenix-5.7.0/src/phoenix/version.py +1 -0
- arize_phoenix-5.5.2/src/phoenix/server/api/helpers/__init__.py +0 -11
- arize_phoenix-5.5.2/src/phoenix/server/api/input_types/ChatCompletionMessageInput.py +0 -12
- arize_phoenix-5.5.2/src/phoenix/server/api/input_types/InvocationParameters.py +0 -20
- arize_phoenix-5.5.2/src/phoenix/server/api/schema.py +0 -17
- arize_phoenix-5.5.2/src/phoenix/server/api/subscriptions.py +0 -588
- arize_phoenix-5.5.2/src/phoenix/server/api/types/GenerativeProvider.py +0 -16
- arize_phoenix-5.5.2/src/phoenix/server/static/.vite/manifest.json +0 -78
- arize_phoenix-5.5.2/src/phoenix/server/static/assets/components-hX0LgYz3.js +0 -1428
- arize_phoenix-5.5.2/src/phoenix/version.py +0 -1
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/.gitignore +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/IP_NOTICE +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/LICENSE +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/__init__.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/auth.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/core/__init__.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/core/embedding_dimension.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/db/README.md +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/db/__init__.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/db/alembic.ini +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/db/facilitator.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/db/insertion/__init__.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/db/insertion/constants.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/db/insertion/evaluation.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/db/insertion/span.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/db/migrate.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/db/migrations/__init__.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/db/migrations/env.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/db/migrations/script.py.mako +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/db/migrations/versions/10460e46d750_datasets.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/db/migrations/versions/cd164e83824f_users_and_tokens.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/db/migrations/versions/cf03bd6bae1d_init.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/exceptions.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/experiments/__init__.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/experiments/evaluators/__init__.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/inferences/__init__.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/logging/__init__.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/logging/_config.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/logging/_filter.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/metrics/README.md +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/pointcloud/__init__.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/pointcloud/projectors.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/py.typed +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/__init__.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/README.md +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/__init__.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/auth.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/context.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/dataloaders/__init__.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/dataloaders/cache/__init__.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/exceptions.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/input_types/ClearProjectInput.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/input_types/Coordinates.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/input_types/CreateDatasetInput.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/input_types/CreateSpanAnnotationInput.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/input_types/CreateTraceAnnotationInput.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/input_types/DataQualityMetricInput.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/input_types/DatasetExampleInput.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/input_types/DatasetSort.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/input_types/DatasetVersionSort.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/input_types/DeleteDatasetInput.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/input_types/DimensionInput.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/input_types/PatchAnnotationInput.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/input_types/PatchDatasetInput.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/input_types/PerformanceMetricInput.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/input_types/SpanAnnotationSort.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/input_types/SpanSort.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/input_types/TimeRange.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/input_types/TraceAnnotationSort.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/input_types/UserRoleInput.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/input_types/__init__.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/interceptor.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/mutations/api_key_mutations.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/mutations/project_mutations.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/openapi/__init__.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/openapi/main.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/routers/__init__.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/routers/auth.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/routers/embeddings.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/routers/utils.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/routers/v1/__init__.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/routers/v1/pydantic_compat.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/Annotation.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/AnnotatorKind.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/ApiKey.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/AuthMethod.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/ChatCompletionMessageRole.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/CreateDatasetPayload.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/DataQualityMetric.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/DatasetExample.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/DatasetExampleRevision.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/DatasetValues.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/DatasetVersion.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/DimensionDataType.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/DimensionShape.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/DimensionType.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/DimensionWithValue.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/DocumentRetrievalMetrics.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/EmbeddingMetadata.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/Evaluation.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/EventMetadata.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/ExampleRevisionInterface.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/ExperimentAnnotationSummary.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/ExperimentRun.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/ExperimentRunAnnotation.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/ExportedFile.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/Functionality.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/GenerativeModel.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/LabelFraction.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/MimeType.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/NumericRange.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/PerformanceMetric.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/PromptResponse.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/Retrieval.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/ScalarDriftMetricEnum.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/SortDir.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/SpanAnnotation.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/SystemApiKey.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/TraceAnnotation.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/UserApiKey.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/UserRole.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/ValidationResult.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/VectorDriftMetricEnum.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/api/types/__init__.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/email/__init__.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/email/sender.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/email/templates/__init__.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/email/templates/password_reset.html +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/email/types.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/openapi/__init__.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/prometheus.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/static/apple-touch-icon-114x114.png +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/static/apple-touch-icon-120x120.png +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/static/apple-touch-icon-144x144.png +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/static/apple-touch-icon-152x152.png +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/static/apple-touch-icon-180x180.png +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/static/apple-touch-icon-72x72.png +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/static/apple-touch-icon-76x76.png +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/static/apple-touch-icon.png +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/static/assets/vendor-DxkFTwjz.css +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/static/assets/vendor-three-DwGkEfCM.js +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/static/favicon.ico +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/static/modernizr.js +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/telemetry.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/server/templates/__init__.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/session/__init__.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/settings.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/trace/__init__.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/trace/dsl/README.md +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/trace/dsl/__init__.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/trace/errors.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/trace/evaluation_conventions.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/trace/exporter.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/trace/v1/__init__.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/trace/v1/evaluation_pb2.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/trace/v1/evaluation_pb2.pyi +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/utilities/__init__.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/utilities/client.py +0 -0
- {arize_phoenix-5.5.2 → arize_phoenix-5.7.0}/src/phoenix/utilities/span_store.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: arize-phoenix
|
|
3
|
-
Version: 5.
|
|
3
|
+
Version: 5.7.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
|
|
@@ -23,16 +23,14 @@ Requires-Dist: arize-phoenix-evals>=0.13.1
|
|
|
23
23
|
Requires-Dist: arize-phoenix-otel>=0.5.1
|
|
24
24
|
Requires-Dist: authlib
|
|
25
25
|
Requires-Dist: cachetools
|
|
26
|
-
Requires-Dist: fast-hdbscan>=0.2.0
|
|
27
26
|
Requires-Dist: fastapi
|
|
28
27
|
Requires-Dist: grpc-interceptor
|
|
29
28
|
Requires-Dist: grpcio
|
|
30
29
|
Requires-Dist: httpx
|
|
31
30
|
Requires-Dist: jinja2
|
|
32
|
-
Requires-Dist: numba>=0.60.0
|
|
33
31
|
Requires-Dist: numpy!=2.0.0
|
|
34
32
|
Requires-Dist: openinference-instrumentation>=0.1.12
|
|
35
|
-
Requires-Dist: openinference-semantic-conventions>=0.1.
|
|
33
|
+
Requires-Dist: openinference-semantic-conventions>=0.1.12
|
|
36
34
|
Requires-Dist: opentelemetry-exporter-otlp
|
|
37
35
|
Requires-Dist: opentelemetry-proto>=1.12.0
|
|
38
36
|
Requires-Dist: opentelemetry-sdk
|
|
@@ -51,7 +49,6 @@ Requires-Dist: starlette
|
|
|
51
49
|
Requires-Dist: strawberry-graphql==0.243.1
|
|
52
50
|
Requires-Dist: tqdm
|
|
53
51
|
Requires-Dist: typing-extensions>=4.6
|
|
54
|
-
Requires-Dist: umap-learn
|
|
55
52
|
Requires-Dist: uvicorn
|
|
56
53
|
Requires-Dist: websockets
|
|
57
54
|
Requires-Dist: wrapt
|
|
@@ -86,7 +83,7 @@ Requires-Dist: jupyter; extra == 'dev'
|
|
|
86
83
|
Requires-Dist: langchain>=0.0.334; extra == 'dev'
|
|
87
84
|
Requires-Dist: litellm>=1.0.3; extra == 'dev'
|
|
88
85
|
Requires-Dist: llama-index>=0.10.3; extra == 'dev'
|
|
89
|
-
Requires-Dist: mypy==1.
|
|
86
|
+
Requires-Dist: mypy==1.12.1; extra == 'dev'
|
|
90
87
|
Requires-Dist: nbqa; extra == 'dev'
|
|
91
88
|
Requires-Dist: pandas-stubs==2.2.2.240603; extra == 'dev'
|
|
92
89
|
Requires-Dist: pandas>=1.0; extra == 'dev'
|
|
@@ -193,7 +190,7 @@ Phoenix container images are available via [Docker Hub](https://hub.docker.com/r
|
|
|
193
190
|
| [Data Export](https://docs.arize.com/phoenix/tracing/how-to-tracing/extract-data-from-spans) | ✅ |
|
|
194
191
|
| REST API | ✅ |
|
|
195
192
|
| GraphQL API | ✅ |
|
|
196
|
-
| Data Retention |
|
|
193
|
+
| Data Retention | Customizable |
|
|
197
194
|
| Authentication | ✅ |
|
|
198
195
|
| Social Login | ✅ |
|
|
199
196
|
| RBAC | ✅ |
|
|
@@ -66,7 +66,7 @@ Phoenix container images are available via [Docker Hub](https://hub.docker.com/r
|
|
|
66
66
|
| [Data Export](https://docs.arize.com/phoenix/tracing/how-to-tracing/extract-data-from-spans) | ✅ |
|
|
67
67
|
| REST API | ✅ |
|
|
68
68
|
| GraphQL API | ✅ |
|
|
69
|
-
| Data Retention |
|
|
69
|
+
| Data Retention | Customizable |
|
|
70
70
|
| Authentication | ✅ |
|
|
71
71
|
| Social Login | ✅ |
|
|
72
72
|
| RBAC | ✅ |
|
|
@@ -25,9 +25,6 @@ dependencies = [
|
|
|
25
25
|
"numpy!=2.0.0", # https://github.com/lmcinnes/umap/issues/1138
|
|
26
26
|
"pandas>=1.0",
|
|
27
27
|
"jinja2",
|
|
28
|
-
"umap-learn",
|
|
29
|
-
"fast-hdbscan>=0.2.0",
|
|
30
|
-
"numba>=0.60.0", # https://github.com/astral-sh/uv/issues/6281
|
|
31
28
|
"starlette",
|
|
32
29
|
"uvicorn",
|
|
33
30
|
"psutil",
|
|
@@ -45,7 +42,7 @@ dependencies = [
|
|
|
45
42
|
"opentelemetry-proto>=1.12.0", # needed to avoid this issue: https://github.com/Arize-ai/phoenix/issues/2695
|
|
46
43
|
"opentelemetry-exporter-otlp",
|
|
47
44
|
"opentelemetry-semantic-conventions",
|
|
48
|
-
"openinference-semantic-conventions>=0.1.
|
|
45
|
+
"openinference-semantic-conventions>=0.1.12",
|
|
49
46
|
"openinference-instrumentation>=0.1.12",
|
|
50
47
|
"sqlalchemy[asyncio]>=2.0.4, <3",
|
|
51
48
|
"alembic>=1.3.0, <2",
|
|
@@ -77,7 +74,7 @@ dev = [
|
|
|
77
74
|
"jupyter",
|
|
78
75
|
"nbqa",
|
|
79
76
|
"ruff==0.6.9",
|
|
80
|
-
"mypy==1.
|
|
77
|
+
"mypy==1.12.1",
|
|
81
78
|
"pandas>=1.0",
|
|
82
79
|
"tabulate", # used by DataFrame.to_markdown()
|
|
83
80
|
"types-tabulate",
|
|
@@ -215,7 +212,7 @@ dependencies = [
|
|
|
215
212
|
dependencies = [
|
|
216
213
|
"grpcio",
|
|
217
214
|
"litellm>=1.0.3",
|
|
218
|
-
"mypy==1.
|
|
215
|
+
"mypy==1.12.1",
|
|
219
216
|
"openai>=1.0.0",
|
|
220
217
|
"opentelemetry-exporter-otlp",
|
|
221
218
|
"opentelemetry-instrumentation-fastapi",
|
|
@@ -396,14 +393,14 @@ module = [
|
|
|
396
393
|
"orjson", # suppress fastapi internal type errors
|
|
397
394
|
"pypistats",
|
|
398
395
|
"authlib.*",
|
|
396
|
+
"google.*",
|
|
397
|
+
"mistralai.*",
|
|
399
398
|
]
|
|
400
399
|
ignore_missing_imports = true
|
|
401
400
|
|
|
402
401
|
[tool.ruff]
|
|
403
402
|
exclude = [
|
|
404
403
|
"api_reference",
|
|
405
|
-
"packages",
|
|
406
|
-
"src/phoenix/evals/",
|
|
407
404
|
"dist/",
|
|
408
405
|
".git",
|
|
409
406
|
"__pycache__",
|
|
@@ -6,7 +6,7 @@ from dataclasses import dataclass
|
|
|
6
6
|
from datetime import timedelta
|
|
7
7
|
from enum import Enum
|
|
8
8
|
from pathlib import Path
|
|
9
|
-
from typing import
|
|
9
|
+
from typing import Optional, overload
|
|
10
10
|
from urllib.parse import urlparse
|
|
11
11
|
|
|
12
12
|
from phoenix.utilities.logging import log_a_list
|
|
@@ -80,6 +80,10 @@ ENV_LOG_MIGRATIONS = "PHOENIX_LOG_MIGRATIONS"
|
|
|
80
80
|
"""
|
|
81
81
|
Whether or not to log migrations. Defaults to true.
|
|
82
82
|
"""
|
|
83
|
+
ENV_PHOENIX_ENABLE_WEBSOCKETS = "PHOENIX_ENABLE_WEBSOCKETS"
|
|
84
|
+
"""
|
|
85
|
+
Whether or not to enable websockets. Defaults to None.
|
|
86
|
+
"""
|
|
83
87
|
|
|
84
88
|
# Phoenix server OpenTelemetry instrumentation environment variables
|
|
85
89
|
ENV_PHOENIX_SERVER_INSTRUMENTATION_OTLP_TRACE_COLLECTOR_HTTP_ENDPOINT = (
|
|
@@ -142,6 +146,10 @@ ENV_PHOENIX_SMTP_VALIDATE_CERTS = "PHOENIX_SMTP_VALIDATE_CERTS"
|
|
|
142
146
|
Whether to validate SMTP server certificates. Defaults to true.
|
|
143
147
|
"""
|
|
144
148
|
|
|
149
|
+
# FastAPI and GQL extension settings
|
|
150
|
+
ENV_PHOENIX_FASTAPI_MIDDLEWARE_PATHS = "PHOENIX_FASTAPI_MIDDLEWARE_PATHS"
|
|
151
|
+
ENV_PHOENIX_GQL_EXTENSION_PATHS = "PHOENIX_GQL_EXTENSION_PATHS"
|
|
152
|
+
|
|
145
153
|
|
|
146
154
|
def server_instrumentation_is_enabled() -> bool:
|
|
147
155
|
return bool(
|
|
@@ -273,7 +281,7 @@ def get_env_phoenix_api_key() -> Optional[str]:
|
|
|
273
281
|
return os.environ.get(ENV_PHOENIX_API_KEY)
|
|
274
282
|
|
|
275
283
|
|
|
276
|
-
def get_env_auth_settings() ->
|
|
284
|
+
def get_env_auth_settings() -> tuple[bool, Optional[str]]:
|
|
277
285
|
"""
|
|
278
286
|
Gets auth settings and performs validation.
|
|
279
287
|
"""
|
|
@@ -329,8 +337,8 @@ def get_env_refresh_token_expiry() -> timedelta:
|
|
|
329
337
|
return timedelta(minutes=minutes)
|
|
330
338
|
|
|
331
339
|
|
|
332
|
-
def get_env_csrf_trusted_origins() ->
|
|
333
|
-
origins:
|
|
340
|
+
def get_env_csrf_trusted_origins() -> list[str]:
|
|
341
|
+
origins: list[str] = []
|
|
334
342
|
if not (csrf_trusted_origins := os.getenv(ENV_PHOENIX_CSRF_TRUSTED_ORIGINS)):
|
|
335
343
|
return origins
|
|
336
344
|
for origin in csrf_trusted_origins.split(","):
|
|
@@ -371,6 +379,10 @@ def get_env_smtp_validate_certs() -> bool:
|
|
|
371
379
|
return _bool_val(ENV_PHOENIX_SMTP_VALIDATE_CERTS, True)
|
|
372
380
|
|
|
373
381
|
|
|
382
|
+
def get_env_enable_websockets() -> Optional[bool]:
|
|
383
|
+
return _bool_val(ENV_PHOENIX_ENABLE_WEBSOCKETS)
|
|
384
|
+
|
|
385
|
+
|
|
374
386
|
@dataclass(frozen=True)
|
|
375
387
|
class OAuth2ClientConfig:
|
|
376
388
|
idp_name: str
|
|
@@ -428,7 +440,7 @@ class OAuth2ClientConfig:
|
|
|
428
440
|
)
|
|
429
441
|
|
|
430
442
|
|
|
431
|
-
def get_env_oauth2_settings() ->
|
|
443
|
+
def get_env_oauth2_settings() -> list[OAuth2ClientConfig]:
|
|
432
444
|
"""
|
|
433
445
|
Get OAuth2 settings from environment variables.
|
|
434
446
|
"""
|
|
@@ -494,7 +506,7 @@ def ensure_working_dir() -> None:
|
|
|
494
506
|
ensure_working_dir()
|
|
495
507
|
|
|
496
508
|
|
|
497
|
-
def get_exported_files(directory: Path) ->
|
|
509
|
+
def get_exported_files(directory: Path) -> list[Path]:
|
|
498
510
|
"""
|
|
499
511
|
Yields the list of paths of exported files.
|
|
500
512
|
|
|
@@ -505,7 +517,7 @@ def get_exported_files(directory: Path) -> List[Path]:
|
|
|
505
517
|
|
|
506
518
|
Returns
|
|
507
519
|
-------
|
|
508
|
-
list:
|
|
520
|
+
list: list[Path]
|
|
509
521
|
List of paths of the exported files.
|
|
510
522
|
"""
|
|
511
523
|
return list(directory.glob("*.parquet"))
|
|
@@ -584,7 +596,7 @@ def get_env_enable_prometheus() -> bool:
|
|
|
584
596
|
)
|
|
585
597
|
|
|
586
598
|
|
|
587
|
-
def get_env_client_headers() -> Optional[
|
|
599
|
+
def get_env_client_headers() -> Optional[dict[str, str]]:
|
|
588
600
|
if headers_str := os.getenv(ENV_PHOENIX_CLIENT_HEADERS):
|
|
589
601
|
return parse_env_headers(headers_str)
|
|
590
602
|
return None
|
|
@@ -643,6 +655,36 @@ def get_env_db_logging_level() -> int:
|
|
|
643
655
|
)
|
|
644
656
|
|
|
645
657
|
|
|
658
|
+
def get_env_fastapi_middleware_paths() -> list[tuple[str, str]]:
|
|
659
|
+
env_value = os.getenv("PHOENIX_FASTAPI_MIDDLEWARE_PATHS", "")
|
|
660
|
+
paths = []
|
|
661
|
+
for entry in env_value.split(","):
|
|
662
|
+
entry = entry.strip()
|
|
663
|
+
if entry:
|
|
664
|
+
if ":" not in entry:
|
|
665
|
+
raise ValueError(
|
|
666
|
+
f"Invalid middleware entry '{entry}'. Expected format 'file_path:ClassName'."
|
|
667
|
+
)
|
|
668
|
+
file_path, object_name = entry.split(":", 1)
|
|
669
|
+
paths.append((file_path.strip(), object_name.strip()))
|
|
670
|
+
return paths
|
|
671
|
+
|
|
672
|
+
|
|
673
|
+
def get_env_gql_extension_paths() -> list[tuple[str, str]]:
|
|
674
|
+
env_value = os.getenv("PHOENIX_GQL_EXTENSION_PATHS", "")
|
|
675
|
+
paths = []
|
|
676
|
+
for entry in env_value.split(","):
|
|
677
|
+
entry = entry.strip()
|
|
678
|
+
if entry:
|
|
679
|
+
if ":" not in entry:
|
|
680
|
+
raise ValueError(
|
|
681
|
+
f"Invalid extension entry '{entry}'. Expected format 'file_path:ClassName'."
|
|
682
|
+
)
|
|
683
|
+
file_path, object_name = entry.split(":", 1)
|
|
684
|
+
paths.append((file_path.strip(), object_name.strip()))
|
|
685
|
+
return paths
|
|
686
|
+
|
|
687
|
+
|
|
646
688
|
def _get_logging_level(env_var: str, default_level: int) -> int:
|
|
647
689
|
logging_level = os.getenv(env_var)
|
|
648
690
|
if not logging_level:
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from typing import
|
|
1
|
+
from typing import Optional, Union
|
|
2
2
|
|
|
3
3
|
from phoenix.inferences.inferences import Inferences
|
|
4
4
|
from phoenix.inferences.schema import EmbeddingColumnNames, EmbeddingFeatures
|
|
@@ -8,8 +8,8 @@ from .embedding_dimension import EmbeddingDimension
|
|
|
8
8
|
|
|
9
9
|
def _get_embedding_dimensions(
|
|
10
10
|
primary_inferences: Inferences, reference_inferences: Optional[Inferences]
|
|
11
|
-
) ->
|
|
12
|
-
embedding_dimensions:
|
|
11
|
+
) -> list[EmbeddingDimension]:
|
|
12
|
+
embedding_dimensions: list[EmbeddingDimension] = []
|
|
13
13
|
embedding_features: EmbeddingFeatures = {}
|
|
14
14
|
|
|
15
15
|
primary_embedding_features: Optional[EmbeddingFeatures] = (
|
|
@@ -4,6 +4,7 @@ import re
|
|
|
4
4
|
import threading
|
|
5
5
|
from abc import ABC, abstractmethod
|
|
6
6
|
from collections import defaultdict
|
|
7
|
+
from collections.abc import Callable, Hashable, Iterable, Iterator, Mapping, Sequence
|
|
7
8
|
from contextlib import contextmanager
|
|
8
9
|
from dataclasses import dataclass, field, fields, replace
|
|
9
10
|
from datetime import datetime, timedelta, timezone
|
|
@@ -14,19 +15,9 @@ from random import random
|
|
|
14
15
|
from typing import (
|
|
15
16
|
Any,
|
|
16
17
|
BinaryIO,
|
|
17
|
-
Callable,
|
|
18
|
-
Dict,
|
|
19
18
|
Generic,
|
|
20
|
-
Hashable,
|
|
21
|
-
Iterable,
|
|
22
|
-
Iterator,
|
|
23
|
-
List,
|
|
24
|
-
Mapping,
|
|
25
19
|
NamedTuple,
|
|
26
20
|
Optional,
|
|
27
|
-
Sequence,
|
|
28
|
-
Tuple,
|
|
29
|
-
Type,
|
|
30
21
|
TypeVar,
|
|
31
22
|
Union,
|
|
32
23
|
cast,
|
|
@@ -265,7 +256,7 @@ class _Cache(Generic[_Key, _Value]):
|
|
|
265
256
|
2
|
|
266
257
|
"""
|
|
267
258
|
|
|
268
|
-
_cache:
|
|
259
|
+
_cache: dict[_Key, _Value] = field(
|
|
269
260
|
init=False,
|
|
270
261
|
default_factory=dict,
|
|
271
262
|
)
|
|
@@ -275,7 +266,7 @@ class _Cache(Generic[_Key, _Value]):
|
|
|
275
266
|
)
|
|
276
267
|
|
|
277
268
|
@contextmanager
|
|
278
|
-
def __call__(self) -> Iterator[
|
|
269
|
+
def __call__(self) -> Iterator[dict[_Key, _Value]]:
|
|
279
270
|
with self._lock:
|
|
280
271
|
yield self._cache
|
|
281
272
|
|
|
@@ -405,14 +396,14 @@ class Dimension(Column, ABC):
|
|
|
405
396
|
@dataclass(frozen=True)
|
|
406
397
|
class ScalarDimension(Dimension):
|
|
407
398
|
@property
|
|
408
|
-
def min_max(self) ->
|
|
399
|
+
def min_max(self) -> tuple[Any, Any]:
|
|
409
400
|
if self._model is None:
|
|
410
401
|
return np.nan, np.nan
|
|
411
402
|
model = cast(Model, self._model)
|
|
412
403
|
return model.dimension_min_max_from_all_df(self.name)
|
|
413
404
|
|
|
414
405
|
@property
|
|
415
|
-
def categories(self) ->
|
|
406
|
+
def categories(self) -> tuple[str, ...]:
|
|
416
407
|
if self._model is None or self.data_type is CONTINUOUS:
|
|
417
408
|
return ()
|
|
418
409
|
model = cast(Model, self._model)
|
|
@@ -502,7 +493,7 @@ class RetrievalEmbeddingDimension(EmbeddingDimension):
|
|
|
502
493
|
Name: TypeAlias = str
|
|
503
494
|
ColumnKey: TypeAlias = Union[Name, Column, SingularDimensionalRole]
|
|
504
495
|
MultiDimensionKey: TypeAlias = Union[MultiDimensionalRole, Sequence[DimensionRole]]
|
|
505
|
-
RowNumbering: TypeAlias = Union[int,
|
|
496
|
+
RowNumbering: TypeAlias = Union[int, list[int]]
|
|
506
497
|
|
|
507
498
|
|
|
508
499
|
def _is_column_key(key: Any) -> TypeGuard[ColumnKey]:
|
|
@@ -525,7 +516,7 @@ def _is_multi_dimension_key(
|
|
|
525
516
|
|
|
526
517
|
def _is_dimension_type_filter(
|
|
527
518
|
key: Any,
|
|
528
|
-
) -> TypeGuard[
|
|
519
|
+
) -> TypeGuard[tuple[MultiDimensionKey, Union[type[ScalarDimension], type[EmbeddingDimension]]]]:
|
|
529
520
|
return (
|
|
530
521
|
isinstance(key, tuple)
|
|
531
522
|
and len(key) == 2
|
|
@@ -534,7 +525,7 @@ def _is_dimension_type_filter(
|
|
|
534
525
|
)
|
|
535
526
|
|
|
536
527
|
|
|
537
|
-
def _is_named_df(obj: Any) -> TypeGuard[
|
|
528
|
+
def _is_named_df(obj: Any) -> TypeGuard[tuple[Name, pd.DataFrame]]:
|
|
538
529
|
return (
|
|
539
530
|
isinstance(obj, tuple)
|
|
540
531
|
and len(obj) == 2
|
|
@@ -664,7 +655,7 @@ class Events(ModelData):
|
|
|
664
655
|
def __getitem__(self, key: ColumnKey) -> "pd.Series[Any]": ...
|
|
665
656
|
|
|
666
657
|
@overload
|
|
667
|
-
def __getitem__(self, key:
|
|
658
|
+
def __getitem__(self, key: list[RowId]) -> "Events": ...
|
|
668
659
|
|
|
669
660
|
def __getitem__(self, key: Any) -> Any:
|
|
670
661
|
if isinstance(key, list):
|
|
@@ -722,7 +713,7 @@ class Inferences(Events):
|
|
|
722
713
|
def __getitem__(self, key: ColumnKey) -> "pd.Series[Any]": ...
|
|
723
714
|
|
|
724
715
|
@overload
|
|
725
|
-
def __getitem__(self, key:
|
|
716
|
+
def __getitem__(self, key: list[RowId]) -> Events: ...
|
|
726
717
|
|
|
727
718
|
def __getitem__(self, key: Any) -> Any:
|
|
728
719
|
if isinstance(key, list):
|
|
@@ -746,19 +737,19 @@ class Model:
|
|
|
746
737
|
a column of NaNs.
|
|
747
738
|
"""
|
|
748
739
|
|
|
749
|
-
_inference_sets:
|
|
750
|
-
_dimensions:
|
|
751
|
-
_dim_names_by_role:
|
|
752
|
-
_original_columns_by_role:
|
|
740
|
+
_inference_sets: dict[InferencesRole, Inferences]
|
|
741
|
+
_dimensions: dict[Name, Dimension]
|
|
742
|
+
_dim_names_by_role: dict[DimensionRole, list[Name]]
|
|
743
|
+
_original_columns_by_role: dict[InferencesRole, "pd.Index[Any]"]
|
|
753
744
|
_default_timestamps_factory: _ConstantValueSeriesFactory
|
|
754
745
|
_nan_series_factory: _ConstantValueSeriesFactory
|
|
755
|
-
_dimension_categories_from_all_inferences: _Cache[Name,
|
|
756
|
-
_dimension_min_max_from_all_inferences: _Cache[Name,
|
|
746
|
+
_dimension_categories_from_all_inferences: _Cache[Name, tuple[str, ...]]
|
|
747
|
+
_dimension_min_max_from_all_inferences: _Cache[Name, tuple[float, float]]
|
|
757
748
|
|
|
758
749
|
def __init__(
|
|
759
750
|
self,
|
|
760
751
|
dimensions: Iterable[Dimension],
|
|
761
|
-
dataframes: Iterable[Union[pd.DataFrame,
|
|
752
|
+
dataframes: Iterable[Union[pd.DataFrame, tuple[Name, pd.DataFrame]]],
|
|
762
753
|
/,
|
|
763
754
|
treat_omitted_columns_as_features: bool = True,
|
|
764
755
|
timestamps_already_normalized: bool = False,
|
|
@@ -775,11 +766,11 @@ class Model:
|
|
|
775
766
|
object.__setattr__(
|
|
776
767
|
self,
|
|
777
768
|
"_dimension_min_max_from_all_inferences",
|
|
778
|
-
_Cache[Name,
|
|
769
|
+
_Cache[Name, tuple[float, float]](),
|
|
779
770
|
)
|
|
780
771
|
|
|
781
772
|
df_names, dfs = cast(
|
|
782
|
-
|
|
773
|
+
tuple[Iterable[Name], Iterable[pd.DataFrame]],
|
|
783
774
|
zip(*_coerce_tuple(dataframes)),
|
|
784
775
|
)
|
|
785
776
|
str_col_dfs = _coerce_str_column_names(dfs)
|
|
@@ -956,7 +947,7 @@ class Model:
|
|
|
956
947
|
)
|
|
957
948
|
|
|
958
949
|
@cached_property
|
|
959
|
-
def scalar_dimensions(self) ->
|
|
950
|
+
def scalar_dimensions(self) -> tuple[ScalarDimension, ...]:
|
|
960
951
|
"""Put these in a cached sequence because currently their positions
|
|
961
952
|
in this list also determine their node IDs in graphql.
|
|
962
953
|
"""
|
|
@@ -969,7 +960,7 @@ class Model:
|
|
|
969
960
|
)
|
|
970
961
|
|
|
971
962
|
@cached_property
|
|
972
|
-
def embedding_dimensions(self) ->
|
|
963
|
+
def embedding_dimensions(self) -> tuple[EmbeddingDimension, ...]:
|
|
973
964
|
"""Put these in a cached sequence because currently their positions
|
|
974
965
|
in this list also determine their node IDs in graphql.
|
|
975
966
|
"""
|
|
@@ -982,10 +973,10 @@ class Model:
|
|
|
982
973
|
def dimension_categories_from_all_inferences(
|
|
983
974
|
self,
|
|
984
975
|
dimension_name: Name,
|
|
985
|
-
) ->
|
|
976
|
+
) -> tuple[str, ...]:
|
|
986
977
|
dim = self[dimension_name]
|
|
987
978
|
if dim.data_type is CONTINUOUS:
|
|
988
|
-
return cast(
|
|
979
|
+
return cast(tuple[str, ...], ())
|
|
989
980
|
with self._dimension_categories_from_all_inferences() as cache:
|
|
990
981
|
try:
|
|
991
982
|
return cache[dimension_name]
|
|
@@ -1003,7 +994,7 @@ class Model:
|
|
|
1003
994
|
def dimension_min_max_from_all_df(
|
|
1004
995
|
self,
|
|
1005
996
|
dimension_name: Name,
|
|
1006
|
-
) ->
|
|
997
|
+
) -> tuple[float, float]:
|
|
1007
998
|
dim = self[dimension_name]
|
|
1008
999
|
if dim.data_type is not CONTINUOUS:
|
|
1009
1000
|
return (np.nan, np.nan)
|
|
@@ -1021,7 +1012,7 @@ class Model:
|
|
|
1021
1012
|
return ans
|
|
1022
1013
|
|
|
1023
1014
|
@overload
|
|
1024
|
-
def __getitem__(self, key:
|
|
1015
|
+
def __getitem__(self, key: type[Inferences]) -> Iterator[Inferences]: ...
|
|
1025
1016
|
|
|
1026
1017
|
@overload
|
|
1027
1018
|
def __getitem__(self, key: InferencesRole) -> Inferences: ...
|
|
@@ -1033,20 +1024,20 @@ class Model:
|
|
|
1033
1024
|
def __getitem__(self, key: MultiDimensionKey) -> Iterator[Dimension]: ...
|
|
1034
1025
|
|
|
1035
1026
|
@overload
|
|
1036
|
-
def __getitem__(self, key:
|
|
1027
|
+
def __getitem__(self, key: type[ScalarDimension]) -> Iterator[ScalarDimension]: ...
|
|
1037
1028
|
|
|
1038
1029
|
@overload
|
|
1039
|
-
def __getitem__(self, key:
|
|
1030
|
+
def __getitem__(self, key: type[EmbeddingDimension]) -> Iterator[EmbeddingDimension]: ...
|
|
1040
1031
|
|
|
1041
1032
|
@overload
|
|
1042
|
-
def __getitem__(self, key:
|
|
1033
|
+
def __getitem__(self, key: type[Dimension]) -> Iterator[Dimension]: ...
|
|
1043
1034
|
|
|
1044
1035
|
@overload
|
|
1045
1036
|
def __getitem__(
|
|
1046
1037
|
self,
|
|
1047
|
-
key:
|
|
1038
|
+
key: tuple[
|
|
1048
1039
|
MultiDimensionKey,
|
|
1049
|
-
Union[
|
|
1040
|
+
Union[type[ScalarDimension], type[EmbeddingDimension]],
|
|
1050
1041
|
],
|
|
1051
1042
|
) -> Iterator[Dimension]: ...
|
|
1052
1043
|
|
|
@@ -1094,9 +1085,9 @@ class Model:
|
|
|
1094
1085
|
|
|
1095
1086
|
def _get_multi_dims_by_type(
|
|
1096
1087
|
self,
|
|
1097
|
-
key:
|
|
1088
|
+
key: tuple[
|
|
1098
1089
|
MultiDimensionKey,
|
|
1099
|
-
Union[
|
|
1090
|
+
Union[type[ScalarDimension], type[EmbeddingDimension]],
|
|
1100
1091
|
],
|
|
1101
1092
|
) -> Iterator[Dimension]:
|
|
1102
1093
|
return filter(lambda dim: type(dim) is key[1], self[key[0]])
|
|
@@ -1105,7 +1096,7 @@ class Model:
|
|
|
1105
1096
|
def _new_dimension(
|
|
1106
1097
|
self,
|
|
1107
1098
|
obj: DimensionRole,
|
|
1108
|
-
cls:
|
|
1099
|
+
cls: type[Dimension] = ScalarDimension,
|
|
1109
1100
|
**kwargs: Any,
|
|
1110
1101
|
) -> Dimension: ...
|
|
1111
1102
|
|
|
@@ -1113,7 +1104,7 @@ class Model:
|
|
|
1113
1104
|
def _new_dimension(
|
|
1114
1105
|
self,
|
|
1115
1106
|
obj: Name,
|
|
1116
|
-
cls:
|
|
1107
|
+
cls: type[Dimension] = ScalarDimension,
|
|
1117
1108
|
**kwargs: Any,
|
|
1118
1109
|
) -> Dimension: ...
|
|
1119
1110
|
|
|
@@ -1125,7 +1116,7 @@ class Model:
|
|
|
1125
1116
|
) -> Dimension: ...
|
|
1126
1117
|
|
|
1127
1118
|
def _new_dimension(
|
|
1128
|
-
self, obj: Any, cls:
|
|
1119
|
+
self, obj: Any, cls: type[Dimension] = ScalarDimension, **kwargs: Any
|
|
1129
1120
|
) -> Dimension:
|
|
1130
1121
|
"""Creates a new Dimension or copies an existing one, setting the
|
|
1131
1122
|
model weak reference to the `self` Model instance, and sharing the
|
|
@@ -1175,13 +1166,13 @@ class Schema(SchemaSpec):
|
|
|
1175
1166
|
prediction_score: Optional[str] = None
|
|
1176
1167
|
actual_label: Optional[str] = None
|
|
1177
1168
|
actual_score: Optional[str] = None
|
|
1178
|
-
prompt: Optional[
|
|
1169
|
+
prompt: Optional[Embedding] = None
|
|
1179
1170
|
response: Optional[Union[str, Embedding]] = None
|
|
1180
1171
|
features: Iterable[Union[str, CompositeDimensionSpec]] = field(default_factory=list)
|
|
1181
1172
|
tags: Iterable[Union[str, CompositeDimensionSpec]] = field(default_factory=list)
|
|
1182
1173
|
|
|
1183
1174
|
# internal attribute not exposed to users
|
|
1184
|
-
_dimensions:
|
|
1175
|
+
_dimensions: list[Dimension] = field(
|
|
1185
1176
|
init=False, repr=False, hash=False, compare=False, default_factory=list
|
|
1186
1177
|
)
|
|
1187
1178
|
|
|
@@ -1248,7 +1239,7 @@ class Schema(SchemaSpec):
|
|
|
1248
1239
|
|
|
1249
1240
|
def __call__(
|
|
1250
1241
|
self,
|
|
1251
|
-
*dataframes: Union[pd.DataFrame,
|
|
1242
|
+
*dataframes: Union[pd.DataFrame, tuple[Name, pd.DataFrame]],
|
|
1252
1243
|
**kwargs: Any,
|
|
1253
1244
|
) -> Model:
|
|
1254
1245
|
"""Dimensions are the "baton" that Schema hands over to Model."""
|
|
@@ -1302,7 +1293,7 @@ def _get_omitted_column_names(
|
|
|
1302
1293
|
|
|
1303
1294
|
def _group_names_by_dim_role(
|
|
1304
1295
|
dimensions: Iterable[Dimension],
|
|
1305
|
-
) -> Iterator[
|
|
1296
|
+
) -> Iterator[tuple[DimensionRole, list[str]]]:
|
|
1306
1297
|
return (
|
|
1307
1298
|
(role, [dim.name for dim in dims])
|
|
1308
1299
|
for role, dims in groupby(
|
|
@@ -1356,8 +1347,8 @@ def _coerce_str(obj: Optional[str]) -> str:
|
|
|
1356
1347
|
|
|
1357
1348
|
|
|
1358
1349
|
def _coerce_tuple(
|
|
1359
|
-
dataframes: Iterable[Union[pd.DataFrame,
|
|
1360
|
-
) -> Iterator[
|
|
1350
|
+
dataframes: Iterable[Union[pd.DataFrame, tuple[Name, pd.DataFrame]]],
|
|
1351
|
+
) -> Iterator[tuple[Name, pd.DataFrame]]:
|
|
1361
1352
|
for dataframe in dataframes:
|
|
1362
1353
|
if isinstance(dataframe, pd.DataFrame):
|
|
1363
1354
|
yield (_rand_str(), dataframe)
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
from collections.abc import Iterable, Sized
|
|
1
2
|
from itertools import chain
|
|
2
3
|
from operator import itemgetter
|
|
3
|
-
from typing import
|
|
4
|
+
from typing import Optional, Union
|
|
4
5
|
|
|
5
6
|
import pandas as pd
|
|
6
7
|
from pandas.api.types import is_object_dtype
|
|
@@ -24,18 +25,18 @@ def create_model_from_inferences(*inference_sets: Optional[Inferences]) -> Model
|
|
|
24
25
|
# have the same length between inferences.
|
|
25
26
|
_ = _get_embedding_dimensions(inference_sets[0], inference_sets[1])
|
|
26
27
|
|
|
27
|
-
named_dataframes:
|
|
28
|
-
prediction_ids:
|
|
29
|
-
timestamps:
|
|
30
|
-
prediction_labels:
|
|
31
|
-
prediction_scores:
|
|
32
|
-
actual_labels:
|
|
33
|
-
actual_scores:
|
|
34
|
-
features:
|
|
35
|
-
tags:
|
|
36
|
-
embeddings:
|
|
37
|
-
prompts:
|
|
38
|
-
responses:
|
|
28
|
+
named_dataframes: list[tuple[InferencesName, pd.DataFrame]] = []
|
|
29
|
+
prediction_ids: list[ColumnName] = []
|
|
30
|
+
timestamps: list[ColumnName] = []
|
|
31
|
+
prediction_labels: list[ColumnName] = []
|
|
32
|
+
prediction_scores: list[ColumnName] = []
|
|
33
|
+
actual_labels: list[ColumnName] = []
|
|
34
|
+
actual_scores: list[ColumnName] = []
|
|
35
|
+
features: list[ColumnName] = []
|
|
36
|
+
tags: list[ColumnName] = []
|
|
37
|
+
embeddings: dict[DisplayName, EmbeddingColumnNames] = {}
|
|
38
|
+
prompts: list[EmbeddingColumnNames] = []
|
|
39
|
+
responses: list[Union[str, EmbeddingColumnNames]] = []
|
|
39
40
|
|
|
40
41
|
for inferences in filter(_is_inferences, inference_sets):
|
|
41
42
|
df = inferences.dataframe
|
|
@@ -184,14 +185,14 @@ def _translate_prompt_embedding(
|
|
|
184
185
|
def _split_vectors_vs_scalars(
|
|
185
186
|
names: Iterable[str],
|
|
186
187
|
*dataframes: pd.DataFrame,
|
|
187
|
-
) ->
|
|
188
|
+
) -> tuple[list[str], list[Embedding]]:
|
|
188
189
|
"""A best-effort attempt at separating vector columns from scalar columns
|
|
189
190
|
by examining the first non-null item of the column from each dataframe. If
|
|
190
191
|
any item is `Iterable` and `Sized`, but not `str`, then the column is
|
|
191
192
|
returned as `Embedding`, else it's returned as scalar.
|
|
192
193
|
"""
|
|
193
|
-
scalars:
|
|
194
|
-
vectors:
|
|
194
|
+
scalars: list[str] = []
|
|
195
|
+
vectors: list[Embedding] = []
|
|
195
196
|
# convert to sets for a speedier lookup
|
|
196
197
|
column_names = [set(df.columns) for df in dataframes]
|
|
197
198
|
for name in names:
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
from datetime import datetime, timedelta, timezone, tzinfo
|
|
2
|
-
from typing import Any, Optional,
|
|
2
|
+
from typing import Any, Optional, cast
|
|
3
3
|
|
|
4
4
|
import pandas as pd
|
|
5
5
|
import pytz
|
|
@@ -96,7 +96,7 @@ MINUTE_DATETIME_FORMAT = "%Y-%m-%dT%H:%M:00%z"
|
|
|
96
96
|
def right_open_time_range(
|
|
97
97
|
min_time: Optional[datetime],
|
|
98
98
|
max_time: Optional[datetime],
|
|
99
|
-
) ->
|
|
99
|
+
) -> tuple[Optional[datetime], Optional[datetime]]:
|
|
100
100
|
"""
|
|
101
101
|
First adds one minute to `max_time`, because time intervals are right
|
|
102
102
|
open and one minute is the smallest interval allowed, then rounds down
|