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,316 @@
1
+ """
2
+ Plugin Registry for Genesis-Flow
3
+
4
+ Central registry for tracking discovered and registered plugins.
5
+ Provides thread-safe registration, lookup, and management of plugin classes.
6
+ """
7
+
8
+ import logging
9
+ import threading
10
+ from typing import Dict, List, Optional, Type, Set
11
+
12
+ from mlflow.plugins.base import BasePlugin, PluginType
13
+
14
+ logger = logging.getLogger(__name__)
15
+
16
+ class PluginRegistry:
17
+ """
18
+ Thread-safe registry for plugin classes.
19
+
20
+ Maintains a central catalog of all discovered plugin classes,
21
+ their types, and metadata.
22
+ """
23
+
24
+ def __init__(self):
25
+ self._plugins: Dict[str, Type[BasePlugin]] = {}
26
+ self._plugins_by_type: Dict[PluginType, Set[str]] = {}
27
+ self._lock = threading.RLock()
28
+
29
+ # Initialize type sets
30
+ for plugin_type in PluginType:
31
+ self._plugins_by_type[plugin_type] = set()
32
+
33
+ def register_plugin_class(self, name: str, plugin_class: Type[BasePlugin]) -> bool:
34
+ """
35
+ Register a plugin class.
36
+
37
+ Args:
38
+ name: Plugin name
39
+ plugin_class: Plugin class
40
+
41
+ Returns:
42
+ True if registered successfully, False otherwise
43
+ """
44
+ with self._lock:
45
+ try:
46
+ # Validate plugin class
47
+ if not self._validate_plugin_class(plugin_class):
48
+ logger.error(f"Invalid plugin class for {name}")
49
+ return False
50
+
51
+ # Check for conflicts
52
+ if name in self._plugins:
53
+ existing_class = self._plugins[name]
54
+ if existing_class != plugin_class:
55
+ logger.warning(f"Plugin {name} already registered with different class")
56
+ # Allow override but log it
57
+ else:
58
+ logger.debug(f"Plugin {name} already registered with same class")
59
+ return True
60
+
61
+ # Register the plugin
62
+ self._plugins[name] = plugin_class
63
+
64
+ # Add to type index
65
+ plugin_type = self._get_plugin_type(plugin_class)
66
+ if plugin_type:
67
+ self._plugins_by_type[plugin_type].add(name)
68
+
69
+ logger.debug(f"Registered plugin: {name}")
70
+ return True
71
+
72
+ except Exception as e:
73
+ logger.error(f"Error registering plugin {name}: {e}")
74
+ return False
75
+
76
+ def unregister_plugin(self, name: str) -> bool:
77
+ """
78
+ Unregister a plugin class.
79
+
80
+ Args:
81
+ name: Plugin name
82
+
83
+ Returns:
84
+ True if unregistered successfully, False otherwise
85
+ """
86
+ with self._lock:
87
+ try:
88
+ if name not in self._plugins:
89
+ logger.warning(f"Plugin {name} not registered")
90
+ return True # Already unregistered
91
+
92
+ plugin_class = self._plugins[name]
93
+
94
+ # Remove from main registry
95
+ del self._plugins[name]
96
+
97
+ # Remove from type index
98
+ plugin_type = self._get_plugin_type(plugin_class)
99
+ if plugin_type and name in self._plugins_by_type[plugin_type]:
100
+ self._plugins_by_type[plugin_type].remove(name)
101
+
102
+ logger.debug(f"Unregistered plugin: {name}")
103
+ return True
104
+
105
+ except Exception as e:
106
+ logger.error(f"Error unregistering plugin {name}: {e}")
107
+ return False
108
+
109
+ def get_plugin_class(self, name: str) -> Optional[Type[BasePlugin]]:
110
+ """
111
+ Get a plugin class by name.
112
+
113
+ Args:
114
+ name: Plugin name
115
+
116
+ Returns:
117
+ Plugin class or None if not found
118
+ """
119
+ with self._lock:
120
+ return self._plugins.get(name)
121
+
122
+ def is_plugin_registered(self, name: str) -> bool:
123
+ """
124
+ Check if a plugin is registered.
125
+
126
+ Args:
127
+ name: Plugin name
128
+
129
+ Returns:
130
+ True if registered, False otherwise
131
+ """
132
+ with self._lock:
133
+ return name in self._plugins
134
+
135
+ def list_plugins(self, plugin_type: Optional[PluginType] = None) -> List[str]:
136
+ """
137
+ List registered plugin names.
138
+
139
+ Args:
140
+ plugin_type: Optional filter by plugin type
141
+
142
+ Returns:
143
+ List of plugin names
144
+ """
145
+ with self._lock:
146
+ if plugin_type:
147
+ return list(self._plugins_by_type.get(plugin_type, set()))
148
+ else:
149
+ return list(self._plugins.keys())
150
+
151
+ def get_plugins_by_type(self, plugin_type: PluginType) -> Dict[str, Type[BasePlugin]]:
152
+ """
153
+ Get all plugins of a specific type.
154
+
155
+ Args:
156
+ plugin_type: Plugin type
157
+
158
+ Returns:
159
+ Dict mapping plugin names to classes
160
+ """
161
+ with self._lock:
162
+ result = {}
163
+ plugin_names = self._plugins_by_type.get(plugin_type, set())
164
+ for name in plugin_names:
165
+ if name in self._plugins:
166
+ result[name] = self._plugins[name]
167
+ return result
168
+
169
+ def get_plugin_types(self) -> Dict[str, PluginType]:
170
+ """
171
+ Get plugin types for all registered plugins.
172
+
173
+ Returns:
174
+ Dict mapping plugin names to types
175
+ """
176
+ with self._lock:
177
+ result = {}
178
+ for name, plugin_class in self._plugins.items():
179
+ plugin_type = self._get_plugin_type(plugin_class)
180
+ if plugin_type:
181
+ result[name] = plugin_type
182
+ return result
183
+
184
+ def clear(self):
185
+ """Clear all registered plugins."""
186
+ with self._lock:
187
+ self._plugins.clear()
188
+ for plugin_type in PluginType:
189
+ self._plugins_by_type[plugin_type].clear()
190
+ logger.info("Plugin registry cleared")
191
+
192
+ def get_stats(self) -> Dict[str, int]:
193
+ """
194
+ Get registry statistics.
195
+
196
+ Returns:
197
+ Statistics dictionary
198
+ """
199
+ with self._lock:
200
+ stats = {
201
+ "total": len(self._plugins),
202
+ }
203
+
204
+ # Count by type
205
+ for plugin_type in PluginType:
206
+ count = len(self._plugins_by_type[plugin_type])
207
+ stats[plugin_type.value] = count
208
+
209
+ return stats
210
+
211
+ def _validate_plugin_class(self, plugin_class: Type) -> bool:
212
+ """
213
+ Validate a plugin class.
214
+
215
+ Args:
216
+ plugin_class: Class to validate
217
+
218
+ Returns:
219
+ True if valid, False otherwise
220
+ """
221
+ try:
222
+ # Must be a class
223
+ if not isinstance(plugin_class, type):
224
+ return False
225
+
226
+ # Must be a subclass of BasePlugin
227
+ if not issubclass(plugin_class, BasePlugin):
228
+ return False
229
+
230
+ # Must not be BasePlugin itself
231
+ if plugin_class == BasePlugin:
232
+ return False
233
+
234
+ # Must have required methods
235
+ required_methods = ['load', 'enable', 'disable', 'unload']
236
+ for method in required_methods:
237
+ if not hasattr(plugin_class, method):
238
+ return False
239
+
240
+ return True
241
+
242
+ except Exception as e:
243
+ logger.error(f"Error validating plugin class: {e}")
244
+ return False
245
+
246
+ def _get_plugin_type(self, plugin_class: Type[BasePlugin]) -> Optional[PluginType]:
247
+ """
248
+ Determine the type of a plugin class.
249
+
250
+ Args:
251
+ plugin_class: Plugin class
252
+
253
+ Returns:
254
+ Plugin type or None if cannot determine
255
+ """
256
+ try:
257
+ # Try to get from class metadata
258
+ if hasattr(plugin_class, 'get_default_metadata'):
259
+ metadata = plugin_class.get_default_metadata()
260
+ return metadata.plugin_type
261
+
262
+ # Try to infer from class hierarchy
263
+ from mlflow.plugins.base import (
264
+ FrameworkPlugin, LoggingPlugin, ModelRegistryPlugin,
265
+ DeploymentPlugin, ArtifactPlugin
266
+ )
267
+
268
+ if issubclass(plugin_class, FrameworkPlugin):
269
+ return PluginType.FRAMEWORK
270
+ elif issubclass(plugin_class, LoggingPlugin):
271
+ return PluginType.LOGGING
272
+ elif issubclass(plugin_class, ModelRegistryPlugin):
273
+ return PluginType.MODEL_REGISTRY
274
+ elif issubclass(plugin_class, DeploymentPlugin):
275
+ return PluginType.DEPLOYMENT
276
+ elif issubclass(plugin_class, ArtifactPlugin):
277
+ return PluginType.ARTIFACT
278
+ else:
279
+ return PluginType.CUSTOM
280
+
281
+ except Exception as e:
282
+ logger.error(f"Error determining plugin type for {plugin_class}: {e}")
283
+ return PluginType.CUSTOM
284
+
285
+ def export_registry(self) -> Dict[str, Dict]:
286
+ """
287
+ Export registry contents for serialization.
288
+
289
+ Returns:
290
+ Serializable registry data
291
+ """
292
+ with self._lock:
293
+ result = {}
294
+ for name, plugin_class in self._plugins.items():
295
+ result[name] = {
296
+ "class_name": plugin_class.__name__,
297
+ "module": plugin_class.__module__,
298
+ "type": self._get_plugin_type(plugin_class).value if self._get_plugin_type(plugin_class) else None,
299
+ }
300
+ return result
301
+
302
+ def find_plugins_by_pattern(self, pattern: str) -> List[str]:
303
+ """
304
+ Find plugins matching a name pattern.
305
+
306
+ Args:
307
+ pattern: Pattern to match (supports * wildcard)
308
+
309
+ Returns:
310
+ List of matching plugin names
311
+ """
312
+ import fnmatch
313
+
314
+ with self._lock:
315
+ return [name for name in self._plugins.keys()
316
+ if fnmatch.fnmatch(name, pattern)]
@@ -0,0 +1,329 @@
1
+ """
2
+ Framework Plugin Template for Genesis-Flow
3
+
4
+ This template provides a starting point for creating new ML framework plugins.
5
+ Copy this file and customize it for your specific framework.
6
+
7
+ Example: Creating a TensorFlow plugin
8
+ 1. Copy this file to tensorflow_plugin.py
9
+ 2. Replace "MyFramework" with "TensorFlow"
10
+ 3. Update metadata with TensorFlow-specific information
11
+ 4. Implement TensorFlow-specific methods
12
+ 5. Register in entry points or built-in plugins
13
+ """
14
+
15
+ import logging
16
+ from typing import Dict, Callable
17
+
18
+ from mlflow.plugins.base import FrameworkPlugin, PluginMetadata, PluginType
19
+
20
+ logger = logging.getLogger(__name__)
21
+
22
+ class MyFrameworkPlugin(FrameworkPlugin):
23
+ """
24
+ Framework plugin template for Genesis-Flow.
25
+
26
+ Replace "MyFramework" with your framework name throughout this file.
27
+ """
28
+
29
+ @classmethod
30
+ def get_default_metadata(cls) -> PluginMetadata:
31
+ """
32
+ Get default metadata for the framework plugin.
33
+
34
+ Customize all fields below for your framework.
35
+ """
36
+ return PluginMetadata(
37
+ name="myframework", # Change to your framework name (lowercase)
38
+ version="1.0.0", # Your plugin version
39
+ description="My Framework integration for Genesis-Flow", # Framework description
40
+ author="Your Name or Organization", # Plugin author
41
+ plugin_type=PluginType.FRAMEWORK, # Keep as FRAMEWORK
42
+ dependencies=["myframework"], # Required Python packages
43
+ optional_dependencies=[ # Optional packages that enhance functionality
44
+ "numpy",
45
+ "scipy",
46
+ # Add framework-specific optional dependencies
47
+ ],
48
+ min_genesis_flow_version="1.0.0", # Minimum Genesis-Flow version
49
+ max_genesis_flow_version=None, # Maximum version (None for no limit)
50
+ homepage="https://myframework.org", # Framework homepage
51
+ documentation="https://docs.myframework.org/mlflow", # MLflow integration docs
52
+ license="Apache 2.0", # Framework license
53
+ tags=[ # Descriptive tags
54
+ "machine-learning",
55
+ "myframework",
56
+ # Add framework-specific tags like "deep-learning", "nlp", etc.
57
+ ],
58
+ )
59
+
60
+ def get_module_path(self) -> str:
61
+ """
62
+ Get the module path for framework integration.
63
+
64
+ This should match the MLflow integration module for your framework.
65
+ Example: "mlflow.tensorflow" for TensorFlow
66
+ """
67
+ return "mlflow.myframework" # Change to your framework module
68
+
69
+ def get_autolog_functions(self) -> Dict[str, Callable]:
70
+ """
71
+ Get autologging functions provided by this framework.
72
+
73
+ Returns dictionary mapping function names to callables.
74
+ """
75
+ try:
76
+ # Import your framework's MLflow integration
77
+ from mlflow.myframework import autolog
78
+
79
+ return {
80
+ "autolog": autolog,
81
+ # Add other autolog-related functions if available
82
+ }
83
+
84
+ except ImportError:
85
+ logger.warning("MyFramework autolog not available")
86
+ return {}
87
+
88
+ def get_save_functions(self) -> Dict[str, Callable]:
89
+ """
90
+ Get model saving functions provided by this framework.
91
+
92
+ Returns dictionary mapping function names to callables.
93
+ """
94
+ try:
95
+ # Import your framework's MLflow integration
96
+ from mlflow.myframework import log_model, save_model
97
+
98
+ return {
99
+ "log_model": log_model,
100
+ "save_model": save_model,
101
+ # Add other save-related functions if available
102
+ }
103
+
104
+ except ImportError:
105
+ logger.warning("MyFramework save functions not available")
106
+ return {}
107
+
108
+ def get_load_functions(self) -> Dict[str, Callable]:
109
+ """
110
+ Get model loading functions provided by this framework.
111
+
112
+ Returns dictionary mapping function names to callables.
113
+ """
114
+ try:
115
+ # Import your framework's MLflow integration
116
+ from mlflow.myframework import load_model
117
+
118
+ return {
119
+ "load_model": load_model,
120
+ # Add other load-related functions if available
121
+ }
122
+
123
+ except ImportError:
124
+ logger.warning("MyFramework load functions not available")
125
+ return {}
126
+
127
+ def enable(self) -> bool:
128
+ """
129
+ Enable the framework plugin with enhanced functionality.
130
+
131
+ Add framework-specific setup and configuration here.
132
+ """
133
+ try:
134
+ # Call parent enable method
135
+ if not super().enable():
136
+ return False
137
+
138
+ # Add framework-specific setup
139
+ self._setup_framework_environment()
140
+
141
+ self._logger.info("MyFramework plugin enabled with full functionality")
142
+ return True
143
+
144
+ except Exception as e:
145
+ self._logger.error(f"Failed to enable MyFramework plugin: {e}")
146
+ return False
147
+
148
+ def _setup_framework_environment(self):
149
+ """
150
+ Setup framework-specific environment and configurations.
151
+
152
+ Customize this method for your framework's initialization needs.
153
+ """
154
+ try:
155
+ # Import your framework
156
+ import myframework # Replace with your framework import
157
+
158
+ # Log framework version and capabilities
159
+ self._logger.info(f"MyFramework version: {myframework.__version__}")
160
+
161
+ # Check for GPU availability if relevant
162
+ if hasattr(myframework, 'is_gpu_available'):
163
+ gpu_available = myframework.is_gpu_available()
164
+ self._logger.info(f"GPU available: {gpu_available}")
165
+
166
+ # Setup hooks for automatic logging
167
+ self.register_hook("model_save", self._on_model_save)
168
+ self.register_hook("model_load", self._on_model_load)
169
+ self.register_hook("training_start", self._on_training_start)
170
+ self.register_hook("training_end", self._on_training_end)
171
+
172
+ # Framework-specific configuration
173
+ self._configure_framework_settings()
174
+
175
+ except Exception as e:
176
+ self._logger.warning(f"MyFramework environment setup warning: {e}")
177
+
178
+ def _configure_framework_settings(self):
179
+ """Configure framework-specific settings for optimal MLflow integration."""
180
+ try:
181
+ # Add framework-specific configuration here
182
+ # Example: Setting logging levels, performance options, etc.
183
+ pass
184
+
185
+ except Exception as e:
186
+ self._logger.warning(f"MyFramework configuration warning: {e}")
187
+
188
+ def _on_model_save(self, model, *args, **kwargs):
189
+ """
190
+ Hook called when a model is saved.
191
+
192
+ Customize this to add framework-specific model save processing.
193
+ """
194
+ try:
195
+ # Check if it's your framework's model type
196
+ import myframework
197
+
198
+ if isinstance(model, myframework.BaseModel): # Replace with your model base class
199
+ self._logger.debug("MyFramework model save detected")
200
+
201
+ # Add custom processing here
202
+ # Example: Log model architecture, parameters, etc.
203
+ self._log_model_metadata(model)
204
+
205
+ except Exception as e:
206
+ self._logger.warning(f"MyFramework model save hook error: {e}")
207
+
208
+ def _on_model_load(self, model_path, *args, **kwargs):
209
+ """
210
+ Hook called when a model is loaded.
211
+
212
+ Customize this to add framework-specific model load processing.
213
+ """
214
+ try:
215
+ self._logger.debug(f"MyFramework model load detected: {model_path}")
216
+
217
+ # Add custom processing here
218
+ # Example: Validate model, setup runtime environment, etc.
219
+
220
+ except Exception as e:
221
+ self._logger.warning(f"MyFramework model load hook error: {e}")
222
+
223
+ def _on_training_start(self, *args, **kwargs):
224
+ """Hook called when training starts."""
225
+ try:
226
+ self._logger.debug("MyFramework training start detected")
227
+
228
+ # Add custom processing here
229
+ # Example: Setup training monitoring, resource tracking, etc.
230
+
231
+ except Exception as e:
232
+ self._logger.warning(f"MyFramework training start hook error: {e}")
233
+
234
+ def _on_training_end(self, *args, **kwargs):
235
+ """Hook called when training ends."""
236
+ try:
237
+ self._logger.debug("MyFramework training end detected")
238
+
239
+ # Add custom processing here
240
+ # Example: Log final metrics, cleanup resources, etc.
241
+
242
+ except Exception as e:
243
+ self._logger.warning(f"MyFramework training end hook error: {e}")
244
+
245
+ def _log_model_metadata(self, model):
246
+ """Log additional metadata about the model."""
247
+ try:
248
+ # Example: Log model-specific information
249
+ # This is where you'd add framework-specific metadata logging
250
+ pass
251
+
252
+ except Exception as e:
253
+ self._logger.warning(f"MyFramework model metadata logging error: {e}")
254
+
255
+ def check_dependencies(self) -> bool:
256
+ """
257
+ Enhanced dependency checking for the framework.
258
+
259
+ Customize this to add framework-specific dependency validation.
260
+ """
261
+ # Check basic dependencies first
262
+ if not super().check_dependencies():
263
+ return False
264
+
265
+ try:
266
+ # Import and validate your framework
267
+ import myframework # Replace with your framework import
268
+
269
+ # Check minimum framework version
270
+ from packaging.version import Version
271
+ min_version = "1.0.0" # Set your minimum version requirement
272
+
273
+ if Version(myframework.__version__) < Version(min_version):
274
+ self._logger.error(f"MyFramework {min_version}+ required, found {myframework.__version__}")
275
+ return False
276
+
277
+ # Add framework-specific validation
278
+ if not self._validate_framework_environment():
279
+ return False
280
+
281
+ self._logger.debug(f"MyFramework {myframework.__version__} dependency satisfied")
282
+ return True
283
+
284
+ except ImportError:
285
+ self._logger.error("MyFramework not installed")
286
+ return False
287
+ except Exception as e:
288
+ self._logger.error(f"MyFramework dependency check failed: {e}")
289
+ return False
290
+
291
+ def _validate_framework_environment(self) -> bool:
292
+ """
293
+ Validate framework-specific environment requirements.
294
+
295
+ Add custom validation logic here.
296
+ """
297
+ try:
298
+ # Add framework-specific validation
299
+ # Example: Check for required system libraries, GPU drivers, etc.
300
+
301
+ # Example validation:
302
+ # import myframework
303
+ # if not myframework.is_properly_configured():
304
+ # self._logger.error("MyFramework is not properly configured")
305
+ # return False
306
+
307
+ return True
308
+
309
+ except Exception as e:
310
+ self._logger.error(f"MyFramework environment validation failed: {e}")
311
+ return False
312
+
313
+ # Example usage and registration:
314
+
315
+ # 1. To use this plugin directly:
316
+ # metadata = MyFrameworkPlugin.get_default_metadata()
317
+ # plugin = MyFrameworkPlugin(metadata)
318
+ # plugin.enable()
319
+
320
+ # 2. To register in built-in plugins, add to mlflow/plugins/builtin/__init__.py:
321
+ # from mlflow.plugins.builtin.myframework_plugin import MyFrameworkPlugin
322
+ # BUILTIN_PLUGINS["myframework"] = MyFrameworkPlugin
323
+
324
+ # 3. To register via entry points, add to setup.py:
325
+ # entry_points={
326
+ # "genesis_flow.frameworks": [
327
+ # "myframework = mypackage.myframework_plugin:MyFrameworkPlugin",
328
+ # ],
329
+ # }
@@ -0,0 +1,20 @@
1
+ # A special tag in RegisteredModel to indicate that it is a prompt
2
+ import re
3
+
4
+ IS_PROMPT_TAG_KEY = "mlflow.prompt.is_prompt"
5
+ # A special tag in ModelVersion to store the prompt text
6
+ PROMPT_TEXT_TAG_KEY = "mlflow.prompt.text"
7
+
8
+ LINKED_PROMPTS_TAG_KEY = "mlflow.linkedPrompts"
9
+
10
+ # A special tag to store associated run IDs for prompts
11
+ PROMPT_ASSOCIATED_RUN_IDS_TAG_KEY = "mlflow.prompt.associatedRunIds"
12
+
13
+ PROMPT_TEMPLATE_VARIABLE_PATTERN = re.compile(
14
+ r"\{\{\s*([a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)*)\s*\}\}"
15
+ )
16
+
17
+ PROMPT_TEXT_DISPLAY_LIMIT = 30
18
+
19
+ # Alphanumeric, underscore, hyphen, and dot are allowed in prompt name
20
+ PROMPT_NAME_RULE = re.compile(r"^[a-zA-Z0-9_.-]+$")