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