genesis-flow 1.0.0__py3-none-any.whl
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.
- genesis_flow-1.0.0.dist-info/METADATA +822 -0
- genesis_flow-1.0.0.dist-info/RECORD +645 -0
- genesis_flow-1.0.0.dist-info/WHEEL +5 -0
- genesis_flow-1.0.0.dist-info/entry_points.txt +19 -0
- genesis_flow-1.0.0.dist-info/licenses/LICENSE.txt +202 -0
- genesis_flow-1.0.0.dist-info/top_level.txt +1 -0
- mlflow/__init__.py +367 -0
- mlflow/__main__.py +3 -0
- mlflow/ag2/__init__.py +56 -0
- mlflow/ag2/ag2_logger.py +294 -0
- mlflow/anthropic/__init__.py +40 -0
- mlflow/anthropic/autolog.py +129 -0
- mlflow/anthropic/chat.py +144 -0
- mlflow/artifacts/__init__.py +268 -0
- mlflow/autogen/__init__.py +144 -0
- mlflow/autogen/chat.py +142 -0
- mlflow/azure/__init__.py +26 -0
- mlflow/azure/auth_handler.py +257 -0
- mlflow/azure/client.py +319 -0
- mlflow/azure/config.py +120 -0
- mlflow/azure/connection_factory.py +340 -0
- mlflow/azure/exceptions.py +27 -0
- mlflow/azure/stores.py +327 -0
- mlflow/azure/utils.py +183 -0
- mlflow/bedrock/__init__.py +45 -0
- mlflow/bedrock/_autolog.py +202 -0
- mlflow/bedrock/chat.py +122 -0
- mlflow/bedrock/stream.py +160 -0
- mlflow/bedrock/utils.py +43 -0
- mlflow/cli.py +707 -0
- mlflow/client.py +12 -0
- mlflow/config/__init__.py +56 -0
- mlflow/crewai/__init__.py +79 -0
- mlflow/crewai/autolog.py +253 -0
- mlflow/crewai/chat.py +29 -0
- mlflow/data/__init__.py +75 -0
- mlflow/data/artifact_dataset_sources.py +170 -0
- mlflow/data/code_dataset_source.py +40 -0
- mlflow/data/dataset.py +123 -0
- mlflow/data/dataset_registry.py +168 -0
- mlflow/data/dataset_source.py +110 -0
- mlflow/data/dataset_source_registry.py +219 -0
- mlflow/data/delta_dataset_source.py +167 -0
- mlflow/data/digest_utils.py +108 -0
- mlflow/data/evaluation_dataset.py +562 -0
- mlflow/data/filesystem_dataset_source.py +81 -0
- mlflow/data/http_dataset_source.py +145 -0
- mlflow/data/huggingface_dataset.py +258 -0
- mlflow/data/huggingface_dataset_source.py +118 -0
- mlflow/data/meta_dataset.py +104 -0
- mlflow/data/numpy_dataset.py +223 -0
- mlflow/data/pandas_dataset.py +231 -0
- mlflow/data/polars_dataset.py +352 -0
- mlflow/data/pyfunc_dataset_mixin.py +31 -0
- mlflow/data/schema.py +76 -0
- mlflow/data/sources.py +1 -0
- mlflow/data/spark_dataset.py +406 -0
- mlflow/data/spark_dataset_source.py +74 -0
- mlflow/data/spark_delta_utils.py +118 -0
- mlflow/data/tensorflow_dataset.py +350 -0
- mlflow/data/uc_volume_dataset_source.py +81 -0
- mlflow/db.py +27 -0
- mlflow/dspy/__init__.py +17 -0
- mlflow/dspy/autolog.py +197 -0
- mlflow/dspy/callback.py +398 -0
- mlflow/dspy/constant.py +1 -0
- mlflow/dspy/load.py +93 -0
- mlflow/dspy/save.py +393 -0
- mlflow/dspy/util.py +109 -0
- mlflow/dspy/wrapper.py +226 -0
- mlflow/entities/__init__.py +104 -0
- mlflow/entities/_mlflow_object.py +52 -0
- mlflow/entities/assessment.py +545 -0
- mlflow/entities/assessment_error.py +80 -0
- mlflow/entities/assessment_source.py +141 -0
- mlflow/entities/dataset.py +92 -0
- mlflow/entities/dataset_input.py +51 -0
- mlflow/entities/dataset_summary.py +62 -0
- mlflow/entities/document.py +48 -0
- mlflow/entities/experiment.py +109 -0
- mlflow/entities/experiment_tag.py +35 -0
- mlflow/entities/file_info.py +45 -0
- mlflow/entities/input_tag.py +35 -0
- mlflow/entities/lifecycle_stage.py +35 -0
- mlflow/entities/logged_model.py +228 -0
- mlflow/entities/logged_model_input.py +26 -0
- mlflow/entities/logged_model_output.py +32 -0
- mlflow/entities/logged_model_parameter.py +46 -0
- mlflow/entities/logged_model_status.py +74 -0
- mlflow/entities/logged_model_tag.py +33 -0
- mlflow/entities/metric.py +200 -0
- mlflow/entities/model_registry/__init__.py +29 -0
- mlflow/entities/model_registry/_model_registry_entity.py +13 -0
- mlflow/entities/model_registry/model_version.py +243 -0
- mlflow/entities/model_registry/model_version_deployment_job_run_state.py +44 -0
- mlflow/entities/model_registry/model_version_deployment_job_state.py +70 -0
- mlflow/entities/model_registry/model_version_search.py +25 -0
- mlflow/entities/model_registry/model_version_stages.py +25 -0
- mlflow/entities/model_registry/model_version_status.py +35 -0
- mlflow/entities/model_registry/model_version_tag.py +35 -0
- mlflow/entities/model_registry/prompt.py +73 -0
- mlflow/entities/model_registry/prompt_version.py +244 -0
- mlflow/entities/model_registry/registered_model.py +175 -0
- mlflow/entities/model_registry/registered_model_alias.py +35 -0
- mlflow/entities/model_registry/registered_model_deployment_job_state.py +39 -0
- mlflow/entities/model_registry/registered_model_search.py +25 -0
- mlflow/entities/model_registry/registered_model_tag.py +35 -0
- mlflow/entities/multipart_upload.py +74 -0
- mlflow/entities/param.py +49 -0
- mlflow/entities/run.py +97 -0
- mlflow/entities/run_data.py +84 -0
- mlflow/entities/run_info.py +188 -0
- mlflow/entities/run_inputs.py +59 -0
- mlflow/entities/run_outputs.py +43 -0
- mlflow/entities/run_status.py +41 -0
- mlflow/entities/run_tag.py +36 -0
- mlflow/entities/source_type.py +31 -0
- mlflow/entities/span.py +774 -0
- mlflow/entities/span_event.py +96 -0
- mlflow/entities/span_status.py +102 -0
- mlflow/entities/trace.py +317 -0
- mlflow/entities/trace_data.py +71 -0
- mlflow/entities/trace_info.py +220 -0
- mlflow/entities/trace_info_v2.py +162 -0
- mlflow/entities/trace_location.py +173 -0
- mlflow/entities/trace_state.py +39 -0
- mlflow/entities/trace_status.py +68 -0
- mlflow/entities/view_type.py +51 -0
- mlflow/environment_variables.py +866 -0
- mlflow/evaluation/__init__.py +16 -0
- mlflow/evaluation/assessment.py +369 -0
- mlflow/evaluation/evaluation.py +411 -0
- mlflow/evaluation/evaluation_tag.py +61 -0
- mlflow/evaluation/fluent.py +48 -0
- mlflow/evaluation/utils.py +201 -0
- mlflow/exceptions.py +213 -0
- mlflow/experiments.py +140 -0
- mlflow/gemini/__init__.py +81 -0
- mlflow/gemini/autolog.py +186 -0
- mlflow/gemini/chat.py +261 -0
- mlflow/genai/__init__.py +71 -0
- mlflow/genai/datasets/__init__.py +67 -0
- mlflow/genai/datasets/evaluation_dataset.py +131 -0
- mlflow/genai/evaluation/__init__.py +3 -0
- mlflow/genai/evaluation/base.py +411 -0
- mlflow/genai/evaluation/constant.py +23 -0
- mlflow/genai/evaluation/utils.py +244 -0
- mlflow/genai/judges/__init__.py +21 -0
- mlflow/genai/judges/databricks.py +404 -0
- mlflow/genai/label_schemas/__init__.py +153 -0
- mlflow/genai/label_schemas/label_schemas.py +209 -0
- mlflow/genai/labeling/__init__.py +159 -0
- mlflow/genai/labeling/labeling.py +250 -0
- mlflow/genai/optimize/__init__.py +13 -0
- mlflow/genai/optimize/base.py +198 -0
- mlflow/genai/optimize/optimizers/__init__.py +4 -0
- mlflow/genai/optimize/optimizers/base_optimizer.py +38 -0
- mlflow/genai/optimize/optimizers/dspy_mipro_optimizer.py +221 -0
- mlflow/genai/optimize/optimizers/dspy_optimizer.py +91 -0
- mlflow/genai/optimize/optimizers/utils/dspy_mipro_callback.py +76 -0
- mlflow/genai/optimize/optimizers/utils/dspy_mipro_utils.py +18 -0
- mlflow/genai/optimize/types.py +75 -0
- mlflow/genai/optimize/util.py +30 -0
- mlflow/genai/prompts/__init__.py +206 -0
- mlflow/genai/scheduled_scorers.py +431 -0
- mlflow/genai/scorers/__init__.py +26 -0
- mlflow/genai/scorers/base.py +492 -0
- mlflow/genai/scorers/builtin_scorers.py +765 -0
- mlflow/genai/scorers/scorer_utils.py +138 -0
- mlflow/genai/scorers/validation.py +165 -0
- mlflow/genai/utils/data_validation.py +146 -0
- mlflow/genai/utils/enum_utils.py +23 -0
- mlflow/genai/utils/trace_utils.py +211 -0
- mlflow/groq/__init__.py +42 -0
- mlflow/groq/_groq_autolog.py +74 -0
- mlflow/johnsnowlabs/__init__.py +888 -0
- mlflow/langchain/__init__.py +24 -0
- mlflow/langchain/api_request_parallel_processor.py +330 -0
- mlflow/langchain/autolog.py +147 -0
- mlflow/langchain/chat_agent_langgraph.py +340 -0
- mlflow/langchain/constant.py +1 -0
- mlflow/langchain/constants.py +1 -0
- mlflow/langchain/databricks_dependencies.py +444 -0
- mlflow/langchain/langchain_tracer.py +597 -0
- mlflow/langchain/model.py +919 -0
- mlflow/langchain/output_parsers.py +142 -0
- mlflow/langchain/retriever_chain.py +153 -0
- mlflow/langchain/runnables.py +527 -0
- mlflow/langchain/utils/chat.py +402 -0
- mlflow/langchain/utils/logging.py +671 -0
- mlflow/langchain/utils/serialization.py +36 -0
- mlflow/legacy_databricks_cli/__init__.py +0 -0
- mlflow/legacy_databricks_cli/configure/__init__.py +0 -0
- mlflow/legacy_databricks_cli/configure/provider.py +482 -0
- mlflow/litellm/__init__.py +175 -0
- mlflow/llama_index/__init__.py +22 -0
- mlflow/llama_index/autolog.py +55 -0
- mlflow/llama_index/chat.py +43 -0
- mlflow/llama_index/constant.py +1 -0
- mlflow/llama_index/model.py +577 -0
- mlflow/llama_index/pyfunc_wrapper.py +332 -0
- mlflow/llama_index/serialize_objects.py +188 -0
- mlflow/llama_index/tracer.py +561 -0
- mlflow/metrics/__init__.py +479 -0
- mlflow/metrics/base.py +39 -0
- mlflow/metrics/genai/__init__.py +25 -0
- mlflow/metrics/genai/base.py +101 -0
- mlflow/metrics/genai/genai_metric.py +771 -0
- mlflow/metrics/genai/metric_definitions.py +450 -0
- mlflow/metrics/genai/model_utils.py +371 -0
- mlflow/metrics/genai/prompt_template.py +68 -0
- mlflow/metrics/genai/prompts/__init__.py +0 -0
- mlflow/metrics/genai/prompts/v1.py +422 -0
- mlflow/metrics/genai/utils.py +6 -0
- mlflow/metrics/metric_definitions.py +619 -0
- mlflow/mismatch.py +34 -0
- mlflow/mistral/__init__.py +34 -0
- mlflow/mistral/autolog.py +71 -0
- mlflow/mistral/chat.py +135 -0
- mlflow/ml_package_versions.py +452 -0
- mlflow/models/__init__.py +97 -0
- mlflow/models/auth_policy.py +83 -0
- mlflow/models/cli.py +354 -0
- mlflow/models/container/__init__.py +294 -0
- mlflow/models/container/scoring_server/__init__.py +0 -0
- mlflow/models/container/scoring_server/nginx.conf +39 -0
- mlflow/models/dependencies_schemas.py +287 -0
- mlflow/models/display_utils.py +158 -0
- mlflow/models/docker_utils.py +211 -0
- mlflow/models/evaluation/__init__.py +23 -0
- mlflow/models/evaluation/_shap_patch.py +64 -0
- mlflow/models/evaluation/artifacts.py +194 -0
- mlflow/models/evaluation/base.py +1811 -0
- mlflow/models/evaluation/calibration_curve.py +109 -0
- mlflow/models/evaluation/default_evaluator.py +996 -0
- mlflow/models/evaluation/deprecated.py +23 -0
- mlflow/models/evaluation/evaluator_registry.py +80 -0
- mlflow/models/evaluation/evaluators/classifier.py +704 -0
- mlflow/models/evaluation/evaluators/default.py +233 -0
- mlflow/models/evaluation/evaluators/regressor.py +96 -0
- mlflow/models/evaluation/evaluators/shap.py +296 -0
- mlflow/models/evaluation/lift_curve.py +178 -0
- mlflow/models/evaluation/utils/metric.py +123 -0
- mlflow/models/evaluation/utils/trace.py +179 -0
- mlflow/models/evaluation/validation.py +434 -0
- mlflow/models/flavor_backend.py +93 -0
- mlflow/models/flavor_backend_registry.py +53 -0
- mlflow/models/model.py +1639 -0
- mlflow/models/model_config.py +150 -0
- mlflow/models/notebook_resources/agent_evaluation_template.html +235 -0
- mlflow/models/notebook_resources/eval_with_dataset_example.py +22 -0
- mlflow/models/notebook_resources/eval_with_synthetic_example.py +22 -0
- mlflow/models/python_api.py +369 -0
- mlflow/models/rag_signatures.py +128 -0
- mlflow/models/resources.py +321 -0
- mlflow/models/signature.py +662 -0
- mlflow/models/utils.py +2054 -0
- mlflow/models/wheeled_model.py +280 -0
- mlflow/openai/__init__.py +57 -0
- mlflow/openai/_agent_tracer.py +364 -0
- mlflow/openai/api_request_parallel_processor.py +131 -0
- mlflow/openai/autolog.py +509 -0
- mlflow/openai/constant.py +1 -0
- mlflow/openai/model.py +824 -0
- mlflow/openai/utils/chat_schema.py +367 -0
- mlflow/optuna/__init__.py +3 -0
- mlflow/optuna/storage.py +646 -0
- mlflow/plugins/__init__.py +72 -0
- mlflow/plugins/base.py +358 -0
- mlflow/plugins/builtin/__init__.py +24 -0
- mlflow/plugins/builtin/pytorch_plugin.py +150 -0
- mlflow/plugins/builtin/sklearn_plugin.py +158 -0
- mlflow/plugins/builtin/transformers_plugin.py +187 -0
- mlflow/plugins/cli.py +321 -0
- mlflow/plugins/discovery.py +340 -0
- mlflow/plugins/manager.py +465 -0
- mlflow/plugins/registry.py +316 -0
- mlflow/plugins/templates/framework_plugin_template.py +329 -0
- mlflow/prompt/constants.py +20 -0
- mlflow/prompt/promptlab_model.py +197 -0
- mlflow/prompt/registry_utils.py +248 -0
- mlflow/promptflow/__init__.py +495 -0
- mlflow/protos/__init__.py +0 -0
- mlflow/protos/assessments_pb2.py +174 -0
- mlflow/protos/databricks_artifacts_pb2.py +489 -0
- mlflow/protos/databricks_filesystem_service_pb2.py +196 -0
- mlflow/protos/databricks_managed_catalog_messages_pb2.py +95 -0
- mlflow/protos/databricks_managed_catalog_service_pb2.py +86 -0
- mlflow/protos/databricks_pb2.py +267 -0
- mlflow/protos/databricks_trace_server_pb2.py +374 -0
- mlflow/protos/databricks_uc_registry_messages_pb2.py +1249 -0
- mlflow/protos/databricks_uc_registry_service_pb2.py +170 -0
- mlflow/protos/facet_feature_statistics_pb2.py +296 -0
- mlflow/protos/internal_pb2.py +77 -0
- mlflow/protos/mlflow_artifacts_pb2.py +336 -0
- mlflow/protos/model_registry_pb2.py +1073 -0
- mlflow/protos/scalapb/__init__.py +0 -0
- mlflow/protos/scalapb/scalapb_pb2.py +104 -0
- mlflow/protos/service_pb2.py +2600 -0
- mlflow/protos/unity_catalog_oss_messages_pb2.py +457 -0
- mlflow/protos/unity_catalog_oss_service_pb2.py +130 -0
- mlflow/protos/unity_catalog_prompt_messages_pb2.py +447 -0
- mlflow/protos/unity_catalog_prompt_messages_pb2_grpc.py +24 -0
- mlflow/protos/unity_catalog_prompt_service_pb2.py +164 -0
- mlflow/protos/unity_catalog_prompt_service_pb2_grpc.py +785 -0
- mlflow/py.typed +0 -0
- mlflow/pydantic_ai/__init__.py +57 -0
- mlflow/pydantic_ai/autolog.py +173 -0
- mlflow/pyfunc/__init__.py +3844 -0
- mlflow/pyfunc/_mlflow_pyfunc_backend_predict.py +61 -0
- mlflow/pyfunc/backend.py +523 -0
- mlflow/pyfunc/context.py +78 -0
- mlflow/pyfunc/dbconnect_artifact_cache.py +144 -0
- mlflow/pyfunc/loaders/__init__.py +7 -0
- mlflow/pyfunc/loaders/chat_agent.py +117 -0
- mlflow/pyfunc/loaders/chat_model.py +125 -0
- mlflow/pyfunc/loaders/code_model.py +31 -0
- mlflow/pyfunc/loaders/responses_agent.py +112 -0
- mlflow/pyfunc/mlserver.py +46 -0
- mlflow/pyfunc/model.py +1473 -0
- mlflow/pyfunc/scoring_server/__init__.py +604 -0
- mlflow/pyfunc/scoring_server/app.py +7 -0
- mlflow/pyfunc/scoring_server/client.py +146 -0
- mlflow/pyfunc/spark_model_cache.py +48 -0
- mlflow/pyfunc/stdin_server.py +44 -0
- mlflow/pyfunc/utils/__init__.py +3 -0
- mlflow/pyfunc/utils/data_validation.py +224 -0
- mlflow/pyfunc/utils/environment.py +22 -0
- mlflow/pyfunc/utils/input_converter.py +47 -0
- mlflow/pyfunc/utils/serving_data_parser.py +11 -0
- mlflow/pytorch/__init__.py +1171 -0
- mlflow/pytorch/_lightning_autolog.py +580 -0
- mlflow/pytorch/_pytorch_autolog.py +50 -0
- mlflow/pytorch/pickle_module.py +35 -0
- mlflow/rfunc/__init__.py +42 -0
- mlflow/rfunc/backend.py +134 -0
- mlflow/runs.py +89 -0
- mlflow/server/__init__.py +302 -0
- mlflow/server/auth/__init__.py +1224 -0
- mlflow/server/auth/__main__.py +4 -0
- mlflow/server/auth/basic_auth.ini +6 -0
- mlflow/server/auth/cli.py +11 -0
- mlflow/server/auth/client.py +537 -0
- mlflow/server/auth/config.py +34 -0
- mlflow/server/auth/db/__init__.py +0 -0
- mlflow/server/auth/db/cli.py +18 -0
- mlflow/server/auth/db/migrations/__init__.py +0 -0
- mlflow/server/auth/db/migrations/alembic.ini +110 -0
- mlflow/server/auth/db/migrations/env.py +76 -0
- mlflow/server/auth/db/migrations/versions/8606fa83a998_initial_migration.py +51 -0
- mlflow/server/auth/db/migrations/versions/__init__.py +0 -0
- mlflow/server/auth/db/models.py +67 -0
- mlflow/server/auth/db/utils.py +37 -0
- mlflow/server/auth/entities.py +165 -0
- mlflow/server/auth/logo.py +14 -0
- mlflow/server/auth/permissions.py +65 -0
- mlflow/server/auth/routes.py +18 -0
- mlflow/server/auth/sqlalchemy_store.py +263 -0
- mlflow/server/graphql/__init__.py +0 -0
- mlflow/server/graphql/autogenerated_graphql_schema.py +353 -0
- mlflow/server/graphql/graphql_custom_scalars.py +24 -0
- mlflow/server/graphql/graphql_errors.py +15 -0
- mlflow/server/graphql/graphql_no_batching.py +89 -0
- mlflow/server/graphql/graphql_schema_extensions.py +74 -0
- mlflow/server/handlers.py +3217 -0
- mlflow/server/prometheus_exporter.py +17 -0
- mlflow/server/validation.py +30 -0
- mlflow/shap/__init__.py +691 -0
- mlflow/sklearn/__init__.py +1994 -0
- mlflow/sklearn/utils.py +1041 -0
- mlflow/smolagents/__init__.py +66 -0
- mlflow/smolagents/autolog.py +139 -0
- mlflow/smolagents/chat.py +29 -0
- mlflow/store/__init__.py +10 -0
- mlflow/store/_unity_catalog/__init__.py +1 -0
- mlflow/store/_unity_catalog/lineage/__init__.py +1 -0
- mlflow/store/_unity_catalog/lineage/constants.py +2 -0
- mlflow/store/_unity_catalog/registry/__init__.py +6 -0
- mlflow/store/_unity_catalog/registry/prompt_info.py +75 -0
- mlflow/store/_unity_catalog/registry/rest_store.py +1740 -0
- mlflow/store/_unity_catalog/registry/uc_oss_rest_store.py +507 -0
- mlflow/store/_unity_catalog/registry/utils.py +121 -0
- mlflow/store/artifact/__init__.py +0 -0
- mlflow/store/artifact/artifact_repo.py +472 -0
- mlflow/store/artifact/artifact_repository_registry.py +154 -0
- mlflow/store/artifact/azure_blob_artifact_repo.py +275 -0
- mlflow/store/artifact/azure_data_lake_artifact_repo.py +295 -0
- mlflow/store/artifact/cli.py +141 -0
- mlflow/store/artifact/cloud_artifact_repo.py +332 -0
- mlflow/store/artifact/databricks_artifact_repo.py +729 -0
- mlflow/store/artifact/databricks_artifact_repo_resources.py +301 -0
- mlflow/store/artifact/databricks_logged_model_artifact_repo.py +93 -0
- mlflow/store/artifact/databricks_models_artifact_repo.py +216 -0
- mlflow/store/artifact/databricks_sdk_artifact_repo.py +134 -0
- mlflow/store/artifact/databricks_sdk_models_artifact_repo.py +97 -0
- mlflow/store/artifact/dbfs_artifact_repo.py +240 -0
- mlflow/store/artifact/ftp_artifact_repo.py +132 -0
- mlflow/store/artifact/gcs_artifact_repo.py +296 -0
- mlflow/store/artifact/hdfs_artifact_repo.py +209 -0
- mlflow/store/artifact/http_artifact_repo.py +218 -0
- mlflow/store/artifact/local_artifact_repo.py +142 -0
- mlflow/store/artifact/mlflow_artifacts_repo.py +94 -0
- mlflow/store/artifact/models_artifact_repo.py +259 -0
- mlflow/store/artifact/optimized_s3_artifact_repo.py +356 -0
- mlflow/store/artifact/presigned_url_artifact_repo.py +173 -0
- mlflow/store/artifact/r2_artifact_repo.py +70 -0
- mlflow/store/artifact/runs_artifact_repo.py +265 -0
- mlflow/store/artifact/s3_artifact_repo.py +330 -0
- mlflow/store/artifact/sftp_artifact_repo.py +141 -0
- mlflow/store/artifact/uc_volume_artifact_repo.py +76 -0
- mlflow/store/artifact/unity_catalog_models_artifact_repo.py +168 -0
- mlflow/store/artifact/unity_catalog_oss_models_artifact_repo.py +168 -0
- mlflow/store/artifact/utils/__init__.py +0 -0
- mlflow/store/artifact/utils/models.py +148 -0
- mlflow/store/db/__init__.py +0 -0
- mlflow/store/db/base_sql_model.py +3 -0
- mlflow/store/db/db_types.py +10 -0
- mlflow/store/db/utils.py +314 -0
- mlflow/store/db_migrations/__init__.py +0 -0
- mlflow/store/db_migrations/alembic.ini +74 -0
- mlflow/store/db_migrations/env.py +84 -0
- mlflow/store/db_migrations/versions/0584bdc529eb_add_cascading_deletion_to_datasets_from_experiments.py +88 -0
- mlflow/store/db_migrations/versions/0a8213491aaa_drop_duplicate_killed_constraint.py +49 -0
- mlflow/store/db_migrations/versions/0c779009ac13_add_deleted_time_field_to_runs_table.py +24 -0
- mlflow/store/db_migrations/versions/181f10493468_allow_nulls_for_metric_values.py +35 -0
- mlflow/store/db_migrations/versions/27a6a02d2cf1_add_model_version_tags_table.py +38 -0
- mlflow/store/db_migrations/versions/2b4d017a5e9b_add_model_registry_tables_to_db.py +77 -0
- mlflow/store/db_migrations/versions/2d6e25af4d3e_increase_max_param_val_length.py +33 -0
- mlflow/store/db_migrations/versions/3500859a5d39_add_model_aliases_table.py +50 -0
- mlflow/store/db_migrations/versions/39d1c3be5f05_add_is_nan_constraint_for_metrics_tables_if_necessary.py +41 -0
- mlflow/store/db_migrations/versions/400f98739977_add_logged_model_tables.py +123 -0
- mlflow/store/db_migrations/versions/4465047574b1_increase_max_dataset_schema_size.py +38 -0
- mlflow/store/db_migrations/versions/451aebb31d03_add_metric_step.py +35 -0
- mlflow/store/db_migrations/versions/5b0e9adcef9c_add_cascade_deletion_to_trace_tables_fk.py +40 -0
- mlflow/store/db_migrations/versions/6953534de441_add_step_to_inputs_table.py +25 -0
- mlflow/store/db_migrations/versions/728d730b5ebd_add_registered_model_tags_table.py +38 -0
- mlflow/store/db_migrations/versions/7ac759974ad8_update_run_tags_with_larger_limit.py +36 -0
- mlflow/store/db_migrations/versions/7f2a7d5fae7d_add_datasets_inputs_input_tags_tables.py +82 -0
- mlflow/store/db_migrations/versions/84291f40a231_add_run_link_to_model_version.py +26 -0
- mlflow/store/db_migrations/versions/867495a8f9d4_add_trace_tables.py +90 -0
- mlflow/store/db_migrations/versions/89d4b8295536_create_latest_metrics_table.py +169 -0
- mlflow/store/db_migrations/versions/90e64c465722_migrate_user_column_to_tags.py +64 -0
- mlflow/store/db_migrations/versions/97727af70f4d_creation_time_last_update_time_experiments.py +25 -0
- mlflow/store/db_migrations/versions/__init__.py +0 -0
- mlflow/store/db_migrations/versions/a8c4a736bde6_allow_nulls_for_run_id.py +27 -0
- mlflow/store/db_migrations/versions/acf3f17fdcc7_add_storage_location_field_to_model_.py +29 -0
- mlflow/store/db_migrations/versions/bd07f7e963c5_create_index_on_run_uuid.py +26 -0
- mlflow/store/db_migrations/versions/bda7b8c39065_increase_model_version_tag_value_limit.py +38 -0
- mlflow/store/db_migrations/versions/c48cb773bb87_reset_default_value_for_is_nan_in_metrics_table_for_mysql.py +41 -0
- mlflow/store/db_migrations/versions/cbc13b556ace_add_v3_trace_schema_columns.py +31 -0
- mlflow/store/db_migrations/versions/cc1f77228345_change_param_value_length_to_500.py +34 -0
- mlflow/store/db_migrations/versions/cfd24bdc0731_update_run_status_constraint_with_killed.py +78 -0
- mlflow/store/db_migrations/versions/df50e92ffc5e_add_experiment_tags_table.py +38 -0
- mlflow/store/db_migrations/versions/f5a4f2784254_increase_run_tag_value_limit.py +36 -0
- mlflow/store/entities/__init__.py +3 -0
- mlflow/store/entities/paged_list.py +18 -0
- mlflow/store/model_registry/__init__.py +10 -0
- mlflow/store/model_registry/abstract_store.py +1081 -0
- mlflow/store/model_registry/base_rest_store.py +44 -0
- mlflow/store/model_registry/databricks_workspace_model_registry_rest_store.py +37 -0
- mlflow/store/model_registry/dbmodels/__init__.py +0 -0
- mlflow/store/model_registry/dbmodels/models.py +206 -0
- mlflow/store/model_registry/file_store.py +1091 -0
- mlflow/store/model_registry/rest_store.py +481 -0
- mlflow/store/model_registry/sqlalchemy_store.py +1286 -0
- mlflow/store/tracking/__init__.py +23 -0
- mlflow/store/tracking/abstract_store.py +816 -0
- mlflow/store/tracking/dbmodels/__init__.py +0 -0
- mlflow/store/tracking/dbmodels/initial_models.py +243 -0
- mlflow/store/tracking/dbmodels/models.py +1073 -0
- mlflow/store/tracking/file_store.py +2438 -0
- mlflow/store/tracking/postgres_managed_identity.py +146 -0
- mlflow/store/tracking/rest_store.py +1131 -0
- mlflow/store/tracking/sqlalchemy_store.py +2785 -0
- mlflow/system_metrics/__init__.py +61 -0
- mlflow/system_metrics/metrics/__init__.py +0 -0
- mlflow/system_metrics/metrics/base_metrics_monitor.py +32 -0
- mlflow/system_metrics/metrics/cpu_monitor.py +23 -0
- mlflow/system_metrics/metrics/disk_monitor.py +21 -0
- mlflow/system_metrics/metrics/gpu_monitor.py +71 -0
- mlflow/system_metrics/metrics/network_monitor.py +34 -0
- mlflow/system_metrics/metrics/rocm_monitor.py +123 -0
- mlflow/system_metrics/system_metrics_monitor.py +198 -0
- mlflow/tracing/__init__.py +16 -0
- mlflow/tracing/assessment.py +356 -0
- mlflow/tracing/client.py +531 -0
- mlflow/tracing/config.py +125 -0
- mlflow/tracing/constant.py +105 -0
- mlflow/tracing/destination.py +81 -0
- mlflow/tracing/display/__init__.py +40 -0
- mlflow/tracing/display/display_handler.py +196 -0
- mlflow/tracing/export/async_export_queue.py +186 -0
- mlflow/tracing/export/inference_table.py +138 -0
- mlflow/tracing/export/mlflow_v3.py +137 -0
- mlflow/tracing/export/utils.py +70 -0
- mlflow/tracing/fluent.py +1417 -0
- mlflow/tracing/processor/base_mlflow.py +199 -0
- mlflow/tracing/processor/inference_table.py +175 -0
- mlflow/tracing/processor/mlflow_v3.py +47 -0
- mlflow/tracing/processor/otel.py +73 -0
- mlflow/tracing/provider.py +487 -0
- mlflow/tracing/trace_manager.py +200 -0
- mlflow/tracing/utils/__init__.py +616 -0
- mlflow/tracing/utils/artifact_utils.py +28 -0
- mlflow/tracing/utils/copy.py +55 -0
- mlflow/tracing/utils/environment.py +55 -0
- mlflow/tracing/utils/exception.py +21 -0
- mlflow/tracing/utils/once.py +35 -0
- mlflow/tracing/utils/otlp.py +63 -0
- mlflow/tracing/utils/processor.py +54 -0
- mlflow/tracing/utils/search.py +292 -0
- mlflow/tracing/utils/timeout.py +250 -0
- mlflow/tracing/utils/token.py +19 -0
- mlflow/tracing/utils/truncation.py +124 -0
- mlflow/tracing/utils/warning.py +76 -0
- mlflow/tracking/__init__.py +39 -0
- mlflow/tracking/_model_registry/__init__.py +1 -0
- mlflow/tracking/_model_registry/client.py +764 -0
- mlflow/tracking/_model_registry/fluent.py +853 -0
- mlflow/tracking/_model_registry/registry.py +67 -0
- mlflow/tracking/_model_registry/utils.py +251 -0
- mlflow/tracking/_tracking_service/__init__.py +0 -0
- mlflow/tracking/_tracking_service/client.py +883 -0
- mlflow/tracking/_tracking_service/registry.py +56 -0
- mlflow/tracking/_tracking_service/utils.py +275 -0
- mlflow/tracking/artifact_utils.py +179 -0
- mlflow/tracking/client.py +5900 -0
- mlflow/tracking/context/__init__.py +0 -0
- mlflow/tracking/context/abstract_context.py +35 -0
- mlflow/tracking/context/databricks_cluster_context.py +15 -0
- mlflow/tracking/context/databricks_command_context.py +15 -0
- mlflow/tracking/context/databricks_job_context.py +49 -0
- mlflow/tracking/context/databricks_notebook_context.py +41 -0
- mlflow/tracking/context/databricks_repo_context.py +43 -0
- mlflow/tracking/context/default_context.py +51 -0
- mlflow/tracking/context/git_context.py +32 -0
- mlflow/tracking/context/registry.py +98 -0
- mlflow/tracking/context/system_environment_context.py +15 -0
- mlflow/tracking/default_experiment/__init__.py +1 -0
- mlflow/tracking/default_experiment/abstract_context.py +43 -0
- mlflow/tracking/default_experiment/databricks_notebook_experiment_provider.py +44 -0
- mlflow/tracking/default_experiment/registry.py +75 -0
- mlflow/tracking/fluent.py +3595 -0
- mlflow/tracking/metric_value_conversion_utils.py +93 -0
- mlflow/tracking/multimedia.py +206 -0
- mlflow/tracking/registry.py +86 -0
- mlflow/tracking/request_auth/__init__.py +0 -0
- mlflow/tracking/request_auth/abstract_request_auth_provider.py +34 -0
- mlflow/tracking/request_auth/registry.py +60 -0
- mlflow/tracking/request_header/__init__.py +0 -0
- mlflow/tracking/request_header/abstract_request_header_provider.py +36 -0
- mlflow/tracking/request_header/databricks_request_header_provider.py +38 -0
- mlflow/tracking/request_header/default_request_header_provider.py +17 -0
- mlflow/tracking/request_header/registry.py +79 -0
- mlflow/transformers/__init__.py +2982 -0
- mlflow/transformers/flavor_config.py +258 -0
- mlflow/transformers/hub_utils.py +83 -0
- mlflow/transformers/llm_inference_utils.py +468 -0
- mlflow/transformers/model_io.py +301 -0
- mlflow/transformers/peft.py +51 -0
- mlflow/transformers/signature.py +183 -0
- mlflow/transformers/torch_utils.py +55 -0
- mlflow/types/__init__.py +21 -0
- mlflow/types/agent.py +270 -0
- mlflow/types/chat.py +240 -0
- mlflow/types/llm.py +935 -0
- mlflow/types/responses.py +139 -0
- mlflow/types/responses_helpers.py +416 -0
- mlflow/types/schema.py +1505 -0
- mlflow/types/type_hints.py +647 -0
- mlflow/types/utils.py +753 -0
- mlflow/utils/__init__.py +283 -0
- mlflow/utils/_capture_modules.py +256 -0
- mlflow/utils/_capture_transformers_modules.py +75 -0
- mlflow/utils/_spark_utils.py +201 -0
- mlflow/utils/_unity_catalog_oss_utils.py +97 -0
- mlflow/utils/_unity_catalog_utils.py +479 -0
- mlflow/utils/annotations.py +218 -0
- mlflow/utils/arguments_utils.py +16 -0
- mlflow/utils/async_logging/__init__.py +1 -0
- mlflow/utils/async_logging/async_artifacts_logging_queue.py +258 -0
- mlflow/utils/async_logging/async_logging_queue.py +366 -0
- mlflow/utils/async_logging/run_artifact.py +38 -0
- mlflow/utils/async_logging/run_batch.py +58 -0
- mlflow/utils/async_logging/run_operations.py +49 -0
- mlflow/utils/autologging_utils/__init__.py +737 -0
- mlflow/utils/autologging_utils/client.py +432 -0
- mlflow/utils/autologging_utils/config.py +33 -0
- mlflow/utils/autologging_utils/events.py +294 -0
- mlflow/utils/autologging_utils/logging_and_warnings.py +328 -0
- mlflow/utils/autologging_utils/metrics_queue.py +71 -0
- mlflow/utils/autologging_utils/safety.py +1104 -0
- mlflow/utils/autologging_utils/versioning.py +95 -0
- mlflow/utils/checkpoint_utils.py +206 -0
- mlflow/utils/class_utils.py +6 -0
- mlflow/utils/cli_args.py +257 -0
- mlflow/utils/conda.py +354 -0
- mlflow/utils/credentials.py +231 -0
- mlflow/utils/data_utils.py +17 -0
- mlflow/utils/databricks_utils.py +1436 -0
- mlflow/utils/docstring_utils.py +477 -0
- mlflow/utils/doctor.py +133 -0
- mlflow/utils/download_cloud_file_chunk.py +43 -0
- mlflow/utils/env_manager.py +16 -0
- mlflow/utils/env_pack.py +131 -0
- mlflow/utils/environment.py +1009 -0
- mlflow/utils/exception_utils.py +14 -0
- mlflow/utils/file_utils.py +978 -0
- mlflow/utils/git_utils.py +77 -0
- mlflow/utils/gorilla.py +797 -0
- mlflow/utils/import_hooks/__init__.py +363 -0
- mlflow/utils/lazy_load.py +51 -0
- mlflow/utils/logging_utils.py +168 -0
- mlflow/utils/mime_type_utils.py +58 -0
- mlflow/utils/mlflow_tags.py +103 -0
- mlflow/utils/model_utils.py +486 -0
- mlflow/utils/name_utils.py +346 -0
- mlflow/utils/nfs_on_spark.py +62 -0
- mlflow/utils/openai_utils.py +164 -0
- mlflow/utils/os.py +12 -0
- mlflow/utils/oss_registry_utils.py +29 -0
- mlflow/utils/plugins.py +17 -0
- mlflow/utils/process.py +182 -0
- mlflow/utils/promptlab_utils.py +146 -0
- mlflow/utils/proto_json_utils.py +743 -0
- mlflow/utils/pydantic_utils.py +54 -0
- mlflow/utils/request_utils.py +279 -0
- mlflow/utils/requirements_utils.py +704 -0
- mlflow/utils/rest_utils.py +673 -0
- mlflow/utils/search_logged_model_utils.py +127 -0
- mlflow/utils/search_utils.py +2111 -0
- mlflow/utils/secure_loading.py +221 -0
- mlflow/utils/security_validation.py +384 -0
- mlflow/utils/server_cli_utils.py +61 -0
- mlflow/utils/spark_utils.py +15 -0
- mlflow/utils/string_utils.py +138 -0
- mlflow/utils/thread_utils.py +63 -0
- mlflow/utils/time.py +54 -0
- mlflow/utils/timeout.py +42 -0
- mlflow/utils/uri.py +572 -0
- mlflow/utils/validation.py +662 -0
- mlflow/utils/virtualenv.py +458 -0
- mlflow/utils/warnings_utils.py +25 -0
- mlflow/utils/yaml_utils.py +179 -0
- mlflow/version.py +24 -0
@@ -0,0 +1,411 @@
|
|
1
|
+
"""
|
2
|
+
THE 'mlflow.evaluation` MODULE IS LEGACY AND WILL BE REMOVED IN MLFLOW 3.0.
|
3
|
+
For assessment functionality, use `mlflow.entities.assessment` for assessment classes and
|
4
|
+
`mlflow.tracing.assessments` for assessment APIs. There are no alternatives for Evaluation and
|
5
|
+
EvaluationEntity objects and related APIs.
|
6
|
+
"""
|
7
|
+
|
8
|
+
import hashlib
|
9
|
+
import json
|
10
|
+
from typing import Any, Optional, Union
|
11
|
+
|
12
|
+
from mlflow.entities._mlflow_object import _MlflowObject
|
13
|
+
from mlflow.entities.metric import Metric
|
14
|
+
from mlflow.evaluation.assessment import Assessment, AssessmentEntity
|
15
|
+
from mlflow.evaluation.evaluation_tag import (
|
16
|
+
EvaluationTag, # Assuming EvaluationTag is in this module
|
17
|
+
)
|
18
|
+
from mlflow.tracing.utils import TraceJSONEncoder
|
19
|
+
from mlflow.utils.annotations import deprecated
|
20
|
+
|
21
|
+
|
22
|
+
@deprecated(since="3.0.0")
|
23
|
+
class EvaluationEntity(_MlflowObject):
|
24
|
+
"""
|
25
|
+
Evaluation result data, including inputs, outputs, targets, assessments, and more.
|
26
|
+
"""
|
27
|
+
|
28
|
+
def __init__(
|
29
|
+
self,
|
30
|
+
evaluation_id: str,
|
31
|
+
run_id: str,
|
32
|
+
inputs_id: str,
|
33
|
+
inputs: dict[str, Any],
|
34
|
+
outputs: Optional[dict[str, Any]] = None,
|
35
|
+
request_id: Optional[str] = None,
|
36
|
+
targets: Optional[dict[str, Any]] = None,
|
37
|
+
error_code: Optional[str] = None,
|
38
|
+
error_message: Optional[str] = None,
|
39
|
+
assessments: Optional[list[AssessmentEntity]] = None,
|
40
|
+
metrics: Optional[list[Metric]] = None,
|
41
|
+
tags: Optional[list[EvaluationTag]] = None,
|
42
|
+
):
|
43
|
+
"""
|
44
|
+
Construct a new mlflow.evaluation.EvaluationEntity instance.
|
45
|
+
|
46
|
+
Args:
|
47
|
+
evaluation_id: A unique identifier for the evaluation.
|
48
|
+
run_id: The ID of the MLflow Run containing the Evaluation.
|
49
|
+
inputs_id: A unique identifier for the input names and values for evaluation.
|
50
|
+
inputs: Input names and values for evaluation.
|
51
|
+
outputs: Outputs obtained during inference.
|
52
|
+
request_id: The ID of an MLflow Trace corresponding to the inputs and outputs.
|
53
|
+
targets: Expected values that the model should produce during inference.
|
54
|
+
error_code: An error code representing any issues encountered during the evaluation.
|
55
|
+
error_message: A descriptive error message representing any issues encountered during
|
56
|
+
the evaluation.
|
57
|
+
assessments: Assessments for the evaluation.
|
58
|
+
metrics: Objective numerical metrics for the evaluation, e.g., "number of input tokens",
|
59
|
+
"number of output tokens".
|
60
|
+
tags: List of tags associated with the evaluation.
|
61
|
+
"""
|
62
|
+
self._evaluation_id = evaluation_id
|
63
|
+
self._run_id = run_id
|
64
|
+
self._inputs_id = inputs_id
|
65
|
+
self._inputs = inputs
|
66
|
+
self._outputs = outputs
|
67
|
+
self._request_id = request_id
|
68
|
+
self._targets = targets
|
69
|
+
self._error_code = error_code
|
70
|
+
self._error_message = error_message
|
71
|
+
self._assessments = assessments
|
72
|
+
self._metrics = metrics
|
73
|
+
self._tags = tags
|
74
|
+
|
75
|
+
@property
|
76
|
+
def evaluation_id(self) -> str:
|
77
|
+
"""The evaluation ID."""
|
78
|
+
return self._evaluation_id
|
79
|
+
|
80
|
+
@property
|
81
|
+
def run_id(self) -> str:
|
82
|
+
"""The ID of the MLflow Run containing the evaluation"""
|
83
|
+
return self._run_id
|
84
|
+
|
85
|
+
@property
|
86
|
+
def inputs_id(self) -> str:
|
87
|
+
"""The evaluation inputs ID."""
|
88
|
+
return self._inputs_id
|
89
|
+
|
90
|
+
@property
|
91
|
+
def inputs(self) -> dict[str, Any]:
|
92
|
+
"""The evaluation inputs."""
|
93
|
+
return self._inputs
|
94
|
+
|
95
|
+
@property
|
96
|
+
def outputs(self) -> Optional[dict[str, Any]]:
|
97
|
+
"""The evaluation outputs."""
|
98
|
+
return self._outputs
|
99
|
+
|
100
|
+
@property
|
101
|
+
def request_id(self) -> Optional[str]:
|
102
|
+
"""The evaluation request ID."""
|
103
|
+
return self._request_id
|
104
|
+
|
105
|
+
@property
|
106
|
+
def targets(self) -> Optional[dict[str, Any]]:
|
107
|
+
"""The evaluation targets."""
|
108
|
+
return self._targets
|
109
|
+
|
110
|
+
@property
|
111
|
+
def error_code(self) -> Optional[str]:
|
112
|
+
"""The evaluation error code."""
|
113
|
+
return self._error_code
|
114
|
+
|
115
|
+
@property
|
116
|
+
def error_message(self) -> Optional[str]:
|
117
|
+
"""The evaluation error message."""
|
118
|
+
return self._error_message
|
119
|
+
|
120
|
+
@property
|
121
|
+
def assessments(self) -> Optional[list[AssessmentEntity]]:
|
122
|
+
"""The evaluation assessments."""
|
123
|
+
return self._assessments
|
124
|
+
|
125
|
+
@property
|
126
|
+
def metrics(self) -> Optional[list[Metric]]:
|
127
|
+
"""The evaluation metrics."""
|
128
|
+
return self._metrics
|
129
|
+
|
130
|
+
@property
|
131
|
+
def tags(self) -> Optional[list[EvaluationTag]]:
|
132
|
+
"""The evaluation tags."""
|
133
|
+
return self._tags
|
134
|
+
|
135
|
+
def __eq__(self, __o):
|
136
|
+
if isinstance(__o, self.__class__):
|
137
|
+
return self.to_dictionary() == __o.to_dictionary()
|
138
|
+
return False
|
139
|
+
|
140
|
+
def to_dictionary(self) -> dict[str, Any]:
|
141
|
+
"""
|
142
|
+
Convert the Evaluation object to a dictionary.
|
143
|
+
|
144
|
+
Returns:
|
145
|
+
dict: The Evaluation object represented as a dictionary.
|
146
|
+
"""
|
147
|
+
evaluation_dict = {
|
148
|
+
"evaluation_id": self.evaluation_id,
|
149
|
+
"run_id": self.run_id,
|
150
|
+
"inputs_id": self.inputs_id,
|
151
|
+
"inputs": self.inputs,
|
152
|
+
"outputs": self.outputs,
|
153
|
+
"request_id": self.request_id,
|
154
|
+
"targets": self.targets,
|
155
|
+
"error_code": self.error_code,
|
156
|
+
"error_message": self.error_message,
|
157
|
+
"assessments": [assess.to_dictionary() for assess in self.assessments]
|
158
|
+
if self.assessments
|
159
|
+
else None,
|
160
|
+
"metrics": [metric.to_dictionary() for metric in self.metrics]
|
161
|
+
if self.metrics
|
162
|
+
else None,
|
163
|
+
"tags": [tag.to_dictionary() for tag in self.tags] if self.tags else None,
|
164
|
+
}
|
165
|
+
return {k: v for k, v in evaluation_dict.items() if v is not None}
|
166
|
+
|
167
|
+
@classmethod
|
168
|
+
def from_dictionary(cls, evaluation_dict: dict[str, Any]):
|
169
|
+
"""
|
170
|
+
Create an Evaluation object from a dictionary.
|
171
|
+
|
172
|
+
Args:
|
173
|
+
evaluation_dict (dict): Dictionary containing evaluation information.
|
174
|
+
|
175
|
+
Returns:
|
176
|
+
Evaluation: The Evaluation object created from the dictionary.
|
177
|
+
"""
|
178
|
+
assessments = None
|
179
|
+
if "assessments" in evaluation_dict:
|
180
|
+
assessments = [
|
181
|
+
AssessmentEntity.from_dictionary(assess)
|
182
|
+
for assess in evaluation_dict["assessments"]
|
183
|
+
]
|
184
|
+
metrics = None
|
185
|
+
if "metrics" in evaluation_dict:
|
186
|
+
metrics = [Metric.from_dictionary(metric) for metric in evaluation_dict["metrics"]]
|
187
|
+
tags = None
|
188
|
+
if "tags" in evaluation_dict:
|
189
|
+
tags = [EvaluationTag(tag["key"], tag["value"]) for tag in evaluation_dict["tags"]]
|
190
|
+
return cls(
|
191
|
+
evaluation_id=evaluation_dict["evaluation_id"],
|
192
|
+
run_id=evaluation_dict["run_id"],
|
193
|
+
inputs_id=evaluation_dict["inputs_id"],
|
194
|
+
inputs=evaluation_dict["inputs"],
|
195
|
+
outputs=evaluation_dict.get("outputs"),
|
196
|
+
request_id=evaluation_dict.get("request_id"),
|
197
|
+
targets=evaluation_dict.get("targets"),
|
198
|
+
error_code=evaluation_dict.get("error_code"),
|
199
|
+
error_message=evaluation_dict.get("error_message"),
|
200
|
+
assessments=assessments,
|
201
|
+
metrics=metrics,
|
202
|
+
tags=tags,
|
203
|
+
)
|
204
|
+
|
205
|
+
|
206
|
+
@deprecated(since="3.0.0")
|
207
|
+
class Evaluation(_MlflowObject):
|
208
|
+
"""
|
209
|
+
Evaluation result data.
|
210
|
+
"""
|
211
|
+
|
212
|
+
def __init__(
|
213
|
+
self,
|
214
|
+
inputs: dict[str, Any],
|
215
|
+
outputs: Optional[dict[str, Any]] = None,
|
216
|
+
inputs_id: Optional[str] = None,
|
217
|
+
request_id: Optional[str] = None,
|
218
|
+
targets: Optional[dict[str, Any]] = None,
|
219
|
+
error_code: Optional[str] = None,
|
220
|
+
error_message: Optional[str] = None,
|
221
|
+
assessments: Optional[list[Assessment]] = None,
|
222
|
+
metrics: Optional[Union[dict[str, float], list[Metric]]] = None,
|
223
|
+
tags: Optional[dict[str, str]] = None,
|
224
|
+
):
|
225
|
+
"""
|
226
|
+
Construct a new Evaluation instance.
|
227
|
+
|
228
|
+
Args:
|
229
|
+
inputs: Input names and values for evaluation.
|
230
|
+
outputs: Outputs obtained during inference.
|
231
|
+
inputs_id: A unique identifier for the input names and values for evaluation.
|
232
|
+
request_id: The ID of an MLflow Trace corresponding to the inputs and outputs.
|
233
|
+
targets: Expected values that the model should produce during inference.
|
234
|
+
error_code: An error code representing any issues encountered during the evaluation.
|
235
|
+
error_message: A descriptive error message representing any issues encountered during
|
236
|
+
the evaluation.
|
237
|
+
assessments: Assessments for the evaluation.
|
238
|
+
metrics: Objective numerical metrics for the evaluation, e.g., "number of input tokens",
|
239
|
+
"number of output tokens".
|
240
|
+
tags: Dictionary of tags associated with the evaluation.
|
241
|
+
"""
|
242
|
+
if isinstance(metrics, dict):
|
243
|
+
metrics = [
|
244
|
+
Metric(key=key, value=value, timestamp=0, step=0) for key, value in metrics.items()
|
245
|
+
]
|
246
|
+
if isinstance(tags, dict):
|
247
|
+
tags = [EvaluationTag(key=str(key), value=str(value)) for key, value in tags.items()]
|
248
|
+
|
249
|
+
self._inputs = inputs
|
250
|
+
self._outputs = outputs
|
251
|
+
self._inputs_id = inputs_id or _generate_inputs_id(inputs)
|
252
|
+
self._request_id = request_id
|
253
|
+
self._targets = targets
|
254
|
+
self._error_code = error_code
|
255
|
+
self._error_message = error_message
|
256
|
+
self._assessments = assessments
|
257
|
+
self._metrics = metrics
|
258
|
+
self._tags = tags
|
259
|
+
|
260
|
+
@property
|
261
|
+
def inputs_id(self) -> str:
|
262
|
+
"""The evaluation inputs ID."""
|
263
|
+
return self._inputs_id
|
264
|
+
|
265
|
+
@property
|
266
|
+
def inputs(self) -> dict[str, Any]:
|
267
|
+
"""The evaluation inputs."""
|
268
|
+
return self._inputs
|
269
|
+
|
270
|
+
@property
|
271
|
+
def outputs(self) -> Optional[dict[str, Any]]:
|
272
|
+
"""The evaluation outputs."""
|
273
|
+
return self._outputs
|
274
|
+
|
275
|
+
@property
|
276
|
+
def request_id(self) -> Optional[str]:
|
277
|
+
"""The evaluation request ID."""
|
278
|
+
return self._request_id
|
279
|
+
|
280
|
+
@property
|
281
|
+
def targets(self) -> Optional[dict[str, Any]]:
|
282
|
+
"""The evaluation targets."""
|
283
|
+
return self._targets
|
284
|
+
|
285
|
+
@property
|
286
|
+
def error_code(self) -> Optional[str]:
|
287
|
+
"""The evaluation error code."""
|
288
|
+
return self._error_code
|
289
|
+
|
290
|
+
@property
|
291
|
+
def error_message(self) -> Optional[str]:
|
292
|
+
"""The evaluation error message."""
|
293
|
+
return self._error_message
|
294
|
+
|
295
|
+
@property
|
296
|
+
def assessments(self) -> Optional[list[Assessment]]:
|
297
|
+
"""The evaluation assessments."""
|
298
|
+
return self._assessments
|
299
|
+
|
300
|
+
@property
|
301
|
+
def metrics(self) -> Optional[list[Metric]]:
|
302
|
+
"""The evaluation metrics."""
|
303
|
+
return self._metrics
|
304
|
+
|
305
|
+
@property
|
306
|
+
def tags(self) -> Optional[dict[str, str]]:
|
307
|
+
"""The evaluation tags."""
|
308
|
+
return self._tags
|
309
|
+
|
310
|
+
def __eq__(self, __o):
|
311
|
+
if isinstance(__o, self.__class__):
|
312
|
+
return self.to_dictionary() == __o.to_dictionary()
|
313
|
+
return False
|
314
|
+
|
315
|
+
def _to_entity(self, run_id: str, evaluation_id: str) -> EvaluationEntity:
|
316
|
+
"""
|
317
|
+
Convert the Evaluation object to an EvaluationEntity object.
|
318
|
+
|
319
|
+
Returns:
|
320
|
+
EvaluationEntity: An EvaluationEntity object.
|
321
|
+
"""
|
322
|
+
return EvaluationEntity(
|
323
|
+
evaluation_id=evaluation_id,
|
324
|
+
run_id=run_id,
|
325
|
+
inputs_id=self.inputs_id,
|
326
|
+
inputs=self.inputs,
|
327
|
+
outputs=self.outputs,
|
328
|
+
request_id=self.request_id,
|
329
|
+
targets=self.targets,
|
330
|
+
error_code=self.error_code,
|
331
|
+
error_message=self.error_message,
|
332
|
+
assessments=[assess._to_entity(evaluation_id) for assess in self.assessments]
|
333
|
+
if self.assessments
|
334
|
+
else None,
|
335
|
+
metrics=self.metrics,
|
336
|
+
tags=self.tags,
|
337
|
+
)
|
338
|
+
|
339
|
+
def to_dictionary(self) -> dict[str, Any]:
|
340
|
+
"""
|
341
|
+
Convert the Evaluation object to a dictionary.
|
342
|
+
|
343
|
+
Returns:
|
344
|
+
dict: The Evaluation object represented as a dictionary.
|
345
|
+
"""
|
346
|
+
evaluation_dict = {
|
347
|
+
"inputs_id": self.inputs_id,
|
348
|
+
"inputs": self.inputs,
|
349
|
+
"outputs": self.outputs,
|
350
|
+
"request_id": self.request_id,
|
351
|
+
"targets": self.targets,
|
352
|
+
"error_code": self.error_code,
|
353
|
+
"error_message": self.error_message,
|
354
|
+
"assessments": [assess.to_dictionary() for assess in self.assessments]
|
355
|
+
if self.assessments
|
356
|
+
else None,
|
357
|
+
"metrics": [metric.to_dictionary() for metric in self.metrics]
|
358
|
+
if self.metrics
|
359
|
+
else None,
|
360
|
+
"tags": [tag.to_dictionary() for tag in self.tags] if self.tags else None,
|
361
|
+
}
|
362
|
+
return {k: v for k, v in evaluation_dict.items() if v is not None}
|
363
|
+
|
364
|
+
@classmethod
|
365
|
+
def from_dictionary(cls, evaluation_dict: dict[str, Any]):
|
366
|
+
"""
|
367
|
+
Create an Evaluation object from a dictionary.
|
368
|
+
|
369
|
+
Args:
|
370
|
+
evaluation_dict (dict): Dictionary containing evaluation information.
|
371
|
+
|
372
|
+
Returns:
|
373
|
+
Evaluation: The Evaluation object created from the dictionary.
|
374
|
+
"""
|
375
|
+
assessments = None
|
376
|
+
if "assessments" in evaluation_dict:
|
377
|
+
assessments = [
|
378
|
+
Assessment.from_dictionary(assess) for assess in evaluation_dict["assessments"]
|
379
|
+
]
|
380
|
+
metrics = None
|
381
|
+
if "metrics" in evaluation_dict:
|
382
|
+
metrics = [Metric.from_dictionary(metric) for metric in evaluation_dict["metrics"]]
|
383
|
+
tags = None
|
384
|
+
if "tags" in evaluation_dict:
|
385
|
+
tags = [EvaluationTag(tag["key"], tag["value"]) for tag in evaluation_dict["tags"]]
|
386
|
+
return cls(
|
387
|
+
inputs_id=evaluation_dict["inputs_id"],
|
388
|
+
inputs=evaluation_dict["inputs"],
|
389
|
+
outputs=evaluation_dict.get("outputs"),
|
390
|
+
request_id=evaluation_dict.get("request_id"),
|
391
|
+
targets=evaluation_dict.get("targets"),
|
392
|
+
error_code=evaluation_dict.get("error_code"),
|
393
|
+
error_message=evaluation_dict.get("error_message"),
|
394
|
+
assessments=assessments,
|
395
|
+
metrics=metrics,
|
396
|
+
tags=tags,
|
397
|
+
)
|
398
|
+
|
399
|
+
|
400
|
+
def _generate_inputs_id(inputs: dict[str, Any]) -> str:
|
401
|
+
"""
|
402
|
+
Generates a unique identifier for the inputs.
|
403
|
+
|
404
|
+
Args:
|
405
|
+
inputs (Dict[str, Any]): Input fields used by the model to compute outputs.
|
406
|
+
|
407
|
+
Returns:
|
408
|
+
str: A unique identifier for the inputs.
|
409
|
+
"""
|
410
|
+
inputs_json = json.dumps(inputs, sort_keys=True, cls=TraceJSONEncoder)
|
411
|
+
return hashlib.sha256(inputs_json.encode("utf-8")).hexdigest()
|
@@ -0,0 +1,61 @@
|
|
1
|
+
"""
|
2
|
+
THE 'mlflow.evaluation` MODULE IS LEGACY AND WILL BE REMOVED SOON. PLEASE DO NOT USE THESE CLASSES
|
3
|
+
IN NEW CODE. INSTEAD, USE `mlflow/entities/assessment.py` FOR ASSESSMENT CLASSES.
|
4
|
+
"""
|
5
|
+
|
6
|
+
from mlflow.entities._mlflow_object import _MlflowObject
|
7
|
+
from mlflow.utils.annotations import deprecated
|
8
|
+
|
9
|
+
|
10
|
+
@deprecated(since="3.0.0")
|
11
|
+
class EvaluationTag(_MlflowObject):
|
12
|
+
"""Key-value tag associated with an evaluation."""
|
13
|
+
|
14
|
+
def __init__(self, key, value):
|
15
|
+
self._key = key
|
16
|
+
self._value = value
|
17
|
+
|
18
|
+
def __eq__(self, other):
|
19
|
+
if type(other) is type(self):
|
20
|
+
return self.__dict__ == other.__dict__
|
21
|
+
return False
|
22
|
+
|
23
|
+
@property
|
24
|
+
def key(self):
|
25
|
+
"""String name of the tag."""
|
26
|
+
return self._key
|
27
|
+
|
28
|
+
@property
|
29
|
+
def value(self):
|
30
|
+
"""String value of the tag."""
|
31
|
+
return self._value
|
32
|
+
|
33
|
+
def to_dictionary(self) -> dict[str, str]:
|
34
|
+
"""
|
35
|
+
Convert the EvaluationTag object to a dictionary.
|
36
|
+
|
37
|
+
Returns:
|
38
|
+
dict: The EvaluationTag object represented as a dictionary.
|
39
|
+
"""
|
40
|
+
return {
|
41
|
+
"key": self.key,
|
42
|
+
"value": self.value,
|
43
|
+
}
|
44
|
+
|
45
|
+
@classmethod
|
46
|
+
def from_dictionary(cls, evaluation_tag_dict: dict[str, str]):
|
47
|
+
"""
|
48
|
+
Create an EvaluationTag object from a dictionary.
|
49
|
+
|
50
|
+
Args:
|
51
|
+
evaluation_tag_dict (dict): Dictionary containing evaluation tag information.
|
52
|
+
|
53
|
+
Returns:
|
54
|
+
Evaluation: The EvaluationTag object created from the dictionary.
|
55
|
+
"""
|
56
|
+
key = evaluation_tag_dict["key"]
|
57
|
+
value = evaluation_tag_dict["value"]
|
58
|
+
return cls(
|
59
|
+
key=key,
|
60
|
+
value=value,
|
61
|
+
)
|
@@ -0,0 +1,48 @@
|
|
1
|
+
"""
|
2
|
+
THE 'mlflow.evaluation` MODULE IS LEGACY AND WILL BE REMOVED SOON. PLEASE DO NOT USE THESE CLASSES
|
3
|
+
IN NEW CODE. INSTEAD, USE `mlflow/entities/assessment.py` FOR ASSESSMENT CLASSES.
|
4
|
+
"""
|
5
|
+
|
6
|
+
import uuid
|
7
|
+
from typing import Optional
|
8
|
+
|
9
|
+
from mlflow.evaluation.evaluation import Evaluation, EvaluationEntity
|
10
|
+
from mlflow.evaluation.utils import evaluations_to_dataframes
|
11
|
+
from mlflow.tracking.client import MlflowClient
|
12
|
+
from mlflow.tracking.fluent import _get_or_start_run
|
13
|
+
from mlflow.utils.annotations import deprecated
|
14
|
+
|
15
|
+
|
16
|
+
@deprecated(since="3.0.0")
|
17
|
+
def log_evaluations(
|
18
|
+
*, evaluations: list[Evaluation], run_id: Optional[str] = None
|
19
|
+
) -> list[EvaluationEntity]:
|
20
|
+
"""
|
21
|
+
Logs one or more evaluations to an MLflow Run.
|
22
|
+
|
23
|
+
Args:
|
24
|
+
evaluations (List[Evaluation]): List of one or more MLflow Evaluation objects.
|
25
|
+
run_id (Optional[str]): ID of the MLflow Run to log the evaluation. If unspecified, the
|
26
|
+
current active run is used, or a new run is started.
|
27
|
+
|
28
|
+
Returns:
|
29
|
+
List[EvaluationEntity]: The logged Evaluation objects.
|
30
|
+
"""
|
31
|
+
run_id = run_id if run_id is not None else _get_or_start_run().info.run_id
|
32
|
+
if not evaluations:
|
33
|
+
return []
|
34
|
+
|
35
|
+
client = MlflowClient()
|
36
|
+
evaluation_entities = [
|
37
|
+
evaluation._to_entity(run_id=run_id, evaluation_id=uuid.uuid4().hex)
|
38
|
+
for evaluation in evaluations
|
39
|
+
]
|
40
|
+
evaluations_df, metrics_df, assessments_df, tags_df = evaluations_to_dataframes(
|
41
|
+
evaluation_entities
|
42
|
+
)
|
43
|
+
client.log_table(run_id=run_id, data=evaluations_df, artifact_file="_evaluations.json")
|
44
|
+
client.log_table(run_id=run_id, data=metrics_df, artifact_file="_metrics.json")
|
45
|
+
client.log_table(run_id=run_id, data=assessments_df, artifact_file="_assessments.json")
|
46
|
+
client.log_table(run_id=run_id, data=tags_df, artifact_file="_tags.json")
|
47
|
+
|
48
|
+
return evaluation_entities
|