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.
Files changed (645) hide show
  1. genesis_flow-1.0.0.dist-info/METADATA +822 -0
  2. genesis_flow-1.0.0.dist-info/RECORD +645 -0
  3. genesis_flow-1.0.0.dist-info/WHEEL +5 -0
  4. genesis_flow-1.0.0.dist-info/entry_points.txt +19 -0
  5. genesis_flow-1.0.0.dist-info/licenses/LICENSE.txt +202 -0
  6. genesis_flow-1.0.0.dist-info/top_level.txt +1 -0
  7. mlflow/__init__.py +367 -0
  8. mlflow/__main__.py +3 -0
  9. mlflow/ag2/__init__.py +56 -0
  10. mlflow/ag2/ag2_logger.py +294 -0
  11. mlflow/anthropic/__init__.py +40 -0
  12. mlflow/anthropic/autolog.py +129 -0
  13. mlflow/anthropic/chat.py +144 -0
  14. mlflow/artifacts/__init__.py +268 -0
  15. mlflow/autogen/__init__.py +144 -0
  16. mlflow/autogen/chat.py +142 -0
  17. mlflow/azure/__init__.py +26 -0
  18. mlflow/azure/auth_handler.py +257 -0
  19. mlflow/azure/client.py +319 -0
  20. mlflow/azure/config.py +120 -0
  21. mlflow/azure/connection_factory.py +340 -0
  22. mlflow/azure/exceptions.py +27 -0
  23. mlflow/azure/stores.py +327 -0
  24. mlflow/azure/utils.py +183 -0
  25. mlflow/bedrock/__init__.py +45 -0
  26. mlflow/bedrock/_autolog.py +202 -0
  27. mlflow/bedrock/chat.py +122 -0
  28. mlflow/bedrock/stream.py +160 -0
  29. mlflow/bedrock/utils.py +43 -0
  30. mlflow/cli.py +707 -0
  31. mlflow/client.py +12 -0
  32. mlflow/config/__init__.py +56 -0
  33. mlflow/crewai/__init__.py +79 -0
  34. mlflow/crewai/autolog.py +253 -0
  35. mlflow/crewai/chat.py +29 -0
  36. mlflow/data/__init__.py +75 -0
  37. mlflow/data/artifact_dataset_sources.py +170 -0
  38. mlflow/data/code_dataset_source.py +40 -0
  39. mlflow/data/dataset.py +123 -0
  40. mlflow/data/dataset_registry.py +168 -0
  41. mlflow/data/dataset_source.py +110 -0
  42. mlflow/data/dataset_source_registry.py +219 -0
  43. mlflow/data/delta_dataset_source.py +167 -0
  44. mlflow/data/digest_utils.py +108 -0
  45. mlflow/data/evaluation_dataset.py +562 -0
  46. mlflow/data/filesystem_dataset_source.py +81 -0
  47. mlflow/data/http_dataset_source.py +145 -0
  48. mlflow/data/huggingface_dataset.py +258 -0
  49. mlflow/data/huggingface_dataset_source.py +118 -0
  50. mlflow/data/meta_dataset.py +104 -0
  51. mlflow/data/numpy_dataset.py +223 -0
  52. mlflow/data/pandas_dataset.py +231 -0
  53. mlflow/data/polars_dataset.py +352 -0
  54. mlflow/data/pyfunc_dataset_mixin.py +31 -0
  55. mlflow/data/schema.py +76 -0
  56. mlflow/data/sources.py +1 -0
  57. mlflow/data/spark_dataset.py +406 -0
  58. mlflow/data/spark_dataset_source.py +74 -0
  59. mlflow/data/spark_delta_utils.py +118 -0
  60. mlflow/data/tensorflow_dataset.py +350 -0
  61. mlflow/data/uc_volume_dataset_source.py +81 -0
  62. mlflow/db.py +27 -0
  63. mlflow/dspy/__init__.py +17 -0
  64. mlflow/dspy/autolog.py +197 -0
  65. mlflow/dspy/callback.py +398 -0
  66. mlflow/dspy/constant.py +1 -0
  67. mlflow/dspy/load.py +93 -0
  68. mlflow/dspy/save.py +393 -0
  69. mlflow/dspy/util.py +109 -0
  70. mlflow/dspy/wrapper.py +226 -0
  71. mlflow/entities/__init__.py +104 -0
  72. mlflow/entities/_mlflow_object.py +52 -0
  73. mlflow/entities/assessment.py +545 -0
  74. mlflow/entities/assessment_error.py +80 -0
  75. mlflow/entities/assessment_source.py +141 -0
  76. mlflow/entities/dataset.py +92 -0
  77. mlflow/entities/dataset_input.py +51 -0
  78. mlflow/entities/dataset_summary.py +62 -0
  79. mlflow/entities/document.py +48 -0
  80. mlflow/entities/experiment.py +109 -0
  81. mlflow/entities/experiment_tag.py +35 -0
  82. mlflow/entities/file_info.py +45 -0
  83. mlflow/entities/input_tag.py +35 -0
  84. mlflow/entities/lifecycle_stage.py +35 -0
  85. mlflow/entities/logged_model.py +228 -0
  86. mlflow/entities/logged_model_input.py +26 -0
  87. mlflow/entities/logged_model_output.py +32 -0
  88. mlflow/entities/logged_model_parameter.py +46 -0
  89. mlflow/entities/logged_model_status.py +74 -0
  90. mlflow/entities/logged_model_tag.py +33 -0
  91. mlflow/entities/metric.py +200 -0
  92. mlflow/entities/model_registry/__init__.py +29 -0
  93. mlflow/entities/model_registry/_model_registry_entity.py +13 -0
  94. mlflow/entities/model_registry/model_version.py +243 -0
  95. mlflow/entities/model_registry/model_version_deployment_job_run_state.py +44 -0
  96. mlflow/entities/model_registry/model_version_deployment_job_state.py +70 -0
  97. mlflow/entities/model_registry/model_version_search.py +25 -0
  98. mlflow/entities/model_registry/model_version_stages.py +25 -0
  99. mlflow/entities/model_registry/model_version_status.py +35 -0
  100. mlflow/entities/model_registry/model_version_tag.py +35 -0
  101. mlflow/entities/model_registry/prompt.py +73 -0
  102. mlflow/entities/model_registry/prompt_version.py +244 -0
  103. mlflow/entities/model_registry/registered_model.py +175 -0
  104. mlflow/entities/model_registry/registered_model_alias.py +35 -0
  105. mlflow/entities/model_registry/registered_model_deployment_job_state.py +39 -0
  106. mlflow/entities/model_registry/registered_model_search.py +25 -0
  107. mlflow/entities/model_registry/registered_model_tag.py +35 -0
  108. mlflow/entities/multipart_upload.py +74 -0
  109. mlflow/entities/param.py +49 -0
  110. mlflow/entities/run.py +97 -0
  111. mlflow/entities/run_data.py +84 -0
  112. mlflow/entities/run_info.py +188 -0
  113. mlflow/entities/run_inputs.py +59 -0
  114. mlflow/entities/run_outputs.py +43 -0
  115. mlflow/entities/run_status.py +41 -0
  116. mlflow/entities/run_tag.py +36 -0
  117. mlflow/entities/source_type.py +31 -0
  118. mlflow/entities/span.py +774 -0
  119. mlflow/entities/span_event.py +96 -0
  120. mlflow/entities/span_status.py +102 -0
  121. mlflow/entities/trace.py +317 -0
  122. mlflow/entities/trace_data.py +71 -0
  123. mlflow/entities/trace_info.py +220 -0
  124. mlflow/entities/trace_info_v2.py +162 -0
  125. mlflow/entities/trace_location.py +173 -0
  126. mlflow/entities/trace_state.py +39 -0
  127. mlflow/entities/trace_status.py +68 -0
  128. mlflow/entities/view_type.py +51 -0
  129. mlflow/environment_variables.py +866 -0
  130. mlflow/evaluation/__init__.py +16 -0
  131. mlflow/evaluation/assessment.py +369 -0
  132. mlflow/evaluation/evaluation.py +411 -0
  133. mlflow/evaluation/evaluation_tag.py +61 -0
  134. mlflow/evaluation/fluent.py +48 -0
  135. mlflow/evaluation/utils.py +201 -0
  136. mlflow/exceptions.py +213 -0
  137. mlflow/experiments.py +140 -0
  138. mlflow/gemini/__init__.py +81 -0
  139. mlflow/gemini/autolog.py +186 -0
  140. mlflow/gemini/chat.py +261 -0
  141. mlflow/genai/__init__.py +71 -0
  142. mlflow/genai/datasets/__init__.py +67 -0
  143. mlflow/genai/datasets/evaluation_dataset.py +131 -0
  144. mlflow/genai/evaluation/__init__.py +3 -0
  145. mlflow/genai/evaluation/base.py +411 -0
  146. mlflow/genai/evaluation/constant.py +23 -0
  147. mlflow/genai/evaluation/utils.py +244 -0
  148. mlflow/genai/judges/__init__.py +21 -0
  149. mlflow/genai/judges/databricks.py +404 -0
  150. mlflow/genai/label_schemas/__init__.py +153 -0
  151. mlflow/genai/label_schemas/label_schemas.py +209 -0
  152. mlflow/genai/labeling/__init__.py +159 -0
  153. mlflow/genai/labeling/labeling.py +250 -0
  154. mlflow/genai/optimize/__init__.py +13 -0
  155. mlflow/genai/optimize/base.py +198 -0
  156. mlflow/genai/optimize/optimizers/__init__.py +4 -0
  157. mlflow/genai/optimize/optimizers/base_optimizer.py +38 -0
  158. mlflow/genai/optimize/optimizers/dspy_mipro_optimizer.py +221 -0
  159. mlflow/genai/optimize/optimizers/dspy_optimizer.py +91 -0
  160. mlflow/genai/optimize/optimizers/utils/dspy_mipro_callback.py +76 -0
  161. mlflow/genai/optimize/optimizers/utils/dspy_mipro_utils.py +18 -0
  162. mlflow/genai/optimize/types.py +75 -0
  163. mlflow/genai/optimize/util.py +30 -0
  164. mlflow/genai/prompts/__init__.py +206 -0
  165. mlflow/genai/scheduled_scorers.py +431 -0
  166. mlflow/genai/scorers/__init__.py +26 -0
  167. mlflow/genai/scorers/base.py +492 -0
  168. mlflow/genai/scorers/builtin_scorers.py +765 -0
  169. mlflow/genai/scorers/scorer_utils.py +138 -0
  170. mlflow/genai/scorers/validation.py +165 -0
  171. mlflow/genai/utils/data_validation.py +146 -0
  172. mlflow/genai/utils/enum_utils.py +23 -0
  173. mlflow/genai/utils/trace_utils.py +211 -0
  174. mlflow/groq/__init__.py +42 -0
  175. mlflow/groq/_groq_autolog.py +74 -0
  176. mlflow/johnsnowlabs/__init__.py +888 -0
  177. mlflow/langchain/__init__.py +24 -0
  178. mlflow/langchain/api_request_parallel_processor.py +330 -0
  179. mlflow/langchain/autolog.py +147 -0
  180. mlflow/langchain/chat_agent_langgraph.py +340 -0
  181. mlflow/langchain/constant.py +1 -0
  182. mlflow/langchain/constants.py +1 -0
  183. mlflow/langchain/databricks_dependencies.py +444 -0
  184. mlflow/langchain/langchain_tracer.py +597 -0
  185. mlflow/langchain/model.py +919 -0
  186. mlflow/langchain/output_parsers.py +142 -0
  187. mlflow/langchain/retriever_chain.py +153 -0
  188. mlflow/langchain/runnables.py +527 -0
  189. mlflow/langchain/utils/chat.py +402 -0
  190. mlflow/langchain/utils/logging.py +671 -0
  191. mlflow/langchain/utils/serialization.py +36 -0
  192. mlflow/legacy_databricks_cli/__init__.py +0 -0
  193. mlflow/legacy_databricks_cli/configure/__init__.py +0 -0
  194. mlflow/legacy_databricks_cli/configure/provider.py +482 -0
  195. mlflow/litellm/__init__.py +175 -0
  196. mlflow/llama_index/__init__.py +22 -0
  197. mlflow/llama_index/autolog.py +55 -0
  198. mlflow/llama_index/chat.py +43 -0
  199. mlflow/llama_index/constant.py +1 -0
  200. mlflow/llama_index/model.py +577 -0
  201. mlflow/llama_index/pyfunc_wrapper.py +332 -0
  202. mlflow/llama_index/serialize_objects.py +188 -0
  203. mlflow/llama_index/tracer.py +561 -0
  204. mlflow/metrics/__init__.py +479 -0
  205. mlflow/metrics/base.py +39 -0
  206. mlflow/metrics/genai/__init__.py +25 -0
  207. mlflow/metrics/genai/base.py +101 -0
  208. mlflow/metrics/genai/genai_metric.py +771 -0
  209. mlflow/metrics/genai/metric_definitions.py +450 -0
  210. mlflow/metrics/genai/model_utils.py +371 -0
  211. mlflow/metrics/genai/prompt_template.py +68 -0
  212. mlflow/metrics/genai/prompts/__init__.py +0 -0
  213. mlflow/metrics/genai/prompts/v1.py +422 -0
  214. mlflow/metrics/genai/utils.py +6 -0
  215. mlflow/metrics/metric_definitions.py +619 -0
  216. mlflow/mismatch.py +34 -0
  217. mlflow/mistral/__init__.py +34 -0
  218. mlflow/mistral/autolog.py +71 -0
  219. mlflow/mistral/chat.py +135 -0
  220. mlflow/ml_package_versions.py +452 -0
  221. mlflow/models/__init__.py +97 -0
  222. mlflow/models/auth_policy.py +83 -0
  223. mlflow/models/cli.py +354 -0
  224. mlflow/models/container/__init__.py +294 -0
  225. mlflow/models/container/scoring_server/__init__.py +0 -0
  226. mlflow/models/container/scoring_server/nginx.conf +39 -0
  227. mlflow/models/dependencies_schemas.py +287 -0
  228. mlflow/models/display_utils.py +158 -0
  229. mlflow/models/docker_utils.py +211 -0
  230. mlflow/models/evaluation/__init__.py +23 -0
  231. mlflow/models/evaluation/_shap_patch.py +64 -0
  232. mlflow/models/evaluation/artifacts.py +194 -0
  233. mlflow/models/evaluation/base.py +1811 -0
  234. mlflow/models/evaluation/calibration_curve.py +109 -0
  235. mlflow/models/evaluation/default_evaluator.py +996 -0
  236. mlflow/models/evaluation/deprecated.py +23 -0
  237. mlflow/models/evaluation/evaluator_registry.py +80 -0
  238. mlflow/models/evaluation/evaluators/classifier.py +704 -0
  239. mlflow/models/evaluation/evaluators/default.py +233 -0
  240. mlflow/models/evaluation/evaluators/regressor.py +96 -0
  241. mlflow/models/evaluation/evaluators/shap.py +296 -0
  242. mlflow/models/evaluation/lift_curve.py +178 -0
  243. mlflow/models/evaluation/utils/metric.py +123 -0
  244. mlflow/models/evaluation/utils/trace.py +179 -0
  245. mlflow/models/evaluation/validation.py +434 -0
  246. mlflow/models/flavor_backend.py +93 -0
  247. mlflow/models/flavor_backend_registry.py +53 -0
  248. mlflow/models/model.py +1639 -0
  249. mlflow/models/model_config.py +150 -0
  250. mlflow/models/notebook_resources/agent_evaluation_template.html +235 -0
  251. mlflow/models/notebook_resources/eval_with_dataset_example.py +22 -0
  252. mlflow/models/notebook_resources/eval_with_synthetic_example.py +22 -0
  253. mlflow/models/python_api.py +369 -0
  254. mlflow/models/rag_signatures.py +128 -0
  255. mlflow/models/resources.py +321 -0
  256. mlflow/models/signature.py +662 -0
  257. mlflow/models/utils.py +2054 -0
  258. mlflow/models/wheeled_model.py +280 -0
  259. mlflow/openai/__init__.py +57 -0
  260. mlflow/openai/_agent_tracer.py +364 -0
  261. mlflow/openai/api_request_parallel_processor.py +131 -0
  262. mlflow/openai/autolog.py +509 -0
  263. mlflow/openai/constant.py +1 -0
  264. mlflow/openai/model.py +824 -0
  265. mlflow/openai/utils/chat_schema.py +367 -0
  266. mlflow/optuna/__init__.py +3 -0
  267. mlflow/optuna/storage.py +646 -0
  268. mlflow/plugins/__init__.py +72 -0
  269. mlflow/plugins/base.py +358 -0
  270. mlflow/plugins/builtin/__init__.py +24 -0
  271. mlflow/plugins/builtin/pytorch_plugin.py +150 -0
  272. mlflow/plugins/builtin/sklearn_plugin.py +158 -0
  273. mlflow/plugins/builtin/transformers_plugin.py +187 -0
  274. mlflow/plugins/cli.py +321 -0
  275. mlflow/plugins/discovery.py +340 -0
  276. mlflow/plugins/manager.py +465 -0
  277. mlflow/plugins/registry.py +316 -0
  278. mlflow/plugins/templates/framework_plugin_template.py +329 -0
  279. mlflow/prompt/constants.py +20 -0
  280. mlflow/prompt/promptlab_model.py +197 -0
  281. mlflow/prompt/registry_utils.py +248 -0
  282. mlflow/promptflow/__init__.py +495 -0
  283. mlflow/protos/__init__.py +0 -0
  284. mlflow/protos/assessments_pb2.py +174 -0
  285. mlflow/protos/databricks_artifacts_pb2.py +489 -0
  286. mlflow/protos/databricks_filesystem_service_pb2.py +196 -0
  287. mlflow/protos/databricks_managed_catalog_messages_pb2.py +95 -0
  288. mlflow/protos/databricks_managed_catalog_service_pb2.py +86 -0
  289. mlflow/protos/databricks_pb2.py +267 -0
  290. mlflow/protos/databricks_trace_server_pb2.py +374 -0
  291. mlflow/protos/databricks_uc_registry_messages_pb2.py +1249 -0
  292. mlflow/protos/databricks_uc_registry_service_pb2.py +170 -0
  293. mlflow/protos/facet_feature_statistics_pb2.py +296 -0
  294. mlflow/protos/internal_pb2.py +77 -0
  295. mlflow/protos/mlflow_artifacts_pb2.py +336 -0
  296. mlflow/protos/model_registry_pb2.py +1073 -0
  297. mlflow/protos/scalapb/__init__.py +0 -0
  298. mlflow/protos/scalapb/scalapb_pb2.py +104 -0
  299. mlflow/protos/service_pb2.py +2600 -0
  300. mlflow/protos/unity_catalog_oss_messages_pb2.py +457 -0
  301. mlflow/protos/unity_catalog_oss_service_pb2.py +130 -0
  302. mlflow/protos/unity_catalog_prompt_messages_pb2.py +447 -0
  303. mlflow/protos/unity_catalog_prompt_messages_pb2_grpc.py +24 -0
  304. mlflow/protos/unity_catalog_prompt_service_pb2.py +164 -0
  305. mlflow/protos/unity_catalog_prompt_service_pb2_grpc.py +785 -0
  306. mlflow/py.typed +0 -0
  307. mlflow/pydantic_ai/__init__.py +57 -0
  308. mlflow/pydantic_ai/autolog.py +173 -0
  309. mlflow/pyfunc/__init__.py +3844 -0
  310. mlflow/pyfunc/_mlflow_pyfunc_backend_predict.py +61 -0
  311. mlflow/pyfunc/backend.py +523 -0
  312. mlflow/pyfunc/context.py +78 -0
  313. mlflow/pyfunc/dbconnect_artifact_cache.py +144 -0
  314. mlflow/pyfunc/loaders/__init__.py +7 -0
  315. mlflow/pyfunc/loaders/chat_agent.py +117 -0
  316. mlflow/pyfunc/loaders/chat_model.py +125 -0
  317. mlflow/pyfunc/loaders/code_model.py +31 -0
  318. mlflow/pyfunc/loaders/responses_agent.py +112 -0
  319. mlflow/pyfunc/mlserver.py +46 -0
  320. mlflow/pyfunc/model.py +1473 -0
  321. mlflow/pyfunc/scoring_server/__init__.py +604 -0
  322. mlflow/pyfunc/scoring_server/app.py +7 -0
  323. mlflow/pyfunc/scoring_server/client.py +146 -0
  324. mlflow/pyfunc/spark_model_cache.py +48 -0
  325. mlflow/pyfunc/stdin_server.py +44 -0
  326. mlflow/pyfunc/utils/__init__.py +3 -0
  327. mlflow/pyfunc/utils/data_validation.py +224 -0
  328. mlflow/pyfunc/utils/environment.py +22 -0
  329. mlflow/pyfunc/utils/input_converter.py +47 -0
  330. mlflow/pyfunc/utils/serving_data_parser.py +11 -0
  331. mlflow/pytorch/__init__.py +1171 -0
  332. mlflow/pytorch/_lightning_autolog.py +580 -0
  333. mlflow/pytorch/_pytorch_autolog.py +50 -0
  334. mlflow/pytorch/pickle_module.py +35 -0
  335. mlflow/rfunc/__init__.py +42 -0
  336. mlflow/rfunc/backend.py +134 -0
  337. mlflow/runs.py +89 -0
  338. mlflow/server/__init__.py +302 -0
  339. mlflow/server/auth/__init__.py +1224 -0
  340. mlflow/server/auth/__main__.py +4 -0
  341. mlflow/server/auth/basic_auth.ini +6 -0
  342. mlflow/server/auth/cli.py +11 -0
  343. mlflow/server/auth/client.py +537 -0
  344. mlflow/server/auth/config.py +34 -0
  345. mlflow/server/auth/db/__init__.py +0 -0
  346. mlflow/server/auth/db/cli.py +18 -0
  347. mlflow/server/auth/db/migrations/__init__.py +0 -0
  348. mlflow/server/auth/db/migrations/alembic.ini +110 -0
  349. mlflow/server/auth/db/migrations/env.py +76 -0
  350. mlflow/server/auth/db/migrations/versions/8606fa83a998_initial_migration.py +51 -0
  351. mlflow/server/auth/db/migrations/versions/__init__.py +0 -0
  352. mlflow/server/auth/db/models.py +67 -0
  353. mlflow/server/auth/db/utils.py +37 -0
  354. mlflow/server/auth/entities.py +165 -0
  355. mlflow/server/auth/logo.py +14 -0
  356. mlflow/server/auth/permissions.py +65 -0
  357. mlflow/server/auth/routes.py +18 -0
  358. mlflow/server/auth/sqlalchemy_store.py +263 -0
  359. mlflow/server/graphql/__init__.py +0 -0
  360. mlflow/server/graphql/autogenerated_graphql_schema.py +353 -0
  361. mlflow/server/graphql/graphql_custom_scalars.py +24 -0
  362. mlflow/server/graphql/graphql_errors.py +15 -0
  363. mlflow/server/graphql/graphql_no_batching.py +89 -0
  364. mlflow/server/graphql/graphql_schema_extensions.py +74 -0
  365. mlflow/server/handlers.py +3217 -0
  366. mlflow/server/prometheus_exporter.py +17 -0
  367. mlflow/server/validation.py +30 -0
  368. mlflow/shap/__init__.py +691 -0
  369. mlflow/sklearn/__init__.py +1994 -0
  370. mlflow/sklearn/utils.py +1041 -0
  371. mlflow/smolagents/__init__.py +66 -0
  372. mlflow/smolagents/autolog.py +139 -0
  373. mlflow/smolagents/chat.py +29 -0
  374. mlflow/store/__init__.py +10 -0
  375. mlflow/store/_unity_catalog/__init__.py +1 -0
  376. mlflow/store/_unity_catalog/lineage/__init__.py +1 -0
  377. mlflow/store/_unity_catalog/lineage/constants.py +2 -0
  378. mlflow/store/_unity_catalog/registry/__init__.py +6 -0
  379. mlflow/store/_unity_catalog/registry/prompt_info.py +75 -0
  380. mlflow/store/_unity_catalog/registry/rest_store.py +1740 -0
  381. mlflow/store/_unity_catalog/registry/uc_oss_rest_store.py +507 -0
  382. mlflow/store/_unity_catalog/registry/utils.py +121 -0
  383. mlflow/store/artifact/__init__.py +0 -0
  384. mlflow/store/artifact/artifact_repo.py +472 -0
  385. mlflow/store/artifact/artifact_repository_registry.py +154 -0
  386. mlflow/store/artifact/azure_blob_artifact_repo.py +275 -0
  387. mlflow/store/artifact/azure_data_lake_artifact_repo.py +295 -0
  388. mlflow/store/artifact/cli.py +141 -0
  389. mlflow/store/artifact/cloud_artifact_repo.py +332 -0
  390. mlflow/store/artifact/databricks_artifact_repo.py +729 -0
  391. mlflow/store/artifact/databricks_artifact_repo_resources.py +301 -0
  392. mlflow/store/artifact/databricks_logged_model_artifact_repo.py +93 -0
  393. mlflow/store/artifact/databricks_models_artifact_repo.py +216 -0
  394. mlflow/store/artifact/databricks_sdk_artifact_repo.py +134 -0
  395. mlflow/store/artifact/databricks_sdk_models_artifact_repo.py +97 -0
  396. mlflow/store/artifact/dbfs_artifact_repo.py +240 -0
  397. mlflow/store/artifact/ftp_artifact_repo.py +132 -0
  398. mlflow/store/artifact/gcs_artifact_repo.py +296 -0
  399. mlflow/store/artifact/hdfs_artifact_repo.py +209 -0
  400. mlflow/store/artifact/http_artifact_repo.py +218 -0
  401. mlflow/store/artifact/local_artifact_repo.py +142 -0
  402. mlflow/store/artifact/mlflow_artifacts_repo.py +94 -0
  403. mlflow/store/artifact/models_artifact_repo.py +259 -0
  404. mlflow/store/artifact/optimized_s3_artifact_repo.py +356 -0
  405. mlflow/store/artifact/presigned_url_artifact_repo.py +173 -0
  406. mlflow/store/artifact/r2_artifact_repo.py +70 -0
  407. mlflow/store/artifact/runs_artifact_repo.py +265 -0
  408. mlflow/store/artifact/s3_artifact_repo.py +330 -0
  409. mlflow/store/artifact/sftp_artifact_repo.py +141 -0
  410. mlflow/store/artifact/uc_volume_artifact_repo.py +76 -0
  411. mlflow/store/artifact/unity_catalog_models_artifact_repo.py +168 -0
  412. mlflow/store/artifact/unity_catalog_oss_models_artifact_repo.py +168 -0
  413. mlflow/store/artifact/utils/__init__.py +0 -0
  414. mlflow/store/artifact/utils/models.py +148 -0
  415. mlflow/store/db/__init__.py +0 -0
  416. mlflow/store/db/base_sql_model.py +3 -0
  417. mlflow/store/db/db_types.py +10 -0
  418. mlflow/store/db/utils.py +314 -0
  419. mlflow/store/db_migrations/__init__.py +0 -0
  420. mlflow/store/db_migrations/alembic.ini +74 -0
  421. mlflow/store/db_migrations/env.py +84 -0
  422. mlflow/store/db_migrations/versions/0584bdc529eb_add_cascading_deletion_to_datasets_from_experiments.py +88 -0
  423. mlflow/store/db_migrations/versions/0a8213491aaa_drop_duplicate_killed_constraint.py +49 -0
  424. mlflow/store/db_migrations/versions/0c779009ac13_add_deleted_time_field_to_runs_table.py +24 -0
  425. mlflow/store/db_migrations/versions/181f10493468_allow_nulls_for_metric_values.py +35 -0
  426. mlflow/store/db_migrations/versions/27a6a02d2cf1_add_model_version_tags_table.py +38 -0
  427. mlflow/store/db_migrations/versions/2b4d017a5e9b_add_model_registry_tables_to_db.py +77 -0
  428. mlflow/store/db_migrations/versions/2d6e25af4d3e_increase_max_param_val_length.py +33 -0
  429. mlflow/store/db_migrations/versions/3500859a5d39_add_model_aliases_table.py +50 -0
  430. mlflow/store/db_migrations/versions/39d1c3be5f05_add_is_nan_constraint_for_metrics_tables_if_necessary.py +41 -0
  431. mlflow/store/db_migrations/versions/400f98739977_add_logged_model_tables.py +123 -0
  432. mlflow/store/db_migrations/versions/4465047574b1_increase_max_dataset_schema_size.py +38 -0
  433. mlflow/store/db_migrations/versions/451aebb31d03_add_metric_step.py +35 -0
  434. mlflow/store/db_migrations/versions/5b0e9adcef9c_add_cascade_deletion_to_trace_tables_fk.py +40 -0
  435. mlflow/store/db_migrations/versions/6953534de441_add_step_to_inputs_table.py +25 -0
  436. mlflow/store/db_migrations/versions/728d730b5ebd_add_registered_model_tags_table.py +38 -0
  437. mlflow/store/db_migrations/versions/7ac759974ad8_update_run_tags_with_larger_limit.py +36 -0
  438. mlflow/store/db_migrations/versions/7f2a7d5fae7d_add_datasets_inputs_input_tags_tables.py +82 -0
  439. mlflow/store/db_migrations/versions/84291f40a231_add_run_link_to_model_version.py +26 -0
  440. mlflow/store/db_migrations/versions/867495a8f9d4_add_trace_tables.py +90 -0
  441. mlflow/store/db_migrations/versions/89d4b8295536_create_latest_metrics_table.py +169 -0
  442. mlflow/store/db_migrations/versions/90e64c465722_migrate_user_column_to_tags.py +64 -0
  443. mlflow/store/db_migrations/versions/97727af70f4d_creation_time_last_update_time_experiments.py +25 -0
  444. mlflow/store/db_migrations/versions/__init__.py +0 -0
  445. mlflow/store/db_migrations/versions/a8c4a736bde6_allow_nulls_for_run_id.py +27 -0
  446. mlflow/store/db_migrations/versions/acf3f17fdcc7_add_storage_location_field_to_model_.py +29 -0
  447. mlflow/store/db_migrations/versions/bd07f7e963c5_create_index_on_run_uuid.py +26 -0
  448. mlflow/store/db_migrations/versions/bda7b8c39065_increase_model_version_tag_value_limit.py +38 -0
  449. mlflow/store/db_migrations/versions/c48cb773bb87_reset_default_value_for_is_nan_in_metrics_table_for_mysql.py +41 -0
  450. mlflow/store/db_migrations/versions/cbc13b556ace_add_v3_trace_schema_columns.py +31 -0
  451. mlflow/store/db_migrations/versions/cc1f77228345_change_param_value_length_to_500.py +34 -0
  452. mlflow/store/db_migrations/versions/cfd24bdc0731_update_run_status_constraint_with_killed.py +78 -0
  453. mlflow/store/db_migrations/versions/df50e92ffc5e_add_experiment_tags_table.py +38 -0
  454. mlflow/store/db_migrations/versions/f5a4f2784254_increase_run_tag_value_limit.py +36 -0
  455. mlflow/store/entities/__init__.py +3 -0
  456. mlflow/store/entities/paged_list.py +18 -0
  457. mlflow/store/model_registry/__init__.py +10 -0
  458. mlflow/store/model_registry/abstract_store.py +1081 -0
  459. mlflow/store/model_registry/base_rest_store.py +44 -0
  460. mlflow/store/model_registry/databricks_workspace_model_registry_rest_store.py +37 -0
  461. mlflow/store/model_registry/dbmodels/__init__.py +0 -0
  462. mlflow/store/model_registry/dbmodels/models.py +206 -0
  463. mlflow/store/model_registry/file_store.py +1091 -0
  464. mlflow/store/model_registry/rest_store.py +481 -0
  465. mlflow/store/model_registry/sqlalchemy_store.py +1286 -0
  466. mlflow/store/tracking/__init__.py +23 -0
  467. mlflow/store/tracking/abstract_store.py +816 -0
  468. mlflow/store/tracking/dbmodels/__init__.py +0 -0
  469. mlflow/store/tracking/dbmodels/initial_models.py +243 -0
  470. mlflow/store/tracking/dbmodels/models.py +1073 -0
  471. mlflow/store/tracking/file_store.py +2438 -0
  472. mlflow/store/tracking/postgres_managed_identity.py +146 -0
  473. mlflow/store/tracking/rest_store.py +1131 -0
  474. mlflow/store/tracking/sqlalchemy_store.py +2785 -0
  475. mlflow/system_metrics/__init__.py +61 -0
  476. mlflow/system_metrics/metrics/__init__.py +0 -0
  477. mlflow/system_metrics/metrics/base_metrics_monitor.py +32 -0
  478. mlflow/system_metrics/metrics/cpu_monitor.py +23 -0
  479. mlflow/system_metrics/metrics/disk_monitor.py +21 -0
  480. mlflow/system_metrics/metrics/gpu_monitor.py +71 -0
  481. mlflow/system_metrics/metrics/network_monitor.py +34 -0
  482. mlflow/system_metrics/metrics/rocm_monitor.py +123 -0
  483. mlflow/system_metrics/system_metrics_monitor.py +198 -0
  484. mlflow/tracing/__init__.py +16 -0
  485. mlflow/tracing/assessment.py +356 -0
  486. mlflow/tracing/client.py +531 -0
  487. mlflow/tracing/config.py +125 -0
  488. mlflow/tracing/constant.py +105 -0
  489. mlflow/tracing/destination.py +81 -0
  490. mlflow/tracing/display/__init__.py +40 -0
  491. mlflow/tracing/display/display_handler.py +196 -0
  492. mlflow/tracing/export/async_export_queue.py +186 -0
  493. mlflow/tracing/export/inference_table.py +138 -0
  494. mlflow/tracing/export/mlflow_v3.py +137 -0
  495. mlflow/tracing/export/utils.py +70 -0
  496. mlflow/tracing/fluent.py +1417 -0
  497. mlflow/tracing/processor/base_mlflow.py +199 -0
  498. mlflow/tracing/processor/inference_table.py +175 -0
  499. mlflow/tracing/processor/mlflow_v3.py +47 -0
  500. mlflow/tracing/processor/otel.py +73 -0
  501. mlflow/tracing/provider.py +487 -0
  502. mlflow/tracing/trace_manager.py +200 -0
  503. mlflow/tracing/utils/__init__.py +616 -0
  504. mlflow/tracing/utils/artifact_utils.py +28 -0
  505. mlflow/tracing/utils/copy.py +55 -0
  506. mlflow/tracing/utils/environment.py +55 -0
  507. mlflow/tracing/utils/exception.py +21 -0
  508. mlflow/tracing/utils/once.py +35 -0
  509. mlflow/tracing/utils/otlp.py +63 -0
  510. mlflow/tracing/utils/processor.py +54 -0
  511. mlflow/tracing/utils/search.py +292 -0
  512. mlflow/tracing/utils/timeout.py +250 -0
  513. mlflow/tracing/utils/token.py +19 -0
  514. mlflow/tracing/utils/truncation.py +124 -0
  515. mlflow/tracing/utils/warning.py +76 -0
  516. mlflow/tracking/__init__.py +39 -0
  517. mlflow/tracking/_model_registry/__init__.py +1 -0
  518. mlflow/tracking/_model_registry/client.py +764 -0
  519. mlflow/tracking/_model_registry/fluent.py +853 -0
  520. mlflow/tracking/_model_registry/registry.py +67 -0
  521. mlflow/tracking/_model_registry/utils.py +251 -0
  522. mlflow/tracking/_tracking_service/__init__.py +0 -0
  523. mlflow/tracking/_tracking_service/client.py +883 -0
  524. mlflow/tracking/_tracking_service/registry.py +56 -0
  525. mlflow/tracking/_tracking_service/utils.py +275 -0
  526. mlflow/tracking/artifact_utils.py +179 -0
  527. mlflow/tracking/client.py +5900 -0
  528. mlflow/tracking/context/__init__.py +0 -0
  529. mlflow/tracking/context/abstract_context.py +35 -0
  530. mlflow/tracking/context/databricks_cluster_context.py +15 -0
  531. mlflow/tracking/context/databricks_command_context.py +15 -0
  532. mlflow/tracking/context/databricks_job_context.py +49 -0
  533. mlflow/tracking/context/databricks_notebook_context.py +41 -0
  534. mlflow/tracking/context/databricks_repo_context.py +43 -0
  535. mlflow/tracking/context/default_context.py +51 -0
  536. mlflow/tracking/context/git_context.py +32 -0
  537. mlflow/tracking/context/registry.py +98 -0
  538. mlflow/tracking/context/system_environment_context.py +15 -0
  539. mlflow/tracking/default_experiment/__init__.py +1 -0
  540. mlflow/tracking/default_experiment/abstract_context.py +43 -0
  541. mlflow/tracking/default_experiment/databricks_notebook_experiment_provider.py +44 -0
  542. mlflow/tracking/default_experiment/registry.py +75 -0
  543. mlflow/tracking/fluent.py +3595 -0
  544. mlflow/tracking/metric_value_conversion_utils.py +93 -0
  545. mlflow/tracking/multimedia.py +206 -0
  546. mlflow/tracking/registry.py +86 -0
  547. mlflow/tracking/request_auth/__init__.py +0 -0
  548. mlflow/tracking/request_auth/abstract_request_auth_provider.py +34 -0
  549. mlflow/tracking/request_auth/registry.py +60 -0
  550. mlflow/tracking/request_header/__init__.py +0 -0
  551. mlflow/tracking/request_header/abstract_request_header_provider.py +36 -0
  552. mlflow/tracking/request_header/databricks_request_header_provider.py +38 -0
  553. mlflow/tracking/request_header/default_request_header_provider.py +17 -0
  554. mlflow/tracking/request_header/registry.py +79 -0
  555. mlflow/transformers/__init__.py +2982 -0
  556. mlflow/transformers/flavor_config.py +258 -0
  557. mlflow/transformers/hub_utils.py +83 -0
  558. mlflow/transformers/llm_inference_utils.py +468 -0
  559. mlflow/transformers/model_io.py +301 -0
  560. mlflow/transformers/peft.py +51 -0
  561. mlflow/transformers/signature.py +183 -0
  562. mlflow/transformers/torch_utils.py +55 -0
  563. mlflow/types/__init__.py +21 -0
  564. mlflow/types/agent.py +270 -0
  565. mlflow/types/chat.py +240 -0
  566. mlflow/types/llm.py +935 -0
  567. mlflow/types/responses.py +139 -0
  568. mlflow/types/responses_helpers.py +416 -0
  569. mlflow/types/schema.py +1505 -0
  570. mlflow/types/type_hints.py +647 -0
  571. mlflow/types/utils.py +753 -0
  572. mlflow/utils/__init__.py +283 -0
  573. mlflow/utils/_capture_modules.py +256 -0
  574. mlflow/utils/_capture_transformers_modules.py +75 -0
  575. mlflow/utils/_spark_utils.py +201 -0
  576. mlflow/utils/_unity_catalog_oss_utils.py +97 -0
  577. mlflow/utils/_unity_catalog_utils.py +479 -0
  578. mlflow/utils/annotations.py +218 -0
  579. mlflow/utils/arguments_utils.py +16 -0
  580. mlflow/utils/async_logging/__init__.py +1 -0
  581. mlflow/utils/async_logging/async_artifacts_logging_queue.py +258 -0
  582. mlflow/utils/async_logging/async_logging_queue.py +366 -0
  583. mlflow/utils/async_logging/run_artifact.py +38 -0
  584. mlflow/utils/async_logging/run_batch.py +58 -0
  585. mlflow/utils/async_logging/run_operations.py +49 -0
  586. mlflow/utils/autologging_utils/__init__.py +737 -0
  587. mlflow/utils/autologging_utils/client.py +432 -0
  588. mlflow/utils/autologging_utils/config.py +33 -0
  589. mlflow/utils/autologging_utils/events.py +294 -0
  590. mlflow/utils/autologging_utils/logging_and_warnings.py +328 -0
  591. mlflow/utils/autologging_utils/metrics_queue.py +71 -0
  592. mlflow/utils/autologging_utils/safety.py +1104 -0
  593. mlflow/utils/autologging_utils/versioning.py +95 -0
  594. mlflow/utils/checkpoint_utils.py +206 -0
  595. mlflow/utils/class_utils.py +6 -0
  596. mlflow/utils/cli_args.py +257 -0
  597. mlflow/utils/conda.py +354 -0
  598. mlflow/utils/credentials.py +231 -0
  599. mlflow/utils/data_utils.py +17 -0
  600. mlflow/utils/databricks_utils.py +1436 -0
  601. mlflow/utils/docstring_utils.py +477 -0
  602. mlflow/utils/doctor.py +133 -0
  603. mlflow/utils/download_cloud_file_chunk.py +43 -0
  604. mlflow/utils/env_manager.py +16 -0
  605. mlflow/utils/env_pack.py +131 -0
  606. mlflow/utils/environment.py +1009 -0
  607. mlflow/utils/exception_utils.py +14 -0
  608. mlflow/utils/file_utils.py +978 -0
  609. mlflow/utils/git_utils.py +77 -0
  610. mlflow/utils/gorilla.py +797 -0
  611. mlflow/utils/import_hooks/__init__.py +363 -0
  612. mlflow/utils/lazy_load.py +51 -0
  613. mlflow/utils/logging_utils.py +168 -0
  614. mlflow/utils/mime_type_utils.py +58 -0
  615. mlflow/utils/mlflow_tags.py +103 -0
  616. mlflow/utils/model_utils.py +486 -0
  617. mlflow/utils/name_utils.py +346 -0
  618. mlflow/utils/nfs_on_spark.py +62 -0
  619. mlflow/utils/openai_utils.py +164 -0
  620. mlflow/utils/os.py +12 -0
  621. mlflow/utils/oss_registry_utils.py +29 -0
  622. mlflow/utils/plugins.py +17 -0
  623. mlflow/utils/process.py +182 -0
  624. mlflow/utils/promptlab_utils.py +146 -0
  625. mlflow/utils/proto_json_utils.py +743 -0
  626. mlflow/utils/pydantic_utils.py +54 -0
  627. mlflow/utils/request_utils.py +279 -0
  628. mlflow/utils/requirements_utils.py +704 -0
  629. mlflow/utils/rest_utils.py +673 -0
  630. mlflow/utils/search_logged_model_utils.py +127 -0
  631. mlflow/utils/search_utils.py +2111 -0
  632. mlflow/utils/secure_loading.py +221 -0
  633. mlflow/utils/security_validation.py +384 -0
  634. mlflow/utils/server_cli_utils.py +61 -0
  635. mlflow/utils/spark_utils.py +15 -0
  636. mlflow/utils/string_utils.py +138 -0
  637. mlflow/utils/thread_utils.py +63 -0
  638. mlflow/utils/time.py +54 -0
  639. mlflow/utils/timeout.py +42 -0
  640. mlflow/utils/uri.py +572 -0
  641. mlflow/utils/validation.py +662 -0
  642. mlflow/utils/virtualenv.py +458 -0
  643. mlflow/utils/warnings_utils.py +25 -0
  644. mlflow/utils/yaml_utils.py +179 -0
  645. mlflow/version.py +24 -0
