MindsDB 25.4.5.0__py3-none-any.whl → 25.5.4.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.

Potentially problematic release.


This version of MindsDB might be problematic. Click here for more details.

Files changed (350) hide show
  1. mindsdb/__about__.py +1 -1
  2. mindsdb/__main__.py +215 -185
  3. mindsdb/api/a2a/__init__.py +0 -0
  4. mindsdb/api/a2a/__main__.py +114 -0
  5. mindsdb/api/a2a/a2a_client.py +439 -0
  6. mindsdb/api/a2a/agent.py +308 -0
  7. mindsdb/api/a2a/common/__init__.py +0 -0
  8. mindsdb/api/a2a/common/client/__init__.py +4 -0
  9. mindsdb/api/a2a/common/client/card_resolver.py +21 -0
  10. mindsdb/api/a2a/common/client/client.py +86 -0
  11. mindsdb/api/a2a/common/server/__init__.py +4 -0
  12. mindsdb/api/a2a/common/server/server.py +164 -0
  13. mindsdb/api/a2a/common/server/task_manager.py +287 -0
  14. mindsdb/api/a2a/common/server/utils.py +28 -0
  15. mindsdb/api/a2a/common/types.py +365 -0
  16. mindsdb/api/a2a/constants.py +9 -0
  17. mindsdb/api/a2a/run_a2a.py +129 -0
  18. mindsdb/api/a2a/task_manager.py +594 -0
  19. mindsdb/api/executor/command_executor.py +49 -28
  20. mindsdb/api/executor/datahub/classes/response.py +5 -2
  21. mindsdb/api/executor/datahub/datanodes/information_schema_datanode.py +8 -0
  22. mindsdb/api/executor/datahub/datanodes/integration_datanode.py +39 -72
  23. mindsdb/api/executor/datahub/datanodes/system_tables.py +10 -13
  24. mindsdb/api/executor/planner/query_planner.py +14 -2
  25. mindsdb/api/executor/sql_query/result_set.py +185 -52
  26. mindsdb/api/executor/sql_query/sql_query.py +1 -1
  27. mindsdb/api/executor/sql_query/steps/apply_predictor_step.py +11 -13
  28. mindsdb/api/executor/sql_query/steps/fetch_dataframe.py +8 -10
  29. mindsdb/api/executor/sql_query/steps/fetch_dataframe_partition.py +5 -44
  30. mindsdb/api/executor/sql_query/steps/insert_step.py +24 -15
  31. mindsdb/api/executor/sql_query/steps/join_step.py +1 -1
  32. mindsdb/api/executor/sql_query/steps/project_step.py +1 -1
  33. mindsdb/api/executor/sql_query/steps/sql_steps.py +1 -1
  34. mindsdb/api/executor/sql_query/steps/subselect_step.py +4 -8
  35. mindsdb/api/executor/sql_query/steps/union_step.py +1 -3
  36. mindsdb/api/http/initialize.py +118 -85
  37. mindsdb/api/http/namespaces/analysis.py +17 -4
  38. mindsdb/api/http/namespaces/file.py +8 -2
  39. mindsdb/api/http/namespaces/sql.py +13 -27
  40. mindsdb/api/http/namespaces/tree.py +1 -1
  41. mindsdb/api/http/start.py +7 -2
  42. mindsdb/api/mcp/start.py +42 -5
  43. mindsdb/api/mysql/mysql_proxy/data_types/mysql_packet.py +0 -1
  44. mindsdb/api/mysql/mysql_proxy/data_types/mysql_packets/binary_resultset_row_package.py +52 -19
  45. mindsdb/api/mysql/mysql_proxy/executor/mysql_executor.py +8 -10
  46. mindsdb/api/mysql/mysql_proxy/libs/constants/mysql.py +54 -38
  47. mindsdb/api/mysql/mysql_proxy/mysql_proxy.py +86 -123
  48. mindsdb/api/mysql/mysql_proxy/utilities/dump.py +351 -0
  49. mindsdb/api/mysql/mysql_proxy/utilities/exceptions.py +0 -4
  50. mindsdb/api/postgres/postgres_proxy/executor/executor.py +1 -1
  51. mindsdb/api/postgres/postgres_proxy/postgres_packets/postgres_message_formats.py +2 -2
  52. mindsdb/api/postgres/postgres_proxy/postgres_proxy.py +5 -6
  53. mindsdb/integrations/handlers/altibase_handler/altibase_handler.py +26 -27
  54. mindsdb/integrations/handlers/altibase_handler/connection_args.py +13 -13
  55. mindsdb/integrations/handlers/altibase_handler/tests/test_altibase_handler.py +8 -8
  56. mindsdb/integrations/handlers/altibase_handler/tests/test_altibase_handler_dsn.py +13 -13
  57. mindsdb/integrations/handlers/anthropic_handler/__init__.py +2 -2
  58. mindsdb/integrations/handlers/anthropic_handler/anthropic_handler.py +1 -3
  59. mindsdb/integrations/handlers/aurora_handler/aurora_handler.py +1 -0
  60. mindsdb/integrations/handlers/autosklearn_handler/autosklearn_handler.py +1 -1
  61. mindsdb/integrations/handlers/autosklearn_handler/config.py +0 -1
  62. mindsdb/integrations/handlers/bigquery_handler/bigquery_handler.py +1 -1
  63. mindsdb/integrations/handlers/bigquery_handler/requirements.txt +1 -0
  64. mindsdb/integrations/handlers/bigquery_handler/tests/test_bigquery_handler.py +1 -1
  65. mindsdb/integrations/handlers/binance_handler/binance_handler.py +1 -0
  66. mindsdb/integrations/handlers/binance_handler/binance_tables.py +3 -4
  67. mindsdb/integrations/handlers/byom_handler/__init__.py +0 -1
  68. mindsdb/integrations/handlers/chromadb_handler/requirements.txt +1 -0
  69. mindsdb/integrations/handlers/ckan_handler/ckan_handler.py +3 -0
  70. mindsdb/integrations/handlers/clickhouse_handler/__init__.py +1 -1
  71. mindsdb/integrations/handlers/cloud_spanner_handler/tests/test_cloud_spanner_handler.py +0 -2
  72. mindsdb/integrations/handlers/cloud_sql_handler/cloud_sql_handler.py +0 -1
  73. mindsdb/integrations/handlers/cohere_handler/__init__.py +1 -1
  74. mindsdb/integrations/handlers/cohere_handler/cohere_handler.py +11 -13
  75. mindsdb/integrations/handlers/confluence_handler/confluence_tables.py +6 -0
  76. mindsdb/integrations/handlers/databend_handler/connection_args.py +1 -1
  77. mindsdb/integrations/handlers/databend_handler/databend_handler.py +4 -4
  78. mindsdb/integrations/handlers/databend_handler/tests/__init__.py +0 -1
  79. mindsdb/integrations/handlers/databend_handler/tests/test_databend_handler.py +1 -1
  80. mindsdb/integrations/handlers/derby_handler/connection_args.py +1 -1
  81. mindsdb/integrations/handlers/derby_handler/derby_handler.py +14 -22
  82. mindsdb/integrations/handlers/derby_handler/tests/test_derby_handler.py +6 -6
  83. mindsdb/integrations/handlers/discord_handler/discord_handler.py +5 -5
  84. mindsdb/integrations/handlers/discord_handler/discord_tables.py +3 -3
  85. mindsdb/integrations/handlers/discord_handler/tests/test_discord.py +5 -3
  86. mindsdb/integrations/handlers/dockerhub_handler/dockerhub.py +3 -3
  87. mindsdb/integrations/handlers/dockerhub_handler/dockerhub_handler.py +2 -2
  88. mindsdb/integrations/handlers/dockerhub_handler/dockerhub_tables.py +57 -54
  89. mindsdb/integrations/handlers/dremio_handler/__init__.py +2 -2
  90. mindsdb/integrations/handlers/druid_handler/__init__.py +1 -1
  91. mindsdb/integrations/handlers/druid_handler/druid_handler.py +2 -2
  92. mindsdb/integrations/handlers/edgelessdb_handler/tests/test_edgelessdb_handler.py +9 -9
  93. mindsdb/integrations/handlers/email_handler/email_client.py +1 -1
  94. mindsdb/integrations/handlers/email_handler/email_ingestor.py +1 -1
  95. mindsdb/integrations/handlers/email_handler/email_tables.py +0 -1
  96. mindsdb/integrations/handlers/email_handler/settings.py +0 -1
  97. mindsdb/integrations/handlers/eventstoredb_handler/eventstoredb_handler.py +2 -1
  98. mindsdb/integrations/handlers/firebird_handler/firebird_handler.py +1 -1
  99. mindsdb/integrations/handlers/flaml_handler/flaml_handler.py +9 -9
  100. mindsdb/integrations/handlers/frappe_handler/frappe_client.py +5 -5
  101. mindsdb/integrations/handlers/frappe_handler/frappe_handler.py +6 -5
  102. mindsdb/integrations/handlers/frappe_handler/frappe_tables.py +2 -2
  103. mindsdb/integrations/handlers/github_handler/connection_args.py +2 -2
  104. mindsdb/integrations/handlers/github_handler/github_handler.py +1 -8
  105. mindsdb/integrations/handlers/github_handler/github_tables.py +13 -24
  106. mindsdb/integrations/handlers/gitlab_handler/gitlab_handler.py +2 -1
  107. mindsdb/integrations/handlers/gitlab_handler/gitlab_tables.py +1 -4
  108. mindsdb/integrations/handlers/gmail_handler/gmail_handler.py +6 -13
  109. mindsdb/integrations/handlers/gmail_handler/requirements.txt +1 -0
  110. mindsdb/integrations/handlers/google_analytics_handler/requirements.txt +2 -1
  111. mindsdb/integrations/handlers/google_books_handler/google_books_handler.py +2 -1
  112. mindsdb/integrations/handlers/google_books_handler/google_books_tables.py +0 -3
  113. mindsdb/integrations/handlers/google_books_handler/requirements.txt +1 -1
  114. mindsdb/integrations/handlers/google_calendar_handler/google_calendar_handler.py +4 -4
  115. mindsdb/integrations/handlers/google_calendar_handler/google_calendar_tables.py +2 -6
  116. mindsdb/integrations/handlers/google_calendar_handler/requirements.txt +1 -0
  117. mindsdb/integrations/handlers/google_content_shopping_handler/google_content_shopping_handler.py +3 -2
  118. mindsdb/integrations/handlers/google_content_shopping_handler/google_content_shopping_tables.py +0 -3
  119. mindsdb/integrations/handlers/google_content_shopping_handler/requirements.txt +1 -1
  120. mindsdb/integrations/handlers/google_fit_handler/google_fit_handler.py +10 -12
  121. mindsdb/integrations/handlers/google_fit_handler/google_fit_tables.py +11 -13
  122. mindsdb/integrations/handlers/google_fit_handler/requirements.txt +2 -0
  123. mindsdb/integrations/handlers/google_search_handler/google_search_handler.py +2 -1
  124. mindsdb/integrations/handlers/google_search_handler/google_search_tables.py +0 -3
  125. mindsdb/integrations/handlers/google_search_handler/requirements.txt +1 -1
  126. mindsdb/integrations/handlers/groq_handler/__init__.py +3 -3
  127. mindsdb/integrations/handlers/hackernews_handler/hn_handler.py +5 -7
  128. mindsdb/integrations/handlers/hackernews_handler/hn_table.py +6 -7
  129. mindsdb/integrations/handlers/hive_handler/tests/test_hive_handler.py +1 -1
  130. mindsdb/integrations/handlers/hsqldb_handler/connection_args.py +6 -6
  131. mindsdb/integrations/handlers/hsqldb_handler/hsqldb_handler.py +4 -3
  132. mindsdb/integrations/handlers/huggingface_api_handler/exceptions.py +1 -1
  133. mindsdb/integrations/handlers/huggingface_api_handler/huggingface_api_handler.py +1 -8
  134. mindsdb/integrations/handlers/huggingface_handler/huggingface_handler.py +6 -6
  135. mindsdb/integrations/handlers/huggingface_handler/requirements.txt +1 -1
  136. mindsdb/integrations/handlers/huggingface_handler/requirements_cpu.txt +1 -1
  137. mindsdb/integrations/handlers/ignite_handler/ignite_handler.py +2 -1
  138. mindsdb/integrations/handlers/impala_handler/impala_handler.py +9 -12
  139. mindsdb/integrations/handlers/impala_handler/tests/test_impala_handler.py +11 -11
  140. mindsdb/integrations/handlers/influxdb_handler/influxdb_handler.py +10 -13
  141. mindsdb/integrations/handlers/influxdb_handler/influxdb_tables.py +20 -20
  142. mindsdb/integrations/handlers/informix_handler/__about__.py +8 -8
  143. mindsdb/integrations/handlers/informix_handler/__init__.py +12 -5
  144. mindsdb/integrations/handlers/informix_handler/informix_handler.py +99 -133
  145. mindsdb/integrations/handlers/informix_handler/tests/test_informix_handler.py +13 -11
  146. mindsdb/integrations/handlers/ingres_handler/__about__.py +0 -1
  147. mindsdb/integrations/handlers/ingres_handler/ingres_handler.py +1 -0
  148. mindsdb/integrations/handlers/jira_handler/jira_handler.archived.py +75 -0
  149. mindsdb/integrations/handlers/jira_handler/jira_handler.py +113 -38
  150. mindsdb/integrations/handlers/jira_handler/jira_tables.py +229 -0
  151. mindsdb/integrations/handlers/jira_handler/requirements.txt +1 -0
  152. mindsdb/integrations/handlers/kinetica_handler/__init__.py +0 -1
  153. mindsdb/integrations/handlers/langchain_handler/langchain_handler.py +4 -4
  154. mindsdb/integrations/handlers/langchain_handler/tools.py +9 -10
  155. mindsdb/integrations/handlers/leonardoai_handler/__init__.py +1 -1
  156. mindsdb/integrations/handlers/lightfm_handler/requirements.txt +1 -0
  157. mindsdb/integrations/handlers/lightwood_handler/functions.py +2 -2
  158. mindsdb/integrations/handlers/lightwood_handler/lightwood_handler.py +0 -3
  159. mindsdb/integrations/handlers/lightwood_handler/requirements.txt +4 -4
  160. mindsdb/integrations/handlers/lightwood_handler/tests/test_lightwood_handler.py +11 -11
  161. mindsdb/integrations/handlers/lindorm_handler/requirements.txt +1 -0
  162. mindsdb/integrations/handlers/llama_index_handler/llama_index_handler.py +4 -4
  163. mindsdb/integrations/handlers/llama_index_handler/settings.py +10 -9
  164. mindsdb/integrations/handlers/materialize_handler/tests/test_materialize_handler.py +8 -10
  165. mindsdb/integrations/handlers/matrixone_handler/matrixone_handler.py +4 -4
  166. mindsdb/integrations/handlers/matrixone_handler/tests/test_matrixone_handler.py +8 -9
  167. mindsdb/integrations/handlers/maxdb_handler/connection_args.py +25 -25
  168. mindsdb/integrations/handlers/maxdb_handler/maxdb_handler.py +1 -0
  169. mindsdb/integrations/handlers/mediawiki_handler/mediawiki_handler.py +3 -2
  170. mindsdb/integrations/handlers/mediawiki_handler/mediawiki_tables.py +1 -1
  171. mindsdb/integrations/handlers/mendeley_handler/__about__.py +1 -1
  172. mindsdb/integrations/handlers/mendeley_handler/__init__.py +2 -2
  173. mindsdb/integrations/handlers/mendeley_handler/mendeley_handler.py +48 -56
  174. mindsdb/integrations/handlers/mendeley_handler/mendeley_tables.py +24 -29
  175. mindsdb/integrations/handlers/mendeley_handler/tests/test_mendeley_handler.py +19 -17
  176. mindsdb/integrations/handlers/merlion_handler/merlion_handler.py +5 -4
  177. mindsdb/integrations/handlers/minds_endpoint_handler/__init__.py +3 -3
  178. mindsdb/integrations/handlers/mlflow_handler/mlflow_handler.py +58 -36
  179. mindsdb/integrations/handlers/monetdb_handler/__about__.py +8 -8
  180. mindsdb/integrations/handlers/monetdb_handler/__init__.py +15 -5
  181. mindsdb/integrations/handlers/monetdb_handler/connection_args.py +17 -18
  182. mindsdb/integrations/handlers/monetdb_handler/monetdb_handler.py +40 -57
  183. mindsdb/integrations/handlers/monetdb_handler/tests/test_monetdb_handler.py +7 -8
  184. mindsdb/integrations/handlers/monetdb_handler/utils/monet_get_id.py +13 -14
  185. mindsdb/integrations/handlers/monkeylearn_handler/__about__.py +1 -1
  186. mindsdb/integrations/handlers/monkeylearn_handler/__init__.py +1 -1
  187. mindsdb/integrations/handlers/monkeylearn_handler/monkeylearn_handler.py +2 -5
  188. mindsdb/integrations/handlers/ms_one_drive_handler/ms_graph_api_one_drive_client.py +1 -0
  189. mindsdb/integrations/handlers/ms_one_drive_handler/ms_one_drive_handler.py +1 -1
  190. mindsdb/integrations/handlers/ms_one_drive_handler/requirements.txt +2 -0
  191. mindsdb/integrations/handlers/ms_teams_handler/ms_graph_api_teams_client.py +23 -23
  192. mindsdb/integrations/handlers/ms_teams_handler/ms_teams_handler.py +3 -3
  193. mindsdb/integrations/handlers/ms_teams_handler/ms_teams_tables.py +10 -5
  194. mindsdb/integrations/handlers/ms_teams_handler/requirements.txt +3 -1
  195. mindsdb/integrations/handlers/mssql_handler/mssql_handler.py +73 -8
  196. mindsdb/integrations/handlers/mysql_handler/__about__.py +8 -8
  197. mindsdb/integrations/handlers/mysql_handler/__init__.py +15 -5
  198. mindsdb/integrations/handlers/mysql_handler/connection_args.py +43 -47
  199. mindsdb/integrations/handlers/mysql_handler/mysql_handler.py +101 -34
  200. mindsdb/integrations/handlers/mysql_handler/settings.py +15 -13
  201. mindsdb/integrations/handlers/neuralforecast_handler/neuralforecast_handler.py +1 -1
  202. mindsdb/integrations/handlers/newsapi_handler/newsapi_handler.py +1 -1
  203. mindsdb/integrations/handlers/newsapi_handler/tests/test_newsapi_handler.py +4 -4
  204. mindsdb/integrations/handlers/nuo_jdbc_handler/connection_args.py +2 -2
  205. mindsdb/integrations/handlers/nuo_jdbc_handler/nuo_jdbc_handler.py +28 -36
  206. mindsdb/integrations/handlers/nuo_jdbc_handler/tests/test_nuo_handler.py +5 -5
  207. mindsdb/integrations/handlers/oceanbase_handler/oceanbase_handler.py +0 -1
  208. mindsdb/integrations/handlers/oceanbase_handler/tests/test_oceanbase_handler.py +8 -10
  209. mindsdb/integrations/handlers/ollama_handler/ollama_handler.py +3 -3
  210. mindsdb/integrations/handlers/openai_handler/openai_handler.py +5 -4
  211. mindsdb/integrations/handlers/opengauss_handler/tests/test_opengauss_handler.py +1 -2
  212. mindsdb/integrations/handlers/openstreetmap_handler/__init__.py +7 -7
  213. mindsdb/integrations/handlers/oracle_handler/connection_args.py +6 -0
  214. mindsdb/integrations/handlers/oracle_handler/oracle_handler.py +77 -11
  215. mindsdb/integrations/handlers/orioledb_handler/tests/test_orioledb_handler.py +8 -10
  216. mindsdb/integrations/handlers/palm_handler/__about__.py +1 -1
  217. mindsdb/integrations/handlers/palm_handler/__init__.py +1 -1
  218. mindsdb/integrations/handlers/palm_handler/palm_handler.py +1 -3
  219. mindsdb/integrations/handlers/paypal_handler/paypal_handler.py +2 -2
  220. mindsdb/integrations/handlers/paypal_handler/paypal_tables.py +15 -14
  221. mindsdb/integrations/handlers/pgvector_handler/pgvector_handler.py +53 -10
  222. mindsdb/integrations/handlers/phoenix_handler/__init__.py +1 -1
  223. mindsdb/integrations/handlers/phoenix_handler/phoenix_handler.py +1 -0
  224. mindsdb/integrations/handlers/pinot_handler/__init__.py +1 -1
  225. mindsdb/integrations/handlers/pinot_handler/pinot_handler.py +3 -2
  226. mindsdb/integrations/handlers/plaid_handler/plaid_handler.py +13 -13
  227. mindsdb/integrations/handlers/plaid_handler/plaid_tables.py +10 -12
  228. mindsdb/integrations/handlers/plaid_handler/utils.py +4 -6
  229. mindsdb/integrations/handlers/planetscale_handler/planetscale_handler.py +1 -4
  230. mindsdb/integrations/handlers/portkey_handler/__init__.py +2 -2
  231. mindsdb/integrations/handlers/postgres_handler/postgres_handler.py +105 -24
  232. mindsdb/integrations/handlers/postgres_handler/tests/test_postgres_handler.py +11 -6
  233. mindsdb/integrations/handlers/questdb_handler/questdb_handler.py +1 -2
  234. mindsdb/integrations/handlers/questdb_handler/tests/test_questdb_handler.py +2 -3
  235. mindsdb/integrations/handlers/quickbooks_handler/quickbooks_handler.py +6 -8
  236. mindsdb/integrations/handlers/quickbooks_handler/quickbooks_table.py +10 -10
  237. mindsdb/integrations/handlers/rag_handler/ingest.py +2 -2
  238. mindsdb/integrations/handlers/rag_handler/rag_handler.py +1 -1
  239. mindsdb/integrations/handlers/rag_handler/settings.py +1 -1
  240. mindsdb/integrations/handlers/reddit_handler/reddit_handler.py +2 -7
  241. mindsdb/integrations/handlers/reddit_handler/reddit_tables.py +2 -3
  242. mindsdb/integrations/handlers/replicate_handler/replicate_handler.py +6 -6
  243. mindsdb/integrations/handlers/rocket_chat_handler/rocket_chat_handler.py +1 -2
  244. mindsdb/integrations/handlers/rocket_chat_handler/rocket_chat_tables.py +0 -3
  245. mindsdb/integrations/handlers/rockset_handler/connection_args.py +14 -14
  246. mindsdb/integrations/handlers/rockset_handler/tests/test_rockset_handler.py +1 -0
  247. mindsdb/integrations/handlers/scylla_handler/scylla_handler.py +6 -5
  248. mindsdb/integrations/handlers/sendinblue_handler/sendinblue_handler.py +2 -1
  249. mindsdb/integrations/handlers/sendinblue_handler/sendinblue_tables.py +16 -16
  250. mindsdb/integrations/handlers/sentence_transformers_handler/__init__.py +1 -1
  251. mindsdb/integrations/handlers/sheets_handler/connection_args.py +1 -1
  252. mindsdb/integrations/handlers/shopify_handler/shopify_handler.py +7 -6
  253. mindsdb/integrations/handlers/shopify_handler/shopify_tables.py +38 -41
  254. mindsdb/integrations/handlers/singlestore_handler/__about__.py +1 -1
  255. mindsdb/integrations/handlers/singlestore_handler/__init__.py +0 -1
  256. mindsdb/integrations/handlers/singlestore_handler/singlestore_handler.py +1 -0
  257. mindsdb/integrations/handlers/singlestore_handler/tests/test_singlestore_handler.py +3 -3
  258. mindsdb/integrations/handlers/slack_handler/__init__.py +3 -3
  259. mindsdb/integrations/handlers/snowflake_handler/requirements.txt +1 -1
  260. mindsdb/integrations/handlers/snowflake_handler/snowflake_handler.py +100 -6
  261. mindsdb/integrations/handlers/solr_handler/connection_args.py +7 -7
  262. mindsdb/integrations/handlers/solr_handler/solr_handler.py +2 -1
  263. mindsdb/integrations/handlers/solr_handler/tests/test_solr_handler.py +2 -1
  264. mindsdb/integrations/handlers/sqlany_handler/sqlany_handler.py +3 -2
  265. mindsdb/integrations/handlers/sqlite_handler/sqlite_handler.py +1 -0
  266. mindsdb/integrations/handlers/sqreamdb_handler/connection_args.py +1 -1
  267. mindsdb/integrations/handlers/sqreamdb_handler/sqreamdb_handler.py +15 -20
  268. mindsdb/integrations/handlers/sqreamdb_handler/tests/test_sqreamdb_handler.py +4 -4
  269. mindsdb/integrations/handlers/stabilityai_handler/__init__.py +1 -1
  270. mindsdb/integrations/handlers/starrocks_handler/starrocks_handler.py +0 -1
  271. mindsdb/integrations/handlers/starrocks_handler/tests/test_starrocks_handler.py +8 -10
  272. mindsdb/integrations/handlers/statsforecast_handler/statsforecast_handler.py +2 -2
  273. mindsdb/integrations/handlers/strava_handler/strava_handler.py +4 -8
  274. mindsdb/integrations/handlers/strava_handler/strava_tables.py +22 -30
  275. mindsdb/integrations/handlers/stripe_handler/stripe_handler.py +3 -2
  276. mindsdb/integrations/handlers/stripe_handler/stripe_tables.py +11 -27
  277. mindsdb/integrations/handlers/supabase_handler/tests/test_supabase_handler.py +1 -1
  278. mindsdb/integrations/handlers/surrealdb_handler/surrealdb_handler.py +4 -4
  279. mindsdb/integrations/handlers/tdengine_handler/tdengine_handler.py +25 -27
  280. mindsdb/integrations/handlers/tdengine_handler/tests/test_tdengine_handler.py +8 -8
  281. mindsdb/integrations/handlers/tidb_handler/tests/test_tidb_handler.py +1 -2
  282. mindsdb/integrations/handlers/timegpt_handler/timegpt_handler.py +5 -5
  283. mindsdb/integrations/handlers/tpot_handler/tpot_handler.py +21 -26
  284. mindsdb/integrations/handlers/trino_handler/trino_handler.py +14 -14
  285. mindsdb/integrations/handlers/twitter_handler/twitter_handler.py +2 -4
  286. mindsdb/integrations/handlers/unify_handler/tests/test_unify_handler.py +7 -8
  287. mindsdb/integrations/handlers/unify_handler/unify_handler.py +9 -9
  288. mindsdb/integrations/handlers/vertex_handler/requirements.txt +1 -0
  289. mindsdb/integrations/handlers/vertex_handler/vertex_client.py +1 -1
  290. mindsdb/integrations/handlers/vertica_handler/tests/test_vertica_handler.py +11 -11
  291. mindsdb/integrations/handlers/vertica_handler/vertica_handler.py +11 -14
  292. mindsdb/integrations/handlers/vitess_handler/tests/test_vitess_handler.py +9 -11
  293. mindsdb/integrations/handlers/vitess_handler/vitess_handler.py +0 -1
  294. mindsdb/integrations/handlers/web_handler/web_handler.py +1 -0
  295. mindsdb/integrations/handlers/whatsapp_handler/__init__.py +3 -3
  296. mindsdb/integrations/handlers/writer_handler/evaluate.py +1 -1
  297. mindsdb/integrations/handlers/writer_handler/settings.py +0 -1
  298. mindsdb/integrations/handlers/writer_handler/writer_handler.py +1 -0
  299. mindsdb/integrations/handlers/youtube_handler/requirements.txt +1 -0
  300. mindsdb/integrations/handlers/youtube_handler/youtube_handler.py +5 -5
  301. mindsdb/integrations/handlers/youtube_handler/youtube_tables.py +26 -27
  302. mindsdb/integrations/handlers/yugabyte_handler/tests/test_yugabyte_handler.py +3 -3
  303. mindsdb/integrations/handlers/yugabyte_handler/yugabyte_handler.py +0 -6
  304. mindsdb/integrations/libs/response.py +67 -52
  305. mindsdb/integrations/libs/vectordatabase_handler.py +6 -0
  306. mindsdb/integrations/utilities/files/file_reader.py +5 -2
  307. mindsdb/integrations/utilities/handler_utils.py +15 -3
  308. mindsdb/integrations/utilities/handlers/api_utilities/__init__.py +0 -1
  309. mindsdb/integrations/utilities/handlers/auth_utilities/__init__.py +0 -2
  310. mindsdb/integrations/utilities/utils.py +3 -3
  311. mindsdb/interfaces/agents/agents_controller.py +164 -1
  312. mindsdb/interfaces/agents/constants.py +29 -2
  313. mindsdb/interfaces/agents/langchain_agent.py +18 -8
  314. mindsdb/interfaces/agents/mindsdb_database_agent.py +101 -2
  315. mindsdb/interfaces/database/projects.py +1 -7
  316. mindsdb/interfaces/functions/controller.py +11 -14
  317. mindsdb/interfaces/functions/to_markdown.py +9 -124
  318. mindsdb/interfaces/knowledge_base/controller.py +47 -19
  319. mindsdb/interfaces/knowledge_base/preprocessing/document_preprocessor.py +41 -15
  320. mindsdb/interfaces/knowledge_base/preprocessing/json_chunker.py +434 -0
  321. mindsdb/interfaces/knowledge_base/preprocessing/models.py +54 -0
  322. mindsdb/interfaces/knowledge_base/utils.py +10 -15
  323. mindsdb/interfaces/model/model_controller.py +0 -2
  324. mindsdb/interfaces/query_context/context_controller.py +66 -10
  325. mindsdb/interfaces/skills/custom/text2sql/mindsdb_kb_tools.py +190 -0
  326. mindsdb/interfaces/skills/custom/text2sql/mindsdb_sql_toolkit.py +92 -0
  327. mindsdb/interfaces/skills/skill_tool.py +202 -57
  328. mindsdb/interfaces/skills/sql_agent.py +238 -28
  329. mindsdb/interfaces/storage/fs.py +1 -0
  330. mindsdb/interfaces/variables/__init__.py +0 -0
  331. mindsdb/interfaces/variables/variables_controller.py +97 -0
  332. mindsdb/migrations/env.py +5 -7
  333. mindsdb/migrations/migrate.py +47 -9
  334. mindsdb/migrations/versions/2025-05-21_9f150e4f9a05_checkpoint_1.py +360 -0
  335. mindsdb/utilities/config.py +333 -220
  336. mindsdb/utilities/context.py +1 -1
  337. mindsdb/utilities/functions.py +0 -36
  338. mindsdb/utilities/langfuse.py +19 -10
  339. mindsdb/utilities/otel/__init__.py +9 -193
  340. mindsdb/utilities/otel/metric_handlers/__init__.py +5 -1
  341. mindsdb/utilities/otel/prepare.py +198 -0
  342. mindsdb/utilities/sql.py +83 -0
  343. mindsdb/utilities/starters.py +13 -0
  344. {mindsdb-25.4.5.0.dist-info → mindsdb-25.5.4.0.dist-info}/METADATA +351 -338
  345. {mindsdb-25.4.5.0.dist-info → mindsdb-25.5.4.0.dist-info}/RECORD +348 -322
  346. {mindsdb-25.4.5.0.dist-info → mindsdb-25.5.4.0.dist-info}/WHEEL +1 -1
  347. mindsdb/api/mysql/mysql_proxy/classes/sql_statement_parser.py +0 -151
  348. mindsdb/integrations/handlers/monkeylearn_handler/requirements.txt +0 -1
  349. {mindsdb-25.4.5.0.dist-info → mindsdb-25.5.4.0.dist-info}/licenses/LICENSE +0 -0
  350. {mindsdb-25.4.5.0.dist-info → mindsdb-25.5.4.0.dist-info}/top_level.txt +0 -0
