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,244 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
|
3
|
+
import re
|
4
|
+
from typing import Optional, Union
|
5
|
+
|
6
|
+
from mlflow.entities.model_registry._model_registry_entity import _ModelRegistryEntity
|
7
|
+
from mlflow.entities.model_registry.model_version_tag import ModelVersionTag
|
8
|
+
from mlflow.exceptions import MlflowException
|
9
|
+
from mlflow.prompt.constants import (
|
10
|
+
IS_PROMPT_TAG_KEY,
|
11
|
+
PROMPT_TEMPLATE_VARIABLE_PATTERN,
|
12
|
+
PROMPT_TEXT_DISPLAY_LIMIT,
|
13
|
+
PROMPT_TEXT_TAG_KEY,
|
14
|
+
)
|
15
|
+
|
16
|
+
# Alias type
|
17
|
+
PromptVersionTag = ModelVersionTag
|
18
|
+
|
19
|
+
|
20
|
+
def _is_reserved_tag(key: str) -> bool:
|
21
|
+
return key in {IS_PROMPT_TAG_KEY, PROMPT_TEXT_TAG_KEY}
|
22
|
+
|
23
|
+
|
24
|
+
class PromptVersion(_ModelRegistryEntity):
|
25
|
+
"""
|
26
|
+
An entity representing a specific version of a prompt with its template content.
|
27
|
+
|
28
|
+
Args:
|
29
|
+
name: The name of the prompt.
|
30
|
+
version: The version number of the prompt.
|
31
|
+
template: The template text of the prompt. It can contain variables enclosed in
|
32
|
+
double curly braces, e.g. {{variable}}, which will be replaced with actual values
|
33
|
+
by the `format` method. MLflow use the same variable naming rules same as Jinja2
|
34
|
+
https://jinja.palletsprojects.com/en/stable/api/#notes-on-identifiers
|
35
|
+
commit_message: The commit message for the prompt version. Optional.
|
36
|
+
creation_timestamp: Timestamp of the prompt creation. Optional.
|
37
|
+
tags: A dictionary of tags associated with the **prompt version**.
|
38
|
+
This is useful for storing version-specific information, such as the author of
|
39
|
+
the changes. Optional.
|
40
|
+
aliases: List of aliases for this prompt version. Optional.
|
41
|
+
last_updated_timestamp: Timestamp of last update. Optional.
|
42
|
+
user_id: User ID that created this prompt version. Optional.
|
43
|
+
"""
|
44
|
+
|
45
|
+
def __init__(
|
46
|
+
self,
|
47
|
+
name: str,
|
48
|
+
version: int,
|
49
|
+
template: str,
|
50
|
+
commit_message: Optional[str] = None,
|
51
|
+
creation_timestamp: Optional[int] = None,
|
52
|
+
tags: Optional[dict[str, str]] = None,
|
53
|
+
aliases: Optional[list[str]] = None,
|
54
|
+
last_updated_timestamp: Optional[int] = None,
|
55
|
+
user_id: Optional[str] = None,
|
56
|
+
):
|
57
|
+
super().__init__()
|
58
|
+
|
59
|
+
# Core PromptVersion attributes
|
60
|
+
self._name: str = name
|
61
|
+
self._version: str = str(version) # Store as string internally
|
62
|
+
self._creation_time: int = creation_timestamp or 0
|
63
|
+
|
64
|
+
# Store template text as a tag
|
65
|
+
tags = tags or {}
|
66
|
+
tags[PROMPT_TEXT_TAG_KEY] = template
|
67
|
+
tags[IS_PROMPT_TAG_KEY] = "true"
|
68
|
+
|
69
|
+
# Store the tags dict
|
70
|
+
self._tags: dict[str, str] = tags
|
71
|
+
|
72
|
+
self._variables = set(PROMPT_TEMPLATE_VARIABLE_PATTERN.findall(template))
|
73
|
+
self._last_updated_timestamp: Optional[int] = last_updated_timestamp
|
74
|
+
self._description: Optional[str] = commit_message
|
75
|
+
self._user_id: Optional[str] = user_id
|
76
|
+
self._aliases: list[str] = aliases or []
|
77
|
+
|
78
|
+
def __repr__(self) -> str:
|
79
|
+
text = (
|
80
|
+
self.template[:PROMPT_TEXT_DISPLAY_LIMIT] + "..."
|
81
|
+
if len(self.template) > PROMPT_TEXT_DISPLAY_LIMIT
|
82
|
+
else self.template
|
83
|
+
)
|
84
|
+
return f"PromptVersion(name={self.name}, version={self.version}, template={text})"
|
85
|
+
|
86
|
+
# Core PromptVersion properties
|
87
|
+
@property
|
88
|
+
def template(self) -> str:
|
89
|
+
"""
|
90
|
+
Return the template text of the prompt.
|
91
|
+
"""
|
92
|
+
return self._tags[PROMPT_TEXT_TAG_KEY]
|
93
|
+
|
94
|
+
def to_single_brace_format(self) -> str:
|
95
|
+
"""
|
96
|
+
Convert the template text to single brace format. This is useful for integrating with other
|
97
|
+
systems that use single curly braces for variable replacement, such as LangChain's prompt
|
98
|
+
template. Default is False.
|
99
|
+
"""
|
100
|
+
t = self.template
|
101
|
+
for var in self.variables:
|
102
|
+
t = re.sub(r"\{\{\s*" + var + r"\s*\}\}", "{" + var + "}", t)
|
103
|
+
return t
|
104
|
+
|
105
|
+
@property
|
106
|
+
def variables(self) -> set[str]:
|
107
|
+
"""
|
108
|
+
Return a list of variables in the template text.
|
109
|
+
The value must be enclosed in double curly braces, e.g. {{variable}}.
|
110
|
+
"""
|
111
|
+
return self._variables
|
112
|
+
|
113
|
+
@property
|
114
|
+
def commit_message(self) -> Optional[str]:
|
115
|
+
"""
|
116
|
+
Return the commit message of the prompt version.
|
117
|
+
"""
|
118
|
+
return self.description
|
119
|
+
|
120
|
+
@property
|
121
|
+
def tags(self) -> dict[str, str]:
|
122
|
+
"""
|
123
|
+
Return the version-level tags.
|
124
|
+
"""
|
125
|
+
return {key: value for key, value in self._tags.items() if not _is_reserved_tag(key)}
|
126
|
+
|
127
|
+
@property
|
128
|
+
def uri(self) -> str:
|
129
|
+
"""Return the URI of the prompt."""
|
130
|
+
return f"prompts:/{self.name}/{self.version}"
|
131
|
+
|
132
|
+
@property
|
133
|
+
def name(self) -> str:
|
134
|
+
"""String. Unique name within Model Registry."""
|
135
|
+
return self._name
|
136
|
+
|
137
|
+
@name.setter
|
138
|
+
def name(self, new_name: str):
|
139
|
+
self._name = new_name
|
140
|
+
|
141
|
+
@property
|
142
|
+
def version(self) -> int:
|
143
|
+
"""Version"""
|
144
|
+
return int(self._version)
|
145
|
+
|
146
|
+
@property
|
147
|
+
def creation_timestamp(self) -> int:
|
148
|
+
"""Integer. Prompt version creation timestamp (milliseconds since the Unix epoch)."""
|
149
|
+
return self._creation_time
|
150
|
+
|
151
|
+
@property
|
152
|
+
def last_updated_timestamp(self) -> Optional[int]:
|
153
|
+
"""Integer. Timestamp of last update for this prompt version (milliseconds since the Unix
|
154
|
+
epoch).
|
155
|
+
"""
|
156
|
+
return self._last_updated_timestamp
|
157
|
+
|
158
|
+
@last_updated_timestamp.setter
|
159
|
+
def last_updated_timestamp(self, updated_timestamp: int):
|
160
|
+
self._last_updated_timestamp = updated_timestamp
|
161
|
+
|
162
|
+
@property
|
163
|
+
def description(self) -> Optional[str]:
|
164
|
+
"""String. Description"""
|
165
|
+
return self._description
|
166
|
+
|
167
|
+
@description.setter
|
168
|
+
def description(self, description: str):
|
169
|
+
self._description = description
|
170
|
+
|
171
|
+
@property
|
172
|
+
def user_id(self) -> Optional[str]:
|
173
|
+
"""String. User ID that created this prompt version."""
|
174
|
+
return self._user_id
|
175
|
+
|
176
|
+
@property
|
177
|
+
def aliases(self) -> list[str]:
|
178
|
+
"""List of aliases (string) for the current prompt version."""
|
179
|
+
return self._aliases
|
180
|
+
|
181
|
+
@aliases.setter
|
182
|
+
def aliases(self, aliases: list[str]):
|
183
|
+
self._aliases = aliases
|
184
|
+
|
185
|
+
# Methods
|
186
|
+
@classmethod
|
187
|
+
def _properties(cls) -> list[str]:
|
188
|
+
# aggregate with base class properties since cls.__dict__ does not do it automatically
|
189
|
+
return sorted(cls._get_properties_helper())
|
190
|
+
|
191
|
+
def _add_tag(self, tag: ModelVersionTag):
|
192
|
+
self._tags[tag.key] = tag.value
|
193
|
+
|
194
|
+
def format(self, allow_partial: bool = False, **kwargs) -> Union[PromptVersion, str]:
|
195
|
+
"""
|
196
|
+
Format the template text with the given keyword arguments.
|
197
|
+
By default, it raises an error if there are missing variables. To format
|
198
|
+
the prompt text partially, set `allow_partial=True`.
|
199
|
+
|
200
|
+
Example:
|
201
|
+
|
202
|
+
.. code-block:: python
|
203
|
+
|
204
|
+
prompt = Prompt("my-prompt", 1, "Hello, {{title}} {{name}}!")
|
205
|
+
formatted = prompt.format(title="Ms", name="Alice")
|
206
|
+
print(formatted)
|
207
|
+
# Output: "Hello, Ms Alice!"
|
208
|
+
|
209
|
+
# Partial formatting
|
210
|
+
formatted = prompt.format(title="Ms", allow_partial=True)
|
211
|
+
print(formatted)
|
212
|
+
# Output: PromptVersion(name=my-prompt, version=1, template="Hello, Ms {{name}}!")
|
213
|
+
|
214
|
+
|
215
|
+
Args:
|
216
|
+
allow_partial: If True, allow partial formatting of the prompt text.
|
217
|
+
If False, raise an error if there are missing variables.
|
218
|
+
kwargs: Keyword arguments to replace the variables in the template.
|
219
|
+
"""
|
220
|
+
input_keys = set(kwargs.keys())
|
221
|
+
|
222
|
+
template = self.template
|
223
|
+
for key, value in kwargs.items():
|
224
|
+
template = re.sub(r"\{\{\s*" + key + r"\s*\}\}", str(value), template)
|
225
|
+
|
226
|
+
if missing_keys := self.variables - input_keys:
|
227
|
+
if not allow_partial:
|
228
|
+
raise MlflowException.invalid_parameter_value(
|
229
|
+
f"Missing variables: {missing_keys}. To partially format the prompt, "
|
230
|
+
"set `allow_partial=True`."
|
231
|
+
)
|
232
|
+
else:
|
233
|
+
return PromptVersion(
|
234
|
+
name=self.name,
|
235
|
+
version=int(self.version),
|
236
|
+
template=template,
|
237
|
+
commit_message=self.commit_message,
|
238
|
+
creation_timestamp=self.creation_timestamp,
|
239
|
+
tags=self.tags,
|
240
|
+
aliases=self.aliases,
|
241
|
+
last_updated_timestamp=self.last_updated_timestamp,
|
242
|
+
user_id=self.user_id,
|
243
|
+
)
|
244
|
+
return template
|
@@ -0,0 +1,175 @@
|
|
1
|
+
from mlflow.entities.model_registry._model_registry_entity import _ModelRegistryEntity
|
2
|
+
from mlflow.entities.model_registry.model_version import ModelVersion
|
3
|
+
from mlflow.entities.model_registry.prompt_version import IS_PROMPT_TAG_KEY
|
4
|
+
from mlflow.entities.model_registry.registered_model_alias import RegisteredModelAlias
|
5
|
+
from mlflow.entities.model_registry.registered_model_deployment_job_state import (
|
6
|
+
RegisteredModelDeploymentJobState,
|
7
|
+
)
|
8
|
+
from mlflow.entities.model_registry.registered_model_tag import RegisteredModelTag
|
9
|
+
from mlflow.protos.model_registry_pb2 import RegisteredModel as ProtoRegisteredModel
|
10
|
+
from mlflow.protos.model_registry_pb2 import RegisteredModelAlias as ProtoRegisteredModelAlias
|
11
|
+
from mlflow.protos.model_registry_pb2 import RegisteredModelTag as ProtoRegisteredModelTag
|
12
|
+
|
13
|
+
|
14
|
+
class RegisteredModel(_ModelRegistryEntity):
|
15
|
+
"""
|
16
|
+
MLflow entity for Registered Model.
|
17
|
+
"""
|
18
|
+
|
19
|
+
def __init__(
|
20
|
+
self,
|
21
|
+
name,
|
22
|
+
creation_timestamp=None,
|
23
|
+
last_updated_timestamp=None,
|
24
|
+
description=None,
|
25
|
+
latest_versions=None,
|
26
|
+
tags=None,
|
27
|
+
aliases=None,
|
28
|
+
deployment_job_id=None,
|
29
|
+
deployment_job_state=None,
|
30
|
+
):
|
31
|
+
# Constructor is called only from within the system by various backend stores.
|
32
|
+
super().__init__()
|
33
|
+
self._name = name
|
34
|
+
self._creation_time = creation_timestamp
|
35
|
+
self._last_updated_timestamp = last_updated_timestamp
|
36
|
+
self._description = description
|
37
|
+
self._latest_version = latest_versions
|
38
|
+
self._tags = {tag.key: tag.value for tag in (tags or [])}
|
39
|
+
self._aliases = {alias.alias: alias.version for alias in (aliases or [])}
|
40
|
+
self._deployment_job_id = deployment_job_id
|
41
|
+
self._deployment_job_state = deployment_job_state
|
42
|
+
|
43
|
+
@property
|
44
|
+
def name(self):
|
45
|
+
"""String. Registered model name."""
|
46
|
+
return self._name
|
47
|
+
|
48
|
+
@name.setter
|
49
|
+
def name(self, new_name):
|
50
|
+
self._name = new_name
|
51
|
+
|
52
|
+
@property
|
53
|
+
def creation_timestamp(self):
|
54
|
+
"""Integer. Model version creation timestamp (milliseconds since the Unix epoch)."""
|
55
|
+
return self._creation_time
|
56
|
+
|
57
|
+
@property
|
58
|
+
def last_updated_timestamp(self):
|
59
|
+
"""Integer. Timestamp of last update for this model version (milliseconds since the Unix
|
60
|
+
epoch).
|
61
|
+
"""
|
62
|
+
return self._last_updated_timestamp
|
63
|
+
|
64
|
+
@last_updated_timestamp.setter
|
65
|
+
def last_updated_timestamp(self, updated_timestamp):
|
66
|
+
self._last_updated_timestamp = updated_timestamp
|
67
|
+
|
68
|
+
@property
|
69
|
+
def description(self):
|
70
|
+
"""String. Description"""
|
71
|
+
return self._description
|
72
|
+
|
73
|
+
@description.setter
|
74
|
+
def description(self, description):
|
75
|
+
self._description = description
|
76
|
+
|
77
|
+
@property
|
78
|
+
def latest_versions(self):
|
79
|
+
"""List of the latest :py:class:`mlflow.entities.model_registry.ModelVersion` instances
|
80
|
+
for each stage.
|
81
|
+
"""
|
82
|
+
return self._latest_version
|
83
|
+
|
84
|
+
@latest_versions.setter
|
85
|
+
def latest_versions(self, latest_versions):
|
86
|
+
self._latest_version = latest_versions
|
87
|
+
|
88
|
+
@property
|
89
|
+
def tags(self):
|
90
|
+
"""Dictionary of tag key (string) -> tag value for the current registered model."""
|
91
|
+
# Remove the is_prompt tag as it should not be user-facing
|
92
|
+
return {k: v for k, v in self._tags.items() if k != IS_PROMPT_TAG_KEY}
|
93
|
+
|
94
|
+
@property
|
95
|
+
def aliases(self):
|
96
|
+
"""Dictionary of aliases (string) -> version for the current registered model."""
|
97
|
+
return self._aliases
|
98
|
+
|
99
|
+
@classmethod
|
100
|
+
def _properties(cls):
|
101
|
+
# aggregate with base class properties since cls.__dict__ does not do it automatically
|
102
|
+
return sorted(cls._get_properties_helper())
|
103
|
+
|
104
|
+
def _add_tag(self, tag):
|
105
|
+
self._tags[tag.key] = tag.value
|
106
|
+
|
107
|
+
def _add_alias(self, alias):
|
108
|
+
self._aliases[alias.alias] = alias.version
|
109
|
+
|
110
|
+
@property
|
111
|
+
def deployment_job_id(self):
|
112
|
+
"""Deployment job ID for the current registered model."""
|
113
|
+
return self._deployment_job_id
|
114
|
+
|
115
|
+
@deployment_job_id.setter
|
116
|
+
def deployment_job_id(self, deployment_job_id):
|
117
|
+
self._deployment_job_id = deployment_job_id
|
118
|
+
|
119
|
+
@property
|
120
|
+
def deployment_job_state(self):
|
121
|
+
"""Deployment job state for the current registered model."""
|
122
|
+
return self._deployment_job_state
|
123
|
+
|
124
|
+
# proto mappers
|
125
|
+
@classmethod
|
126
|
+
def from_proto(cls, proto):
|
127
|
+
# input: mlflow.protos.model_registry_pb2.RegisteredModel
|
128
|
+
# returns RegisteredModel entity
|
129
|
+
registered_model = cls(
|
130
|
+
proto.name,
|
131
|
+
proto.creation_timestamp,
|
132
|
+
proto.last_updated_timestamp,
|
133
|
+
proto.description,
|
134
|
+
[ModelVersion.from_proto(mvd) for mvd in proto.latest_versions],
|
135
|
+
)
|
136
|
+
for tag in proto.tags:
|
137
|
+
registered_model._add_tag(RegisteredModelTag.from_proto(tag))
|
138
|
+
for alias in proto.aliases:
|
139
|
+
registered_model._add_alias(RegisteredModelAlias.from_proto(alias))
|
140
|
+
registered_model._deployment_job_id = proto.deployment_job_id
|
141
|
+
registered_model._deployment_job_state = RegisteredModelDeploymentJobState.to_string(
|
142
|
+
proto.deployment_job_state
|
143
|
+
)
|
144
|
+
return registered_model
|
145
|
+
|
146
|
+
def to_proto(self):
|
147
|
+
# returns mlflow.protos.model_registry_pb2.RegisteredModel
|
148
|
+
rmd = ProtoRegisteredModel()
|
149
|
+
rmd.name = self.name
|
150
|
+
if self.creation_timestamp is not None:
|
151
|
+
rmd.creation_timestamp = self.creation_timestamp
|
152
|
+
if self.last_updated_timestamp:
|
153
|
+
rmd.last_updated_timestamp = self.last_updated_timestamp
|
154
|
+
if self.description:
|
155
|
+
rmd.description = self.description
|
156
|
+
if self.latest_versions is not None:
|
157
|
+
rmd.latest_versions.extend(
|
158
|
+
[model_version.to_proto() for model_version in self.latest_versions]
|
159
|
+
)
|
160
|
+
if self.deployment_job_id:
|
161
|
+
rmd.deployment_job_id = self.deployment_job_id
|
162
|
+
if self.deployment_job_state:
|
163
|
+
rmd.deployment_job_state = RegisteredModelDeploymentJobState.from_string(
|
164
|
+
self.deployment_job_state
|
165
|
+
)
|
166
|
+
rmd.tags.extend(
|
167
|
+
[ProtoRegisteredModelTag(key=key, value=value) for key, value in self._tags.items()]
|
168
|
+
)
|
169
|
+
rmd.aliases.extend(
|
170
|
+
[
|
171
|
+
ProtoRegisteredModelAlias(alias=alias, version=str(version))
|
172
|
+
for alias, version in self._aliases.items()
|
173
|
+
]
|
174
|
+
)
|
175
|
+
return rmd
|
@@ -0,0 +1,35 @@
|
|
1
|
+
from mlflow.entities.model_registry._model_registry_entity import _ModelRegistryEntity
|
2
|
+
from mlflow.protos.model_registry_pb2 import RegisteredModelAlias as ProtoRegisteredModelAlias
|
3
|
+
|
4
|
+
|
5
|
+
class RegisteredModelAlias(_ModelRegistryEntity):
|
6
|
+
"""Alias object associated with a registered model."""
|
7
|
+
|
8
|
+
def __init__(self, alias, version):
|
9
|
+
self._alias = alias
|
10
|
+
self._version = version
|
11
|
+
|
12
|
+
def __eq__(self, other):
|
13
|
+
if type(other) is type(self):
|
14
|
+
return self.__dict__ == other.__dict__
|
15
|
+
return False
|
16
|
+
|
17
|
+
@property
|
18
|
+
def alias(self):
|
19
|
+
"""String name of the alias."""
|
20
|
+
return self._alias
|
21
|
+
|
22
|
+
@property
|
23
|
+
def version(self):
|
24
|
+
"""String model version number that the alias points to."""
|
25
|
+
return self._version
|
26
|
+
|
27
|
+
@classmethod
|
28
|
+
def from_proto(cls, proto):
|
29
|
+
return cls(proto.alias, proto.version)
|
30
|
+
|
31
|
+
def to_proto(self):
|
32
|
+
alias_proto = ProtoRegisteredModelAlias()
|
33
|
+
alias_proto.alias = self.alias
|
34
|
+
alias_proto.version = self.version
|
35
|
+
return alias_proto
|
@@ -0,0 +1,39 @@
|
|
1
|
+
from mlflow.protos.databricks_uc_registry_messages_pb2 import DeploymentJobConnection
|
2
|
+
|
3
|
+
|
4
|
+
class RegisteredModelDeploymentJobState:
|
5
|
+
"""Enum for registered model deployment state of an
|
6
|
+
:py:class:`mlflow.entities.model_registry.RegisteredModel`.
|
7
|
+
"""
|
8
|
+
|
9
|
+
NOT_SET_UP = DeploymentJobConnection.State.Value("NOT_SET_UP")
|
10
|
+
CONNECTED = DeploymentJobConnection.State.Value("CONNECTED")
|
11
|
+
NOT_FOUND = DeploymentJobConnection.State.Value("NOT_FOUND")
|
12
|
+
REQUIRED_PARAMETERS_CHANGED = DeploymentJobConnection.State.Value("REQUIRED_PARAMETERS_CHANGED")
|
13
|
+
_STRING_TO_STATE = {
|
14
|
+
k: DeploymentJobConnection.State.Value(k) for k in DeploymentJobConnection.State.keys()
|
15
|
+
}
|
16
|
+
_STATE_TO_STRING = {value: key for key, value in _STRING_TO_STATE.items()}
|
17
|
+
|
18
|
+
@staticmethod
|
19
|
+
def from_string(state_str):
|
20
|
+
if state_str not in RegisteredModelDeploymentJobState._STRING_TO_STATE:
|
21
|
+
raise Exception(
|
22
|
+
f"Could not get deployment job connection state corresponding to string "
|
23
|
+
f"{state_str}. "
|
24
|
+
f"Valid state strings: {RegisteredModelDeploymentJobState.all_states()}"
|
25
|
+
)
|
26
|
+
return RegisteredModelDeploymentJobState._STRING_TO_STATE[state_str]
|
27
|
+
|
28
|
+
@staticmethod
|
29
|
+
def to_string(state):
|
30
|
+
if state not in RegisteredModelDeploymentJobState._STATE_TO_STRING:
|
31
|
+
raise Exception(
|
32
|
+
f"Could not get string corresponding to deployment job connection {state}. "
|
33
|
+
f"Valid states: {RegisteredModelDeploymentJobState.all_states()}"
|
34
|
+
)
|
35
|
+
return RegisteredModelDeploymentJobState._STATE_TO_STRING[state]
|
36
|
+
|
37
|
+
@staticmethod
|
38
|
+
def all_states():
|
39
|
+
return list(RegisteredModelDeploymentJobState._STATE_TO_STRING.keys())
|
@@ -0,0 +1,25 @@
|
|
1
|
+
from mlflow.entities.model_registry import RegisteredModel
|
2
|
+
|
3
|
+
|
4
|
+
class RegisteredModelSearch(RegisteredModel):
|
5
|
+
def __init__(self, *args, **kwargs):
|
6
|
+
kwargs["tags"] = []
|
7
|
+
kwargs["aliases"] = []
|
8
|
+
super().__init__(*args, **kwargs)
|
9
|
+
|
10
|
+
def tags(self):
|
11
|
+
raise Exception(
|
12
|
+
"UC Registered Models gathered through search_registered_models do not have tags. "
|
13
|
+
"Please use get_registered_model to obtain an individual model's tags."
|
14
|
+
)
|
15
|
+
|
16
|
+
def aliases(self):
|
17
|
+
raise Exception(
|
18
|
+
"UC Registered Models gathered through search_registered_models do not have aliases. "
|
19
|
+
"Please use get_registered_model to obtain an individual model's aliases."
|
20
|
+
)
|
21
|
+
|
22
|
+
def __eq__(self, other):
|
23
|
+
if type(other) in {type(self), RegisteredModel}:
|
24
|
+
return self.__dict__ == other.__dict__
|
25
|
+
return False
|
@@ -0,0 +1,35 @@
|
|
1
|
+
from mlflow.entities.model_registry._model_registry_entity import _ModelRegistryEntity
|
2
|
+
from mlflow.protos.model_registry_pb2 import RegisteredModelTag as ProtoRegisteredModelTag
|
3
|
+
|
4
|
+
|
5
|
+
class RegisteredModelTag(_ModelRegistryEntity):
|
6
|
+
"""Tag object associated with a registered model."""
|
7
|
+
|
8
|
+
def __init__(self, key, value):
|
9
|
+
self._key = key
|
10
|
+
self._value = value
|
11
|
+
|
12
|
+
def __eq__(self, other):
|
13
|
+
if type(other) is type(self):
|
14
|
+
return self.__dict__ == other.__dict__
|
15
|
+
return False
|
16
|
+
|
17
|
+
@property
|
18
|
+
def key(self):
|
19
|
+
"""String name of the tag."""
|
20
|
+
return self._key
|
21
|
+
|
22
|
+
@property
|
23
|
+
def value(self):
|
24
|
+
"""String value of the tag."""
|
25
|
+
return self._value
|
26
|
+
|
27
|
+
@classmethod
|
28
|
+
def from_proto(cls, proto):
|
29
|
+
return cls(proto.key, proto.value)
|
30
|
+
|
31
|
+
def to_proto(self):
|
32
|
+
tag = ProtoRegisteredModelTag()
|
33
|
+
tag.key = self.key
|
34
|
+
tag.value = self.value
|
35
|
+
return tag
|
@@ -0,0 +1,74 @@
|
|
1
|
+
from dataclasses import dataclass
|
2
|
+
from typing import Any, Optional
|
3
|
+
|
4
|
+
from mlflow.protos.mlflow_artifacts_pb2 import (
|
5
|
+
CreateMultipartUpload as ProtoCreateMultipartUpload,
|
6
|
+
)
|
7
|
+
from mlflow.protos.mlflow_artifacts_pb2 import (
|
8
|
+
MultipartUploadCredential as ProtoMultipartUploadCredential,
|
9
|
+
)
|
10
|
+
|
11
|
+
|
12
|
+
@dataclass
|
13
|
+
class MultipartUploadPart:
|
14
|
+
part_number: int
|
15
|
+
etag: str
|
16
|
+
url: Optional[str] = None
|
17
|
+
|
18
|
+
@classmethod
|
19
|
+
def from_proto(cls, proto):
|
20
|
+
return cls(
|
21
|
+
proto.part_number,
|
22
|
+
proto.etag or None,
|
23
|
+
proto.url or None,
|
24
|
+
)
|
25
|
+
|
26
|
+
def to_dict(self):
|
27
|
+
return {
|
28
|
+
"part_number": self.part_number,
|
29
|
+
"etag": self.etag,
|
30
|
+
"url": self.url,
|
31
|
+
}
|
32
|
+
|
33
|
+
|
34
|
+
@dataclass
|
35
|
+
class MultipartUploadCredential:
|
36
|
+
url: str
|
37
|
+
part_number: int
|
38
|
+
headers: dict[str, Any]
|
39
|
+
|
40
|
+
def to_proto(self):
|
41
|
+
credential = ProtoMultipartUploadCredential()
|
42
|
+
credential.url = self.url
|
43
|
+
credential.part_number = self.part_number
|
44
|
+
credential.headers.update(self.headers)
|
45
|
+
return credential
|
46
|
+
|
47
|
+
@classmethod
|
48
|
+
def from_dict(cls, dict_):
|
49
|
+
return cls(
|
50
|
+
url=dict_["url"],
|
51
|
+
part_number=dict_["part_number"],
|
52
|
+
headers=dict_.get("headers", {}),
|
53
|
+
)
|
54
|
+
|
55
|
+
|
56
|
+
@dataclass
|
57
|
+
class CreateMultipartUploadResponse:
|
58
|
+
upload_id: Optional[str]
|
59
|
+
credentials: list[MultipartUploadCredential]
|
60
|
+
|
61
|
+
def to_proto(self):
|
62
|
+
response = ProtoCreateMultipartUpload.Response()
|
63
|
+
if self.upload_id:
|
64
|
+
response.upload_id = self.upload_id
|
65
|
+
response.credentials.extend([credential.to_proto() for credential in self.credentials])
|
66
|
+
return response
|
67
|
+
|
68
|
+
@classmethod
|
69
|
+
def from_dict(cls, dict_):
|
70
|
+
credentials = [MultipartUploadCredential.from_dict(cred) for cred in dict_["credentials"]]
|
71
|
+
return cls(
|
72
|
+
upload_id=dict_.get("upload_id"),
|
73
|
+
credentials=credentials,
|
74
|
+
)
|
mlflow/entities/param.py
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
import sys
|
2
|
+
|
3
|
+
from mlflow.entities._mlflow_object import _MlflowObject
|
4
|
+
from mlflow.protos.service_pb2 import Param as ProtoParam
|
5
|
+
|
6
|
+
|
7
|
+
class Param(_MlflowObject):
|
8
|
+
"""
|
9
|
+
Parameter object.
|
10
|
+
"""
|
11
|
+
|
12
|
+
def __init__(self, key, value):
|
13
|
+
if "pyspark.ml" in sys.modules:
|
14
|
+
import pyspark.ml.param
|
15
|
+
|
16
|
+
if isinstance(key, pyspark.ml.param.Param):
|
17
|
+
key = key.name
|
18
|
+
value = str(value)
|
19
|
+
self._key = key
|
20
|
+
self._value = value
|
21
|
+
|
22
|
+
@property
|
23
|
+
def key(self):
|
24
|
+
"""String key corresponding to the parameter name."""
|
25
|
+
return self._key
|
26
|
+
|
27
|
+
@property
|
28
|
+
def value(self):
|
29
|
+
"""String value of the parameter."""
|
30
|
+
return self._value
|
31
|
+
|
32
|
+
def to_proto(self):
|
33
|
+
param = ProtoParam()
|
34
|
+
param.key = self.key
|
35
|
+
param.value = self.value
|
36
|
+
return param
|
37
|
+
|
38
|
+
@classmethod
|
39
|
+
def from_proto(cls, proto):
|
40
|
+
return cls(proto.key, proto.value)
|
41
|
+
|
42
|
+
def __eq__(self, __o):
|
43
|
+
if isinstance(__o, self.__class__):
|
44
|
+
return self._key == __o._key
|
45
|
+
|
46
|
+
return False
|
47
|
+
|
48
|
+
def __hash__(self):
|
49
|
+
return hash(self._key)
|