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
mlflow/client.py ADDED
@@ -0,0 +1,12 @@
1
+ """
2
+ The ``mlflow.client`` module provides a Python CRUD interface to MLflow Experiments, Runs,
3
+ Model Versions, and Registered Models. This is a lower level API that directly translates to MLflow
4
+ `REST API <../rest-api.html>`_ calls.
5
+ For a higher level API for managing an "active run", use the :py:mod:`mlflow` module.
6
+ """
7
+
8
+ from mlflow.tracking.client import MlflowClient
9
+
10
+ __all__ = [
11
+ "MlflowClient",
12
+ ]
@@ -0,0 +1,56 @@
1
+ from mlflow.environment_variables import (
2
+ MLFLOW_ENABLE_ASYNC_LOGGING,
3
+ )
4
+ from mlflow.system_metrics import (
5
+ disable_system_metrics_logging,
6
+ enable_system_metrics_logging,
7
+ set_system_metrics_node_id,
8
+ set_system_metrics_samples_before_logging,
9
+ set_system_metrics_sampling_interval,
10
+ )
11
+ from mlflow.tracking import (
12
+ get_registry_uri,
13
+ get_tracking_uri,
14
+ is_tracking_uri_set,
15
+ set_registry_uri,
16
+ set_tracking_uri,
17
+ )
18
+
19
+
20
+ def enable_async_logging(enable=True):
21
+ """Enable or disable async logging globally.
22
+
23
+ Args:
24
+ enable: bool, if True, enable async logging. If False, disable async logging.
25
+
26
+ .. code-block:: python
27
+ :caption: Example
28
+
29
+ import mlflow
30
+
31
+ mlflow.config.enable_async_logging(True)
32
+
33
+ with mlflow.start_run():
34
+ mlflow.log_param("a", 1) # This will be logged asynchronously
35
+
36
+ mlflow.config.enable_async_logging(False)
37
+ with mlflow.start_run():
38
+ mlflow.log_param("a", 1) # This will be logged synchronously
39
+ """
40
+
41
+ MLFLOW_ENABLE_ASYNC_LOGGING.set(enable)
42
+
43
+
44
+ __all__ = [
45
+ "enable_system_metrics_logging",
46
+ "disable_system_metrics_logging",
47
+ "enable_async_logging",
48
+ "get_registry_uri",
49
+ "get_tracking_uri",
50
+ "is_tracking_uri_set",
51
+ "set_registry_uri",
52
+ "set_system_metrics_sampling_interval",
53
+ "set_system_metrics_samples_before_logging",
54
+ "set_system_metrics_node_id",
55
+ "set_tracking_uri",
56
+ ]
@@ -0,0 +1,79 @@
1
+ """
2
+ The ``mlflow.crewai`` module provides an API for tracing CrewAI AI agents.
3
+ """
4
+
5
+ import importlib
6
+ import logging
7
+
8
+ from packaging.version import Version
9
+
10
+ from mlflow.crewai.autolog import (
11
+ patched_class_call,
12
+ )
13
+ from mlflow.utils.annotations import experimental
14
+ from mlflow.utils.autologging_utils import autologging_integration, safe_patch
15
+
16
+ _logger = logging.getLogger(__name__)
17
+
18
+ FLAVOR_NAME = "crewai"
19
+
20
+
21
+ @experimental(version="2.19.0")
22
+ @autologging_integration(FLAVOR_NAME)
23
+ def autolog(
24
+ log_traces: bool = True,
25
+ disable: bool = False,
26
+ silent: bool = False,
27
+ ):
28
+ """
29
+ Enables (or disables) and configures autologging from CrewAI to MLflow.
30
+ Note that asynchronous APIs and Tool calling are not recorded now.
31
+
32
+ Args:
33
+ log_traces: If ``True``, traces are logged for CrewAI agents.
34
+ If ``False``, no traces are collected during inference. Default to ``True``.
35
+ disable: If ``True``, disables the CrewAI autologging. Default to ``False``.
36
+ silent: If ``True``, suppress all event logs and warnings from MLflow during CrewAI
37
+ autologging. If ``False``, show all events and warnings.
38
+ """
39
+ # TODO: Handle asynchronous tasks and crew executions
40
+ # TODO: Tool calling is not supported since the interface of tool in CrewAI is
41
+ # changing drastically. Add patching once it's stabilized
42
+ import crewai
43
+
44
+ class_method_map = {
45
+ "crewai.Crew": ["kickoff", "kickoff_for_each", "train"],
46
+ "crewai.Agent": ["execute_task"],
47
+ "crewai.Task": ["execute_sync"],
48
+ "crewai.LLM": ["call"],
49
+ "crewai.Flow": ["kickoff"],
50
+ "crewai.agents.agent_builder.base_agent_executor_mixin.CrewAgentExecutorMixin": [
51
+ "_create_long_term_memory"
52
+ ],
53
+ }
54
+ if Version(crewai.__version__) >= Version("0.83.0"):
55
+ # knowledge and memory are not available before 0.83.0
56
+ class_method_map.update(
57
+ {
58
+ "crewai.memory.ShortTermMemory": ["save", "search"],
59
+ "crewai.memory.LongTermMemory": ["save", "search"],
60
+ "crewai.memory.UserMemory": ["save", "search"],
61
+ "crewai.memory.EntityMemory": ["save", "search"],
62
+ "crewai.Knowledge": ["query"],
63
+ }
64
+ )
65
+ try:
66
+ for class_path, methods in class_method_map.items():
67
+ *module_parts, class_name = class_path.rsplit(".", 1)
68
+ module_path = ".".join(module_parts)
69
+ module = importlib.import_module(module_path)
70
+ cls = getattr(module, class_name)
71
+ for method in methods:
72
+ safe_patch(
73
+ FLAVOR_NAME,
74
+ cls,
75
+ method,
76
+ patched_class_call,
77
+ )
78
+ except (AttributeError, ModuleNotFoundError) as e:
79
+ _logger.error("An exception happens when applying auto-tracing to crewai. Exception: %s", e)
@@ -0,0 +1,253 @@
1
+ import inspect
2
+ import json
3
+ import logging
4
+ import warnings
5
+
6
+ from packaging.version import Version
7
+
8
+ import mlflow
9
+ from mlflow.crewai.chat import set_span_chat_attributes
10
+ from mlflow.entities import SpanType
11
+ from mlflow.entities.span import LiveSpan
12
+ from mlflow.tracing.utils import TraceJSONEncoder
13
+ from mlflow.utils.autologging_utils.config import AutoLoggingConfig
14
+
15
+ _logger = logging.getLogger(__name__)
16
+
17
+
18
+ def patched_class_call(original, self, *args, **kwargs):
19
+ config = AutoLoggingConfig.init(flavor_name=mlflow.gemini.FLAVOR_NAME)
20
+
21
+ if config.log_traces:
22
+ fullname = f"{self.__class__.__name__}.{original.__name__}"
23
+ span_type = _get_span_type(self)
24
+ with mlflow.start_span(name=fullname, span_type=span_type) as span:
25
+ inputs = _construct_full_inputs(original, self, *args, **kwargs)
26
+ span.set_inputs(inputs)
27
+ _set_span_attributes(span=span, instance=self)
28
+ result = original(self, *args, **kwargs)
29
+
30
+ if span_type == SpanType.LLM:
31
+ set_span_chat_attributes(
32
+ span=span, messages=inputs.get("messages", []), output=result
33
+ )
34
+ # Need to convert the response of generate_content for better visualization
35
+ outputs = result.__dict__ if hasattr(result, "__dict__") else result
36
+ span.set_outputs(outputs)
37
+
38
+ return result
39
+
40
+
41
+ def _get_span_type(instance) -> str:
42
+ import crewai
43
+ from crewai import LLM, Agent, Crew, Task
44
+ from crewai.flow.flow import Flow
45
+
46
+ try:
47
+ if isinstance(instance, (Flow, Crew, Task)):
48
+ return SpanType.CHAIN
49
+ elif isinstance(instance, Agent):
50
+ return SpanType.AGENT
51
+ elif isinstance(instance, LLM):
52
+ return SpanType.LLM
53
+ elif isinstance(instance, Flow):
54
+ return SpanType.CHAIN
55
+ elif isinstance(
56
+ instance, crewai.agents.agent_builder.base_agent_executor_mixin.CrewAgentExecutorMixin
57
+ ):
58
+ return SpanType.RETRIEVER
59
+
60
+ # Knowledge and Memory are not available before 0.83.0
61
+ if Version(crewai.__version__) >= Version("0.83.0"):
62
+ if isinstance(
63
+ instance,
64
+ (
65
+ crewai.memory.ShortTermMemory,
66
+ crewai.memory.LongTermMemory,
67
+ crewai.memory.UserMemory,
68
+ crewai.memory.EntityMemory,
69
+ crewai.Knowledge,
70
+ ),
71
+ ):
72
+ return SpanType.RETRIEVER
73
+ except AttributeError as e:
74
+ _logger.warn("An exception happens when resolving the span type. Exception: %s", e)
75
+
76
+ return SpanType.UNKNOWN
77
+
78
+
79
+ def _is_serializable(value):
80
+ try:
81
+ with warnings.catch_warnings():
82
+ warnings.simplefilter("ignore")
83
+ # There is type mismatch in some crewai class, suppress warning here
84
+ json.dumps(value, cls=TraceJSONEncoder, ensure_ascii=False)
85
+ return True
86
+ except (TypeError, ValueError):
87
+ return False
88
+
89
+
90
+ def _construct_full_inputs(func, *args, **kwargs):
91
+ signature = inspect.signature(func)
92
+ # This does not create copy. So values should not be mutated directly
93
+ arguments = signature.bind_partial(*args, **kwargs).arguments
94
+
95
+ if "self" in arguments:
96
+ arguments.pop("self")
97
+
98
+ # Avoid non serializable objects and circular references
99
+ return {
100
+ k: v.__dict__ if hasattr(v, "__dict__") else v
101
+ for k, v in arguments.items()
102
+ if v is not None and _is_serializable(v)
103
+ }
104
+
105
+
106
+ def _set_span_attributes(span: LiveSpan, instance):
107
+ # Crewai is available only python >=3.10, so importing libraries inside methods.
108
+ try:
109
+ import crewai
110
+ from crewai import LLM, Agent, Crew, Task
111
+ from crewai.flow.flow import Flow
112
+
113
+ ## Memory class does not have helpful attributes
114
+ if isinstance(instance, Crew):
115
+ for key, value in instance.__dict__.items():
116
+ if value is not None:
117
+ if key == "tasks":
118
+ value = _parse_tasks(value)
119
+ elif key == "agents":
120
+ value = _parse_agents(value)
121
+ span.set_attribute(key, str(value) if isinstance(value, list) else value)
122
+
123
+ elif isinstance(instance, Agent):
124
+ agent = _get_agent_attributes(instance)
125
+ for key, value in agent.items():
126
+ if value is not None:
127
+ span.set_attribute(key, str(value) if isinstance(value, list) else value)
128
+
129
+ elif isinstance(instance, Task):
130
+ task = _get_task_attributes(instance)
131
+ for key, value in task.items():
132
+ if value is not None:
133
+ span.set_attribute(key, str(value) if isinstance(value, list) else value)
134
+
135
+ elif isinstance(instance, LLM):
136
+ llm = _get_llm_attributes(instance)
137
+ for key, value in llm.items():
138
+ if value is not None:
139
+ span.set_attribute(key, str(value) if isinstance(value, list) else value)
140
+
141
+ elif isinstance(instance, Flow):
142
+ for key, value in instance.__dict__.items():
143
+ if value is not None:
144
+ span.set_attribute(key, str(value) if isinstance(value, list) else value)
145
+
146
+ elif Version(crewai.__version__) >= Version("0.83.0"):
147
+ if isinstance(instance, crewai.Knowledge):
148
+ for key, value in instance.__dict__.items():
149
+ if value is not None and key != "storage":
150
+ span.set_attribute(key, str(value) if isinstance(value, list) else value)
151
+
152
+ except AttributeError as e:
153
+ _logger.warn("An exception happens when saving span attributes. Exception: %s", e)
154
+
155
+
156
+ def _get_agent_attributes(instance):
157
+ agent = {}
158
+ for key, value in instance.__dict__.items():
159
+ if key == "tools":
160
+ value = _parse_tools(value)
161
+ if value is None:
162
+ continue
163
+ agent[key] = str(value)
164
+
165
+ return agent
166
+
167
+
168
+ def _get_task_attributes(instance):
169
+ task = {}
170
+ for key, value in instance.__dict__.items():
171
+ if value is None:
172
+ continue
173
+ if key == "tools":
174
+ value = _parse_tools(value)
175
+ task[key] = value
176
+ elif key == "agent":
177
+ task[key] = value.role
178
+ else:
179
+ task[key] = str(value)
180
+ return task
181
+
182
+
183
+ def _get_llm_attributes(instance):
184
+ llm = {}
185
+ for key, value in instance.__dict__.items():
186
+ if value is None:
187
+ continue
188
+ elif key in ["callbacks", "api_key"]:
189
+ # Skip callbacks until how they should be logged are decided
190
+ continue
191
+ else:
192
+ llm[key] = str(value)
193
+ return llm
194
+
195
+
196
+ def _parse_agents(agents):
197
+ attributes = []
198
+ for agent in agents:
199
+ model = None
200
+ if agent.llm is not None:
201
+ if hasattr(agent.llm, "model"):
202
+ model = agent.llm.model
203
+ elif hasattr(agent.llm, "model_name"):
204
+ model = agent.llm.model_name
205
+ attributes.append(
206
+ {
207
+ "id": str(agent.id),
208
+ "role": agent.role,
209
+ "goal": agent.goal,
210
+ "backstory": agent.backstory,
211
+ "cache": agent.cache,
212
+ "config": agent.config,
213
+ "verbose": agent.verbose,
214
+ "allow_delegation": agent.allow_delegation,
215
+ "tools": agent.tools,
216
+ "max_iter": agent.max_iter,
217
+ "llm": str(model if model is not None else ""),
218
+ }
219
+ )
220
+ return attributes
221
+
222
+
223
+ def _parse_tasks(tasks):
224
+ return [
225
+ {
226
+ "agent": task.agent.role,
227
+ "description": task.description,
228
+ "async_execution": task.async_execution,
229
+ "expected_output": task.expected_output,
230
+ "human_input": task.human_input,
231
+ "tools": task.tools,
232
+ "output_file": task.output_file,
233
+ }
234
+ for task in tasks
235
+ ]
236
+
237
+
238
+ def _parse_tools(tools):
239
+ result = []
240
+ for tool in tools:
241
+ res = {}
242
+ if hasattr(tool, "name") and tool.name is not None:
243
+ res["name"] = tool.name
244
+ if hasattr(tool, "description") and tool.description is not None:
245
+ res["description"] = tool.description
246
+ if res:
247
+ result.append(
248
+ {
249
+ "type": "function",
250
+ "function": res,
251
+ }
252
+ )
253
+ return result
mlflow/crewai/chat.py ADDED
@@ -0,0 +1,29 @@
1
+ import logging
2
+ from typing import Any
3
+
4
+ from mlflow.entities.span import LiveSpan
5
+ from mlflow.exceptions import MlflowException
6
+ from mlflow.tracing import set_span_chat_messages
7
+
8
+ _logger = logging.getLogger(__name__)
9
+
10
+
11
+ def set_span_chat_attributes(span: LiveSpan, messages: list[dict[str, Any]], output: Any):
12
+ """
13
+ This method logs chat messages to a span when LLM class is called. Since the CrewAI library
14
+ includes tool definition in the text content, mlflow.chat.tools attribute is not recorded.
15
+
16
+ Args:
17
+ span: A span object to record the chat messages.
18
+ messages: Input messages for the LLM call.
19
+ output: Response from LLM. Though the signature is str, tool response might be returned.
20
+ """
21
+ output_message = {"role": "assistant", "content": str(output)}
22
+
23
+ try:
24
+ set_span_chat_messages(span, [*messages, output_message])
25
+ except MlflowException:
26
+ _logger.debug(
27
+ "Failed to set chat messages on span",
28
+ exc_info=True,
29
+ )
@@ -0,0 +1,75 @@
1
+ import sys
2
+ from contextlib import suppress
3
+ from typing import Union
4
+
5
+ from mlflow.data import dataset_registry
6
+ from mlflow.data import sources as mlflow_data_sources
7
+ from mlflow.data.dataset import Dataset
8
+ from mlflow.data.dataset_source import DatasetSource
9
+ from mlflow.data.dataset_source_registry import get_dataset_source_from_json, get_registered_sources
10
+ from mlflow.entities import Dataset as DatasetEntity
11
+ from mlflow.entities import DatasetInput
12
+ from mlflow.exceptions import MlflowException
13
+ from mlflow.protos.databricks_pb2 import INVALID_PARAMETER_VALUE
14
+
15
+ with suppress(ImportError):
16
+ # Suppressing ImportError to pass mlflow-skinny testing.
17
+ from mlflow.data import meta_dataset # noqa: F401
18
+
19
+
20
+ def get_source(dataset: Union[DatasetEntity, DatasetInput, Dataset]) -> DatasetSource:
21
+ """Obtains the source of the specified dataset or dataset input.
22
+
23
+ Args:
24
+ dataset:
25
+ An instance of :py:class:`mlflow.data.dataset.Dataset <mlflow.data.dataset.Dataset>`,
26
+ :py:class:`mlflow.entities.Dataset`, or :py:class:`mlflow.entities.DatasetInput`.
27
+
28
+ Returns:
29
+ An instance of :py:class:`DatasetSource <mlflow.data.dataset_source.DatasetSource>`.
30
+
31
+ """
32
+ if isinstance(dataset, DatasetInput):
33
+ dataset: DatasetEntity = dataset.dataset
34
+
35
+ if isinstance(dataset, DatasetEntity):
36
+ dataset_source: DatasetSource = get_dataset_source_from_json(
37
+ source_json=dataset.source,
38
+ source_type=dataset.source_type,
39
+ )
40
+ elif isinstance(dataset, Dataset):
41
+ dataset_source: DatasetSource = dataset.source
42
+ else:
43
+ raise MlflowException(
44
+ f"Unrecognized dataset type {type(dataset)}. Expected one of: "
45
+ f"`mlflow.data.dataset.Dataset`,"
46
+ f" `mlflow.entities.Dataset`, `mlflow.entities.DatasetInput`.",
47
+ INVALID_PARAMETER_VALUE,
48
+ )
49
+
50
+ return dataset_source
51
+
52
+
53
+ __all__ = ["get_source"]
54
+
55
+
56
+ def _define_dataset_constructors_in_current_module():
57
+ data_module = sys.modules[__name__]
58
+ for (
59
+ constructor_name,
60
+ constructor_fn,
61
+ ) in dataset_registry.get_registered_constructors().items():
62
+ setattr(data_module, constructor_name, constructor_fn)
63
+ __all__.append(constructor_name)
64
+
65
+
66
+ _define_dataset_constructors_in_current_module()
67
+
68
+
69
+ def _define_dataset_sources_in_sources_module():
70
+ for source in get_registered_sources():
71
+ setattr(mlflow_data_sources, source.__name__, source)
72
+ mlflow_data_sources.__all__.append(source.__name__)
73
+
74
+
75
+ _define_dataset_sources_in_sources_module()
@@ -0,0 +1,170 @@
1
+ import re
2
+ import warnings
3
+ from pathlib import Path
4
+ from typing import Any, TypeVar
5
+ from urllib.parse import urlparse
6
+
7
+ from mlflow.artifacts import download_artifacts
8
+ from mlflow.exceptions import MlflowException
9
+ from mlflow.protos.databricks_pb2 import INVALID_PARAMETER_VALUE
10
+ from mlflow.store.artifact.artifact_repository_registry import get_registered_artifact_repositories
11
+ from mlflow.utils.uri import is_local_uri
12
+
13
+
14
+ def register_artifact_dataset_sources():
15
+ from mlflow.data.dataset_source_registry import register_dataset_source
16
+
17
+ registered_source_schemes = set()
18
+ artifact_schemes_to_exclude = [
19
+ "http",
20
+ "https",
21
+ "runs",
22
+ "models",
23
+ "mlflow-artifacts",
24
+ # DBFS supports two access patterns: dbfs:/ (URI) and /dbfs (FUSE).
25
+ # The DBFS artifact repository online supports dbfs:/ (URI). To ensure
26
+ # a consistent dictionary representation of DBFS datasets across the URI and
27
+ # FUSE representations, we exclude dbfs from the set of dataset sources
28
+ # that are autogenerated using artifact repositories and instead define
29
+ # a separate DBFSDatasetSource elsewhere
30
+ "dbfs",
31
+ ]
32
+ schemes_to_artifact_repos = get_registered_artifact_repositories()
33
+ for scheme, artifact_repo in schemes_to_artifact_repos.items():
34
+ if scheme in artifact_schemes_to_exclude or scheme in registered_source_schemes:
35
+ continue
36
+
37
+ if "ArtifactRepository" in artifact_repo.__name__:
38
+ # Artifact repository name is something like "LocalArtifactRepository",
39
+ # "S3ArtifactRepository", etc. To preserve capitalization, strip ArtifactRepository
40
+ # and replace it with ArtifactDatasetSource
41
+ dataset_source_name = artifact_repo.__name__.replace(
42
+ "ArtifactRepository", "ArtifactDatasetSource"
43
+ )
44
+ else:
45
+ # Artifact repository name has some other form, e.g. "dbfs_artifact_repo_factory".
46
+ # In this case, generate the name by capitalizing the first letter of the scheme and
47
+ # appending ArtifactRepository
48
+ scheme = str(scheme)
49
+
50
+ def camelcase_scheme(scheme):
51
+ parts = re.split(r"[-_]", scheme)
52
+ return "".join([part.capitalize() for part in parts])
53
+
54
+ source_name_prefix = camelcase_scheme(scheme)
55
+ dataset_source_name = source_name_prefix + "ArtifactDatasetSource"
56
+
57
+ try:
58
+ registered_source_schemes.add(scheme)
59
+ dataset_source = _create_dataset_source_for_artifact_repo(
60
+ scheme=scheme, dataset_source_name=dataset_source_name
61
+ )
62
+ register_dataset_source(dataset_source)
63
+ except Exception as e:
64
+ warnings.warn(
65
+ f"Failed to register a dataset source for URIs with scheme '{scheme}': {e}",
66
+ stacklevel=2,
67
+ )
68
+
69
+
70
+ def _create_dataset_source_for_artifact_repo(scheme: str, dataset_source_name: str):
71
+ from mlflow.data.filesystem_dataset_source import FileSystemDatasetSource
72
+
73
+ if scheme in ["", "file"]:
74
+ source_type = "local"
75
+ class_docstring = "Represents the source of a dataset stored on the local filesystem."
76
+ else:
77
+ source_type = scheme
78
+ class_docstring = (
79
+ f"Represents a filesystem-based or blob-storage-based dataset source identified by a"
80
+ f" URI with scheme '{scheme}'."
81
+ )
82
+
83
+ DatasetForArtifactRepoSourceType = TypeVar(dataset_source_name)
84
+
85
+ class ArtifactRepoSource(FileSystemDatasetSource):
86
+ def __init__(self, uri: str):
87
+ self._uri = uri
88
+
89
+ @property
90
+ def uri(self):
91
+ """
92
+ The URI with scheme '{scheme}' referring to the dataset source filesystem location.
93
+
94
+ Returns
95
+ The URI with scheme '{scheme}' referring to the dataset source filesystem
96
+ location.
97
+ """
98
+ return self._uri
99
+
100
+ @staticmethod
101
+ def _get_source_type() -> str:
102
+ return source_type
103
+
104
+ def load(self, dst_path=None) -> str:
105
+ """
106
+ Downloads the dataset source to the local filesystem.
107
+
108
+ Args:
109
+ dst_path: Path of the local filesystem destination directory to which to download
110
+ the dataset source. If the directory does not exist, it is created. If
111
+ unspecified, the dataset source is downloaded to a new uniquely-named
112
+ directory on the local filesystem, unless the dataset source already
113
+ exists on the local filesystem, in which case its local path is
114
+ returned directly.
115
+
116
+ Returns:
117
+ The path to the downloaded dataset source on the local filesystem.
118
+ """
119
+ return download_artifacts(artifact_uri=self.uri, dst_path=dst_path)
120
+
121
+ @staticmethod
122
+ def _can_resolve(raw_source: Any):
123
+ is_local_source_type = ArtifactRepoSource._get_source_type() == "local"
124
+
125
+ if not isinstance(raw_source, str) and (
126
+ not isinstance(raw_source, Path) and is_local_source_type
127
+ ):
128
+ return False
129
+
130
+ try:
131
+ if is_local_source_type:
132
+ return is_local_uri(str(raw_source), is_tracking_or_registry_uri=False)
133
+ else:
134
+ parsed_source = urlparse(str(raw_source))
135
+ return parsed_source.scheme == scheme
136
+ except Exception:
137
+ return False
138
+
139
+ @classmethod
140
+ def _resolve(cls, raw_source: Any) -> DatasetForArtifactRepoSourceType:
141
+ return cls(str(raw_source))
142
+
143
+ def to_dict(self) -> dict[Any, Any]:
144
+ """
145
+ Returns:
146
+ A JSON-compatible dictionary representation of the {dataset_source_name}.
147
+ """
148
+ return {
149
+ "uri": self.uri,
150
+ }
151
+
152
+ @classmethod
153
+ def from_dict(cls, source_dict: dict[Any, Any]) -> DatasetForArtifactRepoSourceType:
154
+ uri = source_dict.get("uri")
155
+ if uri is None:
156
+ raise MlflowException(
157
+ f'Failed to parse {dataset_source_name}. Missing expected key: "uri"',
158
+ INVALID_PARAMETER_VALUE,
159
+ )
160
+
161
+ return cls(uri=uri)
162
+
163
+ ArtifactRepoSource.__name__ = dataset_source_name
164
+ ArtifactRepoSource.__qualname__ = dataset_source_name
165
+ ArtifactRepoSource.__doc__ = class_docstring
166
+ ArtifactRepoSource.to_dict.__doc__ = ArtifactRepoSource.to_dict.__doc__.format(
167
+ dataset_source_name=dataset_source_name
168
+ )
169
+ ArtifactRepoSource.uri.__doc__ = ArtifactRepoSource.uri.__doc__.format(scheme=scheme)
170
+ return ArtifactRepoSource