@@ -21,24 +21,17 @@ import sys
21
21
  import tempfile
22
22
  import traceback
23
23
  from functools import partial
24
- from typing import Dict, List, Optional
24
+ from typing import List
25
25
  from dataclasses import dataclass
26
26
 
27
- from numpy import dtype as np_dtype
28
- from pandas.api import types as pd_types
29
-
30
- from mindsdb.api.mysql.mysql_proxy.libs.constants.mysql import NULL_VALUE
31
27
  from mindsdb.api.mysql.mysql_proxy.data_types.mysql_datum import Datum
32
-
33
28
  import mindsdb.utilities.hooks as hooks
34
29
  import mindsdb.utilities.profiler as profiler
30
+ from mindsdb.utilities.sql import clear_sql
35
31
  from mindsdb.api.mysql.mysql_proxy.classes.client_capabilities import ClentCapabilities
36
32
  from mindsdb.api.mysql.mysql_proxy.classes.server_capabilities import (
37
33
  server_capabilities,
38
34
  )
39
- from mindsdb.api.mysql.mysql_proxy.classes.sql_statement_parser import (
40
- SqlStatementParser,
41
- )
42
35
  from mindsdb.api.executor.controllers import SessionController
43
36
  from mindsdb.api.mysql.mysql_proxy.data_types.mysql_packet import Packet
