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,158 @@
|
|
1
|
+
"""
|
2
|
+
Scikit-learn Plugin for Genesis-Flow
|
3
|
+
|
4
|
+
Provides scikit-learn integration as a modular plugin.
|
5
|
+
"""
|
6
|
+
|
7
|
+
import logging
|
8
|
+
from typing import Dict, Callable
|
9
|
+
|
10
|
+
from mlflow.plugins.base import FrameworkPlugin, PluginMetadata, PluginType
|
11
|
+
|
12
|
+
logger = logging.getLogger(__name__)
|
13
|
+
|
14
|
+
class SklearnPlugin(FrameworkPlugin):
|
15
|
+
"""
|
16
|
+
Scikit-learn framework plugin for Genesis-Flow.
|
17
|
+
|
18
|
+
Provides scikit-learn model logging, autologging, and deployment capabilities.
|
19
|
+
"""
|
20
|
+
|
21
|
+
@classmethod
|
22
|
+
def get_default_metadata(cls) -> PluginMetadata:
|
23
|
+
"""Get default metadata for scikit-learn plugin."""
|
24
|
+
return PluginMetadata(
|
25
|
+
name="sklearn",
|
26
|
+
version="1.0.0",
|
27
|
+
description="Scikit-learn machine learning framework integration",
|
28
|
+
author="Genesis-Flow Team",
|
29
|
+
plugin_type=PluginType.FRAMEWORK,
|
30
|
+
dependencies=["scikit-learn"],
|
31
|
+
optional_dependencies=["numpy", "scipy", "pandas"],
|
32
|
+
min_genesis_flow_version="1.0.0",
|
33
|
+
homepage="https://scikit-learn.org",
|
34
|
+
documentation="https://mlflow.org/docs/latest/models.html#scikit-learn-sklearn",
|
35
|
+
license="Apache 2.0",
|
36
|
+
tags=["machine-learning", "scikit-learn", "sklearn"],
|
37
|
+
)
|
38
|
+
|
39
|
+
def get_module_path(self) -> str:
|
40
|
+
"""Get the module path for scikit-learn integration."""
|
41
|
+
return "mlflow.sklearn"
|
42
|
+
|
43
|
+
def get_autolog_functions(self) -> Dict[str, Callable]:
|
44
|
+
"""Get scikit-learn autologging functions."""
|
45
|
+
try:
|
46
|
+
from mlflow.sklearn import autolog
|
47
|
+
return {
|
48
|
+
"autolog": autolog,
|
49
|
+
}
|
50
|
+
except ImportError:
|
51
|
+
logger.warning("Scikit-learn autolog not available")
|
52
|
+
return {}
|
53
|
+
|
54
|
+
def get_save_functions(self) -> Dict[str, Callable]:
|
55
|
+
"""Get scikit-learn model saving functions."""
|
56
|
+
try:
|
57
|
+
from mlflow.sklearn import log_model, save_model
|
58
|
+
return {
|
59
|
+
"log_model": log_model,
|
60
|
+
"save_model": save_model,
|
61
|
+
}
|
62
|
+
except ImportError:
|
63
|
+
logger.warning("Scikit-learn save functions not available")
|
64
|
+
return {}
|
65
|
+
|
66
|
+
def get_load_functions(self) -> Dict[str, Callable]:
|
67
|
+
"""Get scikit-learn model loading functions."""
|
68
|
+
try:
|
69
|
+
from mlflow.sklearn import load_model
|
70
|
+
return {
|
71
|
+
"load_model": load_model,
|
72
|
+
}
|
73
|
+
except ImportError:
|
74
|
+
logger.warning("Scikit-learn load functions not available")
|
75
|
+
return {}
|
76
|
+
|
77
|
+
def enable(self) -> bool:
|
78
|
+
"""Enable scikit-learn plugin with enhanced functionality."""
|
79
|
+
try:
|
80
|
+
# Call parent enable
|
81
|
+
if not super().enable():
|
82
|
+
return False
|
83
|
+
|
84
|
+
# Additional scikit-learn-specific setup
|
85
|
+
self._setup_sklearn_environment()
|
86
|
+
|
87
|
+
self._logger.info("Scikit-learn plugin enabled with full functionality")
|
88
|
+
return True
|
89
|
+
|
90
|
+
except Exception as e:
|
91
|
+
self._logger.error(f"Failed to enable scikit-learn plugin: {e}")
|
92
|
+
return False
|
93
|
+
|
94
|
+
def _setup_sklearn_environment(self):
|
95
|
+
"""Setup scikit-learn-specific environment and configurations."""
|
96
|
+
try:
|
97
|
+
import sklearn
|
98
|
+
|
99
|
+
# Log scikit-learn version
|
100
|
+
self._logger.info(f"Scikit-learn version: {sklearn.__version__}")
|
101
|
+
|
102
|
+
# Setup hooks for automatic model artifact logging
|
103
|
+
self.register_hook("model_save", self._on_model_save)
|
104
|
+
self.register_hook("model_fit", self._on_model_fit)
|
105
|
+
|
106
|
+
except Exception as e:
|
107
|
+
self._logger.warning(f"Scikit-learn environment setup warning: {e}")
|
108
|
+
|
109
|
+
def _on_model_save(self, model, *args, **kwargs):
|
110
|
+
"""Hook called when a model is saved."""
|
111
|
+
try:
|
112
|
+
import sklearn.base
|
113
|
+
|
114
|
+
if isinstance(model, sklearn.base.BaseEstimator):
|
115
|
+
self._logger.debug("Scikit-learn model save detected")
|
116
|
+
# Additional logging or processing can be added here
|
117
|
+
|
118
|
+
except Exception as e:
|
119
|
+
self._logger.warning(f"Scikit-learn model save hook error: {e}")
|
120
|
+
|
121
|
+
def _on_model_fit(self, model, *args, **kwargs):
|
122
|
+
"""Hook called when a model is fitted."""
|
123
|
+
try:
|
124
|
+
import sklearn.base
|
125
|
+
|
126
|
+
if isinstance(model, sklearn.base.BaseEstimator):
|
127
|
+
self._logger.debug("Scikit-learn model fit detected")
|
128
|
+
# Could automatically log model parameters here
|
129
|
+
|
130
|
+
except Exception as e:
|
131
|
+
self._logger.warning(f"Scikit-learn model fit hook error: {e}")
|
132
|
+
|
133
|
+
def check_dependencies(self) -> bool:
|
134
|
+
"""Enhanced dependency checking for scikit-learn."""
|
135
|
+
# Check basic dependencies first
|
136
|
+
if not super().check_dependencies():
|
137
|
+
return False
|
138
|
+
|
139
|
+
try:
|
140
|
+
import sklearn
|
141
|
+
|
142
|
+
# Check minimum scikit-learn version
|
143
|
+
from packaging.version import Version
|
144
|
+
min_sklearn_version = "1.0.0"
|
145
|
+
|
146
|
+
if Version(sklearn.__version__) < Version(min_sklearn_version):
|
147
|
+
self._logger.error(f"Scikit-learn {min_sklearn_version}+ required, found {sklearn.__version__}")
|
148
|
+
return False
|
149
|
+
|
150
|
+
self._logger.debug(f"Scikit-learn {sklearn.__version__} dependency satisfied")
|
151
|
+
return True
|
152
|
+
|
153
|
+
except ImportError:
|
154
|
+
self._logger.error("Scikit-learn not installed")
|
155
|
+
return False
|
156
|
+
except Exception as e:
|
157
|
+
self._logger.error(f"Scikit-learn dependency check failed: {e}")
|
158
|
+
return False
|
@@ -0,0 +1,187 @@
|
|
1
|
+
"""
|
2
|
+
Transformers Plugin for Genesis-Flow
|
3
|
+
|
4
|
+
Provides Hugging Face Transformers integration as a modular plugin.
|
5
|
+
"""
|
6
|
+
|
7
|
+
import logging
|
8
|
+
from typing import Dict, Callable
|
9
|
+
|
10
|
+
from mlflow.plugins.base import FrameworkPlugin, PluginMetadata, PluginType
|
11
|
+
|
12
|
+
logger = logging.getLogger(__name__)
|
13
|
+
|
14
|
+
class TransformersPlugin(FrameworkPlugin):
|
15
|
+
"""
|
16
|
+
Hugging Face Transformers framework plugin for Genesis-Flow.
|
17
|
+
|
18
|
+
Provides transformers model logging, autologging, and deployment capabilities.
|
19
|
+
"""
|
20
|
+
|
21
|
+
@classmethod
|
22
|
+
def get_default_metadata(cls) -> PluginMetadata:
|
23
|
+
"""Get default metadata for transformers plugin."""
|
24
|
+
return PluginMetadata(
|
25
|
+
name="transformers",
|
26
|
+
version="1.0.0",
|
27
|
+
description="Hugging Face Transformers NLP framework integration",
|
28
|
+
author="Genesis-Flow Team",
|
29
|
+
plugin_type=PluginType.FRAMEWORK,
|
30
|
+
dependencies=["transformers"],
|
31
|
+
optional_dependencies=["torch", "tensorflow", "sentencepiece", "tokenizers"],
|
32
|
+
min_genesis_flow_version="1.0.0",
|
33
|
+
homepage="https://huggingface.co/transformers",
|
34
|
+
documentation="https://mlflow.org/docs/latest/models.html#transformers-transformers",
|
35
|
+
license="Apache 2.0",
|
36
|
+
tags=["nlp", "transformers", "hugging-face", "llm"],
|
37
|
+
)
|
38
|
+
|
39
|
+
def get_module_path(self) -> str:
|
40
|
+
"""Get the module path for transformers integration."""
|
41
|
+
return "mlflow.transformers"
|
42
|
+
|
43
|
+
def get_autolog_functions(self) -> Dict[str, Callable]:
|
44
|
+
"""Get transformers autologging functions."""
|
45
|
+
try:
|
46
|
+
from mlflow.transformers import autolog
|
47
|
+
return {
|
48
|
+
"autolog": autolog,
|
49
|
+
}
|
50
|
+
except ImportError:
|
51
|
+
logger.warning("Transformers autolog not available")
|
52
|
+
return {}
|
53
|
+
|
54
|
+
def get_save_functions(self) -> Dict[str, Callable]:
|
55
|
+
"""Get transformers model saving functions."""
|
56
|
+
try:
|
57
|
+
from mlflow.transformers import log_model, save_model
|
58
|
+
return {
|
59
|
+
"log_model": log_model,
|
60
|
+
"save_model": save_model,
|
61
|
+
}
|
62
|
+
except ImportError:
|
63
|
+
logger.warning("Transformers save functions not available")
|
64
|
+
return {}
|
65
|
+
|
66
|
+
def get_load_functions(self) -> Dict[str, Callable]:
|
67
|
+
"""Get transformers model loading functions."""
|
68
|
+
try:
|
69
|
+
from mlflow.transformers import load_model
|
70
|
+
return {
|
71
|
+
"load_model": load_model,
|
72
|
+
}
|
73
|
+
except ImportError:
|
74
|
+
logger.warning("Transformers load functions not available")
|
75
|
+
return {}
|
76
|
+
|
77
|
+
def enable(self) -> bool:
|
78
|
+
"""Enable transformers plugin with enhanced functionality."""
|
79
|
+
try:
|
80
|
+
# Call parent enable
|
81
|
+
if not super().enable():
|
82
|
+
return False
|
83
|
+
|
84
|
+
# Additional transformers-specific setup
|
85
|
+
self._setup_transformers_environment()
|
86
|
+
|
87
|
+
self._logger.info("Transformers plugin enabled with full functionality")
|
88
|
+
return True
|
89
|
+
|
90
|
+
except Exception as e:
|
91
|
+
self._logger.error(f"Failed to enable transformers plugin: {e}")
|
92
|
+
return False
|
93
|
+
|
94
|
+
def _setup_transformers_environment(self):
|
95
|
+
"""Setup transformers-specific environment and configurations."""
|
96
|
+
try:
|
97
|
+
import transformers
|
98
|
+
|
99
|
+
# Log transformers version
|
100
|
+
self._logger.info(f"Transformers version: {transformers.__version__}")
|
101
|
+
|
102
|
+
# Check for available backends
|
103
|
+
try:
|
104
|
+
import torch
|
105
|
+
self._logger.info(f"PyTorch backend available: {torch.__version__}")
|
106
|
+
except ImportError:
|
107
|
+
pass
|
108
|
+
|
109
|
+
try:
|
110
|
+
import tensorflow as tf
|
111
|
+
self._logger.info(f"TensorFlow backend available: {tf.__version__}")
|
112
|
+
except ImportError:
|
113
|
+
pass
|
114
|
+
|
115
|
+
# Setup hooks for automatic model artifact logging
|
116
|
+
self.register_hook("model_save", self._on_model_save)
|
117
|
+
self.register_hook("model_load", self._on_model_load)
|
118
|
+
|
119
|
+
except Exception as e:
|
120
|
+
self._logger.warning(f"Transformers environment setup warning: {e}")
|
121
|
+
|
122
|
+
def _on_model_save(self, model, *args, **kwargs):
|
123
|
+
"""Hook called when a model is saved."""
|
124
|
+
try:
|
125
|
+
# Check if it's a transformers model
|
126
|
+
if hasattr(model, 'config') and hasattr(model, 'save_pretrained'):
|
127
|
+
self._logger.debug("Transformers model save detected")
|
128
|
+
# Additional logging or processing can be added here
|
129
|
+
|
130
|
+
except Exception as e:
|
131
|
+
self._logger.warning(f"Transformers model save hook error: {e}")
|
132
|
+
|
133
|
+
def _on_model_load(self, model_path, *args, **kwargs):
|
134
|
+
"""Hook called when a model is loaded."""
|
135
|
+
try:
|
136
|
+
self._logger.debug(f"Transformers model load detected: {model_path}")
|
137
|
+
# Additional processing can be added here
|
138
|
+
|
139
|
+
except Exception as e:
|
140
|
+
self._logger.warning(f"Transformers model load hook error: {e}")
|
141
|
+
|
142
|
+
def check_dependencies(self) -> bool:
|
143
|
+
"""Enhanced dependency checking for transformers."""
|
144
|
+
# Check basic dependencies first
|
145
|
+
if not super().check_dependencies():
|
146
|
+
return False
|
147
|
+
|
148
|
+
try:
|
149
|
+
import transformers
|
150
|
+
|
151
|
+
# Check minimum transformers version
|
152
|
+
from packaging.version import Version
|
153
|
+
min_transformers_version = "4.20.0"
|
154
|
+
|
155
|
+
if Version(transformers.__version__) < Version(min_transformers_version):
|
156
|
+
self._logger.error(f"Transformers {min_transformers_version}+ required, found {transformers.__version__}")
|
157
|
+
return False
|
158
|
+
|
159
|
+
# Check that at least one backend is available
|
160
|
+
has_torch = False
|
161
|
+
has_tf = False
|
162
|
+
|
163
|
+
try:
|
164
|
+
import torch
|
165
|
+
has_torch = True
|
166
|
+
except ImportError:
|
167
|
+
pass
|
168
|
+
|
169
|
+
try:
|
170
|
+
import tensorflow
|
171
|
+
has_tf = True
|
172
|
+
except ImportError:
|
173
|
+
pass
|
174
|
+
|
175
|
+
if not (has_torch or has_tf):
|
176
|
+
self._logger.warning("Neither PyTorch nor TensorFlow backend found for Transformers")
|
177
|
+
# Don't fail, but warn
|
178
|
+
|
179
|
+
self._logger.debug(f"Transformers {transformers.__version__} dependency satisfied")
|
180
|
+
return True
|
181
|
+
|
182
|
+
except ImportError:
|
183
|
+
self._logger.error("Transformers not installed")
|
184
|
+
return False
|
185
|
+
except Exception as e:
|
186
|
+
self._logger.error(f"Transformers dependency check failed: {e}")
|
187
|
+
return False
|
mlflow/plugins/cli.py
ADDED
@@ -0,0 +1,321 @@
|
|
1
|
+
"""
|
2
|
+
CLI Commands for Genesis-Flow Plugin Management
|
3
|
+
|
4
|
+
Provides command-line interface for managing plugins:
|
5
|
+
- List available plugins
|
6
|
+
- Enable/disable plugins
|
7
|
+
- Get plugin information
|
8
|
+
- Plugin statistics
|
9
|
+
"""
|
10
|
+
|
11
|
+
import logging
|
12
|
+
import click
|
13
|
+
from typing import Optional
|
14
|
+
|
15
|
+
from mlflow.plugins import get_plugin_manager
|
16
|
+
from mlflow.plugins.base import PluginType, PluginState
|
17
|
+
|
18
|
+
logger = logging.getLogger(__name__)
|
19
|
+
|
20
|
+
@click.group(name="plugins")
|
21
|
+
def plugins_cli():
|
22
|
+
"""Manage Genesis-Flow plugins."""
|
23
|
+
pass
|
24
|
+
|
25
|
+
@plugins_cli.command()
|
26
|
+
@click.option("--type", "-t", "plugin_type", type=click.Choice([t.value for t in PluginType]),
|
27
|
+
help="Filter by plugin type")
|
28
|
+
@click.option("--state", "-s", type=click.Choice([s.value for s in PluginState]),
|
29
|
+
help="Filter by plugin state")
|
30
|
+
@click.option("--detailed", "-d", is_flag=True, help="Show detailed plugin information")
|
31
|
+
def list(plugin_type: Optional[str], state: Optional[str], detailed: bool):
|
32
|
+
"""List available plugins."""
|
33
|
+
try:
|
34
|
+
manager = get_plugin_manager()
|
35
|
+
manager.initialize()
|
36
|
+
|
37
|
+
# Convert string filters to enums
|
38
|
+
type_filter = PluginType(plugin_type) if plugin_type else None
|
39
|
+
state_filter = PluginState(state) if state else None
|
40
|
+
|
41
|
+
plugins = manager.list_plugins(plugin_type=type_filter, state=state_filter)
|
42
|
+
|
43
|
+
if not plugins:
|
44
|
+
click.echo("No plugins found matching criteria.")
|
45
|
+
return
|
46
|
+
|
47
|
+
if detailed:
|
48
|
+
_show_detailed_plugin_list(plugins)
|
49
|
+
else:
|
50
|
+
_show_simple_plugin_list(plugins)
|
51
|
+
|
52
|
+
except Exception as e:
|
53
|
+
click.echo(f"Error listing plugins: {e}", err=True)
|
54
|
+
|
55
|
+
@plugins_cli.command()
|
56
|
+
@click.argument("name")
|
57
|
+
def info(name: str):
|
58
|
+
"""Show detailed information about a plugin."""
|
59
|
+
try:
|
60
|
+
manager = get_plugin_manager()
|
61
|
+
manager.initialize()
|
62
|
+
|
63
|
+
plugin = manager.get_plugin(name)
|
64
|
+
if plugin:
|
65
|
+
_show_plugin_info(plugin.get_info())
|
66
|
+
else:
|
67
|
+
# Check if plugin is available but not enabled
|
68
|
+
if manager.is_plugin_available(name):
|
69
|
+
click.echo(f"Plugin '{name}' is available but not enabled.")
|
70
|
+
click.echo(f"Use 'genesis-flow plugins enable {name}' to enable it.")
|
71
|
+
else:
|
72
|
+
click.echo(f"Plugin '{name}' not found.")
|
73
|
+
|
74
|
+
except Exception as e:
|
75
|
+
click.echo(f"Error getting plugin info: {e}", err=True)
|
76
|
+
|
77
|
+
@plugins_cli.command()
|
78
|
+
@click.argument("name")
|
79
|
+
@click.option("--force", "-f", is_flag=True, help="Force enable even if dependencies are missing")
|
80
|
+
def enable(name: str, force: bool):
|
81
|
+
"""Enable a plugin."""
|
82
|
+
try:
|
83
|
+
manager = get_plugin_manager()
|
84
|
+
manager.initialize()
|
85
|
+
|
86
|
+
if not manager.is_plugin_available(name):
|
87
|
+
click.echo(f"Plugin '{name}' not found.")
|
88
|
+
return
|
89
|
+
|
90
|
+
if manager.is_plugin_enabled(name):
|
91
|
+
click.echo(f"Plugin '{name}' is already enabled.")
|
92
|
+
return
|
93
|
+
|
94
|
+
# Check dependencies unless forced
|
95
|
+
if not force:
|
96
|
+
plugin_class = manager._registry.get_plugin_class(name)
|
97
|
+
if plugin_class:
|
98
|
+
# Create temporary instance to check dependencies
|
99
|
+
metadata = manager._get_plugin_metadata(name, plugin_class)
|
100
|
+
temp_instance = plugin_class(metadata)
|
101
|
+
|
102
|
+
if not temp_instance.check_dependencies():
|
103
|
+
click.echo(f"Plugin '{name}' has unmet dependencies.")
|
104
|
+
click.echo("Use --force to enable anyway, or install missing dependencies.")
|
105
|
+
return
|
106
|
+
|
107
|
+
if manager.enable_plugin(name):
|
108
|
+
click.echo(f"Plugin '{name}' enabled successfully.")
|
109
|
+
else:
|
110
|
+
click.echo(f"Failed to enable plugin '{name}'.")
|
111
|
+
|
112
|
+
except Exception as e:
|
113
|
+
click.echo(f"Error enabling plugin: {e}", err=True)
|
114
|
+
|
115
|
+
@plugins_cli.command()
|
116
|
+
@click.argument("name")
|
117
|
+
def disable(name: str):
|
118
|
+
"""Disable a plugin."""
|
119
|
+
try:
|
120
|
+
manager = get_plugin_manager()
|
121
|
+
manager.initialize()
|
122
|
+
|
123
|
+
if not manager.is_plugin_enabled(name):
|
124
|
+
click.echo(f"Plugin '{name}' is not enabled.")
|
125
|
+
return
|
126
|
+
|
127
|
+
if manager.disable_plugin(name):
|
128
|
+
click.echo(f"Plugin '{name}' disabled successfully.")
|
129
|
+
else:
|
130
|
+
click.echo(f"Failed to disable plugin '{name}'.")
|
131
|
+
|
132
|
+
except Exception as e:
|
133
|
+
click.echo(f"Error disabling plugin: {e}", err=True)
|
134
|
+
|
135
|
+
@plugins_cli.command()
|
136
|
+
@click.argument("name")
|
137
|
+
def reload(name: str):
|
138
|
+
"""Reload a plugin."""
|
139
|
+
try:
|
140
|
+
manager = get_plugin_manager()
|
141
|
+
manager.initialize()
|
142
|
+
|
143
|
+
if not manager.is_plugin_available(name):
|
144
|
+
click.echo(f"Plugin '{name}' not found.")
|
145
|
+
return
|
146
|
+
|
147
|
+
if manager.reload_plugin(name):
|
148
|
+
click.echo(f"Plugin '{name}' reloaded successfully.")
|
149
|
+
else:
|
150
|
+
click.echo(f"Failed to reload plugin '{name}'.")
|
151
|
+
|
152
|
+
except Exception as e:
|
153
|
+
click.echo(f"Error reloading plugin: {e}", err=True)
|
154
|
+
|
155
|
+
@plugins_cli.command()
|
156
|
+
def stats():
|
157
|
+
"""Show plugin statistics."""
|
158
|
+
try:
|
159
|
+
manager = get_plugin_manager()
|
160
|
+
manager.initialize()
|
161
|
+
|
162
|
+
stats = manager.get_stats()
|
163
|
+
|
164
|
+
click.echo("Plugin Statistics:")
|
165
|
+
click.echo("=" * 50)
|
166
|
+
click.echo(f"Total Registered: {stats['total_registered']}")
|
167
|
+
click.echo(f"Total Instances: {stats['total_instances']}")
|
168
|
+
click.echo(f"Enabled: {stats['enabled']}")
|
169
|
+
click.echo(f"Disabled: {stats['disabled']}")
|
170
|
+
click.echo(f"Failed: {stats['failed']}")
|
171
|
+
|
172
|
+
if stats['by_type']:
|
173
|
+
click.echo("\nBy Type:")
|
174
|
+
for plugin_type, count in stats['by_type'].items():
|
175
|
+
click.echo(f" {plugin_type:15} {count}")
|
176
|
+
|
177
|
+
except Exception as e:
|
178
|
+
click.echo(f"Error getting plugin stats: {e}", err=True)
|
179
|
+
|
180
|
+
@plugins_cli.command()
|
181
|
+
def discover():
|
182
|
+
"""Rediscover available plugins."""
|
183
|
+
try:
|
184
|
+
from mlflow.plugins.discovery import refresh_discovery
|
185
|
+
|
186
|
+
plugins = refresh_discovery()
|
187
|
+
click.echo(f"Discovered {len(plugins)} plugins:")
|
188
|
+
|
189
|
+
for name in sorted(plugins.keys()):
|
190
|
+
click.echo(f" - {name}")
|
191
|
+
|
192
|
+
except Exception as e:
|
193
|
+
click.echo(f"Error discovering plugins: {e}", err=True)
|
194
|
+
|
195
|
+
@plugins_cli.command()
|
196
|
+
@click.option("--type", "-t", "plugin_type", type=click.Choice([t.value for t in PluginType]),
|
197
|
+
help="Enable all plugins of this type")
|
198
|
+
def enable_all(plugin_type: Optional[str]):
|
199
|
+
"""Enable all available plugins or all plugins of a specific type."""
|
200
|
+
try:
|
201
|
+
manager = get_plugin_manager()
|
202
|
+
manager.initialize()
|
203
|
+
|
204
|
+
type_filter = PluginType(plugin_type) if plugin_type else None
|
205
|
+
plugins = manager.list_plugins(plugin_type=type_filter, state=PluginState.DISCOVERED)
|
206
|
+
|
207
|
+
if not plugins:
|
208
|
+
click.echo("No plugins available to enable.")
|
209
|
+
return
|
210
|
+
|
211
|
+
enabled_count = 0
|
212
|
+
for plugin_info in plugins:
|
213
|
+
name = plugin_info['name']
|
214
|
+
if manager.enable_plugin(name):
|
215
|
+
click.echo(f"✓ Enabled {name}")
|
216
|
+
enabled_count += 1
|
217
|
+
else:
|
218
|
+
click.echo(f"✗ Failed to enable {name}")
|
219
|
+
|
220
|
+
click.echo(f"\nEnabled {enabled_count}/{len(plugins)} plugins.")
|
221
|
+
|
222
|
+
except Exception as e:
|
223
|
+
click.echo(f"Error enabling plugins: {e}", err=True)
|
224
|
+
|
225
|
+
@plugins_cli.command()
|
226
|
+
@click.option("--type", "-t", "plugin_type", type=click.Choice([t.value for t in PluginType]),
|
227
|
+
help="Disable all plugins of this type")
|
228
|
+
def disable_all(plugin_type: Optional[str]):
|
229
|
+
"""Disable all enabled plugins or all plugins of a specific type."""
|
230
|
+
try:
|
231
|
+
manager = get_plugin_manager()
|
232
|
+
manager.initialize()
|
233
|
+
|
234
|
+
type_filter = PluginType(plugin_type) if plugin_type else None
|
235
|
+
plugins = manager.list_plugins(plugin_type=type_filter, state=PluginState.ENABLED)
|
236
|
+
|
237
|
+
if not plugins:
|
238
|
+
click.echo("No plugins enabled to disable.")
|
239
|
+
return
|
240
|
+
|
241
|
+
disabled_count = 0
|
242
|
+
for plugin_info in plugins:
|
243
|
+
name = plugin_info['name']
|
244
|
+
if manager.disable_plugin(name):
|
245
|
+
click.echo(f"✓ Disabled {name}")
|
246
|
+
disabled_count += 1
|
247
|
+
else:
|
248
|
+
click.echo(f"✗ Failed to disable {name}")
|
249
|
+
|
250
|
+
click.echo(f"\nDisabled {disabled_count}/{len(plugins)} plugins.")
|
251
|
+
|
252
|
+
except Exception as e:
|
253
|
+
click.echo(f"Error disabling plugins: {e}", err=True)
|
254
|
+
|
255
|
+
def _show_simple_plugin_list(plugins):
|
256
|
+
"""Show simple plugin list."""
|
257
|
+
click.echo(f"Found {len(plugins)} plugins:")
|
258
|
+
click.echo()
|
259
|
+
|
260
|
+
# Group by state
|
261
|
+
by_state = {}
|
262
|
+
for plugin in plugins:
|
263
|
+
state = plugin['state']
|
264
|
+
if state not in by_state:
|
265
|
+
by_state[state] = []
|
266
|
+
by_state[state].append(plugin)
|
267
|
+
|
268
|
+
for state in ['enabled', 'disabled', 'loaded', 'discovered', 'failed']:
|
269
|
+
if state in by_state:
|
270
|
+
click.echo(f"{state.upper()}:")
|
271
|
+
for plugin in by_state[state]:
|
272
|
+
type_info = f" ({plugin['type']})" if 'type' in plugin else ""
|
273
|
+
click.echo(f" ✓ {plugin['name']}{type_info}")
|
274
|
+
click.echo()
|
275
|
+
|
276
|
+
def _show_detailed_plugin_list(plugins):
|
277
|
+
"""Show detailed plugin list."""
|
278
|
+
click.echo(f"Found {len(plugins)} plugins:")
|
279
|
+
click.echo("=" * 80)
|
280
|
+
|
281
|
+
for plugin in plugins:
|
282
|
+
click.echo(f"Name: {plugin['name']}")
|
283
|
+
click.echo(f"Version: {plugin.get('version', 'Unknown')}")
|
284
|
+
click.echo(f"Type: {plugin.get('type', 'Unknown')}")
|
285
|
+
click.echo(f"State: {plugin['state']}")
|
286
|
+
click.echo(f"Description: {plugin.get('description', 'No description')}")
|
287
|
+
|
288
|
+
if plugin.get('dependencies'):
|
289
|
+
click.echo(f"Dependencies: {', '.join(plugin['dependencies'])}")
|
290
|
+
|
291
|
+
if plugin.get('tags'):
|
292
|
+
click.echo(f"Tags: {', '.join(plugin['tags'])}")
|
293
|
+
|
294
|
+
click.echo("-" * 80)
|
295
|
+
|
296
|
+
def _show_plugin_info(plugin_info):
|
297
|
+
"""Show detailed information about a single plugin."""
|
298
|
+
click.echo("Plugin Information:")
|
299
|
+
click.echo("=" * 50)
|
300
|
+
|
301
|
+
for key, value in plugin_info.items():
|
302
|
+
if isinstance(value, list):
|
303
|
+
if value:
|
304
|
+
click.echo(f"{key.capitalize()}: {', '.join(value)}")
|
305
|
+
else:
|
306
|
+
click.echo(f"{key.capitalize()}: None")
|
307
|
+
else:
|
308
|
+
click.echo(f"{key.capitalize()}: {value}")
|
309
|
+
|
310
|
+
# Add to mlflow CLI
|
311
|
+
def register_plugin_cli():
|
312
|
+
"""Register plugin CLI commands with MLflow CLI."""
|
313
|
+
try:
|
314
|
+
import mlflow.cli
|
315
|
+
|
316
|
+
# Add plugins command group to mlflow CLI
|
317
|
+
if hasattr(mlflow.cli, 'cli'):
|
318
|
+
mlflow.cli.cli.add_command(plugins_cli)
|
319
|
+
|
320
|
+
except Exception as e:
|
321
|
+
logger.warning(f"Failed to register plugin CLI: {e}")
|