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,72 @@
|
|
1
|
+
"""
|
2
|
+
Genesis-Flow Plugin Architecture
|
3
|
+
|
4
|
+
This module provides a comprehensive plugin system for ML frameworks and extensions.
|
5
|
+
Plugins can be dynamically discovered, loaded, enabled/disabled, and managed.
|
6
|
+
|
7
|
+
The plugin system supports:
|
8
|
+
- Framework plugins (PyTorch, TensorFlow, XGBoost, etc.)
|
9
|
+
- Custom logging plugins
|
10
|
+
- Model registry plugins
|
11
|
+
- Deployment plugins
|
12
|
+
- UI extensions
|
13
|
+
|
14
|
+
Example usage:
|
15
|
+
from mlflow.plugins import PluginManager
|
16
|
+
|
17
|
+
# Get plugin manager
|
18
|
+
manager = PluginManager()
|
19
|
+
|
20
|
+
# List available plugins
|
21
|
+
plugins = manager.list_plugins()
|
22
|
+
|
23
|
+
# Enable a plugin
|
24
|
+
manager.enable_plugin("pytorch")
|
25
|
+
|
26
|
+
# Use the plugin
|
27
|
+
import mlflow.pytorch
|
28
|
+
"""
|
29
|
+
|
30
|
+
from mlflow.plugins.manager import PluginManager
|
31
|
+
from mlflow.plugins.registry import PluginRegistry
|
32
|
+
from mlflow.plugins.base import BasePlugin, FrameworkPlugin
|
33
|
+
from mlflow.plugins.discovery import discover_plugins, scan_entrypoints
|
34
|
+
|
35
|
+
__all__ = [
|
36
|
+
"PluginManager",
|
37
|
+
"PluginRegistry",
|
38
|
+
"BasePlugin",
|
39
|
+
"FrameworkPlugin",
|
40
|
+
"discover_plugins",
|
41
|
+
"scan_entrypoints",
|
42
|
+
]
|
43
|
+
|
44
|
+
# Global plugin manager instance
|
45
|
+
_plugin_manager = None
|
46
|
+
|
47
|
+
def get_plugin_manager() -> PluginManager:
|
48
|
+
"""Get the global plugin manager instance."""
|
49
|
+
global _plugin_manager
|
50
|
+
if _plugin_manager is None:
|
51
|
+
_plugin_manager = PluginManager()
|
52
|
+
return _plugin_manager
|
53
|
+
|
54
|
+
def list_plugins():
|
55
|
+
"""List all available plugins."""
|
56
|
+
return get_plugin_manager().list_plugins()
|
57
|
+
|
58
|
+
def enable_plugin(name: str):
|
59
|
+
"""Enable a plugin by name."""
|
60
|
+
return get_plugin_manager().enable_plugin(name)
|
61
|
+
|
62
|
+
def disable_plugin(name: str):
|
63
|
+
"""Disable a plugin by name."""
|
64
|
+
return get_plugin_manager().disable_plugin(name)
|
65
|
+
|
66
|
+
def is_plugin_enabled(name: str) -> bool:
|
67
|
+
"""Check if a plugin is enabled."""
|
68
|
+
return get_plugin_manager().is_plugin_enabled(name)
|
69
|
+
|
70
|
+
def get_plugin(name: str):
|
71
|
+
"""Get a plugin instance by name."""
|
72
|
+
return get_plugin_manager().get_plugin(name)
|
mlflow/plugins/base.py
ADDED
@@ -0,0 +1,358 @@
|
|
1
|
+
"""
|
2
|
+
Base Plugin Classes for Genesis-Flow Plugin System
|
3
|
+
|
4
|
+
Defines the interface and base classes that all plugins must implement.
|
5
|
+
"""
|
6
|
+
|
7
|
+
import logging
|
8
|
+
from abc import ABC, abstractmethod
|
9
|
+
from typing import Dict, List, Optional, Any, Callable
|
10
|
+
from dataclasses import dataclass
|
11
|
+
from enum import Enum
|
12
|
+
|
13
|
+
logger = logging.getLogger(__name__)
|
14
|
+
|
15
|
+
class PluginType(Enum):
|
16
|
+
"""Types of plugins supported by Genesis-Flow."""
|
17
|
+
FRAMEWORK = "framework" # ML framework integration (PyTorch, TensorFlow, etc.)
|
18
|
+
LOGGING = "logging" # Custom logging backends
|
19
|
+
MODEL_REGISTRY = "registry" # Model registry integrations
|
20
|
+
DEPLOYMENT = "deployment" # Deployment platforms
|
21
|
+
ARTIFACT = "artifact" # Artifact storage backends
|
22
|
+
UI = "ui" # UI extensions
|
23
|
+
CUSTOM = "custom" # Custom extensions
|
24
|
+
|
25
|
+
@dataclass
|
26
|
+
class PluginMetadata:
|
27
|
+
"""Metadata for a plugin."""
|
28
|
+
name: str
|
29
|
+
version: str
|
30
|
+
description: str
|
31
|
+
author: str
|
32
|
+
plugin_type: PluginType
|
33
|
+
dependencies: List[str]
|
34
|
+
optional_dependencies: List[str]
|
35
|
+
min_genesis_flow_version: str
|
36
|
+
max_genesis_flow_version: Optional[str] = None
|
37
|
+
homepage: Optional[str] = None
|
38
|
+
documentation: Optional[str] = None
|
39
|
+
license: Optional[str] = None
|
40
|
+
tags: List[str] = None
|
41
|
+
|
42
|
+
def __post_init__(self):
|
43
|
+
if self.tags is None:
|
44
|
+
self.tags = []
|
45
|
+
|
46
|
+
class PluginState(Enum):
|
47
|
+
"""States a plugin can be in."""
|
48
|
+
DISCOVERED = "discovered"
|
49
|
+
LOADED = "loaded"
|
50
|
+
ENABLED = "enabled"
|
51
|
+
DISABLED = "disabled"
|
52
|
+
FAILED = "failed"
|
53
|
+
|
54
|
+
class BasePlugin(ABC):
|
55
|
+
"""
|
56
|
+
Base class for all Genesis-Flow plugins.
|
57
|
+
|
58
|
+
All plugins must inherit from this class and implement the required methods.
|
59
|
+
"""
|
60
|
+
|
61
|
+
def __init__(self, metadata: PluginMetadata):
|
62
|
+
self.metadata = metadata
|
63
|
+
self.state = PluginState.DISCOVERED
|
64
|
+
self._logger = logging.getLogger(f"mlflow.plugins.{metadata.name}")
|
65
|
+
self._hooks = {}
|
66
|
+
|
67
|
+
@abstractmethod
|
68
|
+
def load(self) -> bool:
|
69
|
+
"""
|
70
|
+
Load the plugin and perform any necessary initialization.
|
71
|
+
|
72
|
+
Returns:
|
73
|
+
True if loading was successful, False otherwise
|
74
|
+
"""
|
75
|
+
pass
|
76
|
+
|
77
|
+
@abstractmethod
|
78
|
+
def enable(self) -> bool:
|
79
|
+
"""
|
80
|
+
Enable the plugin for use.
|
81
|
+
|
82
|
+
Returns:
|
83
|
+
True if enabling was successful, False otherwise
|
84
|
+
"""
|
85
|
+
pass
|
86
|
+
|
87
|
+
@abstractmethod
|
88
|
+
def disable(self) -> bool:
|
89
|
+
"""
|
90
|
+
Disable the plugin.
|
91
|
+
|
92
|
+
Returns:
|
93
|
+
True if disabling was successful, False otherwise
|
94
|
+
"""
|
95
|
+
pass
|
96
|
+
|
97
|
+
@abstractmethod
|
98
|
+
def unload(self) -> bool:
|
99
|
+
"""
|
100
|
+
Unload the plugin and clean up resources.
|
101
|
+
|
102
|
+
Returns:
|
103
|
+
True if unloading was successful, False otherwise
|
104
|
+
"""
|
105
|
+
pass
|
106
|
+
|
107
|
+
def is_compatible(self, genesis_flow_version: str) -> bool:
|
108
|
+
"""
|
109
|
+
Check if the plugin is compatible with the current Genesis-Flow version.
|
110
|
+
|
111
|
+
Args:
|
112
|
+
genesis_flow_version: Current Genesis-Flow version
|
113
|
+
|
114
|
+
Returns:
|
115
|
+
True if compatible, False otherwise
|
116
|
+
"""
|
117
|
+
from packaging.version import Version
|
118
|
+
|
119
|
+
try:
|
120
|
+
current = Version(genesis_flow_version)
|
121
|
+
min_version = Version(self.metadata.min_genesis_flow_version)
|
122
|
+
|
123
|
+
if current < min_version:
|
124
|
+
return False
|
125
|
+
|
126
|
+
if self.metadata.max_genesis_flow_version:
|
127
|
+
max_version = Version(self.metadata.max_genesis_flow_version)
|
128
|
+
if current > max_version:
|
129
|
+
return False
|
130
|
+
|
131
|
+
return True
|
132
|
+
|
133
|
+
except Exception as e:
|
134
|
+
self._logger.warning(f"Version compatibility check failed: {e}")
|
135
|
+
return False
|
136
|
+
|
137
|
+
def check_dependencies(self) -> bool:
|
138
|
+
"""
|
139
|
+
Check if all required dependencies are available.
|
140
|
+
|
141
|
+
Returns:
|
142
|
+
True if all dependencies are satisfied, False otherwise
|
143
|
+
"""
|
144
|
+
try:
|
145
|
+
import importlib
|
146
|
+
|
147
|
+
for dep in self.metadata.dependencies:
|
148
|
+
try:
|
149
|
+
importlib.import_module(dep)
|
150
|
+
except ImportError:
|
151
|
+
self._logger.error(f"Required dependency '{dep}' not found")
|
152
|
+
return False
|
153
|
+
|
154
|
+
# Check optional dependencies and log warnings
|
155
|
+
for dep in self.metadata.optional_dependencies:
|
156
|
+
try:
|
157
|
+
importlib.import_module(dep)
|
158
|
+
except ImportError:
|
159
|
+
self._logger.warning(f"Optional dependency '{dep}' not found")
|
160
|
+
|
161
|
+
return True
|
162
|
+
|
163
|
+
except Exception as e:
|
164
|
+
self._logger.error(f"Dependency check failed: {e}")
|
165
|
+
return False
|
166
|
+
|
167
|
+
def register_hook(self, event: str, callback: Callable):
|
168
|
+
"""Register a callback for a specific event."""
|
169
|
+
if event not in self._hooks:
|
170
|
+
self._hooks[event] = []
|
171
|
+
self._hooks[event].append(callback)
|
172
|
+
|
173
|
+
def trigger_hook(self, event: str, *args, **kwargs):
|
174
|
+
"""Trigger all callbacks for a specific event."""
|
175
|
+
if event in self._hooks:
|
176
|
+
for callback in self._hooks[event]:
|
177
|
+
try:
|
178
|
+
callback(*args, **kwargs)
|
179
|
+
except Exception as e:
|
180
|
+
self._logger.error(f"Hook callback failed for {event}: {e}")
|
181
|
+
|
182
|
+
def get_info(self) -> Dict[str, Any]:
|
183
|
+
"""Get plugin information."""
|
184
|
+
return {
|
185
|
+
"name": self.metadata.name,
|
186
|
+
"version": self.metadata.version,
|
187
|
+
"description": self.metadata.description,
|
188
|
+
"author": self.metadata.author,
|
189
|
+
"type": self.metadata.plugin_type.value,
|
190
|
+
"state": self.state.value,
|
191
|
+
"dependencies": self.metadata.dependencies,
|
192
|
+
"optional_dependencies": self.metadata.optional_dependencies,
|
193
|
+
"tags": self.metadata.tags,
|
194
|
+
}
|
195
|
+
|
196
|
+
class FrameworkPlugin(BasePlugin):
|
197
|
+
"""
|
198
|
+
Base class for ML framework plugins.
|
199
|
+
|
200
|
+
Framework plugins provide integration with ML libraries like PyTorch, TensorFlow, etc.
|
201
|
+
"""
|
202
|
+
|
203
|
+
def __init__(self, metadata: PluginMetadata):
|
204
|
+
super().__init__(metadata)
|
205
|
+
self._module_path = None
|
206
|
+
self._lazy_loader = None
|
207
|
+
|
208
|
+
@abstractmethod
|
209
|
+
def get_module_path(self) -> str:
|
210
|
+
"""
|
211
|
+
Get the module path for the framework integration.
|
212
|
+
|
213
|
+
Returns:
|
214
|
+
Module path (e.g., "mlflow.pytorch")
|
215
|
+
"""
|
216
|
+
pass
|
217
|
+
|
218
|
+
@abstractmethod
|
219
|
+
def get_autolog_functions(self) -> Dict[str, Callable]:
|
220
|
+
"""
|
221
|
+
Get autologging functions provided by this framework.
|
222
|
+
|
223
|
+
Returns:
|
224
|
+
Dict mapping function names to callables
|
225
|
+
"""
|
226
|
+
pass
|
227
|
+
|
228
|
+
@abstractmethod
|
229
|
+
def get_save_functions(self) -> Dict[str, Callable]:
|
230
|
+
"""
|
231
|
+
Get model saving functions provided by this framework.
|
232
|
+
|
233
|
+
Returns:
|
234
|
+
Dict mapping function names to callables
|
235
|
+
"""
|
236
|
+
pass
|
237
|
+
|
238
|
+
@abstractmethod
|
239
|
+
def get_load_functions(self) -> Dict[str, Callable]:
|
240
|
+
"""
|
241
|
+
Get model loading functions provided by this framework.
|
242
|
+
|
243
|
+
Returns:
|
244
|
+
Dict mapping function names to callables
|
245
|
+
"""
|
246
|
+
pass
|
247
|
+
|
248
|
+
def load(self) -> bool:
|
249
|
+
"""Load the framework plugin."""
|
250
|
+
try:
|
251
|
+
if not self.check_dependencies():
|
252
|
+
self.state = PluginState.FAILED
|
253
|
+
return False
|
254
|
+
|
255
|
+
self._module_path = self.get_module_path()
|
256
|
+
|
257
|
+
# Create lazy loader for the framework
|
258
|
+
from mlflow.utils.lazy_load import LazyLoader
|
259
|
+
import mlflow
|
260
|
+
|
261
|
+
self._lazy_loader = LazyLoader(
|
262
|
+
self._module_path,
|
263
|
+
mlflow.__dict__,
|
264
|
+
self._module_path
|
265
|
+
)
|
266
|
+
|
267
|
+
self.state = PluginState.LOADED
|
268
|
+
self._logger.info(f"Framework plugin {self.metadata.name} loaded")
|
269
|
+
return True
|
270
|
+
|
271
|
+
except Exception as e:
|
272
|
+
self._logger.error(f"Failed to load framework plugin {self.metadata.name}: {e}")
|
273
|
+
self.state = PluginState.FAILED
|
274
|
+
return False
|
275
|
+
|
276
|
+
def enable(self) -> bool:
|
277
|
+
"""Enable the framework plugin."""
|
278
|
+
try:
|
279
|
+
if self.state != PluginState.LOADED:
|
280
|
+
if not self.load():
|
281
|
+
return False
|
282
|
+
|
283
|
+
# Register the lazy loader in mlflow namespace
|
284
|
+
import mlflow
|
285
|
+
setattr(mlflow, self.metadata.name, self._lazy_loader)
|
286
|
+
|
287
|
+
self.state = PluginState.ENABLED
|
288
|
+
self._logger.info(f"Framework plugin {self.metadata.name} enabled")
|
289
|
+
return True
|
290
|
+
|
291
|
+
except Exception as e:
|
292
|
+
self._logger.error(f"Failed to enable framework plugin {self.metadata.name}: {e}")
|
293
|
+
self.state = PluginState.FAILED
|
294
|
+
return False
|
295
|
+
|
296
|
+
def disable(self) -> bool:
|
297
|
+
"""Disable the framework plugin."""
|
298
|
+
try:
|
299
|
+
import mlflow
|
300
|
+
|
301
|
+
if hasattr(mlflow, self.metadata.name):
|
302
|
+
delattr(mlflow, self.metadata.name)
|
303
|
+
|
304
|
+
self.state = PluginState.LOADED
|
305
|
+
self._logger.info(f"Framework plugin {self.metadata.name} disabled")
|
306
|
+
return True
|
307
|
+
|
308
|
+
except Exception as e:
|
309
|
+
self._logger.error(f"Failed to disable framework plugin {self.metadata.name}: {e}")
|
310
|
+
return False
|
311
|
+
|
312
|
+
def unload(self) -> bool:
|
313
|
+
"""Unload the framework plugin."""
|
314
|
+
try:
|
315
|
+
self.disable()
|
316
|
+
|
317
|
+
self._lazy_loader = None
|
318
|
+
self._module_path = None
|
319
|
+
|
320
|
+
self.state = PluginState.DISCOVERED
|
321
|
+
self._logger.info(f"Framework plugin {self.metadata.name} unloaded")
|
322
|
+
return True
|
323
|
+
|
324
|
+
except Exception as e:
|
325
|
+
self._logger.error(f"Failed to unload framework plugin {self.metadata.name}: {e}")
|
326
|
+
return False
|
327
|
+
|
328
|
+
class LoggingPlugin(BasePlugin):
|
329
|
+
"""Base class for custom logging backend plugins."""
|
330
|
+
|
331
|
+
@abstractmethod
|
332
|
+
def get_logging_backend(self):
|
333
|
+
"""Get the logging backend implementation."""
|
334
|
+
pass
|
335
|
+
|
336
|
+
class ModelRegistryPlugin(BasePlugin):
|
337
|
+
"""Base class for model registry integration plugins."""
|
338
|
+
|
339
|
+
@abstractmethod
|
340
|
+
def get_registry_backend(self):
|
341
|
+
"""Get the model registry backend implementation."""
|
342
|
+
pass
|
343
|
+
|
344
|
+
class DeploymentPlugin(BasePlugin):
|
345
|
+
"""Base class for deployment platform plugins."""
|
346
|
+
|
347
|
+
@abstractmethod
|
348
|
+
def get_deployment_backend(self):
|
349
|
+
"""Get the deployment backend implementation."""
|
350
|
+
pass
|
351
|
+
|
352
|
+
class ArtifactPlugin(BasePlugin):
|
353
|
+
"""Base class for artifact storage plugins."""
|
354
|
+
|
355
|
+
@abstractmethod
|
356
|
+
def get_artifact_repository(self):
|
357
|
+
"""Get the artifact repository implementation."""
|
358
|
+
pass
|
@@ -0,0 +1,24 @@
|
|
1
|
+
"""
|
2
|
+
Built-in Plugins for Genesis-Flow
|
3
|
+
|
4
|
+
This module contains all built-in plugins that ship with Genesis-Flow.
|
5
|
+
These plugins provide integration with essential ML frameworks.
|
6
|
+
"""
|
7
|
+
|
8
|
+
from mlflow.plugins.builtin.pytorch_plugin import PyTorchPlugin
|
9
|
+
from mlflow.plugins.builtin.sklearn_plugin import SklearnPlugin
|
10
|
+
from mlflow.plugins.builtin.transformers_plugin import TransformersPlugin
|
11
|
+
|
12
|
+
# Registry of all built-in plugins
|
13
|
+
BUILTIN_PLUGINS = {
|
14
|
+
"pytorch": PyTorchPlugin,
|
15
|
+
"sklearn": SklearnPlugin,
|
16
|
+
"transformers": TransformersPlugin,
|
17
|
+
}
|
18
|
+
|
19
|
+
__all__ = [
|
20
|
+
"BUILTIN_PLUGINS",
|
21
|
+
"PyTorchPlugin",
|
22
|
+
"SklearnPlugin",
|
23
|
+
"TransformersPlugin",
|
24
|
+
]
|
@@ -0,0 +1,150 @@
|
|
1
|
+
"""
|
2
|
+
PyTorch Plugin for Genesis-Flow
|
3
|
+
|
4
|
+
Provides PyTorch integration as a modular plugin that can be enabled/disabled.
|
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 PyTorchPlugin(FrameworkPlugin):
|
15
|
+
"""
|
16
|
+
PyTorch framework plugin for Genesis-Flow.
|
17
|
+
|
18
|
+
Provides PyTorch model logging, autologging, and deployment capabilities.
|
19
|
+
"""
|
20
|
+
|
21
|
+
@classmethod
|
22
|
+
def get_default_metadata(cls) -> PluginMetadata:
|
23
|
+
"""Get default metadata for PyTorch plugin."""
|
24
|
+
return PluginMetadata(
|
25
|
+
name="pytorch",
|
26
|
+
version="1.0.0",
|
27
|
+
description="PyTorch deep learning framework integration",
|
28
|
+
author="Genesis-Flow Team",
|
29
|
+
plugin_type=PluginType.FRAMEWORK,
|
30
|
+
dependencies=["torch"],
|
31
|
+
optional_dependencies=["torchvision", "torchaudio"],
|
32
|
+
min_genesis_flow_version="1.0.0",
|
33
|
+
homepage="https://pytorch.org",
|
34
|
+
documentation="https://mlflow.org/docs/latest/models.html#pytorch-pytorch",
|
35
|
+
license="Apache 2.0",
|
36
|
+
tags=["deep-learning", "neural-networks", "pytorch"],
|
37
|
+
)
|
38
|
+
|
39
|
+
def get_module_path(self) -> str:
|
40
|
+
"""Get the module path for PyTorch integration."""
|
41
|
+
return "mlflow.pytorch"
|
42
|
+
|
43
|
+
def get_autolog_functions(self) -> Dict[str, Callable]:
|
44
|
+
"""Get PyTorch autologging functions."""
|
45
|
+
try:
|
46
|
+
from mlflow.pytorch import autolog
|
47
|
+
return {
|
48
|
+
"autolog": autolog,
|
49
|
+
}
|
50
|
+
except ImportError:
|
51
|
+
logger.warning("PyTorch autolog not available")
|
52
|
+
return {}
|
53
|
+
|
54
|
+
def get_save_functions(self) -> Dict[str, Callable]:
|
55
|
+
"""Get PyTorch model saving functions."""
|
56
|
+
try:
|
57
|
+
from mlflow.pytorch import log_model, save_model
|
58
|
+
return {
|
59
|
+
"log_model": log_model,
|
60
|
+
"save_model": save_model,
|
61
|
+
}
|
62
|
+
except ImportError:
|
63
|
+
logger.warning("PyTorch save functions not available")
|
64
|
+
return {}
|
65
|
+
|
66
|
+
def get_load_functions(self) -> Dict[str, Callable]:
|
67
|
+
"""Get PyTorch model loading functions."""
|
68
|
+
try:
|
69
|
+
from mlflow.pytorch import load_model
|
70
|
+
return {
|
71
|
+
"load_model": load_model,
|
72
|
+
}
|
73
|
+
except ImportError:
|
74
|
+
logger.warning("PyTorch load functions not available")
|
75
|
+
return {}
|
76
|
+
|
77
|
+
def enable(self) -> bool:
|
78
|
+
"""Enable PyTorch plugin with enhanced functionality."""
|
79
|
+
try:
|
80
|
+
# Call parent enable
|
81
|
+
if not super().enable():
|
82
|
+
return False
|
83
|
+
|
84
|
+
# Additional PyTorch-specific setup
|
85
|
+
self._setup_pytorch_environment()
|
86
|
+
|
87
|
+
self._logger.info("PyTorch plugin enabled with full functionality")
|
88
|
+
return True
|
89
|
+
|
90
|
+
except Exception as e:
|
91
|
+
self._logger.error(f"Failed to enable PyTorch plugin: {e}")
|
92
|
+
return False
|
93
|
+
|
94
|
+
def _setup_pytorch_environment(self):
|
95
|
+
"""Setup PyTorch-specific environment and configurations."""
|
96
|
+
try:
|
97
|
+
import torch
|
98
|
+
|
99
|
+
# Log PyTorch version and CUDA availability
|
100
|
+
self._logger.info(f"PyTorch version: {torch.__version__}")
|
101
|
+
self._logger.info(f"CUDA available: {torch.cuda.is_available()}")
|
102
|
+
|
103
|
+
if torch.cuda.is_available():
|
104
|
+
self._logger.info(f"CUDA version: {torch.version.cuda}")
|
105
|
+
self._logger.info(f"GPU count: {torch.cuda.device_count()}")
|
106
|
+
|
107
|
+
# Setup hook for automatic model artifact logging
|
108
|
+
self.register_hook("model_save", self._on_model_save)
|
109
|
+
|
110
|
+
except Exception as e:
|
111
|
+
self._logger.warning(f"PyTorch environment setup warning: {e}")
|
112
|
+
|
113
|
+
def _on_model_save(self, model, *args, **kwargs):
|
114
|
+
"""Hook called when a model is saved."""
|
115
|
+
try:
|
116
|
+
import torch
|
117
|
+
|
118
|
+
if isinstance(model, torch.nn.Module):
|
119
|
+
self._logger.debug("PyTorch model save detected")
|
120
|
+
# Additional logging or processing can be added here
|
121
|
+
|
122
|
+
except Exception as e:
|
123
|
+
self._logger.warning(f"PyTorch model save hook error: {e}")
|
124
|
+
|
125
|
+
def check_dependencies(self) -> bool:
|
126
|
+
"""Enhanced dependency checking for PyTorch."""
|
127
|
+
# Check basic dependencies first
|
128
|
+
if not super().check_dependencies():
|
129
|
+
return False
|
130
|
+
|
131
|
+
try:
|
132
|
+
import torch
|
133
|
+
|
134
|
+
# Check minimum PyTorch version
|
135
|
+
from packaging.version import Version
|
136
|
+
min_pytorch_version = "1.9.0"
|
137
|
+
|
138
|
+
if Version(torch.__version__) < Version(min_pytorch_version):
|
139
|
+
self._logger.error(f"PyTorch {min_pytorch_version}+ required, found {torch.__version__}")
|
140
|
+
return False
|
141
|
+
|
142
|
+
self._logger.debug(f"PyTorch {torch.__version__} dependency satisfied")
|
143
|
+
return True
|
144
|
+
|
145
|
+
except ImportError:
|
146
|
+
self._logger.error("PyTorch not installed")
|
147
|
+
return False
|
148
|
+
except Exception as e:
|
149
|
+
self._logger.error(f"PyTorch dependency check failed: {e}")
|
150
|
+
return False
|