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
@@ -1,4 +1,4 @@
1
- from typing import List
1
+ from typing import List, Optional, Iterable
2
2
  import pickle
3
3
  import datetime as dt
4
4
 
@@ -32,7 +32,41 @@ class RunningQuery:
32
32
  self.sql = record.sql
33
33
  self.database = record.database or config.get('default_project')
34
34
 
35
- def get_partition_query(self, step_num: int, query: Select) -> Select:
35
+ def get_partitions(self, dn, step_call, query: Select) -> Iterable:
36
+ """
37
+ Gets chunks of data from data handler for executing them in next steps of the planner
38
+ Check if datanode supports fetch with stream
39
+ :param dn: datanode to execute query
40
+ :param step_call: instance of StepCall to get some parameters from it
41
+ :param query: AST query to execute
42
+ :return: generator with query results
43
+ """
44
+ if dn.has_support_stream():
45
+ query2 = self.get_partition_query(step_call.current_step_num, query, stream=True)
46
+
47
+ for df in dn.query_stream(query2, fetch_size=self.batch_size):
48
+ max_track_value = self.get_max_track_value(df)
49
+ yield df
50
+ self.set_progress(df, max_track_value)
51
+
52
+ else:
53
+ while True:
54
+ query2 = self.get_partition_query(step_call.current_step_num, query, stream=False)
55
+
56
+ response = dn.query(
57
+ query=query2,
58
+ session=step_call.session
59
+ )
60
+ df = response.data_frame
61
+
62
+ if df is None or len(df) == 0:
63
+ break
64
+
65
+ max_track_value = self.get_max_track_value(df)
66
+ yield df
67
+ self.set_progress(df, max_track_value)
68
+
69
+ def get_partition_query(self, step_num: int, query: Select, stream=False) -> Select:
36
70
  """
37
71
  Generate query for fetching the next partition
38
72
  It wraps query to
@@ -41,16 +75,34 @@ class RunningQuery:
41
75
  order by track_column
42
76
  limit size {batch_size}
43
77
  And fill track_column, previous_value, batch_size
78
+
79
+ If steam is true:
80
+ - if track_column is defined:
81
+ - don't add limit
82
+ - else:
83
+ - return user query without modifications
44
84
  """
45
85
 
46
- track_column = self.record.parameters['track_column']
86
+ track_column = self.record.parameters.get('track_column')
87
+ if track_column is None and stream:
88
+ # if no track column for stream fetching: it is not resumable query, execute original query
89
+
90
+ # check if it is first run of the query
91
+ if self.record.processed_rows > 0:
92
+ raise RuntimeError("Can't resume query without track_column")
93
+ return query
94
+
95
+ if not stream and track_column is None:
96
+ raise ValueError('Track column is not defined')
47
97
 
48
98
  query = Select(
49
99
  targets=[Star()],
50
100
  from_table=query,
51
101
  order_by=[OrderBy(Identifier(track_column))],
52
- limit=Constant(self.batch_size)
102
+
53
103
  )
104
+ if not stream:
105
+ query.limit = Constant(self.batch_size)
54
106
 
55
107
  track_value = self.record.context.get('track_value')
56
108
  # is it different step?
@@ -114,8 +166,6 @@ class RunningQuery:
114
166
  Store parameters of the step which is about to be split into partitions
115
167
  """
116
168
 
117
- if 'track_column' not in params:
118
- raise ValueError('Track column is not defined')
119
169
  if 'batch_size' not in params:
120
170
  params['batch_size'] = 1000
121
171
 
@@ -123,15 +173,18 @@ class RunningQuery:
123
173
  self.batch_size = self.record.parameters['batch_size']
124
174
  db.session.commit()
125
175
 
126
- def get_max_track_value(self, df: pd.DataFrame) -> pd.DataFrame:
176
+ def get_max_track_value(self, df: pd.DataFrame) -> Optional[pd.DataFrame]:
127
177
  """
128
178
  return max value to use in `set_progress`.
129
179
  this function is called before execution substeps,
130
180
  `set_progress` function - after
131
181
  """
132
-
133
- track_column = self.record.parameters['track_column']
134
- return df[track_column].max()
182
+ if 'track_column' in self.record.parameters:
183
+ track_column = self.record.parameters['track_column']
184
+ return df[track_column].max()
185
+ else:
186
+ # stream mode
187
+ return None
135
188
 
136
189
  def set_progress(self, df: pd.DataFrame, max_track_value: int):
137
190
  """
