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