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,97 @@
|
|
1
|
+
"""
|
2
|
+
The ``mlflow.models`` module provides an API for saving machine learning models in
|
3
|
+
"flavors" that can be understood by different downstream tools.
|
4
|
+
|
5
|
+
The built-in flavors are:
|
6
|
+
|
7
|
+
- :py:mod:`mlflow.catboost`
|
8
|
+
- :py:mod:`mlflow.diviner`
|
9
|
+
- :py:mod:`mlflow.dspy`
|
10
|
+
- :py:mod:`mlflow.h2o`
|
11
|
+
- :py:mod:`mlflow.langchain`
|
12
|
+
- :py:mod:`mlflow.lightgbm`
|
13
|
+
- :py:mod:`mlflow.llama_index`
|
14
|
+
- :py:mod:`mlflow.onnx`
|
15
|
+
- :py:mod:`mlflow.openai`
|
16
|
+
- :py:mod:`mlflow.paddle`
|
17
|
+
- :py:mod:`mlflow.pmdarima`
|
18
|
+
- :py:mod:`mlflow.prophet`
|
19
|
+
- :py:mod:`mlflow.pyfunc`
|
20
|
+
- :py:mod:`mlflow.pyspark.ml`
|
21
|
+
- :py:mod:`mlflow.pytorch`
|
22
|
+
- :py:mod:`mlflow.sklearn`
|
23
|
+
- :py:mod:`mlflow.spacy`
|
24
|
+
- :py:mod:`mlflow.spark`
|
25
|
+
- :py:mod:`mlflow.statsmodels`
|
26
|
+
- :py:mod:`mlflow.tensorflow`
|
27
|
+
- :py:mod:`mlflow.transformers`
|
28
|
+
- :py:mod:`mlflow.xgboost`
|
29
|
+
|
30
|
+
For details, see `MLflow Models guide <https://mlflow.org/docs/latest/ml/model/>`_.
|
31
|
+
"""
|
32
|
+
|
33
|
+
from mlflow.models.dependencies_schemas import set_retriever_schema
|
34
|
+
from mlflow.models.evaluation import (
|
35
|
+
EvaluationArtifact,
|
36
|
+
EvaluationMetric,
|
37
|
+
EvaluationResult,
|
38
|
+
MetricThreshold,
|
39
|
+
evaluate,
|
40
|
+
list_evaluators,
|
41
|
+
make_metric,
|
42
|
+
)
|
43
|
+
from mlflow.models.flavor_backend import FlavorBackend
|
44
|
+
from mlflow.models.model import Model, get_model_info, set_model, update_model_requirements
|
45
|
+
from mlflow.models.model_config import ModelConfig
|
46
|
+
from mlflow.models.python_api import build_docker
|
47
|
+
from mlflow.models.resources import Resource, ResourceType
|
48
|
+
from mlflow.utils.environment import infer_pip_requirements
|
49
|
+
|
50
|
+
__all__ = [
|
51
|
+
"Model",
|
52
|
+
"FlavorBackend",
|
53
|
+
"infer_pip_requirements",
|
54
|
+
"evaluate",
|
55
|
+
"make_metric",
|
56
|
+
"EvaluationMetric",
|
57
|
+
"EvaluationArtifact",
|
58
|
+
"EvaluationResult",
|
59
|
+
"get_model_info",
|
60
|
+
"set_model",
|
61
|
+
"set_retriever_schema",
|
62
|
+
"list_evaluators",
|
63
|
+
"MetricThreshold",
|
64
|
+
"build_docker",
|
65
|
+
"Resource",
|
66
|
+
"ResourceType",
|
67
|
+
"ModelConfig",
|
68
|
+
"update_model_requirements",
|
69
|
+
]
|
70
|
+
|
71
|
+
|
72
|
+
# Under skinny-mlflow requirements, the following packages cannot be imported
|
73
|
+
# because of lack of numpy/pandas library, so wrap them with try...except block
|
74
|
+
try:
|
75
|
+
from mlflow.models.python_api import predict
|
76
|
+
from mlflow.models.signature import ModelSignature, infer_signature, set_signature
|
77
|
+
from mlflow.models.utils import (
|
78
|
+
ModelInputExample,
|
79
|
+
add_libraries_to_model,
|
80
|
+
convert_input_example_to_serving_input,
|
81
|
+
validate_schema,
|
82
|
+
validate_serving_input,
|
83
|
+
)
|
84
|
+
|
85
|
+
__all__ += [
|
86
|
+
"ModelSignature",
|
87
|
+
"ModelInputExample",
|
88
|
+
"infer_signature",
|
89
|
+
"validate_schema",
|
90
|
+
"add_libraries_to_model",
|
91
|
+
"convert_input_example_to_serving_input",
|
92
|
+
"set_signature",
|
93
|
+
"predict",
|
94
|
+
"validate_serving_input",
|
95
|
+
]
|
96
|
+
except ImportError:
|
97
|
+
pass
|
@@ -0,0 +1,83 @@
|
|
1
|
+
from typing import Optional
|
2
|
+
|
3
|
+
from mlflow.models.resources import Resource, _ResourceBuilder
|
4
|
+
from mlflow.utils.annotations import experimental
|
5
|
+
|
6
|
+
|
7
|
+
@experimental(version="2.21.0")
|
8
|
+
class UserAuthPolicy:
|
9
|
+
"""
|
10
|
+
A minimal list of scopes that the user should have access to
|
11
|
+
in order to invoke this model
|
12
|
+
|
13
|
+
Note: This is only compatible with Databricks Environment currently.
|
14
|
+
TODO: Add Databricks Documentation for User Auth Policy
|
15
|
+
|
16
|
+
Args:
|
17
|
+
api_scopes: A list of scopes. Example: "vectorsearch.vector-search-indexes", "sql"
|
18
|
+
"""
|
19
|
+
|
20
|
+
def __init__(self, api_scopes: list[str]):
|
21
|
+
self._api_scopes = api_scopes
|
22
|
+
|
23
|
+
@property
|
24
|
+
def api_scopes(self) -> list[str]:
|
25
|
+
return self._api_scopes
|
26
|
+
|
27
|
+
@api_scopes.setter
|
28
|
+
def api_scopes(self, value: list[str]):
|
29
|
+
self._api_scopes = value
|
30
|
+
|
31
|
+
def to_dict(self):
|
32
|
+
return {"api_scopes": self.api_scopes}
|
33
|
+
|
34
|
+
|
35
|
+
class SystemAuthPolicy:
|
36
|
+
"""
|
37
|
+
System Auth Policy, which defines a list of resources required to
|
38
|
+
serve this model
|
39
|
+
"""
|
40
|
+
|
41
|
+
def __init__(self, resources: list[Resource]):
|
42
|
+
self._resources = resources
|
43
|
+
|
44
|
+
@property
|
45
|
+
def resources(self) -> list[Resource]:
|
46
|
+
return self._resources
|
47
|
+
|
48
|
+
@resources.setter
|
49
|
+
def resources(self, value: list[Resource]):
|
50
|
+
self._resources = value
|
51
|
+
|
52
|
+
def to_dict(self):
|
53
|
+
serialized_resources = _ResourceBuilder.from_resources(self.resources)
|
54
|
+
return {"resources": serialized_resources}
|
55
|
+
|
56
|
+
|
57
|
+
class AuthPolicy:
|
58
|
+
"""
|
59
|
+
Specifies the authentication policy for the model, which includes two key
|
60
|
+
components.
|
61
|
+
System Auth Policy: A list of resources required to serve this model
|
62
|
+
User Auth Policy: A minimal list of scopes that the user should
|
63
|
+
have access to, in order to invoke this model
|
64
|
+
"""
|
65
|
+
|
66
|
+
def __init__(
|
67
|
+
self,
|
68
|
+
user_auth_policy: Optional[UserAuthPolicy] = None,
|
69
|
+
system_auth_policy: Optional[SystemAuthPolicy] = None,
|
70
|
+
):
|
71
|
+
self.user_auth_policy = user_auth_policy
|
72
|
+
self.system_auth_policy = system_auth_policy
|
73
|
+
|
74
|
+
def to_dict(self):
|
75
|
+
"""
|
76
|
+
Serialize Auth Policy to a dictionary
|
77
|
+
"""
|
78
|
+
return {
|
79
|
+
"system_auth_policy": self.system_auth_policy.to_dict()
|
80
|
+
if self.system_auth_policy
|
81
|
+
else {},
|
82
|
+
"user_auth_policy": self.user_auth_policy.to_dict() if self.user_auth_policy else {},
|
83
|
+
}
|
mlflow/models/cli.py
ADDED
@@ -0,0 +1,354 @@
|
|
1
|
+
import logging
|
2
|
+
|
3
|
+
import click
|
4
|
+
|
5
|
+
from mlflow.models import python_api
|
6
|
+
from mlflow.models.flavor_backend_registry import get_flavor_backend
|
7
|
+
from mlflow.models.model import update_model_requirements
|
8
|
+
from mlflow.utils import cli_args
|
9
|
+
from mlflow.utils import env_manager as _EnvManager
|
10
|
+
|
11
|
+
_logger = logging.getLogger(__name__)
|
12
|
+
|
13
|
+
|
14
|
+
@click.group("models")
|
15
|
+
def commands():
|
16
|
+
"""
|
17
|
+
Deploy MLflow models locally.
|
18
|
+
|
19
|
+
To deploy a model associated with a run on a tracking server, set the MLFLOW_TRACKING_URI
|
20
|
+
environment variable to the URL of the desired server.
|
21
|
+
"""
|
22
|
+
|
23
|
+
|
24
|
+
@commands.command("serve")
|
25
|
+
@cli_args.MODEL_URI
|
26
|
+
@cli_args.PORT
|
27
|
+
@cli_args.HOST
|
28
|
+
@cli_args.TIMEOUT
|
29
|
+
@cli_args.MODELS_WORKERS
|
30
|
+
@cli_args.ENV_MANAGER
|
31
|
+
@cli_args.NO_CONDA
|
32
|
+
@cli_args.INSTALL_MLFLOW
|
33
|
+
@cli_args.ENABLE_MLSERVER
|
34
|
+
def serve(
|
35
|
+
model_uri,
|
36
|
+
port,
|
37
|
+
host,
|
38
|
+
timeout,
|
39
|
+
workers,
|
40
|
+
env_manager=None,
|
41
|
+
no_conda=False,
|
42
|
+
install_mlflow=False,
|
43
|
+
enable_mlserver=False,
|
44
|
+
):
|
45
|
+
"""
|
46
|
+
Serve a model saved with MLflow by launching a webserver on the specified host and port.
|
47
|
+
The command supports models with the ``python_function`` or ``crate`` (R Function) flavor.
|
48
|
+
For information about the input data formats accepted by the webserver, see the following
|
49
|
+
documentation: https://www.mlflow.org/docs/latest/models.html#built-in-deployment-tools.
|
50
|
+
|
51
|
+
.. warning::
|
52
|
+
|
53
|
+
Models built using MLflow 1.x will require adjustments to the endpoint request payload
|
54
|
+
if executed in an environment that has MLflow 2.x installed. In 1.x, a request payload
|
55
|
+
was in the format: ``{'columns': [str], 'data': [[...]]}``. 2.x models require
|
56
|
+
payloads that are defined by the structural-defining keys of either ``dataframe_split``,
|
57
|
+
``instances``, ``inputs`` or ``dataframe_records``. See the examples below for
|
58
|
+
demonstrations of the changes to the invocation API endpoint in 2.0.
|
59
|
+
|
60
|
+
.. note::
|
61
|
+
|
62
|
+
Requests made in pandas DataFrame structures can be made in either `split` or `records`
|
63
|
+
oriented formats.
|
64
|
+
See https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.to_json.html for
|
65
|
+
detailed information on orientation formats for converting a pandas DataFrame to json.
|
66
|
+
|
67
|
+
Example:
|
68
|
+
|
69
|
+
.. code-block:: bash
|
70
|
+
|
71
|
+
$ mlflow models serve -m runs:/my-run-id/model-path &
|
72
|
+
|
73
|
+
# records orientation input format for serializing a pandas DataFrame
|
74
|
+
$ curl http://127.0.0.1:5000/invocations -H 'Content-Type: application/json' -d '{
|
75
|
+
"dataframe_records": [{"a":1, "b":2}, {"a":3, "b":4}, {"a":5, "b":6}]
|
76
|
+
}'
|
77
|
+
|
78
|
+
# split orientation input format for serializing a pandas DataFrame
|
79
|
+
$ curl http://127.0.0.1:5000/invocations -H 'Content-Type: application/json' -d '{
|
80
|
+
"dataframe_split": {"columns": ["a", "b"],
|
81
|
+
"index": [0, 1, 2],
|
82
|
+
"data": [[1, 2], [3, 4], [5, 6]]}
|
83
|
+
}'
|
84
|
+
|
85
|
+
# inputs format for List submission of array, tensor, or DataFrame data
|
86
|
+
$ curl http://127.0.0.1:5000/invocations -H 'Content-Type: application/json' -d '{
|
87
|
+
"inputs": [[1, 2], [3, 4], [5, 6]]
|
88
|
+
}'
|
89
|
+
|
90
|
+
# instances format for submission of Tensor data
|
91
|
+
curl http://127.0.0.1:5000/invocations -H 'Content-Type: application/json' -d '{
|
92
|
+
"instances": [
|
93
|
+
{"a": "t1", "b": [1, 2, 3]},
|
94
|
+
{"a": "t2", "b": [4, 5, 6]},
|
95
|
+
{"a": "t3", "b": [7, 8, 9]}
|
96
|
+
]
|
97
|
+
}'
|
98
|
+
|
99
|
+
"""
|
100
|
+
env_manager = _EnvManager.LOCAL if no_conda else env_manager
|
101
|
+
|
102
|
+
return get_flavor_backend(
|
103
|
+
model_uri, env_manager=env_manager, workers=workers, install_mlflow=install_mlflow
|
104
|
+
).serve(
|
105
|
+
model_uri=model_uri, port=port, host=host, timeout=timeout, enable_mlserver=enable_mlserver
|
106
|
+
)
|
107
|
+
|
108
|
+
|
109
|
+
class KeyValueType(click.ParamType):
|
110
|
+
name = "key=value"
|
111
|
+
|
112
|
+
def convert(self, value, param, ctx):
|
113
|
+
if "=" not in value:
|
114
|
+
self.fail(f"{value!r} is not a valid key value pair, expecting `key=value`", param, ctx)
|
115
|
+
return value.split("=", 1)
|
116
|
+
|
117
|
+
|
118
|
+
@commands.command("predict")
|
119
|
+
@cli_args.MODEL_URI
|
120
|
+
@click.option(
|
121
|
+
"--input-path", "-i", default=None, help="CSV containing pandas DataFrame to predict against."
|
122
|
+
)
|
123
|
+
@click.option(
|
124
|
+
"--output-path",
|
125
|
+
"-o",
|
126
|
+
default=None,
|
127
|
+
help="File to output results to as json file. If not provided, output to stdout.",
|
128
|
+
)
|
129
|
+
@click.option(
|
130
|
+
"--content-type",
|
131
|
+
"-t",
|
132
|
+
default="json",
|
133
|
+
help="Content type of the input file. Can be one of {'json', 'csv'}.",
|
134
|
+
)
|
135
|
+
@cli_args.ENV_MANAGER
|
136
|
+
@cli_args.INSTALL_MLFLOW
|
137
|
+
@click.option(
|
138
|
+
"--pip-requirements-override",
|
139
|
+
"-r",
|
140
|
+
default=None,
|
141
|
+
help="Specify packages and versions to override the dependencies defined "
|
142
|
+
"in the model. Must be a comma-separated string like x==y,z==a.",
|
143
|
+
)
|
144
|
+
@click.option(
|
145
|
+
"--env",
|
146
|
+
default=None,
|
147
|
+
type=KeyValueType(),
|
148
|
+
multiple=True,
|
149
|
+
help="Extra environment variables to set when running the model. Must be "
|
150
|
+
"key value pairs, e.g. `--env key=value`.",
|
151
|
+
)
|
152
|
+
def predict(
|
153
|
+
model_uri,
|
154
|
+
input_data=None,
|
155
|
+
input_path=None,
|
156
|
+
content_type=python_api._CONTENT_TYPE_JSON,
|
157
|
+
output_path=None,
|
158
|
+
env_manager=_EnvManager.VIRTUALENV,
|
159
|
+
install_mlflow=False,
|
160
|
+
pip_requirements_override=None,
|
161
|
+
env=None,
|
162
|
+
):
|
163
|
+
"""
|
164
|
+
Generate predictions in json format using a saved MLflow model. For information about the input
|
165
|
+
data formats accepted by this function, see the following documentation:
|
166
|
+
https://www.mlflow.org/docs/latest/models.html#built-in-deployment-tools.
|
167
|
+
"""
|
168
|
+
return python_api.predict(
|
169
|
+
model_uri=model_uri,
|
170
|
+
input_data=input_data,
|
171
|
+
input_path=input_path,
|
172
|
+
content_type=content_type,
|
173
|
+
output_path=output_path,
|
174
|
+
env_manager=env_manager,
|
175
|
+
install_mlflow=install_mlflow,
|
176
|
+
pip_requirements_override=pip_requirements_override,
|
177
|
+
extra_envs=dict(env),
|
178
|
+
)
|
179
|
+
|
180
|
+
|
181
|
+
@commands.command("prepare-env")
|
182
|
+
@cli_args.MODEL_URI
|
183
|
+
@cli_args.ENV_MANAGER
|
184
|
+
@cli_args.INSTALL_MLFLOW
|
185
|
+
def prepare_env(
|
186
|
+
model_uri,
|
187
|
+
env_manager,
|
188
|
+
install_mlflow,
|
189
|
+
):
|
190
|
+
"""
|
191
|
+
Performs any preparation necessary to predict or serve the model, for example
|
192
|
+
downloading dependencies or initializing a conda environment. After preparation,
|
193
|
+
calling predict or serve should be fast.
|
194
|
+
"""
|
195
|
+
return get_flavor_backend(
|
196
|
+
model_uri, env_manager=env_manager, install_mlflow=install_mlflow
|
197
|
+
).prepare_env(model_uri=model_uri)
|
198
|
+
|
199
|
+
|
200
|
+
@commands.command("generate-dockerfile")
|
201
|
+
@cli_args.MODEL_URI_BUILD_DOCKER
|
202
|
+
@click.option(
|
203
|
+
"--output-directory",
|
204
|
+
"-d",
|
205
|
+
default="mlflow-dockerfile",
|
206
|
+
help="Output directory where the generated Dockerfile is stored.",
|
207
|
+
)
|
208
|
+
@cli_args.ENV_MANAGER_DOCKERFILE
|
209
|
+
@cli_args.MLFLOW_HOME
|
210
|
+
@cli_args.INSTALL_JAVA
|
211
|
+
@cli_args.INSTALL_MLFLOW
|
212
|
+
@cli_args.ENABLE_MLSERVER
|
213
|
+
def generate_dockerfile(
|
214
|
+
model_uri,
|
215
|
+
output_directory,
|
216
|
+
env_manager,
|
217
|
+
mlflow_home,
|
218
|
+
install_java,
|
219
|
+
install_mlflow,
|
220
|
+
enable_mlserver,
|
221
|
+
):
|
222
|
+
"""
|
223
|
+
Generates a directory with Dockerfile whose default entrypoint serves an MLflow model at port
|
224
|
+
8080 using the python_function flavor. The generated Dockerfile is written to the specified
|
225
|
+
output directory, along with the model (if specified). This Dockerfile defines an image that
|
226
|
+
is equivalent to the one produced by ``mlflow models build-docker``.
|
227
|
+
"""
|
228
|
+
if model_uri:
|
229
|
+
_logger.info("Generating Dockerfile for model %s", model_uri)
|
230
|
+
else:
|
231
|
+
_logger.info("Generating Dockerfile")
|
232
|
+
backend = get_flavor_backend(model_uri, docker_build=True, env_manager=env_manager)
|
233
|
+
if backend.can_build_image():
|
234
|
+
backend.generate_dockerfile(
|
235
|
+
model_uri,
|
236
|
+
output_directory,
|
237
|
+
mlflow_home=mlflow_home,
|
238
|
+
install_java=install_java,
|
239
|
+
install_mlflow=install_mlflow,
|
240
|
+
enable_mlserver=enable_mlserver,
|
241
|
+
)
|
242
|
+
_logger.info("Generated Dockerfile in directory %s", output_directory)
|
243
|
+
else:
|
244
|
+
_logger.error(
|
245
|
+
"Cannot build docker image for selected backend",
|
246
|
+
extra={"backend": backend.__class__.__name__},
|
247
|
+
)
|
248
|
+
raise NotImplementedError("Cannot build docker image for selected backend")
|
249
|
+
|
250
|
+
|
251
|
+
@commands.command("build-docker")
|
252
|
+
@cli_args.MODEL_URI_BUILD_DOCKER
|
253
|
+
@click.option("--name", "-n", default="mlflow-pyfunc-servable", help="Name to use for built image")
|
254
|
+
@cli_args.ENV_MANAGER
|
255
|
+
@cli_args.MLFLOW_HOME
|
256
|
+
@cli_args.INSTALL_JAVA
|
257
|
+
@cli_args.INSTALL_MLFLOW
|
258
|
+
@cli_args.ENABLE_MLSERVER
|
259
|
+
def build_docker(**kwargs):
|
260
|
+
"""
|
261
|
+
Builds a Docker image whose default entrypoint serves an MLflow model at port 8080, using the
|
262
|
+
python_function flavor. The container serves the model referenced by ``--model-uri``, if
|
263
|
+
specified when ``build-docker`` is called. If ``--model-uri`` is not specified when build_docker
|
264
|
+
is called, an MLflow Model directory must be mounted as a volume into the /opt/ml/model
|
265
|
+
directory in the container.
|
266
|
+
|
267
|
+
Building a Docker image with ``--model-uri``:
|
268
|
+
|
269
|
+
.. code:: bash
|
270
|
+
|
271
|
+
# Build a Docker image named 'my-image-name' that serves the model from run 'some-run-uuid'
|
272
|
+
# at run-relative artifact path 'my-model'
|
273
|
+
mlflow models build-docker --model-uri "runs:/some-run-uuid/my-model" --name "my-image-name"
|
274
|
+
# Serve the model
|
275
|
+
docker run -p 5001:8080 "my-image-name"
|
276
|
+
|
277
|
+
Building a Docker image without ``--model-uri``:
|
278
|
+
|
279
|
+
.. code:: bash
|
280
|
+
|
281
|
+
# Build a generic Docker image named 'my-image-name'
|
282
|
+
mlflow models build-docker --name "my-image-name"
|
283
|
+
# Mount the model stored in '/local/path/to/artifacts/model' and serve it
|
284
|
+
docker run --rm -p 5001:8080 -v /local/path/to/artifacts/model:/opt/ml/model "my-image-name"
|
285
|
+
|
286
|
+
.. important::
|
287
|
+
|
288
|
+
Since MLflow 2.10.1, the Docker image built with ``--model-uri`` does **not install Java**
|
289
|
+
for improved performance, unless the model flavor is one of ``["johnsnowlabs", "h2o",
|
290
|
+
"spark"]``. If you need to install Java for other flavors, e.g. custom Python model
|
291
|
+
that uses SparkML, please specify the ``--install-java`` flag to enforce Java installation.
|
292
|
+
|
293
|
+
NB: by default, the container will start nginx and uvicorn processes. If you don't need the
|
294
|
+
nginx process to be started (for instance if you deploy your container to Google Cloud Run),
|
295
|
+
you can disable it via the DISABLE_NGINX environment variable:
|
296
|
+
|
297
|
+
.. code:: bash
|
298
|
+
|
299
|
+
docker run -p 5001:8080 -e DISABLE_NGINX=true "my-image-name"
|
300
|
+
|
301
|
+
By default, the number of uvicorn workers is set to CPU count. If you want to set a custom
|
302
|
+
number of workers, you can set the MLFLOW_MODELS_WORKERS environment variable:
|
303
|
+
|
304
|
+
.. code:: bash
|
305
|
+
|
306
|
+
docker run -p 5001:8080 -e MLFLOW_MODELS_WORKERS=4 "my-image-name"
|
307
|
+
|
308
|
+
See https://www.mlflow.org/docs/latest/python_api/mlflow.pyfunc.html for more information on the
|
309
|
+
'python_function' flavor.
|
310
|
+
"""
|
311
|
+
python_api.build_docker(**kwargs)
|
312
|
+
|
313
|
+
|
314
|
+
@commands.command("update-pip-requirements")
|
315
|
+
@cli_args.MODEL_URI
|
316
|
+
@click.argument("operation", type=click.Choice(["add", "remove"]))
|
317
|
+
@click.argument("requirement_strings", type=str, nargs=-1)
|
318
|
+
def update_pip_requirements(model_uri, operation, requirement_strings):
|
319
|
+
"""
|
320
|
+
Add or remove requirements from a model's conda.yaml and requirements.txt files.
|
321
|
+
If using a remote tracking server, please make sure to set the MLFLOW_TRACKING_URI
|
322
|
+
environment variable to the URL of the desired server.
|
323
|
+
|
324
|
+
REQUIREMENT_STRINGS is a list of pip requirements specifiers.
|
325
|
+
See below for examples.
|
326
|
+
|
327
|
+
Sample usage:
|
328
|
+
|
329
|
+
.. code::
|
330
|
+
|
331
|
+
# Add requirements using the model's "runs:/" URI
|
332
|
+
|
333
|
+
mlflow models update-pip-requirements -m runs:/<run_id>/<model_path> \\
|
334
|
+
add "pandas==1.0.0" "scikit-learn" "mlflow >= 2.8, != 2.9.0"
|
335
|
+
|
336
|
+
# Remove requirements from a local model
|
337
|
+
|
338
|
+
mlflow models update-pip-requirements -m /path/to/local/model \\
|
339
|
+
remove "torchvision" "pydantic"
|
340
|
+
|
341
|
+
Note that model registry URIs (i.e. URIs in the form ``models:/``) are not
|
342
|
+
supported, as artifacts in the model registry are intended to be read-only.
|
343
|
+
Editing requirements is read-only artifact repositories is also not supported.
|
344
|
+
|
345
|
+
If adding requirements, the function will overwrite any existing requirements
|
346
|
+
that overlap, or else append the new requirements to the existing list.
|
347
|
+
|
348
|
+
If removing requirements, the function will ignore any version specifiers,
|
349
|
+
and remove all the specified package names. Any requirements that are not
|
350
|
+
found in the existing files will be ignored.
|
351
|
+
"""
|
352
|
+
update_model_requirements(model_uri, operation, requirement_strings)
|
353
|
+
|
354
|
+
_logger.info(f"Successfully updated the requirements for the model at {model_uri}!")
|