@@ -508,6 +561,7 @@ class QueryContextController:
508
561
  db.Queries.finished_at < (dt.datetime.now() - dt.timedelta(days=1))
509
562
  )
510
563
  for rec in remove_query.all():
564
+ self.get_query(rec.id).remove_from_task()
511
565
  db.session.delete(rec)
512
566
 
513
567
  rec = db.Queries(
@@ -544,6 +598,8 @@ class QueryContextController:
544
598
  if rec is None:
545
599
  raise RuntimeError(f'Query not found: {query_id}')
546
600
 
601
+ self.get_query(rec.id).remove_from_task()
602
+
547
603
  # the query in progress will fail when it tries to update status
548
604
  db.session.delete(rec)
549
605
  db.session.commit()
@@ -0,0 +1,190 @@
1
+ from typing import Type, List, Any
2
+ import re
3
+ import json
4
+ from pydantic import BaseModel, Field
5
+ from langchain_core.tools import BaseTool
6
+
7
+
8
+ class KnowledgeBaseListToolInput(BaseModel):
9
+ tool_input: str = Field(
10
+ "", description="An empty string to list all knowledge bases."
11
+ )
12
+
13
+
14
+ class KnowledgeBaseListTool(BaseTool):
15
+ """Tool for listing knowledge bases in MindsDB."""
16
+
17
+ name: str = "kb_list_tool"
18
+ description: str = "List all knowledge bases in MindsDB."
19
+ args_schema: Type[BaseModel] = KnowledgeBaseListToolInput
20
+ db: Any = None
21
+
22
+ def _run(self, tool_input: str) -> str:
23
+ """List all knowledge bases."""
24
+ return self.db.get_usable_knowledge_base_names()
25
+
26
+
27
+ class KnowledgeBaseInfoToolInput(BaseModel):
28
+ tool_input: str = Field(
29
+ ...,
30
+ description="A comma-separated list of knowledge base names enclosed between $START$ and $STOP$.",
31
+ )
32
+
33
+
34
+ class KnowledgeBaseInfoTool(BaseTool):
35
+ """Tool for getting information about knowledge bases in MindsDB."""
36
+
37
+ name: str = "kb_info_tool"
38
+ description: str = "Get information about knowledge bases in MindsDB."
39
+ args_schema: Type[BaseModel] = KnowledgeBaseInfoToolInput
40
+ db: Any = None
41
+
42
+ def _extract_kb_names(self, tool_input: str) -> List[str]:
43
+ """Extract knowledge base names from the tool input."""
44
+ match = re.search(r"\$START\$(.*?)\$STOP\$", tool_input, re.DOTALL)
45
+ if not match:
46
+ return []
47
+
48
+ # Extract and clean the knowledge base names
49
+ kb_names_str = match.group(1).strip()
50
+ kb_names = re.findall(r"`([^`]+)`", kb_names_str)
51
+ return kb_names
52
+
53
+ def _run(self, tool_input: str) -> str:
54
+ """Get information about specified knowledge bases."""
55
+ kb_names = self._extract_kb_names(tool_input)
56
+
57
+ if not kb_names:
58
+ return "No valid knowledge base names provided. Please provide names enclosed in backticks between $START$ and $STOP$."
59
+
60
+ results = []
61
+
62
+ for kb_name in kb_names:
63
+ try:
64
+ # Get knowledge base schema
65
+ schema_result = self.db.run_no_throw(
66
+ f"DESCRIBE KNOWLEDGE_BASE `{kb_name}`;"
67
+ )
68
+
69
+ if not schema_result:
70
+ results.append(
71
+ f"Knowledge base `{kb_name}` not found or has no schema information."
72
+ )
73
+ continue
74
+
75
+ # Get sample data
76
+ sample_data = self.db.run_no_throw(
77
+ f"SELECT * FROM `{kb_name}` LIMIT 10;"
78
+ )
79
+
80
+ # Format the results
81
+ kb_info = f"## Knowledge Base: `{kb_name}`\n\n"
82
+
83
+ # Schema information
84
+ kb_info += "### Schema Information:\n"
85
+ kb_info += "```\n"
86
+ for row in schema_result:
87
+ kb_info += f"{json.dumps(row, indent=2)}\n"
88
+ kb_info += "```\n\n"
89
+
90
+ # Sample data
91
+ kb_info += "### Sample Data:\n"
92
+ if sample_data:
93
+ # Extract column names
94
+ columns = list(sample_data[0].keys())
95
+
96
+ # Create markdown table header
97
+ kb_info += "| " + " | ".join(columns) + " |\n"
98
+ kb_info += "| " + " | ".join(["---" for _ in columns]) + " |\n"
99
+
100
+ # Add rows
101
+ for row in sample_data:
102
+ formatted_row = []
103
+ for col in columns:
104
+ cell_value = row[col]
105
+ if isinstance(cell_value, dict):
106
+ cell_value = json.dumps(cell_value, ensure_ascii=False)
107
+ formatted_row.append(str(cell_value).replace("|", "\\|"))
108
+ kb_info += "| " + " | ".join(formatted_row) + " |\n"
109
+ else:
110
+ kb_info += "No sample data available.\n"
111
+
112
+ results.append(kb_info)
113
+
114
+ except Exception as e:
115
+ results.append(
116
+ f"Error getting information for knowledge base `{kb_name}`: {str(e)}"
117
+ )
118
+
119
+ return "\n\n".join(results)
120
+
121
+
122
+ class KnowledgeBaseQueryToolInput(BaseModel):
123
+ tool_input: str = Field(
124
+ ...,
125
+ description="A SQL query for knowledge bases. Can be provided directly or enclosed between $START$ and $STOP$.",
126
+ )
127
+
128
+
129
+ class KnowledgeBaseQueryTool(BaseTool):
130
+ """Tool for querying knowledge bases in MindsDB."""
131
+
132
+ name: str = "kb_query_tool"
133
+ description: str = "Query knowledge bases in MindsDB."
134
+ args_schema: Type[BaseModel] = KnowledgeBaseQueryToolInput
135
+ db: Any = None
136
+
137
+ def _extract_query(self, tool_input: str) -> str:
138
+ """Extract the SQL query from the tool input."""
139
+ # First check if the input is wrapped in $START$ and $STOP$
140
+ match = re.search(r"\$START\$(.*?)\$STOP\$", tool_input, re.DOTALL)
141
+ if match:
142
+ return match.group(1).strip()
143
+
144
+ # If not wrapped in delimiters, use the input directly
145
+ # Check for SQL keywords to validate it's likely a query
146
+ if re.search(
147
+ r"\b(SELECT|FROM|WHERE|LIMIT|ORDER BY)\b", tool_input, re.IGNORECASE
148
+ ):
149
+ return tool_input.strip()
150
+
151
+ return ""
152
+
153
+ def _run(self, tool_input: str) -> str:
154
+ """Execute a knowledge base query."""
155
+ query = self._extract_query(tool_input)
156
+
157
+ if not query:
158
+ return "No valid SQL query provided. Please provide a SQL query that includes SELECT, FROM, or other SQL keywords."
159
+
160
+ try:
161
+ # Execute the query
162
+ result = self.db.run_no_throw(query)
163
+
164
+ if not result:
165
+ return "Query executed successfully, but no results were returned."
166
+
167
+ # Format the results as a markdown table
168
+ if isinstance(result, list) and len(result) > 0:
169
+ # Extract column names
170
+ columns = list(result[0].keys())
171
+
172
+ # Create markdown table header
173
+ table = "| " + " | ".join(columns) + " |\n"
174
+ table += "| " + " | ".join(["---" for _ in columns]) + " |\n"
175
+
176
+ # Add rows
177
+ for row in result:
178
+ formatted_row = []
179
+ for col in columns:
180
+ cell_value = row[col]
181
+ if isinstance(cell_value, dict):
182
+ cell_value = json.dumps(cell_value, ensure_ascii=False)
183
+ formatted_row.append(str(cell_value).replace("|", "\\|"))
184
+ table += "| " + " | ".join(formatted_row) + " |\n"
185
+
186
+ return table
187
+
188
+ return result
189
+ except Exception as e:
190
+ return f"Error executing query: {str(e)}"
@@ -7,6 +7,11 @@ from langchain_community.tools import ListSQLDatabaseTool, InfoSQLDatabaseTool,
7
7
  from langchain_core.tools import BaseTool
8
8
 
9
9
  from mindsdb.interfaces.skills.custom.text2sql.mindsdb_sql_tool import MindsDBSQLParserTool
10
+ from mindsdb.interfaces.skills.custom.text2sql.mindsdb_kb_tools import (
11
+ KnowledgeBaseListTool,
12
+ KnowledgeBaseInfoTool,
13
+ KnowledgeBaseQueryTool
14
+ )
10
15
 
11
16
 
12
17
  class MindsDBSQLToolkit(SQLDatabaseToolkit):
@@ -107,9 +112,96 @@ class MindsDBSQLToolkit(SQLDatabaseToolkit):
107
112
  description=mindsdb_sql_parser_tool_description
108
113
  )
