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,228 @@
|
|
1
|
+
from typing import Any, Optional, Union
|
2
|
+
|
3
|
+
import mlflow.protos.service_pb2 as pb2
|
4
|
+
from mlflow.entities._mlflow_object import _MlflowObject
|
5
|
+
from mlflow.entities.logged_model_parameter import LoggedModelParameter
|
6
|
+
from mlflow.entities.logged_model_status import LoggedModelStatus
|
7
|
+
from mlflow.entities.logged_model_tag import LoggedModelTag
|
8
|
+
from mlflow.entities.metric import Metric
|
9
|
+
|
10
|
+
|
11
|
+
class LoggedModel(_MlflowObject):
|
12
|
+
"""
|
13
|
+
MLflow entity representing a Model logged to an MLflow Experiment.
|
14
|
+
"""
|
15
|
+
|
16
|
+
def __init__(
|
17
|
+
self,
|
18
|
+
experiment_id: str,
|
19
|
+
model_id: str,
|
20
|
+
name: str,
|
21
|
+
artifact_location: str,
|
22
|
+
creation_timestamp: int,
|
23
|
+
last_updated_timestamp: int,
|
24
|
+
model_type: Optional[str] = None,
|
25
|
+
source_run_id: Optional[str] = None,
|
26
|
+
status: Union[LoggedModelStatus, int] = LoggedModelStatus.READY,
|
27
|
+
status_message: Optional[str] = None,
|
28
|
+
tags: Optional[Union[list[LoggedModelTag], dict[str, str]]] = None,
|
29
|
+
params: Optional[Union[list[LoggedModelParameter], dict[str, str]]] = None,
|
30
|
+
metrics: Optional[list[Metric]] = None,
|
31
|
+
):
|
32
|
+
super().__init__()
|
33
|
+
self._experiment_id: str = experiment_id
|
34
|
+
self._model_id: str = model_id
|
35
|
+
self._name: str = name
|
36
|
+
self._artifact_location: str = artifact_location
|
37
|
+
self._creation_time: int = creation_timestamp
|
38
|
+
self._last_updated_timestamp: int = last_updated_timestamp
|
39
|
+
self._model_type: Optional[str] = model_type
|
40
|
+
self._source_run_id: Optional[str] = source_run_id
|
41
|
+
self._status: LoggedModelStatus = (
|
42
|
+
status if isinstance(status, LoggedModelStatus) else LoggedModelStatus.from_int(status)
|
43
|
+
)
|
44
|
+
self._status_message: Optional[str] = status_message
|
45
|
+
self._tags: dict[str, str] = (
|
46
|
+
{tag.key: tag.value for tag in (tags or [])} if isinstance(tags, list) else (tags or {})
|
47
|
+
)
|
48
|
+
self._params: dict[str, str] = (
|
49
|
+
{param.key: param.value for param in (params or [])}
|
50
|
+
if isinstance(params, list)
|
51
|
+
else (params or {})
|
52
|
+
)
|
53
|
+
self._metrics: Optional[list[Metric]] = metrics
|
54
|
+
self._model_uri = f"models:/{self.model_id}"
|
55
|
+
|
56
|
+
def __repr__(self) -> str:
|
57
|
+
return "LoggedModel({})".format(
|
58
|
+
", ".join(
|
59
|
+
f"{k}={v!r}"
|
60
|
+
for k, v in sorted(self, key=lambda x: x[0])
|
61
|
+
if (
|
62
|
+
k
|
63
|
+
not in [
|
64
|
+
# These fields can be large and take up space on the notebook or terminal
|
65
|
+
"tags",
|
66
|
+
"params",
|
67
|
+
"metrics",
|
68
|
+
]
|
69
|
+
)
|
70
|
+
)
|
71
|
+
)
|
72
|
+
|
73
|
+
@property
|
74
|
+
def experiment_id(self) -> str:
|
75
|
+
"""String. Experiment ID associated with this Model."""
|
76
|
+
return self._experiment_id
|
77
|
+
|
78
|
+
@experiment_id.setter
|
79
|
+
def experiment_id(self, new_experiment_id: str):
|
80
|
+
self._experiment_id = new_experiment_id
|
81
|
+
|
82
|
+
@property
|
83
|
+
def model_id(self) -> str:
|
84
|
+
"""String. Unique ID for this Model."""
|
85
|
+
return self._model_id
|
86
|
+
|
87
|
+
@model_id.setter
|
88
|
+
def model_id(self, new_model_id: str):
|
89
|
+
self._model_id = new_model_id
|
90
|
+
|
91
|
+
@property
|
92
|
+
def name(self) -> str:
|
93
|
+
"""String. Name for this Model."""
|
94
|
+
return self._name
|
95
|
+
|
96
|
+
@name.setter
|
97
|
+
def name(self, new_name: str):
|
98
|
+
self._name = new_name
|
99
|
+
|
100
|
+
@property
|
101
|
+
def artifact_location(self) -> str:
|
102
|
+
"""String. Location of the model artifacts."""
|
103
|
+
return self._artifact_location
|
104
|
+
|
105
|
+
@artifact_location.setter
|
106
|
+
def artifact_location(self, new_artifact_location: str):
|
107
|
+
self._artifact_location = new_artifact_location
|
108
|
+
|
109
|
+
@property
|
110
|
+
def creation_timestamp(self) -> int:
|
111
|
+
"""Integer. Model creation timestamp (milliseconds since the Unix epoch)."""
|
112
|
+
return self._creation_time
|
113
|
+
|
114
|
+
@property
|
115
|
+
def last_updated_timestamp(self) -> int:
|
116
|
+
"""Integer. Timestamp of last update for this Model (milliseconds since the Unix
|
117
|
+
epoch).
|
118
|
+
"""
|
119
|
+
return self._last_updated_timestamp
|
120
|
+
|
121
|
+
@last_updated_timestamp.setter
|
122
|
+
def last_updated_timestamp(self, updated_timestamp: int):
|
123
|
+
self._last_updated_timestamp = updated_timestamp
|
124
|
+
|
125
|
+
@property
|
126
|
+
def model_type(self) -> Optional[str]:
|
127
|
+
"""String. Type of the model."""
|
128
|
+
return self._model_type
|
129
|
+
|
130
|
+
@model_type.setter
|
131
|
+
def model_type(self, new_model_type: Optional[str]):
|
132
|
+
self._model_type = new_model_type
|
133
|
+
|
134
|
+
@property
|
135
|
+
def source_run_id(self) -> Optional[str]:
|
136
|
+
"""String. MLflow run ID that generated this model."""
|
137
|
+
return self._source_run_id
|
138
|
+
|
139
|
+
@property
|
140
|
+
def status(self) -> LoggedModelStatus:
|
141
|
+
"""String. Current status of this Model."""
|
142
|
+
return self._status
|
143
|
+
|
144
|
+
@status.setter
|
145
|
+
def status(self, updated_status: str):
|
146
|
+
self._status = updated_status
|
147
|
+
|
148
|
+
@property
|
149
|
+
def status_message(self) -> Optional[str]:
|
150
|
+
"""String. Descriptive message for error status conditions."""
|
151
|
+
return self._status_message
|
152
|
+
|
153
|
+
@property
|
154
|
+
def tags(self) -> dict[str, str]:
|
155
|
+
"""Dictionary of tag key (string) -> tag value for this Model."""
|
156
|
+
return self._tags
|
157
|
+
|
158
|
+
@property
|
159
|
+
def params(self) -> dict[str, str]:
|
160
|
+
"""Model parameters."""
|
161
|
+
return self._params
|
162
|
+
|
163
|
+
@property
|
164
|
+
def metrics(self) -> Optional[list[Metric]]:
|
165
|
+
"""List of metrics associated with this Model."""
|
166
|
+
return self._metrics
|
167
|
+
|
168
|
+
@property
|
169
|
+
def model_uri(self) -> str:
|
170
|
+
"""URI of the model."""
|
171
|
+
return self._model_uri
|
172
|
+
|
173
|
+
@metrics.setter
|
174
|
+
def metrics(self, new_metrics: Optional[list[Metric]]):
|
175
|
+
self._metrics = new_metrics
|
176
|
+
|
177
|
+
@classmethod
|
178
|
+
def _properties(cls) -> list[str]:
|
179
|
+
# aggregate with base class properties since cls.__dict__ does not do it automatically
|
180
|
+
return sorted(cls._get_properties_helper())
|
181
|
+
|
182
|
+
def _add_tag(self, tag):
|
183
|
+
self._tags[tag.key] = tag.value
|
184
|
+
|
185
|
+
def to_dictionary(self) -> dict[str, Any]:
|
186
|
+
model_dict = dict(self)
|
187
|
+
model_dict["status"] = self.status.to_int()
|
188
|
+
# Remove the model_uri field from the dictionary since it is a derived field
|
189
|
+
del model_dict["model_uri"]
|
190
|
+
return model_dict
|
191
|
+
|
192
|
+
def to_proto(self):
|
193
|
+
return pb2.LoggedModel(
|
194
|
+
info=pb2.LoggedModelInfo(
|
195
|
+
experiment_id=self.experiment_id,
|
196
|
+
model_id=self.model_id,
|
197
|
+
name=self.name,
|
198
|
+
artifact_uri=self.artifact_location,
|
199
|
+
creation_timestamp_ms=self.creation_timestamp,
|
200
|
+
last_updated_timestamp_ms=self.last_updated_timestamp,
|
201
|
+
model_type=self.model_type,
|
202
|
+
source_run_id=self.source_run_id,
|
203
|
+
status=self.status.to_proto(),
|
204
|
+
tags=[pb2.LoggedModelTag(key=k, value=v) for k, v in self.tags.items()],
|
205
|
+
),
|
206
|
+
data=pb2.LoggedModelData(
|
207
|
+
params=[pb2.LoggedModelParameter(key=k, value=v) for (k, v) in self.params.items()],
|
208
|
+
metrics=[m.to_proto() for m in self.metrics] if self.metrics else [],
|
209
|
+
),
|
210
|
+
)
|
211
|
+
|
212
|
+
@classmethod
|
213
|
+
def from_proto(cls, proto):
|
214
|
+
return cls(
|
215
|
+
experiment_id=proto.info.experiment_id,
|
216
|
+
model_id=proto.info.model_id,
|
217
|
+
name=proto.info.name,
|
218
|
+
artifact_location=proto.info.artifact_uri,
|
219
|
+
creation_timestamp=proto.info.creation_timestamp_ms,
|
220
|
+
last_updated_timestamp=proto.info.last_updated_timestamp_ms,
|
221
|
+
model_type=proto.info.model_type,
|
222
|
+
source_run_id=proto.info.source_run_id,
|
223
|
+
status=LoggedModelStatus.from_proto(proto.info.status),
|
224
|
+
status_message=proto.info.status_message,
|
225
|
+
tags=[LoggedModelTag.from_proto(tag) for tag in proto.info.tags],
|
226
|
+
params=[LoggedModelParameter.from_proto(param) for param in proto.data.params],
|
227
|
+
metrics=[Metric.from_proto(metric) for metric in proto.data.metrics],
|
228
|
+
)
|
@@ -0,0 +1,26 @@
|
|
1
|
+
from mlflow.entities._mlflow_object import _MlflowObject
|
2
|
+
from mlflow.protos.service_pb2 import ModelInput as ProtoModelInput
|
3
|
+
|
4
|
+
|
5
|
+
class LoggedModelInput(_MlflowObject):
|
6
|
+
"""ModelInput object associated with a Run."""
|
7
|
+
|
8
|
+
def __init__(self, model_id: str):
|
9
|
+
self._model_id = model_id
|
10
|
+
|
11
|
+
def __eq__(self, other: _MlflowObject) -> bool:
|
12
|
+
if type(other) is type(self):
|
13
|
+
return self.__dict__ == other.__dict__
|
14
|
+
return False
|
15
|
+
|
16
|
+
@property
|
17
|
+
def model_id(self) -> str:
|
18
|
+
"""Model ID."""
|
19
|
+
return self._model_id
|
20
|
+
|
21
|
+
def to_proto(self):
|
22
|
+
return ProtoModelInput(model_id=self._model_id)
|
23
|
+
|
24
|
+
@classmethod
|
25
|
+
def from_proto(cls, proto):
|
26
|
+
return cls(proto.model_id)
|
@@ -0,0 +1,32 @@
|
|
1
|
+
from mlflow.entities._mlflow_object import _MlflowObject
|
2
|
+
from mlflow.protos.service_pb2 import ModelOutput
|
3
|
+
|
4
|
+
|
5
|
+
class LoggedModelOutput(_MlflowObject):
|
6
|
+
"""ModelOutput object associated with a Run."""
|
7
|
+
|
8
|
+
def __init__(self, model_id: str, step: int) -> None:
|
9
|
+
self._model_id = model_id
|
10
|
+
self._step = step
|
11
|
+
|
12
|
+
def __eq__(self, other: _MlflowObject) -> bool:
|
13
|
+
if type(other) is type(self):
|
14
|
+
return self.__dict__ == other.__dict__
|
15
|
+
return False
|
16
|
+
|
17
|
+
@property
|
18
|
+
def model_id(self) -> str:
|
19
|
+
"""Model ID"""
|
20
|
+
return self._model_id
|
21
|
+
|
22
|
+
@property
|
23
|
+
def step(self) -> str:
|
24
|
+
"""Step at which the model was logged"""
|
25
|
+
return self._step
|
26
|
+
|
27
|
+
def to_proto(self):
|
28
|
+
return ModelOutput(model_id=self.model_id, step=self.step)
|
29
|
+
|
30
|
+
@classmethod
|
31
|
+
def from_proto(cls, proto):
|
32
|
+
return cls(proto.model_id, proto.step)
|
@@ -0,0 +1,46 @@
|
|
1
|
+
import sys
|
2
|
+
|
3
|
+
from mlflow.entities._mlflow_object import _MlflowObject
|
4
|
+
from mlflow.protos import service_pb2 as pb2
|
5
|
+
|
6
|
+
|
7
|
+
class LoggedModelParameter(_MlflowObject):
|
8
|
+
"""
|
9
|
+
MLflow entity representing a parameter of a Model.
|
10
|
+
"""
|
11
|
+
|
12
|
+
def __init__(self, key, value):
|
13
|
+
if "pyspark.ml" in sys.modules:
|
14
|
+
import pyspark.ml.param
|
15
|
+
|
16
|
+
if isinstance(key, pyspark.ml.param.Param):
|
17
|
+
key = key.name
|
18
|
+
value = str(value)
|
19
|
+
self._key = key
|
20
|
+
self._value = value
|
21
|
+
|
22
|
+
@property
|
23
|
+
def key(self):
|
24
|
+
"""String key corresponding to the parameter name."""
|
25
|
+
return self._key
|
26
|
+
|
27
|
+
@property
|
28
|
+
def value(self):
|
29
|
+
"""String value of the parameter."""
|
30
|
+
return self._value
|
31
|
+
|
32
|
+
def __eq__(self, __o):
|
33
|
+
if isinstance(__o, self.__class__):
|
34
|
+
return self._key == __o._key
|
35
|
+
|
36
|
+
return False
|
37
|
+
|
38
|
+
def __hash__(self):
|
39
|
+
return hash(self._key)
|
40
|
+
|
41
|
+
def to_proto(self):
|
42
|
+
return pb2.LoggedModelParameter(key=self._key, value=self._value)
|
43
|
+
|
44
|
+
@classmethod
|
45
|
+
def from_proto(cls, proto):
|
46
|
+
return cls(key=proto.key, value=proto.value)
|
@@ -0,0 +1,74 @@
|
|
1
|
+
from enum import Enum
|
2
|
+
|
3
|
+
from mlflow.exceptions import MlflowException
|
4
|
+
from mlflow.protos import service_pb2 as pb2
|
5
|
+
|
6
|
+
|
7
|
+
class LoggedModelStatus(str, Enum):
|
8
|
+
"""Enum for status of an :py:class:`mlflow.entities.LoggedModel`."""
|
9
|
+
|
10
|
+
UNSPECIFIED = "UNSPECIFIED"
|
11
|
+
PENDING = "PENDING"
|
12
|
+
READY = "READY"
|
13
|
+
FAILED = "FAILED"
|
14
|
+
|
15
|
+
def __str__(self):
|
16
|
+
return self.value
|
17
|
+
|
18
|
+
@staticmethod
|
19
|
+
def is_finalized(status) -> bool:
|
20
|
+
"""
|
21
|
+
Determines whether or not a LoggedModelStatus is a finalized status.
|
22
|
+
A finalized status indicates that no further status updates will occur.
|
23
|
+
"""
|
24
|
+
return status in [LoggedModelStatus.READY, LoggedModelStatus.FAILED]
|
25
|
+
|
26
|
+
def to_proto(self):
|
27
|
+
if self == LoggedModelStatus.UNSPECIFIED:
|
28
|
+
return pb2.LoggedModelStatus.LOGGED_MODEL_STATUS_UNSPECIFIED
|
29
|
+
elif self == LoggedModelStatus.PENDING:
|
30
|
+
return pb2.LoggedModelStatus.LOGGED_MODEL_PENDING
|
31
|
+
elif self == LoggedModelStatus.READY:
|
32
|
+
return pb2.LoggedModelStatus.LOGGED_MODEL_READY
|
33
|
+
elif self == LoggedModelStatus.FAILED:
|
34
|
+
return pb2.LoggedModelStatus.LOGGED_MODEL_UPLOAD_FAILED
|
35
|
+
|
36
|
+
raise MlflowException.invalid_parameter_value(f"Unknown model status: {self}")
|
37
|
+
|
38
|
+
@classmethod
|
39
|
+
def from_proto(cls, proto):
|
40
|
+
if proto == pb2.LoggedModelStatus.LOGGED_MODEL_STATUS_UNSPECIFIED:
|
41
|
+
return LoggedModelStatus.UNSPECIFIED
|
42
|
+
elif proto == pb2.LoggedModelStatus.LOGGED_MODEL_PENDING:
|
43
|
+
return LoggedModelStatus.PENDING
|
44
|
+
elif proto == pb2.LoggedModelStatus.LOGGED_MODEL_READY:
|
45
|
+
return LoggedModelStatus.READY
|
46
|
+
elif proto == pb2.LoggedModelStatus.LOGGED_MODEL_UPLOAD_FAILED:
|
47
|
+
return LoggedModelStatus.FAILED
|
48
|
+
|
49
|
+
raise MlflowException.invalid_parameter_value(f"Unknown model status: {proto}")
|
50
|
+
|
51
|
+
@classmethod
|
52
|
+
def from_int(cls, status_int: int) -> "LoggedModelStatus":
|
53
|
+
if status_int == 0:
|
54
|
+
return cls.UNSPECIFIED
|
55
|
+
elif status_int == 1:
|
56
|
+
return cls.PENDING
|
57
|
+
elif status_int == 2:
|
58
|
+
return cls.READY
|
59
|
+
elif status_int == 3:
|
60
|
+
return cls.FAILED
|
61
|
+
|
62
|
+
raise MlflowException.invalid_parameter_value(f"Unknown model status: {status_int}")
|
63
|
+
|
64
|
+
def to_int(self) -> int:
|
65
|
+
if self == LoggedModelStatus.UNSPECIFIED:
|
66
|
+
return 0
|
67
|
+
elif self == LoggedModelStatus.PENDING:
|
68
|
+
return 1
|
69
|
+
elif self == LoggedModelStatus.READY:
|
70
|
+
return 2
|
71
|
+
elif self == LoggedModelStatus.FAILED:
|
72
|
+
return 3
|
73
|
+
|
74
|
+
raise MlflowException.invalid_parameter_value(f"Unknown model status: {self}")
|
@@ -0,0 +1,33 @@
|
|
1
|
+
from mlflow.entities._mlflow_object import _MlflowObject
|
2
|
+
from mlflow.protos import service_pb2 as pb2
|
3
|
+
|
4
|
+
|
5
|
+
class LoggedModelTag(_MlflowObject):
|
6
|
+
"""Tag object associated with a Model."""
|
7
|
+
|
8
|
+
def __init__(self, key, value):
|
9
|
+
self._key = key
|
10
|
+
self._value = value
|
11
|
+
|
12
|
+
def __eq__(self, other):
|
13
|
+
if type(other) is type(self):
|
14
|
+
# TODO deep equality here?
|
15
|
+
return self.__dict__ == other.__dict__
|
16
|
+
return False
|
17
|
+
|
18
|
+
@property
|
19
|
+
def key(self):
|
20
|
+
"""String name of the tag."""
|
21
|
+
return self._key
|
22
|
+
|
23
|
+
@property
|
24
|
+
def value(self):
|
25
|
+
"""String value of the tag."""
|
26
|
+
return self._value
|
27
|
+
|
28
|
+
def to_proto(self):
|
29
|
+
return pb2.LoggedModelTag(key=self._key, value=self._value)
|
30
|
+
|
31
|
+
@classmethod
|
32
|
+
def from_proto(cls, proto):
|
33
|
+
return cls(key=proto.key, value=proto.value)
|
@@ -0,0 +1,200 @@
|
|
1
|
+
from typing import Optional
|
2
|
+
|
3
|
+
from mlflow.entities._mlflow_object import _MlflowObject
|
4
|
+
from mlflow.exceptions import MlflowException
|
5
|
+
from mlflow.protos.databricks_pb2 import INVALID_PARAMETER_VALUE
|
6
|
+
from mlflow.protos.service_pb2 import Metric as ProtoMetric
|
7
|
+
from mlflow.protos.service_pb2 import MetricWithRunId as ProtoMetricWithRunId
|
8
|
+
|
9
|
+
|
10
|
+
class Metric(_MlflowObject):
|
11
|
+
"""
|
12
|
+
Metric object.
|
13
|
+
"""
|
14
|
+
|
15
|
+
def __init__(
|
16
|
+
self,
|
17
|
+
key,
|
18
|
+
value,
|
19
|
+
timestamp,
|
20
|
+
step,
|
21
|
+
model_id: Optional[str] = None,
|
22
|
+
dataset_name: Optional[str] = None,
|
23
|
+
dataset_digest: Optional[str] = None,
|
24
|
+
run_id: Optional[str] = None,
|
25
|
+
):
|
26
|
+
if (dataset_name, dataset_digest).count(None) == 1:
|
27
|
+
raise MlflowException(
|
28
|
+
"Both dataset_name and dataset_digest must be provided if one is provided",
|
29
|
+
INVALID_PARAMETER_VALUE,
|
30
|
+
)
|
31
|
+
|
32
|
+
self._key = key
|
33
|
+
self._value = value
|
34
|
+
self._timestamp = timestamp
|
35
|
+
self._step = step
|
36
|
+
self._model_id = model_id
|
37
|
+
self._dataset_name = dataset_name
|
38
|
+
self._dataset_digest = dataset_digest
|
39
|
+
self._run_id = run_id
|
40
|
+
|
41
|
+
@property
|
42
|
+
def key(self):
|
43
|
+
"""String key corresponding to the metric name."""
|
44
|
+
return self._key
|
45
|
+
|
46
|
+
@property
|
47
|
+
def value(self):
|
48
|
+
"""Float value of the metric."""
|
49
|
+
return self._value
|
50
|
+
|
51
|
+
@property
|
52
|
+
def timestamp(self):
|
53
|
+
"""Metric timestamp as an integer (milliseconds since the Unix epoch)."""
|
54
|
+
return self._timestamp
|
55
|
+
|
56
|
+
@property
|
57
|
+
def step(self):
|
58
|
+
"""Integer metric step (x-coordinate)."""
|
59
|
+
return self._step
|
60
|
+
|
61
|
+
@property
|
62
|
+
def model_id(self):
|
63
|
+
"""ID of the Model associated with the metric."""
|
64
|
+
return self._model_id
|
65
|
+
|
66
|
+
@property
|
67
|
+
def dataset_name(self) -> Optional[str]:
|
68
|
+
"""String. Name of the dataset associated with the metric."""
|
69
|
+
return self._dataset_name
|
70
|
+
|
71
|
+
@property
|
72
|
+
def dataset_digest(self) -> Optional[str]:
|
73
|
+
"""String. Digest of the dataset associated with the metric."""
|
74
|
+
return self._dataset_digest
|
75
|
+
|
76
|
+
@property
|
77
|
+
def run_id(self) -> Optional[str]:
|
78
|
+
"""String. Run ID associated with the metric."""
|
79
|
+
return self._run_id
|
80
|
+
|
81
|
+
def to_proto(self):
|
82
|
+
metric = ProtoMetric()
|
83
|
+
metric.key = self.key
|
84
|
+
metric.value = self.value
|
85
|
+
metric.timestamp = self.timestamp
|
86
|
+
metric.step = self.step
|
87
|
+
if self.model_id:
|
88
|
+
metric.model_id = self.model_id
|
89
|
+
if self.dataset_name:
|
90
|
+
metric.dataset_name = self.dataset_name
|
91
|
+
if self.dataset_digest:
|
92
|
+
metric.dataset_digest = self.dataset_digest
|
93
|
+
if self.run_id:
|
94
|
+
metric.run_id = self.run_id
|
95
|
+
return metric
|
96
|
+
|
97
|
+
@classmethod
|
98
|
+
def from_proto(cls, proto):
|
99
|
+
return cls(
|
100
|
+
proto.key,
|
101
|
+
proto.value,
|
102
|
+
proto.timestamp,
|
103
|
+
proto.step,
|
104
|
+
model_id=proto.model_id or None,
|
105
|
+
dataset_name=proto.dataset_name or None,
|
106
|
+
dataset_digest=proto.dataset_digest or None,
|
107
|
+
run_id=proto.run_id or None,
|
108
|
+
)
|
109
|
+
|
110
|
+
def __eq__(self, __o):
|
111
|
+
if isinstance(__o, self.__class__):
|
112
|
+
return self.__dict__ == __o.__dict__
|
113
|
+
|
114
|
+
return False
|
115
|
+
|
116
|
+
def __hash__(self):
|
117
|
+
return hash(
|
118
|
+
(
|
119
|
+
self._key,
|
120
|
+
self._value,
|
121
|
+
self._timestamp,
|
122
|
+
self._step,
|
123
|
+
self._model_id,
|
124
|
+
self._dataset_name,
|
125
|
+
self._dataset_digest,
|
126
|
+
self._run_id,
|
127
|
+
)
|
128
|
+
)
|
129
|
+
|
130
|
+
def to_dictionary(self):
|
131
|
+
"""
|
132
|
+
Convert the Metric object to a dictionary.
|
133
|
+
|
134
|
+
Returns:
|
135
|
+
dict: The Metric object represented as a dictionary.
|
136
|
+
"""
|
137
|
+
return {
|
138
|
+
"key": self.key,
|
139
|
+
"value": self.value,
|
140
|
+
"timestamp": self.timestamp,
|
141
|
+
"step": self.step,
|
142
|
+
"model_id": self.model_id,
|
143
|
+
"dataset_name": self.dataset_name,
|
144
|
+
"dataset_digest": self.dataset_digest,
|
145
|
+
"run_id": self._run_id,
|
146
|
+
}
|
147
|
+
|
148
|
+
@classmethod
|
149
|
+
def from_dictionary(cls, metric_dict):
|
150
|
+
"""
|
151
|
+
Create a Metric object from a dictionary.
|
152
|
+
|
153
|
+
Args:
|
154
|
+
metric_dict (dict): Dictionary containing metric information.
|
155
|
+
|
156
|
+
Returns:
|
157
|
+
Metric: The Metric object created from the dictionary.
|
158
|
+
"""
|
159
|
+
required_keys = ["key", "value", "timestamp", "step"]
|
160
|
+
missing_keys = [key for key in required_keys if key not in metric_dict]
|
161
|
+
if missing_keys:
|
162
|
+
raise MlflowException(
|
163
|
+
f"Missing required keys {missing_keys} in metric dictionary",
|
164
|
+
INVALID_PARAMETER_VALUE,
|
165
|
+
)
|
166
|
+
|
167
|
+
return cls(**metric_dict)
|
168
|
+
|
169
|
+
|
170
|
+
class MetricWithRunId(Metric):
|
171
|
+
def __init__(self, metric: Metric, run_id):
|
172
|
+
super().__init__(
|
173
|
+
key=metric.key,
|
174
|
+
value=metric.value,
|
175
|
+
timestamp=metric.timestamp,
|
176
|
+
step=metric.step,
|
177
|
+
)
|
178
|
+
self._run_id = run_id
|
179
|
+
|
180
|
+
@property
|
181
|
+
def run_id(self):
|
182
|
+
return self._run_id
|
183
|
+
|
184
|
+
def to_dict(self):
|
185
|
+
return {
|
186
|
+
"key": self.key,
|
187
|
+
"value": self.value,
|
188
|
+
"timestamp": self.timestamp,
|
189
|
+
"step": self.step,
|
190
|
+
"run_id": self.run_id,
|
191
|
+
}
|
192
|
+
|
193
|
+
def to_proto(self):
|
194
|
+
metric = ProtoMetricWithRunId()
|
195
|
+
metric.key = self.key
|
196
|
+
metric.value = self.value
|
197
|
+
metric.timestamp = self.timestamp
|
198
|
+
metric.step = self.step
|
199
|
+
metric.run_id = self.run_id
|
200
|
+
return metric
|
@@ -0,0 +1,29 @@
|
|
1
|
+
from mlflow.entities.model_registry.model_version import ModelVersion
|
2
|
+
from mlflow.entities.model_registry.model_version_deployment_job_state import (
|
3
|
+
ModelVersionDeploymentJobState,
|
4
|
+
)
|
5
|
+
from mlflow.entities.model_registry.model_version_search import ModelVersionSearch
|
6
|
+
from mlflow.entities.model_registry.model_version_tag import ModelVersionTag
|
7
|
+
from mlflow.entities.model_registry.prompt import Prompt
|
8
|
+
from mlflow.entities.model_registry.prompt_version import PromptVersion
|
9
|
+
from mlflow.entities.model_registry.registered_model import RegisteredModel
|
10
|
+
from mlflow.entities.model_registry.registered_model_alias import RegisteredModelAlias
|
11
|
+
from mlflow.entities.model_registry.registered_model_deployment_job_state import (
|
12
|
+
RegisteredModelDeploymentJobState,
|
13
|
+
)
|
14
|
+
from mlflow.entities.model_registry.registered_model_search import RegisteredModelSearch
|
15
|
+
from mlflow.entities.model_registry.registered_model_tag import RegisteredModelTag
|
16
|
+
|
17
|
+
__all__ = [
|
18
|
+
"Prompt",
|
19
|
+
"PromptVersion",
|
20
|
+
"RegisteredModel",
|
21
|
+
"ModelVersion",
|
22
|
+
"RegisteredModelAlias",
|
23
|
+
"RegisteredModelTag",
|
24
|
+
"ModelVersionTag",
|
25
|
+
"RegisteredModelSearch",
|
26
|
+
"ModelVersionSearch",
|
27
|
+
"ModelVersionDeploymentJobState",
|
28
|
+
"RegisteredModelDeploymentJobState",
|
29
|
+
]
|
@@ -0,0 +1,13 @@
|
|
1
|
+
from abc import abstractmethod
|
2
|
+
|
3
|
+
from mlflow.entities._mlflow_object import _MlflowObject
|
4
|
+
|
5
|
+
|
6
|
+
class _ModelRegistryEntity(_MlflowObject):
|
7
|
+
@classmethod
|
8
|
+
@abstractmethod
|
9
|
+
def from_proto(cls, proto):
|
10
|
+
pass
|
11
|
+
|
12
|
+
def __eq__(self, other):
|
13
|
+
return dict(self) == dict(other)
|