@@ -0,0 +1,369 @@
1
+ import logging
2
+ import os
3
+ import shutil
4
+ from io import StringIO
5
+ from typing import ForwardRef, get_args, get_origin
6
+
7
+ from mlflow.exceptions import MlflowException
8
+ from mlflow.models.flavor_backend_registry import get_flavor_backend
9
+ from mlflow.utils import env_manager as _EnvManager
10
+ from mlflow.utils.annotations import experimental
11
+ from mlflow.utils.databricks_utils import is_databricks_connect
12
+ from mlflow.utils.file_utils import TempDir
13
+
14
+ _logger = logging.getLogger(__name__)
15
+ UV_INSTALLATION_INSTRUCTIONS = (
16
+ "Run `pip install uv` to install uv. See "
17
+ "https://docs.astral.sh/uv/getting-started/installation for other installation methods."
18
+ )
19
+
20
+
21
+ def build_docker(
22
+ model_uri=None,
23
+ name="mlflow-pyfunc",
24
+ env_manager=_EnvManager.VIRTUALENV,
25
+ mlflow_home=None,
26
+ install_java=False,
27
+ install_mlflow=False,
28
+ enable_mlserver=False,
29
+ base_image=None,
30
+ ):
31
+ """
32
+ Builds a Docker image whose default entrypoint serves an MLflow model at port 8080, using the
33
+ python_function flavor. The container serves the model referenced by ``model_uri``, if
34
+ specified. If ``model_uri`` is not specified, an MLflow Model directory must be mounted as a
35
+ volume into the /opt/ml/model directory in the container.
36
+
37
+ .. important::
38
+
39
+ Since MLflow 2.10.1, the Docker image built with ``--model-uri`` does **not install Java**
40
+ for improved performance, unless the model flavor is one of ``["johnsnowlabs", "h2o"
41
+ "spark"]``. If you need to install Java for other flavors, e.g. custom Python model
42
+ that uses SparkML, please specify ``install-java=True`` to enforce Java installation.
43
+ For earlier versions, Java is always installed to the image.
44
+
45
+
46
+ .. warning::
47
+
48
+ If ``model_uri`` is unspecified, the resulting image doesn't support serving models with
49
+ the RFunc server.
50
+
51
+ NB: by default, the container will start nginx and uvicorn processes. If you don't need the
52
+ nginx process to be started (for instance if you deploy your container to Google Cloud Run),
53
+ you can disable it via the DISABLE_NGINX environment variable:
54
+
55
+ .. code:: bash
56
+
57
+ docker run -p 5001:8080 -e DISABLE_NGINX=true "my-image-name"
58
+
59
+ See https://www.mlflow.org/docs/latest/python_api/mlflow.pyfunc.html for more information on the
60
+ 'python_function' flavor.
61
+
62
+ Args:
63
+ model_uri: URI to the model. A local path, a 'runs:/' URI, or a remote storage URI (e.g.,
64
+ an 's3://' URI). For more information about supported remote URIs for model artifacts,
65
+ see https://mlflow.org/docs/latest/tracking.html#artifact-stores
66
+ name: Name of the Docker image to build. Defaults to 'mlflow-pyfunc'.
67
+ env_manager: If specified, create an environment for MLmodel using the specified environment
68
+ manager. The following values are supported: (1) virtualenv (default): use virtualenv
69
+ and pyenv for Python version management (2) conda: use conda (3) local: use the local
70
+ environment without creating a new one.
71
+ mlflow_home: Path to local clone of MLflow project. Use for development only.
72
+ install_java: If specified, install Java in the image. Default is False in order to
73
+ reduce both the image size and the build time. Model flavors requiring Java will enable
74
+ this setting automatically, such as the Spark flavor. (This argument is only available
75
+ in MLflow 2.10.1 and later. In earlier versions, Java is always installed to the image.)
76
+ install_mlflow: If specified and there is a conda or virtualenv environment to be activated
77
+ mlflow will be installed into the environment after it has been activated.
78
+ The version of installed mlflow will be the same as the one used to invoke this command.
79
+ enable_mlserver: If specified, the image will be built with the Seldon MLserver as backend.
80
+ base_image: Base image for the Docker image. If not specified, the default image is either
81
+ UBUNTU_BASE_IMAGE = "ubuntu:20.04" or PYTHON_SLIM_BASE_IMAGE = "python:{version}-slim"
82
+ Note: If custom image is used, there are no guarantees that the image will work. You
83
+ may find greater compatibility by building your image on top of the ubuntu images. In
84
+ addition, you must install Java and virtualenv to have the image work properly.
85
+ """
86
+ get_flavor_backend(model_uri, docker_build=True, env_manager=env_manager).build_image(
87
+ model_uri,
88
+ name,
89
+ mlflow_home=mlflow_home,
90
+ install_java=install_java,
91
+ install_mlflow=install_mlflow,
92
+ enable_mlserver=enable_mlserver,
93
+ base_image=base_image,
94
+ )
95
+
96
+
97
+ _CONTENT_TYPE_CSV = "csv"
98
+ _CONTENT_TYPE_JSON = "json"
99
+
100
+
101
+ @experimental(version="2.18.0")
102
+ def predict(
103
+ model_uri,
104
+ input_data=None,
105
+ input_path=None,
106
+ content_type=_CONTENT_TYPE_JSON,
107
+ output_path=None,
108
+ env_manager=_EnvManager.VIRTUALENV,
109
+ install_mlflow=False,
110
+ pip_requirements_override=None,
111
+ extra_envs=None,
112
+ # TODO: add an option to force recreating the env
113
+ ):
114
+ """
115
+ Generate predictions in json format using a saved MLflow model. For information about the input
116
+ data formats accepted by this function, see the following documentation:
117
+ https://www.mlflow.org/docs/latest/models.html#built-in-deployment-tools.
118
+
119
+ .. note::
120
+
121
+ To increase verbosity for debugging purposes (in order to inspect the full dependency
122
+ resolver operations when processing transient dependencies), consider setting the following
123
+ environment variables:
124
+
125
+ .. code-block:: bash
126
+
127
+ # For virtualenv
128
+ export PIP_VERBOSE=1
129
+
130
+ # For uv
131
+ export RUST_LOG=uv=debug
132
+
133
+ See also:
134
+
135
+ - https://pip.pypa.io/en/stable/topics/configuration/#environment-variables
136
+ - https://docs.astral.sh/uv/configuration/environment
137
+
138
+ Args:
139
+ model_uri: URI to the model. A local path, a local or remote URI e.g. runs:/, s3://.
140
+ input_data: Input data for prediction. Must be valid input for the PyFunc model. Refer
141
+ to the :py:func:`mlflow.pyfunc.PyFuncModel.predict()` for the supported input types.
142
+
143
+ .. note::
144
+ If this API fails due to errors in input_data, use
145
+ `mlflow.models.convert_input_example_to_serving_input` to manually validate
146
+ your input data.
147
+ input_path: Path to a file containing input data. If provided, 'input_data' must be None.
148
+ content_type: Content type of the input data. Can be one of {'json', 'csv'}.
149
+ output_path: File to output results to as json. If not provided, output to stdout.
150
+ env_manager: Specify a way to create an environment for MLmodel inference:
151
+
152
+ - "virtualenv" (default): use virtualenv (and pyenv for Python version management)
153
+ - "uv": use uv
154
+ - "local": use the local environment
155
+ - "conda": use conda
156
+
157
+ install_mlflow: If specified and there is a conda or virtualenv environment to be activated
158
+ mlflow will be installed into the environment after it has been activated. The version
159
+ of installed mlflow will be the same as the one used to invoke this command.
160
+ pip_requirements_override: If specified, install the specified python dependencies to the
161
+ model inference environment. This is particularly useful when you want to add extra
162
+ dependencies or try different versions of the dependencies defined in the logged model.
163
+
164
+ .. tip::
165
+ After validating the pip requirements override works as expected, you can update
166
+ the logged model's dependency using `mlflow.models.update_model_requirements` API
167
+ without re-logging it. Note that a registered model is immutable, so you need to
168
+ register a new model version with the updated model.
169
+ extra_envs: If specified, a dictionary of extra environment variables will be passed to the
170
+ model inference environment. This is useful for testing what environment variables are
171
+ needed for the model to run correctly. By default, environment variables existing in the
172
+ current os.environ are passed, and this parameter can be used to override them.
173
+
174
+ .. note::
175
+ This parameter is only supported when `env_manager` is set to "virtualenv",
176
+ "conda" or "uv".
177
+
178
+ Code example:
179
+
180
+ .. code-block:: python
181
+
182
+ import mlflow
183
+
184
+ run_id = "..."
185
+
186
+ mlflow.models.predict(
187
+ model_uri=f"runs:/{run_id}/model",
188
+ input_data={"x": 1, "y": 2},
189
+ content_type="json",
190
+ )
191
+
192
+ # Run prediction with "uv" as the environment manager
193
+ mlflow.models.predict(
194
+ model_uri=f"runs:/{run_id}/model",
195
+ input_data={"x": 1, "y": 2},
196
+ env_manager="uv",
197
+ )
198
+
199
+ # Run prediction with additional pip dependencies and extra environment variables
200
+ mlflow.models.predict(
201
+ model_uri=f"runs:/{run_id}/model",
202
+ input_data={"x": 1, "y": 2},
203
+ content_type="json",
204
+ pip_requirements_override=["scikit-learn==0.23.2"],
205
+ extra_envs={"OPENAI_API_KEY": "some_value"},
206
+ )
207
+
208
+ # Run prediction with output_path
209
+ mlflow.models.predict(
210
+ model_uri=f"runs:/{run_id}/model",
211
+ input_data={"x": 1, "y": 2},
212
+ env_manager="uv",
213
+ output_path="output.json",
214
+ )
215
+
216
+ """
217
+ # to avoid circular imports
218
+ from mlflow.pyfunc import _PREBUILD_ENV_ROOT_LOCATION
219
+
220
+ if content_type not in [_CONTENT_TYPE_JSON, _CONTENT_TYPE_CSV]:
221
+ raise MlflowException.invalid_parameter_value(
222
+ f"Content type must be one of {_CONTENT_TYPE_JSON} or {_CONTENT_TYPE_CSV}."
223
+ )
224
+ if extra_envs and env_manager not in (
225
+ _EnvManager.VIRTUALENV,
226
+ _EnvManager.CONDA,
227
+ _EnvManager.UV,
228
+ ):
229
+ raise MlflowException.invalid_parameter_value(
230
+ "Extra environment variables are only supported when env_manager is "
231
+ f"set to '{_EnvManager.VIRTUALENV}', '{_EnvManager.CONDA}' or '{_EnvManager.UV}'."
232
+ )
233
+ if env_manager == _EnvManager.UV:
234
+ if not shutil.which("uv"):
235
+ raise MlflowException(
236
+ f"Found '{env_manager}' as env_manager, but the 'uv' command is not found in the "
237
+ f"PATH. {UV_INSTALLATION_INSTRUCTIONS} Alternatively, you can use 'virtualenv' or "
238
+ "'conda' as the environment manager, but note their performances are not "
239
+ "as good as 'uv'."
240
+ )
241
+ else:
242
+ _logger.info(
243
+ f"It is highly recommended to use `{_EnvManager.UV}` as the environment manager for "
244
+ "predicting with MLflow models as its performance is significantly better than other "
245
+ f"environment managers. {UV_INSTALLATION_INSTRUCTIONS}"
246
+ )
247
+
248
+ is_dbconnect_mode = is_databricks_connect()
249
+ if is_dbconnect_mode:
250
+ if env_manager not in (_EnvManager.VIRTUALENV, _EnvManager.UV):
251
+ raise MlflowException(
252
+ f"Databricks Connect only supports '{_EnvManager.VIRTUALENV}' or '{_EnvManager.UV}'"
253
+ f" as the environment manager. Got {env_manager}."
254
+ )
255
+ pyfunc_backend_env_root_config = {
256
+ "create_env_root_dir": False,
257
+ "env_root_dir": _PREBUILD_ENV_ROOT_LOCATION,
258
+ }
259
+ else:
260
+ pyfunc_backend_env_root_config = {"create_env_root_dir": True}
261
+
262
+ def _predict(_input_path: str):
263
+ return get_flavor_backend(
264
+ model_uri,
265
+ env_manager=env_manager,
266
+ install_mlflow=install_mlflow,
267
+ **pyfunc_backend_env_root_config,
268
+ ).predict(
269
+ model_uri=model_uri,
270
+ input_path=_input_path,
271
+ output_path=output_path,
272
+ content_type=content_type,
273
+ pip_requirements_override=pip_requirements_override,
274
+ extra_envs=extra_envs,
275
+ )
276
+
277
+ if input_data is not None and input_path is not None:
278
+ raise MlflowException.invalid_parameter_value(
279
+ "Both input_data and input_path are provided. Only one of them should be specified."
280
+ )
281
+ elif input_data is not None:
282
+ input_data = _serialize_input_data(input_data, content_type)
283
+
284
+ # Write input data to a temporary file
285
+ with TempDir() as tmp:
286
+ input_path = os.path.join(tmp.path(), f"input.{content_type}")
287
+ with open(input_path, "w") as f:
288
+ f.write(input_data)
289
+
290
+ _predict(input_path)
291
+ else:
292
+ _predict(input_path)
293
+
294
+
295
+ def _get_pyfunc_supported_input_types():
296
+ # Importing here as the util module depends on optional packages not available in mlflow-skinny
297
+ import mlflow.models.utils as base_module
298
+
299
+ supported_input_types = []
300
+ for input_type in get_args(base_module.PyFuncInput):
301
+ if isinstance(input_type, type):
302
+ supported_input_types.append(input_type)
303
+ elif isinstance(input_type, ForwardRef):
304
+ name = input_type.__forward_arg__
305
+ if hasattr(base_module, name):
306
+ cls = getattr(base_module, name)
307
+ supported_input_types.append(cls)
308
+ else:
309
+ # typing instances like List, Dict, Tuple, etc.
310
+ supported_input_types.append(get_origin(input_type))
311
+ return tuple(supported_input_types)
312
+
313
+
314
+ def _serialize_input_data(input_data, content_type):
315
+ # build-docker command is available in mlflow-skinny (which doesn't contain pandas)
316
+ # so we shouldn't import pandas at the top level
317
+ import pandas as pd
318
+
319
+ # this introduces numpy as dependency, we shouldn't import it at the top level
320
+ # as it is not available in mlflow-skinny
321
+ from mlflow.models.utils import convert_input_example_to_serving_input
322
+
323
+ valid_input_types = {
324
+ _CONTENT_TYPE_CSV: (str, list, dict, pd.DataFrame),
325
+ _CONTENT_TYPE_JSON: _get_pyfunc_supported_input_types(),
326
+ }.get(content_type)
327
+
328
+ if not isinstance(input_data, valid_input_types):
329
+ raise MlflowException.invalid_parameter_value(
330
+ f"Input data must be one of {valid_input_types} when content type is '{content_type}', "
331
+ f"but got {type(input_data)}."
332
+ )
333
+
334
+ if content_type == _CONTENT_TYPE_CSV:
335
+ if isinstance(input_data, str):
336
+ _validate_csv_string(input_data)
337
+ return input_data
338
+ else:
339
+ try:
340
+ return pd.DataFrame(input_data).to_csv(index=False)
341
+ except Exception as e:
342
+ raise MlflowException.invalid_parameter_value(
343
+ "Failed to serialize input data to CSV format."
344
+ ) from e
345
+
346
+ try:
347
+ # rely on convert_input_example_to_serving_input to validate
348
+ # the input_data is valid type for the loaded pyfunc model
349
+ return convert_input_example_to_serving_input(input_data)
350
+ except Exception as e:
351
+ raise MlflowException.invalid_parameter_value(
352
+ "Invalid input data, please make sure the data is acceptable by the "
353
+ "loaded pyfunc model. Use `mlflow.models.convert_input_example_to_serving_input` "
354
+ "to manually validate your input data."
355
+ ) from e
356
+
357
+
358
+ def _validate_csv_string(input_data: str):
359
+ """
360
+ Validate the string must be the path to a CSV file.
361
+ """
362
+ try:
363
+ import pandas as pd
364
+
365
+ pd.read_csv(StringIO(input_data))
366
+ except Exception as e:
367
+ raise MlflowException.invalid_parameter_value(
368
+ message="Failed to deserialize input string data to Pandas DataFrame."
369
+ ) from e
@@ -0,0 +1,128 @@
1
+ from dataclasses import dataclass, field
2
+ from typing import Optional
3
+
4
+ from mlflow.models import ModelSignature
5
+ from mlflow.types.schema import (
6
+ Array,
7
+ ColSpec,
8
+ DataType,
9
+ Object,
10
+ Property,
11
+ Schema,
12
+ )
13
+ from mlflow.utils.annotations import deprecated
14
+
15
+
16
+ @deprecated("mlflow.types.llm.ChatMessage")
17
+ @dataclass
18
+ class Message:
19
+ role: str = "user" # "system", "user", or "assistant"
20
+ content: str = "What is mlflow?"
21
+
22
+
23
+ @deprecated("mlflow.types.llm.ChatCompletionRequest")
24
+ @dataclass
25
+ class ChatCompletionRequest:
26
+ messages: list[Message] = field(default_factory=lambda: [Message()])
27
+
28
+
29
+ @deprecated("mlflow.types.llm.ChatCompletionRequest")
30
+ @dataclass
31
+ class SplitChatMessagesRequest:
32
+ query: str = "What is mlflow?"
33
+ history: Optional[list[Message]] = field(default_factory=list)
34
+
35
+
36
+ @deprecated("mlflow.types.llm.ChatCompletionRequest")
37
+ @dataclass
38
+ class MultiturnChatRequest:
39
+ query: str = "What is mlflow?"
40
+ history: Optional[list[Message]] = field(default_factory=list)
41
+
42
+
43
+ @deprecated("mlflow.types.llm.ChatChoice")
44
+ @dataclass
45
+ class ChainCompletionChoice:
46
+ index: int = 0
47
+ message: Message = field(
48
+ default_factory=lambda: Message(
49
+ role="assistant",
50
+ content="MLflow is an open source platform for the machine learning lifecycle.",
51
+ )
52
+ )
53
+ finish_reason: str = "stop"
54
+
55
+
56
+ @deprecated("mlflow.types.llm.ChatCompletionChunk")
57
+ @dataclass
58
+ class ChainCompletionChunk:
59
+ index: int = 0
60
+ delta: Message = field(
61
+ default_factory=lambda: Message(
62
+ role="assistant",
63
+ content="MLflow is an open source platform for the machine learning lifecycle.",
64
+ )
65
+ )
66
+ finish_reason: str = "stop"
67
+
68
+
69
+ @deprecated("mlflow.types.llm.ChatCompletionResponse")
70
+ @dataclass
71
+ class ChatCompletionResponse:
72
+ choices: list[ChainCompletionChoice] = field(default_factory=lambda: [ChainCompletionChoice()])
73
+ object: str = "chat.completion"
74
+ # TODO: support ChainCompletionChunk in the future
75
+
76
+
77
+ @deprecated("mlflow.types.llm.ChatCompletionResponse")
78
+ @dataclass
79
+ class StringResponse:
80
+ content: str = "MLflow is an open source platform for the machine learning lifecycle."
81
+
82
+
83
+ CHAT_COMPLETION_REQUEST_SCHEMA = Schema(
84
+ [
85
+ ColSpec(
86
+ name="messages",
87
+ type=Array(
88
+ Object(
89
+ [
90
+ Property("role", DataType.string),
91
+ Property("content", DataType.string),
92
+ ]
93
+ )
94
+ ),
95
+ ),
96
+ ]
97
+ )
98
+
99
+ CHAT_COMPLETION_RESPONSE_SCHEMA = Schema(
100
+ [
101
+ ColSpec(
102
+ name="choices",
103
+ type=Array(
104
+ Object(
105
+ [
106
+ Property("index", DataType.long),
107
+ Property(
108
+ "message",
109
+ Object(
110
+ [
111
+ Property("role", DataType.string),
112
+ Property("content", DataType.string),
113
+ ]
114
+ ),
115
+ ),
116
+ Property("finish_reason", DataType.string),
117
+ ]
118
+ )
119
+ ),
120
+ ),
121
+ ]
122
+ )
123
+
124
+ SIGNATURE_FOR_LLM_INFERENCE_TASK = {
125
+ "llm/v1/chat": ModelSignature(
126
+ inputs=CHAT_COMPLETION_REQUEST_SCHEMA, outputs=CHAT_COMPLETION_RESPONSE_SCHEMA
127
+ ),
128
+ }