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,250 @@
|
|
1
|
+
from typing import TYPE_CHECKING, Any, Iterable, Optional, Union
|
2
|
+
|
3
|
+
from mlflow.entities import Trace
|
4
|
+
|
5
|
+
if TYPE_CHECKING:
|
6
|
+
import pandas as pd
|
7
|
+
from databricks.agents.review_app import (
|
8
|
+
LabelingSession as _LabelingSession,
|
9
|
+
)
|
10
|
+
from databricks.agents.review_app import (
|
11
|
+
LabelSchema as _LabelSchema,
|
12
|
+
)
|
13
|
+
from databricks.agents.review_app import (
|
14
|
+
ReviewApp as _ReviewApp,
|
15
|
+
)
|
16
|
+
from databricks.agents.review_app.labeling import Agent as _Agent
|
17
|
+
|
18
|
+
|
19
|
+
class Agent:
|
20
|
+
"""The agent configuration, used for generating responses in the review app.
|
21
|
+
|
22
|
+
.. note::
|
23
|
+
This functionality is only available in Databricks. Please run
|
24
|
+
`pip install mlflow[databricks]` to use it.
|
25
|
+
"""
|
26
|
+
|
27
|
+
def __init__(self, agent: "_Agent"):
|
28
|
+
self._agent = agent
|
29
|
+
|
30
|
+
@property
|
31
|
+
def agent_name(self) -> str:
|
32
|
+
"""The name of the agent."""
|
33
|
+
return self._agent.agent_name
|
34
|
+
|
35
|
+
@property
|
36
|
+
def model_serving_endpoint(self) -> str:
|
37
|
+
"""The model serving endpoint used by the agent."""
|
38
|
+
return self._agent.model_serving_endpoint
|
39
|
+
|
40
|
+
|
41
|
+
class LabelingSession:
|
42
|
+
"""A session for labeling items in the review app.
|
43
|
+
|
44
|
+
.. note::
|
45
|
+
This functionality is only available in Databricks. Please run
|
46
|
+
`pip install mlflow[databricks]` to use it.
|
47
|
+
"""
|
48
|
+
|
49
|
+
def __init__(self, session: "_LabelingSession"):
|
50
|
+
self._session = session
|
51
|
+
|
52
|
+
@property
|
53
|
+
def name(self) -> str:
|
54
|
+
"""The name of the labeling session."""
|
55
|
+
return self._session.name
|
56
|
+
|
57
|
+
@property
|
58
|
+
def assigned_users(self) -> list[str]:
|
59
|
+
"""The users assigned to label items in the session."""
|
60
|
+
return self._session.assigned_users
|
61
|
+
|
62
|
+
@property
|
63
|
+
def agent(self) -> Optional[str]:
|
64
|
+
"""The agent used to generate responses for the items in the session."""
|
65
|
+
return self._session.agent
|
66
|
+
|
67
|
+
@property
|
68
|
+
def label_schemas(self) -> list[str]:
|
69
|
+
"""The label schemas used in the session."""
|
70
|
+
return self._session.label_schemas
|
71
|
+
|
72
|
+
@property
|
73
|
+
def labeling_session_id(self) -> str:
|
74
|
+
"""The unique identifier of the labeling session."""
|
75
|
+
return self._session.labeling_session_id
|
76
|
+
|
77
|
+
@property
|
78
|
+
def mlflow_run_id(self) -> str:
|
79
|
+
"""The MLflow run ID associated with the session."""
|
80
|
+
return self._session.mlflow_run_id
|
81
|
+
|
82
|
+
@property
|
83
|
+
def review_app_id(self) -> str:
|
84
|
+
"""The review app ID associated with the session."""
|
85
|
+
return self._session.review_app_id
|
86
|
+
|
87
|
+
@property
|
88
|
+
def experiment_id(self) -> str:
|
89
|
+
"""The experiment ID associated with the session."""
|
90
|
+
return self._session.experiment_id
|
91
|
+
|
92
|
+
@property
|
93
|
+
def url(self) -> str:
|
94
|
+
"""The URL of the labeling session in the review app."""
|
95
|
+
return self._session.url
|
96
|
+
|
97
|
+
@property
|
98
|
+
def enable_multi_turn_chat(self) -> bool:
|
99
|
+
"""Whether multi-turn chat is enabled for the session."""
|
100
|
+
return self._session.enable_multi_turn_chat
|
101
|
+
|
102
|
+
@property
|
103
|
+
def custom_inputs(self) -> Optional[dict[str, Any]]:
|
104
|
+
"""Custom inputs used in the session."""
|
105
|
+
return self._session.custom_inputs
|
106
|
+
|
107
|
+
def add_dataset(
|
108
|
+
self, dataset_name: str, record_ids: Optional[list[str]] = None
|
109
|
+
) -> "LabelingSession":
|
110
|
+
"""Add a dataset to the labeling session.
|
111
|
+
|
112
|
+
.. note::
|
113
|
+
This functionality is only available in Databricks. Please run
|
114
|
+
`pip install mlflow[databricks]` to use it.
|
115
|
+
|
116
|
+
Args:
|
117
|
+
dataset_name: The name of the dataset.
|
118
|
+
record_ids: Optional. The individual record ids to be added to the session. If not
|
119
|
+
provided, all records in the dataset will be added.
|
120
|
+
|
121
|
+
Returns:
|
122
|
+
LabelingSession: The updated labeling session.
|
123
|
+
"""
|
124
|
+
return LabelingSession(self._session.add_dataset(dataset_name, record_ids))
|
125
|
+
|
126
|
+
def add_traces(
|
127
|
+
self,
|
128
|
+
traces: Union[Iterable[Trace], Iterable[str], "pd.DataFrame"],
|
129
|
+
) -> "LabelingSession":
|
130
|
+
"""Add traces to the labeling session.
|
131
|
+
|
132
|
+
.. note::
|
133
|
+
This functionality is only available in Databricks. Please run
|
134
|
+
`pip install mlflow[databricks]` to use it.
|
135
|
+
|
136
|
+
Args:
|
137
|
+
traces: Can be either:
|
138
|
+
a) a pandas DataFrame with a 'trace' column. The 'trace' column should contain
|
139
|
+
either `mlflow.entities.Trace` objects or their json string representations.
|
140
|
+
b) an iterable of `mlflow.entities.Trace` objects.
|
141
|
+
c) an iterable of json string representations of `mlflow.entities.Trace` objects.
|
142
|
+
|
143
|
+
Returns:
|
144
|
+
LabelingSession: The updated labeling session.
|
145
|
+
"""
|
146
|
+
return LabelingSession(self._session.add_traces(traces))
|
147
|
+
|
148
|
+
def sync(self, to_dataset: str) -> None:
|
149
|
+
"""Sync the traces and expectations from the labeling session to a dataset.
|
150
|
+
|
151
|
+
.. note::
|
152
|
+
This functionality is only available in Databricks. Please run
|
153
|
+
`pip install mlflow[databricks]` to use it.
|
154
|
+
|
155
|
+
Args:
|
156
|
+
to_dataset: The name of the dataset to sync traces and expectations to.
|
157
|
+
"""
|
158
|
+
self._session.sync_expectations(to_dataset)
|
159
|
+
|
160
|
+
def set_assigned_users(self, assigned_users: list[str]) -> "LabelingSession":
|
161
|
+
"""Set the assigned users for the labeling session.
|
162
|
+
|
163
|
+
.. note::
|
164
|
+
This functionality is only available in Databricks. Please run
|
165
|
+
`pip install mlflow[databricks]` to use it.
|
166
|
+
|
167
|
+
Args:
|
168
|
+
assigned_users: The list of users to assign to the session.
|
169
|
+
|
170
|
+
Returns:
|
171
|
+
LabelingSession: The updated labeling session.
|
172
|
+
"""
|
173
|
+
return LabelingSession(self._session.set_assigned_users(assigned_users))
|
174
|
+
|
175
|
+
|
176
|
+
class ReviewApp:
|
177
|
+
"""A review app is used to collect feedback from stakeholders for a given experiment.
|
178
|
+
|
179
|
+
.. note::
|
180
|
+
This functionality is only available in Databricks. Please run
|
181
|
+
`pip install mlflow[databricks]` to use it.
|
182
|
+
"""
|
183
|
+
|
184
|
+
def __init__(self, app: "_ReviewApp"):
|
185
|
+
self._app = app
|
186
|
+
|
187
|
+
@property
|
188
|
+
def review_app_id(self) -> str:
|
189
|
+
"""The ID of the review app."""
|
190
|
+
return self._app.review_app_id
|
191
|
+
|
192
|
+
@property
|
193
|
+
def experiment_id(self) -> str:
|
194
|
+
"""The ID of the experiment."""
|
195
|
+
return self._app.experiment_id
|
196
|
+
|
197
|
+
@property
|
198
|
+
def url(self) -> str:
|
199
|
+
"""The URL of the review app for stakeholders to provide feedback."""
|
200
|
+
return self._app.url
|
201
|
+
|
202
|
+
@property
|
203
|
+
def agents(self) -> list[Agent]:
|
204
|
+
"""The agents to be used to generate responses."""
|
205
|
+
return [Agent(agent) for agent in self._app.agents]
|
206
|
+
|
207
|
+
@property
|
208
|
+
def label_schemas(self) -> list["_LabelSchema"]:
|
209
|
+
"""The label schemas to be used in the review app."""
|
210
|
+
return self._app.label_schemas
|
211
|
+
|
212
|
+
def add_agent(
|
213
|
+
self, *, agent_name: str, model_serving_endpoint: str, overwrite: bool = False
|
214
|
+
) -> "ReviewApp":
|
215
|
+
"""Add an agent to the review app to be used to generate responses.
|
216
|
+
|
217
|
+
.. note::
|
218
|
+
This functionality is only available in Databricks. Please run
|
219
|
+
`pip install mlflow[databricks]` to use it.
|
220
|
+
|
221
|
+
Args:
|
222
|
+
agent_name: The name of the agent.
|
223
|
+
model_serving_endpoint: The model serving endpoint to be used by the agent.
|
224
|
+
overwrite: Whether to overwrite an existing agent with the same name.
|
225
|
+
|
226
|
+
Returns:
|
227
|
+
ReviewApp: The updated review app.
|
228
|
+
"""
|
229
|
+
return ReviewApp(
|
230
|
+
self._app.add_agent(
|
231
|
+
agent_name=agent_name,
|
232
|
+
model_serving_endpoint=model_serving_endpoint,
|
233
|
+
overwrite=overwrite,
|
234
|
+
)
|
235
|
+
)
|
236
|
+
|
237
|
+
def remove_agent(self, agent_name: str) -> "ReviewApp":
|
238
|
+
"""Remove an agent from the review app.
|
239
|
+
|
240
|
+
.. note::
|
241
|
+
This functionality is only available in Databricks. Please run
|
242
|
+
`pip install mlflow[databricks]` to use it.
|
243
|
+
|
244
|
+
Args:
|
245
|
+
agent_name: The name of the agent to remove.
|
246
|
+
|
247
|
+
Returns:
|
248
|
+
ReviewApp: The updated review app.
|
249
|
+
"""
|
250
|
+
return ReviewApp(self._app.remove_agent(agent_name))
|
@@ -0,0 +1,13 @@
|
|
1
|
+
from mlflow.genai.optimize.base import optimize_prompt
|
2
|
+
from mlflow.genai.optimize.types import (
|
3
|
+
LLMParams,
|
4
|
+
OptimizerConfig,
|
5
|
+
PromptOptimizationResult,
|
6
|
+
)
|
7
|
+
|
8
|
+
__all__ = [
|
9
|
+
"optimize_prompt",
|
10
|
+
"OptimizerConfig",
|
11
|
+
"LLMParams",
|
12
|
+
"PromptOptimizationResult",
|
13
|
+
]
|
@@ -0,0 +1,198 @@
|
|
1
|
+
import inspect
|
2
|
+
import logging
|
3
|
+
from contextlib import contextmanager
|
4
|
+
from dataclasses import asdict
|
5
|
+
from typing import TYPE_CHECKING, Optional, Union
|
6
|
+
|
7
|
+
from mlflow.entities.model_registry import PromptVersion
|
8
|
+
from mlflow.exceptions import MlflowException
|
9
|
+
from mlflow.genai.evaluation.utils import (
|
10
|
+
_convert_eval_set_to_df,
|
11
|
+
)
|
12
|
+
from mlflow.genai.optimize.optimizers import _BaseOptimizer, _DSPyMIPROv2Optimizer
|
13
|
+
from mlflow.genai.optimize.types import (
|
14
|
+
OBJECTIVE_FN,
|
15
|
+
LLMParams,
|
16
|
+
OptimizerConfig,
|
17
|
+
PromptOptimizationResult,
|
18
|
+
)
|
19
|
+
from mlflow.genai.prompts import load_prompt
|
20
|
+
from mlflow.genai.scorers import Scorer
|
21
|
+
from mlflow.tracking.fluent import log_params, log_table, start_run
|
22
|
+
from mlflow.utils.annotations import experimental
|
23
|
+
|
24
|
+
if TYPE_CHECKING:
|
25
|
+
import pandas as pd
|
26
|
+
from genai.evaluation.utils import EvaluationDatasetTypes
|
27
|
+
|
28
|
+
_ALGORITHMS = {"DSPy/MIPROv2": _DSPyMIPROv2Optimizer}
|
29
|
+
|
30
|
+
_logger = logging.getLogger(__name__)
|
31
|
+
|
32
|
+
|
33
|
+
@experimental(version="3.0.0")
|
34
|
+
def optimize_prompt(
|
35
|
+
*,
|
36
|
+
target_llm_params: LLMParams,
|
37
|
+
prompt: Union[str, PromptVersion],
|
38
|
+
train_data: "EvaluationDatasetTypes",
|
39
|
+
scorers: list[Scorer],
|
40
|
+
objective: Optional[OBJECTIVE_FN] = None,
|
41
|
+
eval_data: Optional["EvaluationDatasetTypes"] = None,
|
42
|
+
optimizer_config: Optional[OptimizerConfig] = None,
|
43
|
+
) -> PromptOptimizationResult:
|
44
|
+
"""
|
45
|
+
Optimize a LLM prompt using the given dataset and evaluation metrics.
|
46
|
+
The optimized prompt template is automatically registered as a new version of the
|
47
|
+
original prompt and included in the result.
|
48
|
+
Currently, this API only supports DSPy's MIPROv2 optimizer.
|
49
|
+
|
50
|
+
Args:
|
51
|
+
target_llm_params: Parameters for the the LLM that prompt is optimized for.
|
52
|
+
The model name must be specified in the format `<provider>/<model>`.
|
53
|
+
prompt: The URI or Prompt object of the MLflow prompt to optimize.
|
54
|
+
The optimized prompt is registered as a new version of the prompt.
|
55
|
+
train_data: Training dataset used for optimization.
|
56
|
+
The data must be one of the following formats:
|
57
|
+
|
58
|
+
* An EvaluationDataset entity
|
59
|
+
* Pandas DataFrame
|
60
|
+
* Spark DataFrame
|
61
|
+
* List of dictionaries
|
62
|
+
|
63
|
+
The dataset must include the following columns:
|
64
|
+
|
65
|
+
- inputs: A column containing single inputs in dict format.
|
66
|
+
Each input should contain keys matching the variables in the prompt template.
|
67
|
+
- expectations: A column containing a dictionary
|
68
|
+
of ground truths for individual output fields.
|
69
|
+
|
70
|
+
scorers: List of scorers that evaluate the inputs, outputs and expectations.
|
71
|
+
Note: Trace input is not supported for optimization. Use inputs, outputs and
|
72
|
+
expectations for optimization. Also, pass the `objective` argument
|
73
|
+
when using scorers with string or :class:`~mlflow.entities.Feedback` type outputs.
|
74
|
+
objective: A callable that computes the overall performance metric from individual
|
75
|
+
assessments. Takes a dict mapping assessment names to assessment scores and
|
76
|
+
returns a float value (greater is better).
|
77
|
+
eval_data: Evaluation dataset with the same format as train_data. If not provided,
|
78
|
+
train_data will be automatically split into training and evaluation sets.
|
79
|
+
optimizer_config: Configuration parameters for the optimizer.
|
80
|
+
|
81
|
+
Returns:
|
82
|
+
PromptOptimizationResult: The optimization result including the optimized prompt.
|
83
|
+
|
84
|
+
Example:
|
85
|
+
|
86
|
+
.. code-block:: python
|
87
|
+
|
88
|
+
import os
|
89
|
+
import mlflow
|
90
|
+
from typing import Any
|
91
|
+
from mlflow.genai.scorers import scorer
|
92
|
+
from mlflow.genai.optimize import OptimizerConfig, LLMParams
|
93
|
+
|
94
|
+
os.environ["OPENAI_API_KEY"] = "YOUR_API_KEY"
|
95
|
+
|
96
|
+
|
97
|
+
@scorer
|
98
|
+
def exact_match(expectations: dict[str, Any], outputs: dict[str, Any]) -> bool:
|
99
|
+
return expectations == outputs
|
100
|
+
|
101
|
+
|
102
|
+
prompt = mlflow.genai.register_prompt(
|
103
|
+
name="qa",
|
104
|
+
template="Answer the following question: {{question}}",
|
105
|
+
)
|
106
|
+
|
107
|
+
result = mlflow.genai.optimize_prompt(
|
108
|
+
target_llm_params=LLMParams(model_name="openai/gpt-4.1-nano"),
|
109
|
+
train_data=[
|
110
|
+
{"inputs": {"question": f"{i}+1"}, "expectations": {"answer": f"{i + 1}"}}
|
111
|
+
for i in range(100)
|
112
|
+
],
|
113
|
+
scorers=[exact_match],
|
114
|
+
prompt=prompt.uri,
|
115
|
+
optimizer_config=OptimizerConfig(num_instruction_candidates=5),
|
116
|
+
)
|
117
|
+
|
118
|
+
print(result.prompt.template)
|
119
|
+
"""
|
120
|
+
if optimizer_config is None:
|
121
|
+
optimizer_config = OptimizerConfig()
|
122
|
+
optimzer = _select_optimizer(optimizer_config)
|
123
|
+
_validate_scorers(scorers)
|
124
|
+
|
125
|
+
train_data = _convert_eval_set_to_df(train_data)
|
126
|
+
if eval_data is not None:
|
127
|
+
eval_data = _convert_eval_set_to_df(eval_data)
|
128
|
+
|
129
|
+
if isinstance(prompt, str):
|
130
|
+
prompt: PromptVersion = load_prompt(prompt)
|
131
|
+
|
132
|
+
with _maybe_start_autolog(optimizer_config, train_data, eval_data, prompt, target_llm_params):
|
133
|
+
optimized_prompt = optimzer.optimize(
|
134
|
+
prompt=prompt,
|
135
|
+
target_llm_params=target_llm_params,
|
136
|
+
train_data=train_data,
|
137
|
+
scorers=scorers,
|
138
|
+
objective=objective,
|
139
|
+
eval_data=eval_data,
|
140
|
+
)
|
141
|
+
|
142
|
+
return PromptOptimizationResult(prompt=optimized_prompt)
|
143
|
+
|
144
|
+
|
145
|
+
def _select_optimizer(optimizer_config: OptimizerConfig) -> _BaseOptimizer:
|
146
|
+
if optimizer_config.algorithm not in _ALGORITHMS:
|
147
|
+
raise ValueError(
|
148
|
+
f"Unsupported algorithm: '{optimizer_config.algorithm}'. "
|
149
|
+
f"Available algorithms: {list(_ALGORITHMS.keys())}. "
|
150
|
+
"Please choose from the supported algorithms above."
|
151
|
+
)
|
152
|
+
|
153
|
+
return _ALGORITHMS[optimizer_config.algorithm](optimizer_config)
|
154
|
+
|
155
|
+
|
156
|
+
def _validate_scorers(scorers: list[Scorer]) -> None:
|
157
|
+
for scorer in scorers:
|
158
|
+
if not isinstance(scorer, Scorer):
|
159
|
+
raise MlflowException.invalid_parameter_value(
|
160
|
+
f"Invalid scorer: {scorer}. Please use @scorer decorator "
|
161
|
+
"on your function or inherit from Scorer class."
|
162
|
+
)
|
163
|
+
|
164
|
+
signature = inspect.signature(scorer)
|
165
|
+
if "trace" in signature.parameters:
|
166
|
+
raise MlflowException.invalid_parameter_value(
|
167
|
+
f"Invalid scorer parameter: {scorer} contains 'trace' parameter. "
|
168
|
+
"Optimization scorers can only use: inputs, outputs, or expectations. "
|
169
|
+
"Remove 'trace' parameter from your scorer function."
|
170
|
+
)
|
171
|
+
|
172
|
+
|
173
|
+
@contextmanager
|
174
|
+
def _maybe_start_autolog(
|
175
|
+
optimizer_config: OptimizerConfig,
|
176
|
+
train_data: "pd.DataFrame",
|
177
|
+
eval_data: Optional["pd.DataFrame"],
|
178
|
+
prompt: PromptVersion,
|
179
|
+
target_llm_params: LLMParams,
|
180
|
+
):
|
181
|
+
if optimizer_config.autolog:
|
182
|
+
with start_run() as run:
|
183
|
+
_logger.info(
|
184
|
+
f"🚀 MLflow Run `{run.info.run_id}` started for prompt optimization! "
|
185
|
+
"Watch the run to track the optimization progress."
|
186
|
+
)
|
187
|
+
log_table(train_data, "train_data.json")
|
188
|
+
if eval_data is not None:
|
189
|
+
log_table(eval_data, "eval_data.json")
|
190
|
+
params = {
|
191
|
+
"prompt_uri": prompt.uri,
|
192
|
+
**{f"target_llm_params.{k}": v for k, v in asdict(target_llm_params).items()},
|
193
|
+
**{f"optimizer_config.{k}": v for k, v in asdict(optimizer_config).items()},
|
194
|
+
}
|
195
|
+
log_params(params)
|
196
|
+
yield
|
197
|
+
else:
|
198
|
+
yield
|
@@ -0,0 +1,38 @@
|
|
1
|
+
import abc
|
2
|
+
from typing import TYPE_CHECKING, Optional
|
3
|
+
|
4
|
+
from mlflow.entities.model_registry import Prompt
|
5
|
+
from mlflow.genai.optimize.types import OBJECTIVE_FN, LLMParams, OptimizerConfig
|
6
|
+
from mlflow.genai.scorers import Scorer
|
7
|
+
|
8
|
+
if TYPE_CHECKING:
|
9
|
+
import pandas as pd
|
10
|
+
|
11
|
+
|
12
|
+
class _BaseOptimizer(abc.ABC):
|
13
|
+
def __init__(self, optimizer_config: OptimizerConfig):
|
14
|
+
self.optimizer_config = optimizer_config
|
15
|
+
|
16
|
+
@abc.abstractmethod
|
17
|
+
def optimize(
|
18
|
+
self,
|
19
|
+
prompt: Prompt,
|
20
|
+
target_llm_params: LLMParams,
|
21
|
+
train_data: "pd.DataFrame",
|
22
|
+
scorers: list[Scorer],
|
23
|
+
objective: Optional[OBJECTIVE_FN] = None,
|
24
|
+
eval_data: Optional["pd.DataFrame"] = None,
|
25
|
+
) -> Prompt:
|
26
|
+
"""Optimize the given prompt using the specified configuration.
|
27
|
+
|
28
|
+
Args:
|
29
|
+
prompt: The prompt to optimize.
|
30
|
+
target_llm_params: Parameters for the agent LLM.
|
31
|
+
train_data: Training dataset for optimization.
|
32
|
+
scorers: List of scorers to evaluate the optimization.
|
33
|
+
objective: Optional function to compute overall performance metric.
|
34
|
+
eval_data: Optional evaluation dataset.
|
35
|
+
|
36
|
+
Returns:
|
37
|
+
The optimized prompt registered in the prompt registry as a new version.
|
38
|
+
"""
|