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
mlflow/types/agent.py
ADDED
@@ -0,0 +1,270 @@
|
|
1
|
+
from typing import Any, Optional
|
2
|
+
|
3
|
+
from pydantic import ConfigDict
|
4
|
+
|
5
|
+
from mlflow.types.chat import BaseModel, ChatUsage, ToolCall
|
6
|
+
from mlflow.types.llm import (
|
7
|
+
_custom_inputs_col_spec,
|
8
|
+
_custom_outputs_col_spec,
|
9
|
+
_token_usage_stats_col_spec,
|
10
|
+
)
|
11
|
+
from mlflow.types.schema import (
|
12
|
+
Array,
|
13
|
+
ColSpec,
|
14
|
+
DataType,
|
15
|
+
Map,
|
16
|
+
Object,
|
17
|
+
Property,
|
18
|
+
Schema,
|
19
|
+
)
|
20
|
+
from mlflow.utils.pydantic_utils import IS_PYDANTIC_V2_OR_NEWER, model_validator
|
21
|
+
|
22
|
+
|
23
|
+
class ChatAgentMessage(BaseModel):
|
24
|
+
"""
|
25
|
+
A message in a ChatAgent model request or response.
|
26
|
+
|
27
|
+
Args:
|
28
|
+
role (str): The role of the entity that sent the message (e.g. ``"user"``, ``"system"``,
|
29
|
+
``"assistant"``, ``"tool"``).
|
30
|
+
content (str): The content of the message.
|
31
|
+
**Optional** Can be ``None`` if tool_calls is provided.
|
32
|
+
name (str): The name of the entity that sent the message. **Optional** defaults to ``None``
|
33
|
+
id (str): The ID of the message. Required when it is either part of a
|
34
|
+
:py:class:`ChatAgentResponse` or :py:class:`ChatAgentChunk`.
|
35
|
+
tool_calls (List[:py:class:`mlflow.types.chat.ToolCall`]): A list of tool calls made by the
|
36
|
+
model. **Optional** defaults to ``None``
|
37
|
+
tool_call_id (str): The ID of the tool call that this message is a response to.
|
38
|
+
**Optional** defaults to ``None``
|
39
|
+
attachments (Dict[str, str]): A dictionary of attachments. **Optional** defaults to ``None``
|
40
|
+
"""
|
41
|
+
|
42
|
+
role: str
|
43
|
+
content: Optional[str] = None
|
44
|
+
name: Optional[str] = None
|
45
|
+
id: Optional[str] = None
|
46
|
+
tool_calls: Optional[list[ToolCall]] = None
|
47
|
+
tool_call_id: Optional[str] = None
|
48
|
+
# TODO make this a pydantic class with subtypes once we have more details on usage
|
49
|
+
attachments: Optional[dict[str, str]] = None
|
50
|
+
|
51
|
+
@model_validator(mode="after")
|
52
|
+
def check_content_and_tool_calls(cls, values):
|
53
|
+
"""
|
54
|
+
Ensure at least one of 'content' or 'tool_calls' is set.
|
55
|
+
"""
|
56
|
+
if IS_PYDANTIC_V2_OR_NEWER:
|
57
|
+
content = values.content
|
58
|
+
tool_calls = values.tool_calls
|
59
|
+
else:
|
60
|
+
content = values.get("content")
|
61
|
+
tool_calls = values.get("tool_calls")
|
62
|
+
|
63
|
+
if not content and not tool_calls:
|
64
|
+
raise ValueError("Either 'content' or 'tool_calls' must be provided.")
|
65
|
+
return values
|
66
|
+
|
67
|
+
@model_validator(mode="after")
|
68
|
+
def check_tool_messages(cls, values):
|
69
|
+
"""
|
70
|
+
Ensure that the 'name' and 'tool_call_id' fields are set for tool messages.
|
71
|
+
"""
|
72
|
+
if IS_PYDANTIC_V2_OR_NEWER:
|
73
|
+
name = values.name
|
74
|
+
role = values.role
|
75
|
+
tool_call_id = values.tool_call_id
|
76
|
+
else:
|
77
|
+
name = values.get("name")
|
78
|
+
role = values.get("role")
|
79
|
+
tool_call_id = values.get("tool_call_id")
|
80
|
+
|
81
|
+
if role == "tool" and (not name or not tool_call_id):
|
82
|
+
raise ValueError("Both 'name' and 'tool_call_id' must be provided for tool messages.")
|
83
|
+
return values
|
84
|
+
|
85
|
+
|
86
|
+
class ChatContext(BaseModel):
|
87
|
+
"""
|
88
|
+
Context to be used in a ChatAgent endpoint.
|
89
|
+
|
90
|
+
Args:
|
91
|
+
conversation_id (str): The ID of the conversation. **Optional** defaults to ``None``
|
92
|
+
user_id (str): The ID of the user. **Optional** defaults to ``None``
|
93
|
+
"""
|
94
|
+
|
95
|
+
conversation_id: Optional[str] = None
|
96
|
+
user_id: Optional[str] = None
|
97
|
+
|
98
|
+
|
99
|
+
class ChatAgentRequest(BaseModel):
|
100
|
+
"""
|
101
|
+
Format of a ChatAgent interface request.
|
102
|
+
|
103
|
+
Args:
|
104
|
+
messages: A list of :py:class:`ChatAgentMessage` that will be passed to the model.
|
105
|
+
context (:py:class:`ChatContext`): The context to be used in the chat endpoint. Includes
|
106
|
+
conversation_id and user_id. **Optional** defaults to ``None``
|
107
|
+
custom_inputs (Dict[str, Any]): An optional param to provide arbitrary additional context
|
108
|
+
to the model. The dictionary values must be JSON-serializable.
|
109
|
+
**Optional** defaults to ``None``
|
110
|
+
stream (bool): Whether to stream back responses as they are generated.
|
111
|
+
**Optional**, defaults to ``False``
|
112
|
+
"""
|
113
|
+
|
114
|
+
messages: list[ChatAgentMessage]
|
115
|
+
context: Optional[ChatContext] = None
|
116
|
+
custom_inputs: Optional[dict[str, Any]] = None
|
117
|
+
stream: Optional[bool] = False
|
118
|
+
|
119
|
+
|
120
|
+
class ChatAgentResponse(BaseModel):
|
121
|
+
"""
|
122
|
+
Represents the response of a ChatAgent.
|
123
|
+
|
124
|
+
Args:
|
125
|
+
messages: A list of :py:class:`ChatAgentMessage` that are returned from the model.
|
126
|
+
finish_reason (str): The reason why generation stopped. **Optional** defaults to ``None``
|
127
|
+
custom_outputs (Dict[str, Any]): An optional param to provide arbitrary additional context
|
128
|
+
from the model. The dictionary values must be JSON-serializable. **Optional**, defaults
|
129
|
+
to ``None``
|
130
|
+
usage (:py:class:`mlflow.types.chat.ChatUsage`): The token usage of the request
|
131
|
+
**Optional**, defaults to None
|
132
|
+
"""
|
133
|
+
|
134
|
+
if IS_PYDANTIC_V2_OR_NEWER:
|
135
|
+
model_config = ConfigDict(validate_assignment=True)
|
136
|
+
else:
|
137
|
+
|
138
|
+
class Config:
|
139
|
+
validate_assignment = True
|
140
|
+
|
141
|
+
messages: list[ChatAgentMessage]
|
142
|
+
finish_reason: Optional[str] = None
|
143
|
+
# TODO: add finish_reason_metadata once we have a plan for usage
|
144
|
+
custom_outputs: Optional[dict[str, Any]] = None
|
145
|
+
usage: Optional[ChatUsage] = None
|
146
|
+
|
147
|
+
@model_validator(mode="after")
|
148
|
+
def check_message_ids(cls, values):
|
149
|
+
"""
|
150
|
+
Ensure that all messages have an ID and it is unique.
|
151
|
+
"""
|
152
|
+
if IS_PYDANTIC_V2_OR_NEWER:
|
153
|
+
message_ids = [msg.id for msg in values.messages]
|
154
|
+
else:
|
155
|
+
message_ids = [msg.get("id") for msg in values.get("messages")]
|
156
|
+
|
157
|
+
if any(msg_id is None for msg_id in message_ids):
|
158
|
+
raise ValueError(
|
159
|
+
"All ChatAgentMessage objects in field `messages` must have an ID. You can use "
|
160
|
+
"`str(uuid.uuid4())` to generate a unique ID."
|
161
|
+
)
|
162
|
+
if len(message_ids) != len(set(message_ids)):
|
163
|
+
raise ValueError(
|
164
|
+
"All ChatAgentMessage objects in field `messages` must have unique IDs. "
|
165
|
+
"You can use `str(uuid.uuid4())` to generate a unique ID."
|
166
|
+
)
|
167
|
+
return values
|
168
|
+
|
169
|
+
|
170
|
+
class ChatAgentChunk(BaseModel):
|
171
|
+
"""
|
172
|
+
Represents a single chunk within the streaming response of a ChatAgent.
|
173
|
+
|
174
|
+
Args:
|
175
|
+
delta: A :py:class:`ChatAgentMessage` representing a single chunk within the list of
|
176
|
+
messages comprising agent output. In particular, clients should assume the `content`
|
177
|
+
field within this `ChatAgentMessage` contains only part of the message content, and
|
178
|
+
aggregate message content by ID across chunks. More info can be found in the docstring
|
179
|
+
of :py:func:`ChatAgent.predict_stream <mlflow.pyfunc.ChatAgent.predict_stream>`.
|
180
|
+
finish_reason (str): The reason why generation stopped. **Optional** defaults to ``None``
|
181
|
+
custom_outputs (Dict[str, Any]): An optional param to provide arbitrary additional context
|
182
|
+
from the model. The dictionary values must be JSON-serializable. **Optional**, defaults
|
183
|
+
to ``None``
|
184
|
+
usage (:py:class:`mlflow.types.chat.ChatUsage`): The token usage of the request
|
185
|
+
**Optional**, defaults to None
|
186
|
+
"""
|
187
|
+
|
188
|
+
if IS_PYDANTIC_V2_OR_NEWER:
|
189
|
+
model_config = ConfigDict(validate_assignment=True)
|
190
|
+
else:
|
191
|
+
|
192
|
+
class Config:
|
193
|
+
validate_assignment = True
|
194
|
+
|
195
|
+
delta: ChatAgentMessage
|
196
|
+
finish_reason: Optional[str] = None
|
197
|
+
# TODO: add finish_reason_metadata once we have a plan for usage
|
198
|
+
custom_outputs: Optional[dict[str, Any]] = None
|
199
|
+
usage: Optional[ChatUsage] = None
|
200
|
+
|
201
|
+
@model_validator(mode="after")
|
202
|
+
def check_message_id(cls, values):
|
203
|
+
"""
|
204
|
+
Ensure that the message ID is unique.
|
205
|
+
"""
|
206
|
+
message_id = values.delta.id if IS_PYDANTIC_V2_OR_NEWER else values.get("delta").get("id")
|
207
|
+
|
208
|
+
if message_id is None:
|
209
|
+
raise ValueError(
|
210
|
+
"The field `delta` of ChatAgentChunk must contain a ChatAgentMessage object with an"
|
211
|
+
" ID. If this chunk contains partial content, it should have the same ID as other "
|
212
|
+
" chunks in the same message. See "
|
213
|
+
"https://mlflow.org/docs/latest/api_reference/python_api/mlflow.pyfunc.html#mlflow.pyfunc.ChatAgent.predict_stream"
|
214
|
+
" for more details. You can use `str(uuid.uuid4())` to generate a unique ID."
|
215
|
+
)
|
216
|
+
return values
|
217
|
+
|
218
|
+
|
219
|
+
# fmt: off
|
220
|
+
_chat_agent_messages_col_spec = ColSpec(
|
221
|
+
name="messages",
|
222
|
+
type=Array(
|
223
|
+
Object(
|
224
|
+
[
|
225
|
+
Property("role", DataType.string),
|
226
|
+
Property("content", DataType.string, False),
|
227
|
+
Property("name", DataType.string, False),
|
228
|
+
Property("id", DataType.string, False),
|
229
|
+
Property("tool_calls", Array(Object([
|
230
|
+
Property("id", DataType.string),
|
231
|
+
Property("function", Object([
|
232
|
+
Property("name", DataType.string),
|
233
|
+
Property("arguments", DataType.string),
|
234
|
+
])),
|
235
|
+
Property("type", DataType.string),
|
236
|
+
])), False),
|
237
|
+
Property("tool_call_id", DataType.string, False),
|
238
|
+
Property("attachments", Map(DataType.string), False),
|
239
|
+
]
|
240
|
+
)
|
241
|
+
),
|
242
|
+
)
|
243
|
+
|
244
|
+
# TODO: move out all params to a ParamSchema when Map(AnyType()) is supported by ParamSpec
|
245
|
+
CHAT_AGENT_INPUT_SCHEMA = Schema(
|
246
|
+
[
|
247
|
+
_chat_agent_messages_col_spec,
|
248
|
+
ColSpec(name="context", type=Object([
|
249
|
+
Property("conversation_id", DataType.string, False),
|
250
|
+
Property("user_id", DataType.string, False),
|
251
|
+
]), required=False),
|
252
|
+
_custom_inputs_col_spec,
|
253
|
+
ColSpec(name="stream", type=DataType.boolean, required=False),
|
254
|
+
]
|
255
|
+
)
|
256
|
+
|
257
|
+
CHAT_AGENT_OUTPUT_SCHEMA = Schema(
|
258
|
+
[
|
259
|
+
_chat_agent_messages_col_spec,
|
260
|
+
ColSpec(name="finish_reason", type=DataType.string, required=False),
|
261
|
+
_custom_outputs_col_spec,
|
262
|
+
_token_usage_stats_col_spec,
|
263
|
+
]
|
264
|
+
)
|
265
|
+
|
266
|
+
CHAT_AGENT_INPUT_EXAMPLE = {
|
267
|
+
"messages": [
|
268
|
+
{"role": "user", "content": "Hello!"},
|
269
|
+
]
|
270
|
+
}
|
mlflow/types/chat.py
ADDED
@@ -0,0 +1,240 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
|
3
|
+
from typing import Annotated, Any, Literal, Optional, Union
|
4
|
+
from uuid import uuid4
|
5
|
+
|
6
|
+
from pydantic import BaseModel as _BaseModel
|
7
|
+
from pydantic import Field
|
8
|
+
|
9
|
+
from mlflow.utils import IS_PYDANTIC_V2_OR_NEWER
|
10
|
+
|
11
|
+
|
12
|
+
class BaseModel(_BaseModel):
|
13
|
+
@classmethod
|
14
|
+
def validate_compat(cls, obj: Any):
|
15
|
+
if IS_PYDANTIC_V2_OR_NEWER:
|
16
|
+
return cls.model_validate(obj)
|
17
|
+
else:
|
18
|
+
return cls.parse_obj(obj)
|
19
|
+
|
20
|
+
def model_dump_compat(self, **kwargs):
|
21
|
+
if IS_PYDANTIC_V2_OR_NEWER:
|
22
|
+
return self.model_dump(**kwargs)
|
23
|
+
else:
|
24
|
+
return self.dict(**kwargs)
|
25
|
+
|
26
|
+
|
27
|
+
class TextContentPart(BaseModel):
|
28
|
+
type: Literal["text"]
|
29
|
+
text: str
|
30
|
+
|
31
|
+
|
32
|
+
class ImageUrl(BaseModel):
|
33
|
+
"""
|
34
|
+
Represents an image URL.
|
35
|
+
|
36
|
+
Attributes:
|
37
|
+
url: Either a URL of an image or base64 encoded data.
|
38
|
+
https://platform.openai.com/docs/guides/vision?lang=curl#uploading-base64-encoded-images
|
39
|
+
detail: The level of resolution for the image when the model receives it.
|
40
|
+
For example, when set to "low", the model will see a image resized to
|
41
|
+
512x512 pixels, which consumes fewer tokens. In OpenAI, this is optional
|
42
|
+
and defaults to "auto".
|
43
|
+
https://platform.openai.com/docs/guides/vision?lang=curl#low-or-high-fidelity-image-understanding
|
44
|
+
"""
|
45
|
+
|
46
|
+
url: str
|
47
|
+
detail: Optional[Literal["auto", "low", "high"]] = None
|
48
|
+
|
49
|
+
|
50
|
+
class ImageContentPart(BaseModel):
|
51
|
+
type: Literal["image_url"]
|
52
|
+
image_url: ImageUrl
|
53
|
+
|
54
|
+
|
55
|
+
class InputAudio(BaseModel):
|
56
|
+
data: str # base64 encoded data
|
57
|
+
format: Literal["wav", "mp3"]
|
58
|
+
|
59
|
+
|
60
|
+
class AudioContentPart(BaseModel):
|
61
|
+
type: Literal["input_audio"]
|
62
|
+
input_audio: InputAudio
|
63
|
+
|
64
|
+
|
65
|
+
ContentPartsList = list[
|
66
|
+
Annotated[
|
67
|
+
Union[TextContentPart, ImageContentPart, AudioContentPart], Field(discriminator="type")
|
68
|
+
]
|
69
|
+
]
|
70
|
+
|
71
|
+
|
72
|
+
ContentType = Annotated[Union[str, ContentPartsList], Field(union_mode="left_to_right")]
|
73
|
+
|
74
|
+
|
75
|
+
class Function(BaseModel):
|
76
|
+
name: str
|
77
|
+
arguments: str
|
78
|
+
|
79
|
+
def to_tool_call(self, id=None) -> ToolCall:
|
80
|
+
if id is None:
|
81
|
+
id = str(uuid4())
|
82
|
+
return ToolCall(id=id, type="function", function=self)
|
83
|
+
|
84
|
+
|
85
|
+
class ToolCall(BaseModel):
|
86
|
+
id: str
|
87
|
+
type: str = Field(default="function")
|
88
|
+
function: Function
|
89
|
+
|
90
|
+
|
91
|
+
class ChatMessage(BaseModel):
|
92
|
+
"""
|
93
|
+
A chat request. ``content`` can be a string, or an array of content parts.
|
94
|
+
|
95
|
+
A content part is one of the following:
|
96
|
+
|
97
|
+
- :py:class:`TextContentPart <mlflow.types.chat.TextContentPart>`
|
98
|
+
- :py:class:`ImageContentPart <mlflow.types.chat.ImageContentPart>`
|
99
|
+
- :py:class:`AudioContentPart <mlflow.types.chat.AudioContentPart>`
|
100
|
+
"""
|
101
|
+
|
102
|
+
role: str
|
103
|
+
content: Optional[ContentType] = None
|
104
|
+
# NB: In the actual OpenAI chat completion API spec, these fields only
|
105
|
+
# present in either the request or response message (tool_call_id is only in
|
106
|
+
# the request, while the other two are only in the response).
|
107
|
+
# Strictly speaking, we should separate the request and response message types
|
108
|
+
# to match OpenAI's API spec. However, we don't want to do that because we the
|
109
|
+
# request and response message types are not distinguished in many parts of the
|
110
|
+
# codebase, and also we don't want to ask users to use two different classes.
|
111
|
+
# Therefore, we include all fields in this class, while marking them as optional.
|
112
|
+
# TODO: Define a sub classes for different type of messages (request/response, and
|
113
|
+
# system/user/assistant/tool, etc), and create a factory function to allow users
|
114
|
+
# to create them without worrying about the details.
|
115
|
+
tool_calls: Optional[list[ToolCall]] = None
|
116
|
+
refusal: Optional[str] = None
|
117
|
+
tool_call_id: Optional[str] = None
|
118
|
+
|
119
|
+
|
120
|
+
class ParamType(BaseModel):
|
121
|
+
type: Optional[Literal["string", "number", "integer", "object", "array", "boolean", "null"]] = (
|
122
|
+
None
|
123
|
+
)
|
124
|
+
|
125
|
+
|
126
|
+
class ParamProperty(ParamType):
|
127
|
+
description: Optional[str] = None
|
128
|
+
enum: Optional[list[str]] = None
|
129
|
+
items: Optional[ParamType] = None
|
130
|
+
|
131
|
+
|
132
|
+
class FunctionParams(BaseModel):
|
133
|
+
properties: dict[str, ParamProperty]
|
134
|
+
type: Literal["object"] = "object"
|
135
|
+
required: Optional[list[str]] = None
|
136
|
+
additionalProperties: Optional[bool] = None
|
137
|
+
|
138
|
+
|
139
|
+
class FunctionToolDefinition(BaseModel):
|
140
|
+
name: str
|
141
|
+
description: Optional[str] = None
|
142
|
+
parameters: Optional[FunctionParams] = None
|
143
|
+
strict: Optional[bool] = None
|
144
|
+
|
145
|
+
|
146
|
+
class ChatTool(BaseModel):
|
147
|
+
"""
|
148
|
+
A tool definition passed to the chat completion API.
|
149
|
+
|
150
|
+
Ref: https://platform.openai.com/docs/guides/function-calling
|
151
|
+
"""
|
152
|
+
|
153
|
+
type: Literal["function"]
|
154
|
+
function: Optional[FunctionToolDefinition] = None
|
155
|
+
|
156
|
+
|
157
|
+
class BaseRequestPayload(BaseModel):
|
158
|
+
"""Common parameters used for chat completions and completion endpoints."""
|
159
|
+
|
160
|
+
temperature: float = Field(0.0, ge=0, le=2)
|
161
|
+
n: int = Field(1, ge=1)
|
162
|
+
stop: Optional[list[str]] = (
|
163
|
+
Field(None, min_length=1) if IS_PYDANTIC_V2_OR_NEWER else Field(None, min_items=1)
|
164
|
+
)
|
165
|
+
max_tokens: Optional[int] = Field(None, ge=1)
|
166
|
+
stream: Optional[bool] = None
|
167
|
+
stream_options: Optional[dict[str, Any]] = None
|
168
|
+
model: Optional[str] = None
|
169
|
+
|
170
|
+
|
171
|
+
# NB: For interface constructs that rely on other BaseModel implementations, in
|
172
|
+
# pydantic 1 the **order** in which classes are defined in this module is absolutely
|
173
|
+
# critical to prevent ForwardRef errors. Pydantic 2 does not have this limitation.
|
174
|
+
# To maintain compatibility with Pydantic 1, ensure that all classes that are defined in
|
175
|
+
# this file have dependencies defined higher than the line of usage.
|
176
|
+
|
177
|
+
|
178
|
+
class ChatChoice(BaseModel):
|
179
|
+
index: int
|
180
|
+
message: ChatMessage
|
181
|
+
finish_reason: Optional[str] = None
|
182
|
+
|
183
|
+
|
184
|
+
class ChatUsage(BaseModel):
|
185
|
+
prompt_tokens: Optional[int] = None
|
186
|
+
completion_tokens: Optional[int] = None
|
187
|
+
total_tokens: Optional[int] = None
|
188
|
+
|
189
|
+
|
190
|
+
class ChatChoiceDelta(BaseModel):
|
191
|
+
role: Optional[str] = None
|
192
|
+
content: Optional[str] = None
|
193
|
+
|
194
|
+
|
195
|
+
class ChatChunkChoice(BaseModel):
|
196
|
+
index: int
|
197
|
+
finish_reason: Optional[str] = None
|
198
|
+
delta: ChatChoiceDelta
|
199
|
+
|
200
|
+
|
201
|
+
class ChatCompletionChunk(BaseModel):
|
202
|
+
"""A chunk of a chat completion stream response."""
|
203
|
+
|
204
|
+
id: Optional[str] = None
|
205
|
+
object: str = "chat.completion.chunk"
|
206
|
+
created: int
|
207
|
+
model: str
|
208
|
+
choices: list[ChatChunkChoice]
|
209
|
+
|
210
|
+
|
211
|
+
class ChatCompletionRequest(BaseRequestPayload):
|
212
|
+
"""
|
213
|
+
A request to the chat completion API.
|
214
|
+
|
215
|
+
Must be compatible with OpenAI's Chat Completion API.
|
216
|
+
https://platform.openai.com/docs/api-reference/chat
|
217
|
+
"""
|
218
|
+
|
219
|
+
messages: list[ChatMessage] = (
|
220
|
+
Field(..., min_length=1) if IS_PYDANTIC_V2_OR_NEWER else Field(..., min_items=1)
|
221
|
+
)
|
222
|
+
tools: Optional[list[ChatTool]] = (
|
223
|
+
Field(None, min_length=1) if IS_PYDANTIC_V2_OR_NEWER else Field(None, min_items=1)
|
224
|
+
)
|
225
|
+
|
226
|
+
|
227
|
+
class ChatCompletionResponse(BaseModel):
|
228
|
+
"""
|
229
|
+
A response from the chat completion API.
|
230
|
+
|
231
|
+
Must be compatible with OpenAI's Chat Completion API.
|
232
|
+
https://platform.openai.com/docs/api-reference/chat
|
233
|
+
"""
|
234
|
+
|
235
|
+
id: Optional[str] = None
|
236
|
+
object: str = "chat.completion"
|
237
|
+
created: int
|
238
|
+
model: str
|
239
|
+
choices: list[ChatChoice]
|
240
|
+
usage: ChatUsage
|