44
37
  from mindsdb.api.mysql.mysql_proxy.data_types.mysql_packets import (
@@ -63,14 +56,14 @@ from mindsdb.api.mysql.mysql_proxy.external_libs.mysql_scramble import (
63
56
  scramble as scramble_func,
64
57
  )
65
58
  from mindsdb.api.mysql.mysql_proxy.libs.constants.mysql import (
66
- CAPABILITIES,
59
+ DEFAULT_AUTH_METHOD,
67
60
  CHARSET_NUMBERS,
61
+ SERVER_STATUS,
62
+ CAPABILITIES,
63
+ NULL_VALUE,
68
64
  COMMANDS,
69
- DEFAULT_AUTH_METHOD,
70
65
  ERR,
71
- SERVER_STATUS,
72
- TYPES,
73
- getConstName,
66
+ getConstName
74
67
  )
75
68
  from mindsdb.api.executor.data_types.answer import ExecuteAnswer
76
69
  from mindsdb.api.executor.data_types.response_type import RESPONSE_TYPE
@@ -81,12 +74,14 @@ from mindsdb.api.mysql.mysql_proxy.utilities import (
81
74
  from mindsdb.api.executor import exceptions as exec_exc
82
75
 
83
76
  from mindsdb.api.common.check_auth import check_auth
84
- from mindsdb.api.mysql.mysql_proxy.utilities.lightwood_dtype import dtype
77
+ from mindsdb.api.mysql.mysql_proxy.libs.constants.mysql import MYSQL_DATA_TYPE
78
+ from mindsdb.api.executor.sql_query.result_set import Column, ResultSet
85
79
  from mindsdb.utilities import log
86
80
  from mindsdb.utilities.config import config
87
81
  from mindsdb.utilities.context import context as ctx
88
- from mindsdb.utilities.otel.metric_handlers import get_query_request_counter
82
+ from mindsdb.utilities.otel import increment_otel_query_request_counter
89
83
  from mindsdb.utilities.wizards import make_ssl_cert
84
+ from mindsdb.api.mysql.mysql_proxy.utilities.dump import dump_result_set_to_mysql, column_to_mysql_column_dict
90
85
 
91
86
  logger = log.getLogger(__name__)
92
87
 
@@ -98,18 +93,43 @@ def empty_fn():
98
93
  @dataclass
99
94
  class SQLAnswer:
100
95
  resp_type: RESPONSE_TYPE = RESPONSE_TYPE.OK
101
- columns: Optional[List[Dict]] = None
102
- data: Optional[List[Dict]] = None # resultSet ?
103
- status: Optional[int] = None
104
- state_track: Optional[List[List]] = None
105
- error_code: Optional[int] = None
106
- error_message: Optional[str] = None
107
- affected_rows: Optional[int] = None
96
+ result_set: ResultSet | None = None
97
+ status: int | None = None
98
+ state_track: List[List] | None = None
99
+ error_code: int | None = None
100
+ error_message: str | None = None
101
+ affected_rows: int | None = None
102
+ mysql_types: list[MYSQL_DATA_TYPE] | None = None
108
103
 
109
104
  @property
110
105
  def type(self):
111
106
  return self.resp_type
112
107
 
108
+ def dump_http_response(self) -> dict:
109
+ if self.resp_type == RESPONSE_TYPE.OK:
110
+ return {
111
+ "type": self.resp_type,
112
+ "affected_rows": self.affected_rows,
113
+ }
114
+ elif self.resp_type in (RESPONSE_TYPE.TABLE, RESPONSE_TYPE.COLUMNS_TABLE):
115
+ data = self.result_set.to_lists(json_types=True)
116
+ return {
117
+ "type": RESPONSE_TYPE.TABLE,
118
+ "data": data,
119
+ "column_names": [
120
+ column.alias or column.name
121
+ for column in self.result_set.columns
122
+ ],
123
+ }
124
+ elif self.resp_type == RESPONSE_TYPE.ERROR:
125
+ return {
126
+ "type": RESPONSE_TYPE.ERROR,
127
+ "error_code": self.error_code or 0,
128
+ "error_message": self.error_message,
129
+ }
130
+ else:
131
+ raise ValueError(f"Unsupported response type for dump HTTP response: {self.resp_type}")
132
+
113
133
 
114
134
  class MysqlProxy(SocketServer.BaseRequestHandler):
115
135
  """
@@ -312,14 +332,14 @@ class MysqlProxy(SocketServer.BaseRequestHandler):
312
332
  self.session.unregister_stmt(stmt_id)
313
333
 
314
334
  def send_query_answer(self, answer: SQLAnswer):
315
- if answer.type == RESPONSE_TYPE.TABLE:
335
+ if answer.type in (RESPONSE_TYPE.TABLE, RESPONSE_TYPE.COLUMNS_TABLE):
316
336
  packages = []
317
337
 
318
- if len(answer.data) > 1000:
338
+ if len(answer.result_set) > 1000:
319
339
  # for big responses leverage pandas map function to convert data to packages
320
- self.send_table_packets(columns=answer.columns, data=answer.data)
340
+ self.send_table_packets(result_set=answer.result_set)
321
341
  else:
322
- packages += self.get_table_packets(columns=answer.columns, data=answer.data.to_lists())
342
+ packages += self.get_table_packets(result_set=answer.result_set)
323
343
 
324
344
  if answer.status is not None:
325
345
  packages.append(self.last_packet(status=answer.status))
@@ -333,7 +353,7 @@ class MysqlProxy(SocketServer.BaseRequestHandler):
333
353
  ErrPacket, err_code=answer.error_code, msg=answer.error_message
334
354
  ).send()
335
355
 
336
- def _get_column_defenition_packets(self, columns, data=None, columns_len=None):
356
+ def _get_column_defenition_packets(self, columns: dict, data=None):
337
357
  if data is None:
338
358
  data = []
339
359
  packets = []
@@ -348,18 +368,16 @@ class MysqlProxy(SocketServer.BaseRequestHandler):
348
368
  column_name = column.get("name", "column_name")
349
369
  column_alias = column.get("alias", column_name)
350
370
  flags = column.get("flags", 0)
351
- if columns_len is not None:
352
- length = columns_len[i]
353
- else:
354
- if len(data) == 0:
355
- length = 0xFFFF
356
- else:
357
- length = 1
358
- for row in data:
359
- if isinstance(row, dict):
360
- length = max(len(str(row[column_alias])), length)
361
- else:
362
- length = max(len(str(row[i])), length)
371
+ if isinstance(flags, list):
372
+ flags = sum(flags)
373
+ if column.get('size') is None:
374
+ length = 1
375
+ for row in data:
376
+ if isinstance(row, dict):
377
+ length = max(len(str(row[column_alias])), length)
378
+ else:
379
+ length = max(len(str(row[i])), length)
380
+ column['size'] = 1
363
381
 
364
382
  packets.append(
365
383
  self.packet(
@@ -371,16 +389,19 @@ class MysqlProxy(SocketServer.BaseRequestHandler):
371
389
  column_name=column_name,
372
390
  column_type=column["type"],
373
391
  charset=column.get("charset", CHARSET_NUMBERS["utf8_unicode_ci"]),
374
- max_length=length,
392
+ max_length=column["size"],
375
393
  flags=flags,
376
394
  )
377
395
  )
378
396
  return packets
379
397
 
380
- def get_table_packets(self, columns, data, status=0):
398
+ def get_table_packets(self, result_set: ResultSet, status=0):
399
+ data_frame, columns_dict = dump_result_set_to_mysql(result_set)
400
+ data = data_frame.to_dict('split')['data']
401
+
381
402
  # TODO remove columns order
382
- packets = [self.packet(ColumnCountPacket, count=len(columns))]
383
- packets.extend(self._get_column_defenition_packets(columns, data))
403
+ packets = [self.packet(ColumnCountPacket, count=len(columns_dict))]
404
+ packets.extend(self._get_column_defenition_packets(columns_dict, data))
384
405
 
385
406
  if self.client_capabilities.DEPRECATE_EOF is False:
386
407
  packets.append(self.packet(EofPacket, status=status))
@@ -388,9 +409,9 @@ class MysqlProxy(SocketServer.BaseRequestHandler):
388
409
  packets += [self.packet(ResultsetRowPacket, data=x) for x in data]
389
410
  return packets
390
411
 
391
- def send_table_packets(self, columns, data, status=0):
412
+ def send_table_packets(self, result_set: ResultSet, status: int = 0):
413
+ df, columns_dicts = dump_result_set_to_mysql(result_set, infer_column_size=True)
392
414
  # text protocol, convert all to string and serialize as packages
393
- df = data.get_raw_df()
394
415
 
395
416
  def apply_f(v):
396
417
  if v is None:
@@ -399,23 +420,10 @@ class MysqlProxy(SocketServer.BaseRequestHandler):
399
420
  v = str(v)
400
421
  return Datum.serialize_str(v)
401
422
 
402
- # get column max size
403
- # column_len is used by mysql client to determine width of columns, so it is not mandatory
404
- # to get exactly max value. We can approximate them by sample.
405
- columns_len = None
406
- if len(df) > 0:
407
- sample = df.head(100)
408
- columns_len = []
409
- for column in sample.columns:
410
- try:
411
- columns_len.append(sample[column].astype(str).str.len().max())
412
- except Exception:
413
- columns_len.append(1)
414
-
415
423
  # columns packages
416
- packets = [self.packet(ColumnCountPacket, count=len(columns))]
424
+ packets = [self.packet(ColumnCountPacket, count=len(columns_dicts))]
417
425
 
418
- packets.extend(self._get_column_defenition_packets(columns, columns_len=columns_len))
426
+ packets.extend(self._get_column_defenition_packets(columns_dicts))
419
427
 
420
428
  if self.client_capabilities.DEPRECATE_EOF is False:
421
429
  packets.append(self.packet(EofPacket, status=status))
@@ -488,57 +496,12 @@ class MysqlProxy(SocketServer.BaseRequestHandler):
488
496
 
489
497
  return {"is_cloud": False}
490
498
 
491
- def to_mysql_columns(self, columns_list):
492
- """Converts raw columns data into convinient format(list of lists) for the futher usage.
493
- Plus, it is also converts column types into internal ones."""
494
-
495
- result = []
496
-
497
- database = (
498
- None if self.session.database == "" else self.session.database.lower()
499
- )
500
- for column_record in columns_list:
501
-
502
- field_type = column_record.type
503
-
504
- column_type = TYPES.MYSQL_TYPE_VAR_STRING
505
- # is already in mysql protocol type?
506
- if isinstance(field_type, int):
507
- column_type = field_type
508
- # pandas checks
509
- elif isinstance(field_type, np_dtype):
510
- if pd_types.is_integer_dtype(field_type):
511
- column_type = TYPES.MYSQL_TYPE_LONG
512
- elif pd_types.is_numeric_dtype(field_type):
513
- column_type = TYPES.MYSQL_TYPE_DOUBLE
514
- elif pd_types.is_datetime64_any_dtype(field_type):
515
- column_type = TYPES.MYSQL_TYPE_DATETIME
516
- # lightwood checks
517
- elif field_type == dtype.date:
518
- column_type = TYPES.MYSQL_TYPE_DATE
519
- elif field_type == dtype.datetime:
520
- column_type = TYPES.MYSQL_TYPE_DATETIME
521
- elif field_type == dtype.float:
522
- column_type = TYPES.MYSQL_TYPE_DOUBLE
523
- elif field_type == dtype.integer:
524
- column_type = TYPES.MYSQL_TYPE_LONG
525
-
526
- result.append(
527
- {
528
- "database": column_record.database or database,
529
- # TODO add 'original_table'
530
- "table_name": column_record.table_name,
531
- "name": column_record.name,
532
- "alias": column_record.alias or column_record.name,
533
- # NOTE all work with text-type, but if/when wanted change types to real,
534
- # it will need to check all types casts in BinaryResultsetRowPacket
535
- "type": column_type,
536
- }
537
- )
538
- return result
499
+ def to_mysql_columns(self, columns_list: list[Column]) -> list[dict[str, str | int]]:
500
+ database_name = None if self.session.database == "" else self.session.database.lower()
501
+ return [column_to_mysql_column_dict(column, database_name=database_name) for column in columns_list]
539
502
 
540
503
  @profiler.profile()
541
- def process_query(self, sql):
504
+ def process_query(self, sql) -> SQLAnswer:
542
505
  executor = Executor(session=self.session, sqlserver=self)
543
506
  executor.query_execute(sql)
544
507
  executor_answer = executor.executor_answer
@@ -553,16 +516,14 @@ class MysqlProxy(SocketServer.BaseRequestHandler):
553
516
  resp = SQLAnswer(
554
517
  resp_type=RESPONSE_TYPE.TABLE,
555
518
  state_track=executor_answer.state_track,
556
- columns=self.to_mysql_columns(executor_answer.data.columns),
557
- data=executor_answer.data,
519
+ result_set=executor_answer.data,
558
520
  status=executor.server_status,
559
- affected_rows=executor_answer.affected_rows
521
+ affected_rows=executor_answer.affected_rows,
522
+ mysql_types=executor_answer.data.mysql_types
560
523
  )
561
524
 
562
525
  # Increment the counter and include metadata in attributes
563
- metadata = ctx.metadata(query=sql)
564
- query_request_counter = get_query_request_counter()
565
- query_request_counter.add(1, metadata)
526
+ increment_otel_query_request_counter(ctx.get_metadata(query=sql))
566
527
 
567
528
  return resp
568
529
 
@@ -613,23 +574,25 @@ class MysqlProxy(SocketServer.BaseRequestHandler):
613
574
  return self.send_query_answer(resp)
614
575
 
615
576
  # TODO prepared_stmt['type'] == 'lock' is not used but it works
616
- columns_def = self.to_mysql_columns(executor_answer.data.columns)
617
- packages = [self.packet(ColumnCountPacket, count=len(columns_def))]
577
+ result_set = executor_answer.data
578
+ data_frame, columns_dict = dump_result_set_to_mysql(result_set)
579
+ data = data_frame.to_dict('split')['data']
618
580
 
619
- packages.extend(self._get_column_defenition_packets(columns_def))
581
+ packages = [self.packet(ColumnCountPacket, count=len(columns_dict))]
582
+ packages.extend(self._get_column_defenition_packets(columns_dict))
620
583
 
621
584
  if self.client_capabilities.DEPRECATE_EOF is False:
622
585
  packages.append(self.packet(EofPacket, status=0x0062))
623
586
 
624
587
  # send all
625
- for row in executor_answer.data.to_lists():
588
+ for row in data:
626
589
  packages.append(
627
- self.packet(BinaryResultsetRowPacket, data=row, columns=columns_def)
590
+ self.packet(BinaryResultsetRowPacket, data=row, columns=columns_dict)
628
591
  )
629
592
 
630
593
  server_status = executor.server_status or 0x0002
631
594
  packages.append(self.last_packet(status=server_status))
632
- prepared_stmt["fetched"] += len(executor_answer.data)
595
+ prepared_stmt["fetched"] += len(data)
633
596
 
634
597
  return self.send_package_group(packages)
635
598
 
@@ -741,7 +704,7 @@ class MysqlProxy(SocketServer.BaseRequestHandler):
741
704
  try:
742
705
  if p.type.value == COMMANDS.COM_QUERY:
743
706
  sql = self.decode_utf(p.sql.value)
744
- sql = SqlStatementParser.clear_sql(sql)
707
+ sql = clear_sql(sql)
745
708
  logger.debug(f'Incoming query: {sql}')
746
709
  profiler.set_meta(
747
710
  query=sql, api="mysql", environment=config.get("environment")