arize-phoenix 4.35.1__tar.gz → 4.36.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-4.35.1 → arize_phoenix-4.36.0}/PKG-INFO +1 -1
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/pyproject.toml +23 -19
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/config.py +92 -2
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/db/alembic.ini +0 -34
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/db/engines.py +27 -10
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/db/insertion/dataset.py +0 -1
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/db/insertion/types.py +1 -1
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/db/migrate.py +3 -3
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/db/migrations/env.py +0 -7
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/inferences/fixtures.py +0 -1
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/inferences/inferences.py +0 -1
- arize_phoenix-4.36.0/src/phoenix/logging/__init__.py +3 -0
- arize_phoenix-4.36.0/src/phoenix/logging/_config.py +90 -0
- arize_phoenix-4.36.0/src/phoenix/logging/_filter.py +6 -0
- arize_phoenix-4.36.0/src/phoenix/logging/_formatter.py +69 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/metrics/__init__.py +0 -1
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/routers/v1/datasets.py +0 -1
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/app.py +2 -3
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/main.py +21 -21
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/telemetry.py +2 -2
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/services.py +0 -1
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/session/client.py +0 -1
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/session/evaluation.py +0 -1
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/session/session.py +0 -1
- arize_phoenix-4.36.0/src/phoenix/settings.py +22 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/trace/exporter.py +0 -1
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/trace/fixtures.py +0 -2
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/trace/langchain/instrumentor.py +0 -1
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/trace/llama_index/callback.py +0 -1
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/trace/openai/instrumentor.py +0 -1
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/trace/trace_dataset.py +9 -6
- arize_phoenix-4.36.0/src/phoenix/utilities/logging.py +18 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/utilities/re.py +3 -3
- arize_phoenix-4.36.0/src/phoenix/version.py +1 -0
- arize_phoenix-4.35.1/src/phoenix/settings.py +0 -13
- arize_phoenix-4.35.1/src/phoenix/utilities/logging.py +0 -10
- arize_phoenix-4.35.1/src/phoenix/version.py +0 -1
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/.gitignore +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/IP_NOTICE +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/LICENSE +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/README.md +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/examples/manually-instrumented-chatbot/chat-service/chat/__init__.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/examples/manually-instrumented-chatbot/chat-service/chat/app.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/examples/manually-instrumented-chatbot/chat-service/chat/types.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/examples/manually-instrumented-chatbot/frontend/Dockerfile +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/examples/manually-instrumented-chatbot/frontend/Makefile +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/examples/manually-instrumented-chatbot/frontend/__init__.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/examples/manually-instrumented-chatbot/frontend/pyproject.toml +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/examples/manually-instrumented-chatbot/frontend/requirements.txt +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/examples/manually-instrumented-chatbot/frontend/schema.json +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/__init__.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/auth.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/core/__init__.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/core/embedding_dimension.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/core/model.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/core/model_schema.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/core/model_schema_adapter.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/datetime_utils.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/db/README.md +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/db/__init__.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/db/bulk_inserter.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/db/helpers.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/db/insertion/__init__.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/db/insertion/constants.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/db/insertion/document_annotation.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/db/insertion/evaluation.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/db/insertion/helpers.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/db/insertion/span.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/db/insertion/span_annotation.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/db/insertion/trace_annotation.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/db/migrations/__init__.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/db/migrations/future_versions/README.md +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/db/migrations/future_versions/cd164e83824f_users_and_tokens.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/db/migrations/script.py.mako +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/db/migrations/versions/.gitignore +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/db/migrations/versions/10460e46d750_datasets.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/db/migrations/versions/3be8647b87d8_add_token_columns_to_spans_table.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/db/migrations/versions/cf03bd6bae1d_init.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/db/models.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/exceptions.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/experiments/__init__.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/experiments/evaluators/__init__.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/experiments/evaluators/base.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/experiments/evaluators/code_evaluators.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/experiments/evaluators/llm_evaluators.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/experiments/evaluators/utils.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/experiments/functions.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/experiments/tracing.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/experiments/types.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/experiments/utils.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/inferences/__init__.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/inferences/errors.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/inferences/schema.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/inferences/validation.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/metrics/README.md +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/metrics/binning.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/metrics/metrics.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/metrics/mixins.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/metrics/retrieval_metrics.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/metrics/timeseries.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/metrics/wrappers.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/pointcloud/__init__.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/pointcloud/clustering.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/pointcloud/pointcloud.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/pointcloud/projectors.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/pointcloud/umap_parameters.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/py.typed +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/__init__.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/__init__.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/context.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/dataloaders/__init__.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/dataloaders/annotation_summaries.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/dataloaders/average_experiment_run_latency.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/dataloaders/cache/__init__.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/dataloaders/cache/two_tier_cache.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/dataloaders/dataset_example_revisions.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/dataloaders/dataset_example_spans.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/dataloaders/document_evaluation_summaries.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/dataloaders/document_evaluations.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/dataloaders/document_retrieval_metrics.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/dataloaders/experiment_annotation_summaries.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/dataloaders/experiment_error_rates.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/dataloaders/experiment_run_annotations.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/dataloaders/experiment_run_counts.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/dataloaders/experiment_sequence_number.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/dataloaders/latency_ms_quantile.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/dataloaders/min_start_or_max_end_times.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/dataloaders/project_by_name.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/dataloaders/record_counts.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/dataloaders/span_annotations.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/dataloaders/span_dataset_examples.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/dataloaders/span_descendants.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/dataloaders/span_projects.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/dataloaders/token_counts.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/dataloaders/trace_row_ids.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/exceptions.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/helpers/__init__.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/helpers/dataset_helpers.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/input_types/AddExamplesToDatasetInput.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/input_types/AddSpansToDatasetInput.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/input_types/ClearProjectInput.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/input_types/ClusterInput.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/input_types/Coordinates.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/input_types/CreateDatasetInput.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/input_types/CreateSpanAnnotationInput.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/input_types/CreateTraceAnnotationInput.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/input_types/DataQualityMetricInput.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/input_types/DatasetExampleInput.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/input_types/DatasetSort.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/input_types/DatasetVersionSort.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/input_types/DeleteAnnotationsInput.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/input_types/DeleteDatasetExamplesInput.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/input_types/DeleteDatasetInput.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/input_types/DeleteExperimentsInput.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/input_types/DimensionFilter.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/input_types/DimensionInput.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/input_types/Granularity.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/input_types/PatchAnnotationInput.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/input_types/PatchDatasetExamplesInput.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/input_types/PatchDatasetInput.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/input_types/PerformanceMetricInput.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/input_types/SpanAnnotationSort.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/input_types/SpanSort.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/input_types/TimeRange.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/input_types/TraceAnnotationSort.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/input_types/UserRoleInput.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/input_types/__init__.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/interceptor.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/mutations/__init__.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/mutations/api_key_mutations.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/mutations/auth.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/mutations/auth_mutations.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/mutations/dataset_mutations.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/mutations/experiment_mutations.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/mutations/export_events_mutations.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/mutations/project_mutations.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/mutations/span_annotations_mutations.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/mutations/trace_annotations_mutations.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/mutations/user_mutations.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/openapi/__init__.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/openapi/main.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/openapi/schema.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/queries.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/routers/__init__.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/routers/utils.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/routers/v1/__init__.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/routers/v1/evaluations.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/routers/v1/experiment_evaluations.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/routers/v1/experiment_runs.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/routers/v1/experiments.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/routers/v1/pydantic_compat.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/routers/v1/spans.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/routers/v1/traces.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/routers/v1/utils.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/schema.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/types/Annotation.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/types/AnnotationSummary.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/types/AnnotatorKind.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/types/ApiKey.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/types/Cluster.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/types/CreateDatasetPayload.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/types/DataQualityMetric.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/types/Dataset.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/types/DatasetExample.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/types/DatasetExampleRevision.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/types/DatasetValues.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/types/DatasetVersion.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/types/Dimension.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/types/DimensionDataType.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/types/DimensionShape.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/types/DimensionType.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/types/DimensionWithValue.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/types/DocumentEvaluationSummary.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/types/DocumentRetrievalMetrics.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/types/EmbeddingDimension.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/types/EmbeddingMetadata.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/types/Evaluation.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/types/EvaluationSummary.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/types/Event.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/types/EventMetadata.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/types/ExampleRevisionInterface.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/types/Experiment.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/types/ExperimentAnnotationSummary.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/types/ExperimentComparison.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/types/ExperimentRun.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/types/ExperimentRunAnnotation.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/types/ExportedFile.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/types/Functionality.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/types/Inferences.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/types/InferencesRole.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/types/LabelFraction.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/types/MimeType.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/types/Model.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/types/NumericRange.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/types/PerformanceMetric.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/types/Project.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/types/PromptResponse.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/types/Retrieval.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/types/ScalarDriftMetricEnum.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/types/Segments.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/types/SortDir.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/types/Span.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/types/SpanAnnotation.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/types/SystemApiKey.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/types/TimeSeries.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/types/Trace.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/types/TraceAnnotation.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/types/UMAPPoints.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/types/User.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/types/UserApiKey.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/types/UserRole.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/types/ValidationResult.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/types/VectorDriftMetricEnum.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/types/__init__.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/types/node.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/types/pagination.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/api/utils.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/dml_event.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/dml_event_handler.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/grpc_server.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/openapi/__init__.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/prometheus.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/static/.vite/manifest.json +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/static/apple-touch-icon-114x114.png +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/static/apple-touch-icon-120x120.png +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/static/apple-touch-icon-144x144.png +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/static/apple-touch-icon-152x152.png +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/static/apple-touch-icon-180x180.png +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/static/apple-touch-icon-72x72.png +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/static/apple-touch-icon-76x76.png +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/static/apple-touch-icon.png +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/static/assets/components-Dte7_KRd.js +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/static/assets/index-fq1-hCK4.js +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/static/assets/pages-CnTvEGEN.js +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/static/assets/vendor-BC3OPQuM.js +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/static/assets/vendor-DxkFTwjz.css +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/static/assets/vendor-arizeai-NjB3cZzD.js +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/static/assets/vendor-codemirror-gE_JCOgX.js +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/static/assets/vendor-recharts-BXLYwcXF.js +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/static/assets/vendor-three-DwGkEfCM.js +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/static/favicon.ico +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/static/modernizr.js +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/templates/__init__.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/templates/index.html +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/thread_server.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/server/types.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/session/__init__.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/session/data_extractor.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/trace/__init__.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/trace/attributes.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/trace/dsl/README.md +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/trace/dsl/__init__.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/trace/dsl/filter.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/trace/dsl/helpers.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/trace/dsl/query.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/trace/errors.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/trace/evaluation_conventions.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/trace/langchain/__init__.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/trace/llama_index/__init__.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/trace/openai/__init__.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/trace/otel.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/trace/projects.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/trace/schemas.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/trace/span_evaluations.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/trace/span_json_decoder.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/trace/span_json_encoder.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/trace/utils.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/trace/v1/__init__.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/trace/v1/evaluation_pb2.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/trace/v1/evaluation_pb2.pyi +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/utilities/__init__.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/utilities/client.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/utilities/deprecation.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/utilities/error_handling.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/utilities/json.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/utilities/project.py +0 -0
- {arize_phoenix-4.35.1 → arize_phoenix-4.36.0}/src/phoenix/utilities/span_store.py +0 -0
|
@@ -191,33 +191,35 @@ dependencies = [
|
|
|
191
191
|
|
|
192
192
|
[tool.hatch.envs.type]
|
|
193
193
|
dependencies = [
|
|
194
|
+
"grpcio",
|
|
195
|
+
"litellm>=1.0.3",
|
|
194
196
|
"mypy==1.11.2",
|
|
195
|
-
"tenacity",
|
|
196
|
-
"pandas>=1.0",
|
|
197
|
-
"pandas-stubs==2.0.3.230814",
|
|
198
|
-
"types-tabulate",
|
|
199
|
-
"types-psutil",
|
|
200
|
-
"types-tqdm",
|
|
201
|
-
"types-protobuf",
|
|
202
|
-
"types-setuptools",
|
|
203
|
-
"types-cachetools",
|
|
204
197
|
"openai>=1.0.0",
|
|
205
|
-
"litellm>=1.0.3",
|
|
206
|
-
"prometheus_client",
|
|
207
|
-
"grpcio",
|
|
208
|
-
"opentelemetry-sdk",
|
|
209
|
-
"opentelemetry-proto>=1.12.0",
|
|
210
198
|
"opentelemetry-exporter-otlp",
|
|
211
|
-
"opentelemetry-semantic-conventions",
|
|
212
199
|
"opentelemetry-instrumentation-fastapi",
|
|
213
|
-
"opentelemetry-instrumentation-sqlalchemy",
|
|
214
200
|
"opentelemetry-instrumentation-grpc",
|
|
201
|
+
"opentelemetry-instrumentation-sqlalchemy",
|
|
202
|
+
"opentelemetry-proto>=1.12.0",
|
|
203
|
+
"opentelemetry-sdk",
|
|
204
|
+
"opentelemetry-semantic-conventions",
|
|
205
|
+
"pandas-stubs==2.0.3.230814",
|
|
206
|
+
"pandas>=1.0",
|
|
207
|
+
"prometheus_client",
|
|
215
208
|
"py-grpc-prometheus",
|
|
216
|
-
"strawberry-graphql[opentelemetry]==0.236.0", # need to pin version because we're monkey-patching
|
|
217
|
-
"requests", # this is needed to type-check third-party packages
|
|
218
209
|
"pydantic==1.10.17; python_version=='3.8'", # lower minor versions of pydantic break strawberry mypy plugin
|
|
219
210
|
"pydantic==1.10.17; python_version=='3.9'", # lower minor versions of pydantic break strawberry mypy plugin
|
|
220
211
|
"pydantic==2.8.2; python_version=='3.12'",
|
|
212
|
+
"pypistats", # this is needed to type-check third-party packages
|
|
213
|
+
"requests", # this is needed to type-check third-party packages
|
|
214
|
+
"strawberry-graphql[opentelemetry]==0.236.0", # need to pin version because we're monkey-patching
|
|
215
|
+
"tenacity",
|
|
216
|
+
"types-cachetools",
|
|
217
|
+
"types-protobuf",
|
|
218
|
+
"types-psutil",
|
|
219
|
+
"types-requests",
|
|
220
|
+
"types-setuptools",
|
|
221
|
+
"types-tabulate",
|
|
222
|
+
"types-tqdm",
|
|
221
223
|
]
|
|
222
224
|
|
|
223
225
|
[[tool.hatch.envs.type.matrix]]
|
|
@@ -385,10 +387,11 @@ exclude = [
|
|
|
385
387
|
"src/phoenix/evals/",
|
|
386
388
|
"dist/",
|
|
387
389
|
"scripts/data/",
|
|
390
|
+
"scripts/analytics/",
|
|
388
391
|
"sdist/",
|
|
389
392
|
"tests/",
|
|
390
393
|
"tutorials/",
|
|
391
|
-
"examples/manually-instrumented-chatbot/"
|
|
394
|
+
"examples/manually-instrumented-chatbot/",
|
|
392
395
|
]
|
|
393
396
|
|
|
394
397
|
[[tool.mypy.overrides]]
|
|
@@ -410,6 +413,7 @@ module = [
|
|
|
410
413
|
"grpc.*",
|
|
411
414
|
"py_grpc_prometheus.*",
|
|
412
415
|
"orjson", # suppress fastapi internal type errors
|
|
416
|
+
"pypistats",
|
|
413
417
|
]
|
|
414
418
|
ignore_missing_imports = true
|
|
415
419
|
|
|
@@ -1,13 +1,16 @@
|
|
|
1
|
+
import logging
|
|
1
2
|
import os
|
|
2
3
|
import re
|
|
3
4
|
import tempfile
|
|
4
|
-
from
|
|
5
|
+
from enum import Enum
|
|
5
6
|
from pathlib import Path
|
|
6
7
|
from typing import Dict, List, Optional, Tuple
|
|
7
8
|
|
|
9
|
+
from phoenix.utilities.logging import log_a_list
|
|
10
|
+
|
|
8
11
|
from .utilities.re import parse_env_headers
|
|
9
12
|
|
|
10
|
-
logger = getLogger(__name__)
|
|
13
|
+
logger = logging.getLogger(__name__)
|
|
11
14
|
|
|
12
15
|
# Phoenix environment variables
|
|
13
16
|
ENV_PHOENIX_PORT = "PHOENIX_PORT"
|
|
@@ -56,6 +59,24 @@ ENV_PHOENIX_ENABLE_PROMETHEUS = "PHOENIX_ENABLE_PROMETHEUS"
|
|
|
56
59
|
"""
|
|
57
60
|
Whether to enable Prometheus. Defaults to false.
|
|
58
61
|
"""
|
|
62
|
+
ENV_LOGGING_MODE = "PHOENIX_LOGGING_MODE"
|
|
63
|
+
"""
|
|
64
|
+
The logging mode (either 'default' or 'structured').
|
|
65
|
+
"""
|
|
66
|
+
ENV_LOGGING_LEVEL = "PHOENIX_LOGGING_LEVEL"
|
|
67
|
+
"""
|
|
68
|
+
The logging level ('debug', 'info', 'warning', 'error', 'critical') for the Phoenix backend. For
|
|
69
|
+
database logging see ENV_DB_LOGGING_LEVEL. Defaults to info.
|
|
70
|
+
"""
|
|
71
|
+
ENV_DB_LOGGING_LEVEL = "PHOENIX_DB_LOGGING_LEVEL"
|
|
72
|
+
"""
|
|
73
|
+
The logging level ('debug', 'info', 'warning', 'error', 'critical') for the Phoenix ORM.
|
|
74
|
+
Defaults to warning.
|
|
75
|
+
"""
|
|
76
|
+
ENV_LOG_MIGRATIONS = "PHOENIX_LOG_MIGRATIONS"
|
|
77
|
+
"""
|
|
78
|
+
Whether or not to log migrations. Defaults to true.
|
|
79
|
+
"""
|
|
59
80
|
|
|
60
81
|
# Phoenix server OpenTelemetry instrumentation environment variables
|
|
61
82
|
ENV_PHOENIX_SERVER_INSTRUMENTATION_OTLP_TRACE_COLLECTOR_HTTP_ENDPOINT = (
|
|
@@ -331,5 +352,74 @@ def get_web_base_url() -> str:
|
|
|
331
352
|
return get_base_url()
|
|
332
353
|
|
|
333
354
|
|
|
355
|
+
class LoggingMode(Enum):
|
|
356
|
+
DEFAULT = "default"
|
|
357
|
+
STRUCTURED = "structured"
|
|
358
|
+
|
|
359
|
+
|
|
360
|
+
def get_env_logging_mode() -> LoggingMode:
|
|
361
|
+
if (logging_mode := os.getenv(ENV_LOGGING_MODE)) is None:
|
|
362
|
+
return LoggingMode.DEFAULT
|
|
363
|
+
try:
|
|
364
|
+
return LoggingMode(logging_mode.lower().strip())
|
|
365
|
+
except ValueError:
|
|
366
|
+
raise ValueError(
|
|
367
|
+
f"Invalid value `{logging_mode}` for env var `{ENV_LOGGING_MODE}`. "
|
|
368
|
+
f"Valid values are: {log_a_list([mode.value for mode in LoggingMode],'and')} "
|
|
369
|
+
"(case-insensitive)."
|
|
370
|
+
)
|
|
371
|
+
|
|
372
|
+
|
|
373
|
+
def get_env_logging_level() -> int:
|
|
374
|
+
return _get_logging_level(
|
|
375
|
+
env_var=ENV_LOGGING_LEVEL,
|
|
376
|
+
default_level=logging.INFO,
|
|
377
|
+
)
|
|
378
|
+
|
|
379
|
+
|
|
380
|
+
def get_env_db_logging_level() -> int:
|
|
381
|
+
return _get_logging_level(
|
|
382
|
+
env_var=ENV_DB_LOGGING_LEVEL,
|
|
383
|
+
default_level=logging.WARNING,
|
|
384
|
+
)
|
|
385
|
+
|
|
386
|
+
|
|
387
|
+
def _get_logging_level(env_var: str, default_level: int) -> int:
|
|
388
|
+
logging_level = os.getenv(env_var)
|
|
389
|
+
if not logging_level:
|
|
390
|
+
return default_level
|
|
391
|
+
|
|
392
|
+
# levelNamesMapping = logging.getLevelNamesMapping() is not supported in python 3.8
|
|
393
|
+
# but is supported in 3.12. Hence, we define the mapping ourselves and will remove
|
|
394
|
+
# this once we drop support for older python versions
|
|
395
|
+
levelNamesMapping = logging._nameToLevel.copy()
|
|
396
|
+
|
|
397
|
+
valid_values = [level for level in levelNamesMapping if level != "NOTSET"]
|
|
398
|
+
|
|
399
|
+
if logging_level.upper() not in valid_values:
|
|
400
|
+
raise ValueError(
|
|
401
|
+
f"Invalid value `{logging_level}` for env var `{env_var}`. "
|
|
402
|
+
f"Valid values are: {log_a_list(valid_values,'and')} (case-insensitive)."
|
|
403
|
+
)
|
|
404
|
+
return levelNamesMapping[logging_level.upper()]
|
|
405
|
+
|
|
406
|
+
|
|
407
|
+
def get_env_log_migrations() -> bool:
|
|
408
|
+
log_migrations = os.getenv(ENV_LOG_MIGRATIONS)
|
|
409
|
+
# Default to True
|
|
410
|
+
if log_migrations is None:
|
|
411
|
+
return True
|
|
412
|
+
|
|
413
|
+
if log_migrations.lower() == "true":
|
|
414
|
+
return True
|
|
415
|
+
elif log_migrations.lower() == "false":
|
|
416
|
+
return False
|
|
417
|
+
else:
|
|
418
|
+
raise ValueError(
|
|
419
|
+
f"Invalid value for environment variable {ENV_LOG_MIGRATIONS}: "
|
|
420
|
+
f"{log_migrations}. Value values are 'TRUE' and 'FALSE' (case-insensitive)."
|
|
421
|
+
)
|
|
422
|
+
|
|
423
|
+
|
|
334
424
|
DEFAULT_PROJECT_NAME = "default"
|
|
335
425
|
_KUBERNETES_PHOENIX_PORT_PATTERN = re.compile(r"^tcp://\d{1,3}[.]\d{1,3}[.]\d{1,3}[.]\d{1,3}:\d+$")
|
|
@@ -83,37 +83,3 @@ version_path_separator = os # Use os.pathsep. Default configuration used for ne
|
|
|
83
83
|
# ruff.executable = %(here)s/.venv/bin/ruff
|
|
84
84
|
# ruff.options = --fix REVISION_SCRIPT_FILENAME
|
|
85
85
|
|
|
86
|
-
# Logging configuration
|
|
87
|
-
[loggers]
|
|
88
|
-
keys = root,sqlalchemy,alembic
|
|
89
|
-
|
|
90
|
-
[handlers]
|
|
91
|
-
keys = console
|
|
92
|
-
|
|
93
|
-
[formatters]
|
|
94
|
-
keys = generic
|
|
95
|
-
|
|
96
|
-
[logger_root]
|
|
97
|
-
level = WARN
|
|
98
|
-
handlers = console
|
|
99
|
-
qualname =
|
|
100
|
-
|
|
101
|
-
[logger_sqlalchemy]
|
|
102
|
-
level = WARN
|
|
103
|
-
handlers =
|
|
104
|
-
qualname = sqlalchemy.engine
|
|
105
|
-
|
|
106
|
-
[logger_alembic]
|
|
107
|
-
level = WARN
|
|
108
|
-
handlers =
|
|
109
|
-
qualname = alembic
|
|
110
|
-
|
|
111
|
-
[handler_console]
|
|
112
|
-
class = StreamHandler
|
|
113
|
-
args = (sys.stderr,)
|
|
114
|
-
level = NOTSET
|
|
115
|
-
formatter = generic
|
|
116
|
-
|
|
117
|
-
[formatter_generic]
|
|
118
|
-
format = %(levelname)-5.5s [%(name)s] %(message)s
|
|
119
|
-
datefmt = %H:%M:%S
|
|
@@ -13,7 +13,7 @@ from sqlalchemy import URL, StaticPool, event, make_url
|
|
|
13
13
|
from sqlalchemy.ext.asyncio import AsyncEngine, create_async_engine
|
|
14
14
|
from typing_extensions import assert_never
|
|
15
15
|
|
|
16
|
-
from phoenix.config import get_env_database_schema
|
|
16
|
+
from phoenix.config import LoggingMode, get_env_database_schema
|
|
17
17
|
from phoenix.db.helpers import SupportedSQLDialect
|
|
18
18
|
from phoenix.db.migrate import migrate_in_thread
|
|
19
19
|
from phoenix.db.models import init_models
|
|
@@ -64,7 +64,7 @@ def get_async_db_url(connection_str: str) -> URL:
|
|
|
64
64
|
def create_engine(
|
|
65
65
|
connection_str: str,
|
|
66
66
|
migrate: bool = True,
|
|
67
|
-
|
|
67
|
+
log_to_stdout: bool = False,
|
|
68
68
|
) -> AsyncEngine:
|
|
69
69
|
"""
|
|
70
70
|
Factory to create a SQLAlchemy engine from a URL string.
|
|
@@ -74,10 +74,25 @@ def create_engine(
|
|
|
74
74
|
raise ValueError("Failed to parse database from connection string")
|
|
75
75
|
backend = SupportedSQLDialect(url.get_backend_name())
|
|
76
76
|
url = get_async_db_url(url.render_as_string(hide_password=False))
|
|
77
|
+
# If Phoenix is run as an application, we want to pass log_migrations_to_stdout=False
|
|
78
|
+
# and let the configured sqlalchemy logger handle the migration logs
|
|
79
|
+
log_migrations_to_stdout = (
|
|
80
|
+
Settings.log_migrations and Settings.logging_mode != LoggingMode.STRUCTURED
|
|
81
|
+
)
|
|
77
82
|
if backend is SupportedSQLDialect.SQLITE:
|
|
78
|
-
return aio_sqlite_engine(
|
|
83
|
+
return aio_sqlite_engine(
|
|
84
|
+
url=url,
|
|
85
|
+
migrate=migrate,
|
|
86
|
+
log_to_stdout=log_to_stdout,
|
|
87
|
+
log_migrations_to_stdout=log_migrations_to_stdout,
|
|
88
|
+
)
|
|
79
89
|
elif backend is SupportedSQLDialect.POSTGRESQL:
|
|
80
|
-
return aio_postgresql_engine(
|
|
90
|
+
return aio_postgresql_engine(
|
|
91
|
+
url=url,
|
|
92
|
+
migrate=migrate,
|
|
93
|
+
log_to_stdout=log_to_stdout,
|
|
94
|
+
log_migrations_to_stdout=log_migrations_to_stdout,
|
|
95
|
+
)
|
|
81
96
|
else:
|
|
82
97
|
assert_never(backend)
|
|
83
98
|
|
|
@@ -85,8 +100,9 @@ def create_engine(
|
|
|
85
100
|
def aio_sqlite_engine(
|
|
86
101
|
url: URL,
|
|
87
102
|
migrate: bool = True,
|
|
88
|
-
echo: bool = False,
|
|
89
103
|
shared_cache: bool = True,
|
|
104
|
+
log_to_stdout: bool = False,
|
|
105
|
+
log_migrations_to_stdout: bool = True,
|
|
90
106
|
) -> AsyncEngine:
|
|
91
107
|
database = url.database or ":memory:"
|
|
92
108
|
if database.startswith("file:"):
|
|
@@ -105,7 +121,7 @@ def aio_sqlite_engine(
|
|
|
105
121
|
|
|
106
122
|
engine = create_async_engine(
|
|
107
123
|
url=url,
|
|
108
|
-
echo=
|
|
124
|
+
echo=log_to_stdout,
|
|
109
125
|
json_serializer=_dumps,
|
|
110
126
|
async_creator=async_creator,
|
|
111
127
|
poolclass=StaticPool,
|
|
@@ -123,7 +139,7 @@ def aio_sqlite_engine(
|
|
|
123
139
|
else:
|
|
124
140
|
sync_engine = sqlalchemy.create_engine(
|
|
125
141
|
url=url.set(drivername="sqlite"),
|
|
126
|
-
echo=
|
|
142
|
+
echo=log_migrations_to_stdout,
|
|
127
143
|
json_serializer=_dumps,
|
|
128
144
|
creator=lambda: sqlean.connect(f"file:{database}", uri=True),
|
|
129
145
|
)
|
|
@@ -143,14 +159,15 @@ def set_postgresql_search_path(schema: str) -> Callable[[Connection, Any], None]
|
|
|
143
159
|
def aio_postgresql_engine(
|
|
144
160
|
url: URL,
|
|
145
161
|
migrate: bool = True,
|
|
146
|
-
|
|
162
|
+
log_to_stdout: bool = False,
|
|
163
|
+
log_migrations_to_stdout: bool = True,
|
|
147
164
|
) -> AsyncEngine:
|
|
148
|
-
engine = create_async_engine(url=url, echo=
|
|
165
|
+
engine = create_async_engine(url=url, echo=log_to_stdout, json_serializer=_dumps)
|
|
149
166
|
if not migrate:
|
|
150
167
|
return engine
|
|
151
168
|
sync_engine = sqlalchemy.create_engine(
|
|
152
169
|
url=url.set(drivername="postgresql+psycopg"),
|
|
153
|
-
echo=
|
|
170
|
+
echo=log_migrations_to_stdout,
|
|
154
171
|
json_serializer=_dumps,
|
|
155
172
|
)
|
|
156
173
|
if schema := get_env_database_schema():
|
|
@@ -29,7 +29,7 @@ from phoenix.db.insertion.helpers import insert_on_conflict
|
|
|
29
29
|
from phoenix.server.dml_event import DmlEvent
|
|
30
30
|
from phoenix.server.types import DbSessionFactory
|
|
31
31
|
|
|
32
|
-
logger = logging.getLogger(
|
|
32
|
+
logger = logging.getLogger(__name__)
|
|
33
33
|
|
|
34
34
|
|
|
35
35
|
class Insertable(Protocol):
|
|
@@ -14,7 +14,6 @@ from phoenix.exceptions import PhoenixMigrationError
|
|
|
14
14
|
from phoenix.settings import Settings
|
|
15
15
|
|
|
16
16
|
logger = logging.getLogger(__name__)
|
|
17
|
-
logger.addHandler(logging.NullHandler())
|
|
18
17
|
|
|
19
18
|
|
|
20
19
|
def printif(condition: bool, text: str) -> None:
|
|
@@ -48,8 +47,9 @@ def migrate(
|
|
|
48
47
|
alembic_cfg.set_main_option("script_location", scripts_location)
|
|
49
48
|
url = str(engine.url).replace("%", "%%")
|
|
50
49
|
alembic_cfg.set_main_option("sqlalchemy.url", url)
|
|
51
|
-
|
|
52
|
-
|
|
50
|
+
with engine.connect() as conn:
|
|
51
|
+
alembic_cfg.attributes["connection"] = conn
|
|
52
|
+
command.upgrade(alembic_cfg, "head")
|
|
53
53
|
engine.dispose()
|
|
54
54
|
printif(log_migrations, "---------------------------")
|
|
55
55
|
printif(log_migrations, "✅ Migrations complete.")
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import asyncio
|
|
2
|
-
from logging.config import fileConfig
|
|
3
2
|
|
|
4
3
|
from alembic import context
|
|
5
4
|
from sqlalchemy import Connection, engine_from_config, pool
|
|
@@ -14,14 +13,8 @@ from phoenix.settings import Settings
|
|
|
14
13
|
# access to the values within the .ini file in use.
|
|
15
14
|
config = context.config
|
|
16
15
|
|
|
17
|
-
# Interpret the config file for Python logging.
|
|
18
|
-
# This line sets up loggers basically.
|
|
19
|
-
if config.config_file_name is not None:
|
|
20
|
-
fileConfig(config.config_file_name, disable_existing_loggers=False)
|
|
21
|
-
|
|
22
16
|
# add your model's MetaData object here
|
|
23
17
|
# for 'autogenerate' support
|
|
24
|
-
|
|
25
18
|
target_metadata = Base.metadata
|
|
26
19
|
|
|
27
20
|
# other values from the config, defined by the needs of env.py,
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import atexit
|
|
2
|
+
import logging
|
|
3
|
+
import logging.config
|
|
4
|
+
import logging.handlers
|
|
5
|
+
import queue
|
|
6
|
+
from sys import stderr, stdout
|
|
7
|
+
|
|
8
|
+
from typing_extensions import assert_never
|
|
9
|
+
|
|
10
|
+
from phoenix.config import LoggingMode
|
|
11
|
+
from phoenix.logging._filter import NonErrorFilter
|
|
12
|
+
from phoenix.settings import Settings
|
|
13
|
+
|
|
14
|
+
from ._formatter import PhoenixJSONFormatter
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def setup_logging() -> None:
|
|
18
|
+
"""
|
|
19
|
+
Configures logging for the specified logging mode.
|
|
20
|
+
"""
|
|
21
|
+
logging_mode = Settings.logging_mode
|
|
22
|
+
if logging_mode is LoggingMode.DEFAULT:
|
|
23
|
+
_setup_library_logging()
|
|
24
|
+
elif logging_mode is LoggingMode.STRUCTURED:
|
|
25
|
+
_setup_application_logging()
|
|
26
|
+
else:
|
|
27
|
+
assert_never(logging_mode)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def _setup_library_logging() -> None:
|
|
31
|
+
"""
|
|
32
|
+
Configures logging if Phoenix is used as a library
|
|
33
|
+
"""
|
|
34
|
+
logger = logging.getLogger("phoenix")
|
|
35
|
+
logger.setLevel(Settings.logging_level)
|
|
36
|
+
db_logger = logging.getLogger("sqlalchemy")
|
|
37
|
+
db_logger.setLevel(Settings.db_logging_level)
|
|
38
|
+
logger.info("Default logging ready")
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def _setup_application_logging() -> None:
|
|
42
|
+
"""
|
|
43
|
+
Configures logging if Phoenix is used as an application
|
|
44
|
+
"""
|
|
45
|
+
sql_engine_logger = logging.getLogger("sqlalchemy.engine.Engine")
|
|
46
|
+
# Remove all existing handlers
|
|
47
|
+
for handler in sql_engine_logger.handlers[:]:
|
|
48
|
+
sql_engine_logger.removeHandler(handler)
|
|
49
|
+
handler.close()
|
|
50
|
+
|
|
51
|
+
phoenix_logger = logging.getLogger("phoenix")
|
|
52
|
+
phoenix_logger.setLevel(Settings.logging_level)
|
|
53
|
+
phoenix_logger.propagate = False # Do not pass records to the root logger
|
|
54
|
+
sql_logger = logging.getLogger("sqlalchemy")
|
|
55
|
+
sql_logger.setLevel(Settings.db_logging_level)
|
|
56
|
+
sql_logger.propagate = False # Do not pass records to the root logger
|
|
57
|
+
|
|
58
|
+
log_queue = queue.Queue() # type:ignore
|
|
59
|
+
queue_handler = logging.handlers.QueueHandler(log_queue)
|
|
60
|
+
phoenix_logger.addHandler(queue_handler)
|
|
61
|
+
sql_logger.addHandler(queue_handler)
|
|
62
|
+
|
|
63
|
+
fmt_keys = {
|
|
64
|
+
"level": "levelname",
|
|
65
|
+
"message": "message",
|
|
66
|
+
"timestamp": "timestamp",
|
|
67
|
+
"logger": "name",
|
|
68
|
+
"module": "module",
|
|
69
|
+
"function": "funcName",
|
|
70
|
+
"line": "lineno",
|
|
71
|
+
"thread_name": "threadName",
|
|
72
|
+
}
|
|
73
|
+
formatter = PhoenixJSONFormatter(fmt_keys=fmt_keys)
|
|
74
|
+
|
|
75
|
+
# stdout handler
|
|
76
|
+
stdout_handler = logging.StreamHandler(stdout)
|
|
77
|
+
stdout_handler.setFormatter(formatter)
|
|
78
|
+
stdout_handler.setLevel(Settings.logging_level)
|
|
79
|
+
stdout_handler.addFilter(NonErrorFilter())
|
|
80
|
+
|
|
81
|
+
# stderr handler
|
|
82
|
+
stderr_handler = logging.StreamHandler(stderr)
|
|
83
|
+
stderr_handler.setFormatter(formatter)
|
|
84
|
+
stderr_handler.setLevel(logging.WARNING)
|
|
85
|
+
|
|
86
|
+
queue_listener = logging.handlers.QueueListener(log_queue, stdout_handler, stderr_handler)
|
|
87
|
+
if queue_listener is not None:
|
|
88
|
+
queue_listener.start()
|
|
89
|
+
atexit.register(queue_listener.stop)
|
|
90
|
+
phoenix_logger.info("Structured logging ready")
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import datetime as dt
|
|
2
|
+
import json
|
|
3
|
+
import logging
|
|
4
|
+
from typing import Dict, Optional
|
|
5
|
+
|
|
6
|
+
LOG_RECORD_BUILTIN_ATTRS = {
|
|
7
|
+
"args",
|
|
8
|
+
"asctime",
|
|
9
|
+
"created",
|
|
10
|
+
"exc_info",
|
|
11
|
+
"exc_text",
|
|
12
|
+
"filename",
|
|
13
|
+
"funcName",
|
|
14
|
+
"levelname",
|
|
15
|
+
"levelno",
|
|
16
|
+
"lineno",
|
|
17
|
+
"module",
|
|
18
|
+
"msecs",
|
|
19
|
+
"message",
|
|
20
|
+
"msg",
|
|
21
|
+
"name",
|
|
22
|
+
"pathname",
|
|
23
|
+
"process",
|
|
24
|
+
"processName",
|
|
25
|
+
"relativeCreated",
|
|
26
|
+
"stack_info",
|
|
27
|
+
"thread",
|
|
28
|
+
"threadName",
|
|
29
|
+
"taskName",
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class PhoenixJSONFormatter(logging.Formatter):
|
|
34
|
+
def __init__(
|
|
35
|
+
self,
|
|
36
|
+
*,
|
|
37
|
+
fmt_keys: Optional[Dict[str, str]] = None,
|
|
38
|
+
):
|
|
39
|
+
super().__init__()
|
|
40
|
+
self.fmt_keys = fmt_keys if fmt_keys is not None else {}
|
|
41
|
+
|
|
42
|
+
def format(self, record: logging.LogRecord) -> str:
|
|
43
|
+
message = self._prepare_log_dict(record)
|
|
44
|
+
return json.dumps(message, default=str)
|
|
45
|
+
|
|
46
|
+
def _prepare_log_dict(self, record: logging.LogRecord) -> Dict[str, str]:
|
|
47
|
+
always_fields = {
|
|
48
|
+
"message": record.getMessage(),
|
|
49
|
+
"timestamp": dt.datetime.fromtimestamp(record.created, tz=dt.timezone.utc).isoformat(),
|
|
50
|
+
}
|
|
51
|
+
if record.exc_info is not None:
|
|
52
|
+
always_fields["exc_info"] = self.formatException(record.exc_info)
|
|
53
|
+
|
|
54
|
+
if record.stack_info is not None:
|
|
55
|
+
always_fields["stack_info"] = self.formatStack(record.stack_info)
|
|
56
|
+
|
|
57
|
+
message = {
|
|
58
|
+
key: msg_val
|
|
59
|
+
if (msg_val := always_fields.pop(val, None)) is not None
|
|
60
|
+
else getattr(record, val)
|
|
61
|
+
for key, val in self.fmt_keys.items()
|
|
62
|
+
}
|
|
63
|
+
message.update(always_fields)
|
|
64
|
+
|
|
65
|
+
for key, val in record.__dict__.items():
|
|
66
|
+
if key not in LOG_RECORD_BUILTIN_ATTRS:
|
|
67
|
+
message[key] = val
|
|
68
|
+
|
|
69
|
+
return message
|
|
@@ -118,8 +118,6 @@ if TYPE_CHECKING:
|
|
|
118
118
|
from opentelemetry.trace import TracerProvider
|
|
119
119
|
|
|
120
120
|
logger = logging.getLogger(__name__)
|
|
121
|
-
logger.setLevel(logging.INFO)
|
|
122
|
-
logger.addHandler(logging.NullHandler())
|
|
123
121
|
|
|
124
122
|
router = APIRouter(include_in_schema=False)
|
|
125
123
|
|
|
@@ -542,7 +540,7 @@ def create_engine_and_run_migrations(
|
|
|
542
540
|
database_url: str,
|
|
543
541
|
) -> AsyncEngine:
|
|
544
542
|
try:
|
|
545
|
-
return create_engine(database_url)
|
|
543
|
+
return create_engine(connection_str=database_url, migrate=True, log_to_stdout=False)
|
|
546
544
|
except PhoenixMigrationError as e:
|
|
547
545
|
msg = (
|
|
548
546
|
"\n\n⚠️⚠️ Phoenix failed to migrate the database to the latest version. ⚠️⚠️\n\n"
|
|
@@ -604,6 +602,7 @@ def create_app(
|
|
|
604
602
|
secret: Optional[str] = None,
|
|
605
603
|
scaffolder_config: Optional[ScaffolderConfig] = None,
|
|
606
604
|
) -> FastAPI:
|
|
605
|
+
logger.info(f"Server umap params: {umap_params}")
|
|
607
606
|
startup_callbacks_list: List[_Callback] = list(startup_callbacks)
|
|
608
607
|
shutdown_callbacks_list: List[_Callback] = list(shutdown_callbacks)
|
|
609
608
|
initial_batch_of_spans: Iterable[Tuple[Span, str]] = (
|