109
114
 
115
+ # Knowledge base tools
116
+ kb_list_tool = KnowledgeBaseListTool(
117
+ name=f'kb_list_tool{prefix}',
118
+ db=self.db,
119
+ description=dedent("""\
120
+ Lists all available knowledge bases that can be queried.
121
+ Input: No input required, just call the tool directly.
122
+ Output: A table of all available knowledge bases with their names and creation dates.
123
+
124
+ Use this tool first when answering factual questions to see what knowledge bases are available.
125
+ Each knowledge base name is escaped using backticks.
126
+
127
+ Example usage: kb_list_tool()
128
+ """)
129
+ )
130
+
131
+ kb_info_tool = KnowledgeBaseInfoTool(
132
+ name=f'kb_info_tool{prefix}',
133
+ db=self.db,
134
+ description=dedent(f"""\
135
+ Gets detailed information about specific knowledge bases including their structure and metadata fields.
136
+
137
+ Input: A knowledge base name as a simple string.
138
+ Output: Schema, metadata columns, and sample rows for the specified knowledge base.
139
+
140
+ Use this after kb_list_tool to understand what information is contained in the knowledge base
141
+ and what metadata fields are available for filtering.
142
+
143
+ Example usage: kb_info_tool("kb_name")
144
+
145
+ Make sure the knowledge base exists by calling {kb_list_tool.name} first.
146
+ """)
147
+ )
148
+
149
+ kb_query_tool = KnowledgeBaseQueryTool(
150
+ name=f'kb_query_tool{prefix}',
151
+ db=self.db,
152
+ description=dedent(f"""\
153
+ Queries knowledge bases using SQL syntax to retrieve relevant information.
154
+
155
+ Input: A SQL query string that targets a knowledge base.
156
+ Output: Knowledge base search results or error message.
157
+
158
+ This tool is designed for semantic search and metadata filtering in MindsDB knowledge bases.
159
+
160
+ Query Types and Examples:
161
+ 1. Basic semantic search:
162
+ kb_query_tool("SELECT * FROM kb_name WHERE content = 'your search query';")
163
+
164
+ 2. Metadata filtering:
165
+ kb_query_tool("SELECT * FROM kb_name WHERE metadata_field = 'value';")
166
+
167
+ 3. Combined search:
168
+ kb_query_tool("SELECT * FROM kb_name WHERE content = 'query' AND metadata_field = 'value';")
169
+
170
+ 4. Setting relevance threshold:
171
+ kb_query_tool("SELECT * FROM kb_name WHERE content = 'query' AND relevance_threshold = 0.7;")
172
+
173
+ 5. Limiting results:
174
+ kb_query_tool("SELECT * FROM kb_name WHERE content = 'query' LIMIT 5;")
175
+
176
+ 6. Getting sample data:
177
+ kb_query_tool("SELECT * FROM kb_name LIMIT 3;")
178
+
179
+ 7. Don't use LIKE operator on content filter ie semantic search:
180
+ SELECT * FROM `test_kb` WHERE content LIKE '%population of New York%' $STOP$
181
+
182
+ Like is not supported, use the following instead:
183
+ SELECT * FROM `test_kb` WHERE content = 'population of New York'
184
+
185
+ Result Format:
186
+ - Results include: id, chunk_id, chunk_content, metadata, distance, and relevance columns
187
+ - The metadata column contains a JSON object with all metadata fields
188
+
189
+ Best Practices:
190
+ - Always check available knowledge bases with {kb_list_tool.name} first
191
+ - Use {kb_info_tool.name} to understand the structure and metadata fields
192
+ - Always include a semicolon at the end of your SQL query
193
+
194
+ For factual questions, use this tool to retrieve information rather than relying on the model's knowledge.
195
+ """)
196
+ )
197
+
198
+ # Return standard SQL tools and knowledge base tools
110
199
  return [
111
200
  query_sql_database_tool,
112
201
  info_sql_database_tool,
113
202
  list_sql_database_tool,
114
203
  mindsdb_sql_parser_tool,
204
+ kb_list_tool,
205
+ kb_info_tool,
206
+ kb_query_tool,
115
207
  ]