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,75 +1,150 @@
1
+ from typing import Any, Dict
2
+
3
+ from atlassian import Jira
4
+ from requests.exceptions import HTTPError
5
+
6
+ from mindsdb.integrations.handlers.jira_handler.jira_tables import JiraProjectsTable, JiraIssuesTable, JiraUsersTable, JiraGroupsTable
1
7
  from mindsdb.integrations.libs.api_handler import APIHandler
2
8
  from mindsdb.integrations.libs.response import (
9
+ HandlerResponse as Response,
3
10
  HandlerStatusResponse as StatusResponse,
11
+ RESPONSE_TYPE,
4
12
  )
5
13
  from mindsdb.utilities import log
6
- from mindsdb.integrations.libs.api_handler_generator import APIResourceGenerator
7
14
 
8
15
 
9
16
  logger = log.getLogger(__name__)
10
17
 
11
18
 
12
19
  class JiraHandler(APIHandler):
20
+ """
21
+ This handler handles the connection and execution of SQL statements on Jira.
22
+ """
13
23
 
14
- def __init__(self, name=None, **kwargs):
24
+ def __init__(self, name: str, connection_data: Dict, **kwargs: Any) -> None:
15
25
  """
16
- Initialize the handler.
26
+ Initializes the handler.
27
+
17
28
  Args:
18
- name (str): name of particular handler instance
19
- connection_data (dict): parameters for connecting to the database
20
- **kwargs: arbitrary keyword arguments.
29
+ name (Text): The name of the handler instance.
30
+ connection_data (Dict): The connection data required to connect to the Jira API.
31
+ kwargs: Arbitrary keyword arguments.
21
32
  """
22
33
  super().__init__(name)
23
- self.connection_data = kwargs.get("connection_data", {})
34
+ self.connection_data = connection_data
35
+ self.kwargs = kwargs
24
36
 
25
37
  self.connection = None
26
38
  self.is_connected = False
27
39
 
28
- # todo store parsed data in files
29
-
30
- self.api_resource_generator = APIResourceGenerator(
31
- "https://developer.atlassian.com/cloud/jira/platform/swagger-v3.v3.json",
32
- self.connection_data,
33
- url_base='/rest/api/3/',
34
- options={
35
- 'offset_param': ['startAt', 'offset'],
36
- 'total_column': ['totalEntryCount', 'total'],
37
- 'check_connection_table': 'myself'
38
- }
39
- )
40
-
41
- resource_tables = self.api_resource_generator.generate_api_resources(self)
40
+ self._register_table("projects", JiraProjectsTable(self))
41
+ self._register_table("issues", JiraIssuesTable(self))
42
+ self._register_table("groups", JiraGroupsTable(self))
43
+ self._register_table("users", JiraUsersTable(self))
42
44
 
43
- for table_name, resource in resource_tables.items():
44
- self._register_table(table_name, resource)
45
+ def connect(self) -> Jira:
46
+ """
47
+ Establishes a connection to the Jira API.
45
48
 
46
- def __del__(self):
47
- if self.is_connected is True:
48
- self.disconnect()
49
+ Raises:
50
+ ValueError: If the required connection parameters are not provided.
51
+ AuthenticationError: If an authentication error occurs while connecting to the Salesforce API.
49
52
 
50
- def connect(self):
51
- """
52
- Set up the connection required by the handler.
53
53
  Returns:
54
- HandlerStatusResponse
54
+ atlassian.jira.Jira: A connection object to the Jira API.
55
55
  """
56
- return
56
+ if self.is_connected is True:
57
+ return self.connection
58
+
59
+ is_cloud = self.connection_data.get("cloud", True)
60
+
61
+ if is_cloud:
62
+ # Jira Cloud supports API token authentication.
63
+ if not all(key in self.connection_data for key in ['username', 'api_token', 'url']):
64
+ raise ValueError("Required parameters (username, api_token, url) must be provided.")
65
+
66
+ config = {
67
+ "username": self.connection_data['username'],
68
+ "password": self.connection_data['api_token'],
69
+ "url": self.connection_data['url'],
70
+ }
71
+ else:
72
+ # Jira Server supports personal access token authentication or open access.
73
+ if 'url' not in self.connection_data:
74
+ raise ValueError("Required parameter 'url' must be provided.")
75
+
76
+ config = {
77
+ "url": self.connection_data['url'],
78
+ "cloud": False
79
+ }
80
+
81
+ if 'personal_access_token' in self.connection_data:
82
+ config['session'] = ({"Authorization": f"Bearer {self.connection_data['personal_access_token']}"})
83
+
84
+ try:
85
+ self.connection = Jira(**config)
86
+ self.is_connected = True
87
+ return self.connection
88
+ except Exception as unknown_error:
89
+ logger.error(f"Unknown error connecting to Jira, {unknown_error}!")
90
+ raise
57
91
 
58
92
  def check_connection(self) -> StatusResponse:
59
93
  """
60
- Check connection to the handler.
94
+ Checks the status of the connection to the Salesforce API.
95
+
61
96
  Returns:
62
- HandlerStatusResponse
97
+ StatusResponse: An object containing the success status and an error message if an error occurs.
63
98
  """
64
-
65
99
  response = StatusResponse(False)
66
100
 
67
101
  try:
68
- self.api_resource_generator.check_connection()
102
+ connection = self.connect()
103
+ connection.myself()
69
104
  response.success = True
70
- except Exception as e:
71
- logger.error(f"Error connecting to Jira API: {e}!")
72
- response.error_message = e
105
+ except (HTTPError, ValueError) as known_error:
106
+ logger.error(f'Connection check to Jira failed, {known_error}!')
107
+ response.error_message = str(known_error)
108
+ except Exception as unknown_error:
109
+ logger.error(f'Connection check to Jira failed due to an unknown error, {unknown_error}!')
110
+ response.error_message = str(unknown_error)
73
111
 
74
112
  self.is_connected = response.success
113
+
114
+ return response
115
+
116
+ def native_query(self, query: str) -> Response:
117
+ """
118
+ Executes a native JQL query on Jira and returns the result.
119
+
120
+ Args:
121
+ query (Text): The JQL query to be executed.
122
+
123
+ Returns:
124
+ Response: A response object containing the result of the query or an error message.
125
+ """
126
+ connection = self.connect()
127
+
128
+ try:
129
+ results = connection.jql(query)
130
+ df = JiraIssuesTable(self).normalize(results['issues'])
131
+ response = Response(
132
+ RESPONSE_TYPE.TABLE,
133
+ df
134
+ )
135
+ except HTTPError as http_error:
136
+ logger.error(f'Error running query: {query} on Jira, {http_error}!')
137
+ response = Response(
138
+ RESPONSE_TYPE.ERROR,
139
+ error_code=0,
140
+ error_message=str(http_error)
141
+ )
142
+ except Exception as unknown_error:
143
+ logger.error(f'Error running query: {query} on Jira, {unknown_error}!')
144
+ response = Response(
145
+ RESPONSE_TYPE.ERROR,
146
+ error_code=0,
147
+ error_message=str(unknown_error)
148
+ )
149
+
75
150
  return response
@@ -0,0 +1,229 @@
1
+ from typing import List
2
+
3
+ from atlassian import Jira
4
+ import pandas as pd
5
+
6
+ from mindsdb.integrations.libs.api_handler import APIResource
7
+ from mindsdb.integrations.utilities.sql_utils import FilterCondition, SortColumn, FilterOperator
8
+ from mindsdb.utilities import log
9
+
10
+
11
+ logger = log.getLogger(__name__)
12
+
13
+
14
+ class JiraProjectsTable(APIResource):
15
+ def list(
16
+ self,
17
+ conditions: List[FilterCondition] = None,
18
+ limit: int = None,
19
+ sort: List[SortColumn] = None,
20
+ targets: List[str] = None,
21
+ **kwargs
22
+ ) -> pd.DataFrame:
23
+ client: Jira = self.handler.connect()
24
+
25
+ projects = []
26
+ for condition in conditions:
27
+ if condition.column in ('id', 'key'):
28
+ if condition.op == FilterOperator.EQUAL:
29
+ projects = [client.get_project(condition.value)]
30
+ elif condition.op == FilterOperator.IN:
31
+ projects = [client.get_project(project_id) for project_id in condition.value]
32
+ else:
33
+ raise ValueError(f"Unsupported operator {condition.op} for column {condition.column}.")
34
+ condition.applied = True
35
+
36
+ if not projects:
37
+ projects = client.get_all_projects()
38
+
39
+ if projects:
40
+ projects_df = pd.DataFrame(projects)
41
+ projects_df = projects_df[self.get_columns()]
42
+ else:
43
+ projects_df = pd.DataFrame([], columns=self.get_columns())
44
+
45
+ return projects_df
46
+
47
+ def get_columns(self) -> List[str]:
48
+ return [
49
+ "id",
50
+ "key",
51
+ "name",
52
+ "projectTypeKey",
53
+ "simplified",
54
+ "style",
55
+ "isPrivate",
56
+ "entityId",
57
+ "uuid",
58
+ ]
59
+
60
+
61
+ class JiraIssuesTable(APIResource):
62
+ def list(
63
+ self,
64
+ conditions: List[FilterCondition] = None,
65
+ limit: int = None,
66
+ sort: List[SortColumn] = None,
67
+ targets: List[str] = None,
68
+ **kwargs
69
+ ) -> pd.DataFrame:
70
+ client: Jira = self.handler.connect()
71
+
72
+ issues = []
73
+ for condition in conditions:
74
+ if condition.column in ('id', 'key'):
75
+ if condition.op == FilterOperator.EQUAL:
76
+ issues = [client.get_issue(condition.value)]
77
+ elif condition.op == FilterOperator.IN:
78
+ issues = [client.get_issue(issue_id) for issue_id in condition.value]
79
+ else:
80
+ raise ValueError(f"Unsupported operator {condition.op} for column {condition.column}.")
81
+ condition.applied = True
82
+
83
+ elif condition.column in ('project_id', 'project_key', 'project_name'):
84
+ if condition.op == FilterOperator.EQUAL:
85
+ issues = client.get_all_project_issues(condition.value, limit=limit)
86
+ elif condition.op == FilterOperator.IN:
87
+ for project_id in condition.value:
88
+ issues.extend(client.get_all_project_issues(project_id, limit=limit))
89
+
90
+ condition.applied = True
91
+
92
+ if not issues:
93
+ project_ids = [project['id'] for project in client.get_all_projects()]
94
+ for project_id in project_ids:
95
+ issues.extend(self._get_project_issues_with_limit(client, project_id, limit=limit, current_issues=issues))
96
+
97
+ if issues:
98
+ issues_df = self.normalize(issues)
99
+ else:
100
+ issues_df = pd.DataFrame([], columns=self.get_columns())
101
+
102
+ return issues_df
103
+
104
+ def _get_project_issues_with_limit(self, client: Jira, project_id, limit=None, current_issues=None):
105
+ """
106
+ Helper to get issues from a project, respecting the limit.
107
+ """
108
+ if current_issues is None:
109
+ current_issues = []
110
+ if limit:
111
+ remaining = limit - len(current_issues)
112
+ if remaining <= 0:
113
+ return []
114
+ return client.get_all_project_issues(project_id, limit=remaining)
115
+ else:
116
+ return client.get_all_project_issues(project_id)
117
+
118
+ def normalize(self, issues: dict) -> pd.DataFrame:
119
+ issues_df = pd.json_normalize(issues)
120
+ issues_df.rename(
121
+ columns={
122
+ "fields.project.id": "project_id",
123
+ "fields.project.key": "project_key",
124
+ "fields.project.name": "project_name",
125
+ "fields.summary": "summary",
126
+ "fields.priority.name": "priority",
127
+ "fields.creator.displayName": "creator",
128
+ "fields.assignee.displayName": "assignee",
129
+ "fields.status.name": "status",
130
+ },
131
+ inplace=True
132
+ )
133
+ issues_df = issues_df[self.get_columns()]
134
+
135
+ return issues_df
136
+
137
+ def get_columns(self) -> List[str]:
138
+ return [
139
+ "id",
140
+ "key",
141
+ "project_id",
142
+ "project_key",
143
+ "project_name",
144
+ "summary",
145
+ "priority",
146
+ "creator",
147
+ "assignee",
148
+ "status",
149
+ ]
150
+
151
+
152
+ class JiraGroupsTable(APIResource):
153
+ def list(
154
+ self,
155
+ conditions: List[FilterCondition] = None,
156
+ limit: int = None,
157
+ sort: List[SortColumn] = None,
158
+ targets: List[str] = None,
159
+ **kwargs
160
+ ) -> pd.DataFrame:
161
+ client: Jira = self.handler.connect()
162
+
163
+ if limit:
164
+ groups = client.get_groups(limit=limit)['groups']
165
+ else:
166
+ groups = client.get_groups()['groups']
167
+
168
+ if groups:
169
+ groups_df = pd.DataFrame(groups)
170
+ groups_df = groups_df[self.get_columns()]
171
+ else:
172
+ groups_df = pd.DataFrame([], columns=self.get_columns())
173
+
174
+ return groups_df
175
+
176
+ def get_columns(self) -> List[str]:
177
+ return [
178
+ "groupId",
179
+ "name",
180
+ "html",
181
+ ]
182
+
183
+
184
+ class JiraUsersTable(APIResource):
185
+ def list(
186
+ self,
187
+ conditions: List[FilterCondition] = None,
188
+ limit: int = None,
189
+ sort: List[SortColumn] = None,
190
+ targets: List[str] = None,
191
+ **kwargs
192
+ ) -> pd.DataFrame:
193
+ client: Jira = self.handler.connect()
194
+
195
+ users = []
196
+ for condition in conditions:
197
+ if condition.column == 'accountId':
198
+ if condition.op == FilterOperator.EQUAL:
199
+ users = [client.user(account_id=condition.value)]
200
+ elif condition.op == FilterOperator.IN:
201
+ users = [client.user(account_id=accountId) for accountId in condition.value]
202
+ else:
203
+ raise ValueError(f"Unsupported operator {condition.op} for column {condition.column}.")
204
+ condition.applied = True
205
+
206
+ if not users:
207
+ if limit:
208
+ users = client.users_get_all(limit=limit)
209
+ else:
210
+ users = client.users_get_all()
211
+
212
+ if users:
213
+ users_df = pd.DataFrame(users)
214
+ users_df = users_df[self.get_columns()]
215
+ else:
216
+ users_df = pd.DataFrame([], columns=self.get_columns())
217
+
218
+ return users_df
219
+
220
+ def get_columns(self) -> List[str]:
221
+ return [
222
+ "accountId",
223
+ "accountType",
224
+ "emailAddress",
225
+ "displayName",
226
+ "active",
227
+ "timeZone",
228
+ "locale",
229
+ ]
@@ -0,0 +1 @@
1
+ atlassian-python-api
@@ -8,7 +8,6 @@ try:
8
8
  except Exception as e:
9
9
  Handler = None
10
10
  import_error = e
11
- from .__about__ import __version__ as version, __description__ as description
12
11
 
13
12
 
14
13
  title = 'Kinetica'
@@ -108,7 +108,7 @@ AI: {response}'''
108
108
  self.model_storage.json_set('args', args)
109
109
 
110
110
  @staticmethod
111
- def create_validation(_, args: Dict=None, **kwargs):
111
+ def create_validation(_, args: Dict = None, **kwargs):
112
112
  if 'using' not in args:
113
113
  raise Exception("LangChain engine requires a USING clause! Refer to its documentation for more details.")
114
114
  else:
@@ -117,7 +117,7 @@ AI: {response}'''
117
117
  if not args.get('mode') == 'retrieval':
118
118
  raise ValueError('Please provide a `prompt_template` for this engine.')
119
119
 
120
- def predict(self, df: pd.DataFrame, args: Dict=None) -> pd.DataFrame:
120
+ def predict(self, df: pd.DataFrame, args: Dict = None) -> pd.DataFrame:
121
121
  """
122
122
  Dispatch is performed depending on the underlying model type. Currently, only the default text completion
123
123
  is supported.
@@ -125,7 +125,7 @@ AI: {response}'''
125
125
  pred_args = args['predict_params'] if args else {}
126
126
  args = self.model_storage.json_get('args')
127
127
  if 'prompt_template' not in args and 'prompt_template' not in pred_args:
128
- raise ValueError(f"This model expects a `prompt_template`, please provide one.")
128
+ raise ValueError("This model expects a `prompt_template`, please provide one.")
129
129
  # Back compatibility for old models
130
130
  args['provider'] = args.get('provider', get_llm_provider(args))
131
131
  args['embedding_model_provider'] = args.get('embedding_model', get_embedding_model_provider(args))
@@ -155,7 +155,7 @@ AI: {response}'''
155
155
 
156
156
  return pd.DataFrame([resp.content], columns=[assistant_column])
157
157
 
158
- def create_agent(self, df: pd.DataFrame, args: Dict=None, pred_args: Dict=None) -> AgentExecutor:
158
+ def create_agent(self, df: pd.DataFrame, args: Dict = None, pred_args: Dict = None) -> AgentExecutor:
159
159
  pred_args = pred_args if pred_args else {}
160
160
 
161
161
  # Set up tools.
@@ -1,6 +1,5 @@
1
1
  import tiktoken
2
-
3
- from typing import Callable, Dict
2
+ from typing import Callable
4
3
 
5
4
  from mindsdb_sql_parser import parse_sql
6
5
  from mindsdb_sql_parser.ast import Insert
@@ -13,21 +12,18 @@ from langchain.chains.llm import LLMChain
13
12
  from langchain.chains.combine_documents.stuff import StuffDocumentsChain
14
13
  from langchain.chains import ReduceDocumentsChain, MapReduceDocumentsChain
15
14
 
16
- from mindsdb.integrations.utilities.rag.rag_pipeline_builder import RAG
17
- from mindsdb.integrations.utilities.rag.settings import RAGPipelineModel, VectorStoreType, DEFAULT_COLLECTION_NAME
18
- from mindsdb.interfaces.skills.skill_tool import skill_tool, SkillType
19
- from mindsdb.interfaces.storage import db
15
+ from mindsdb.interfaces.skills.skill_tool import skill_tool
20
16
  from mindsdb.utilities import log
21
17
  from langchain_core.prompts import PromptTemplate
22
18
  from langchain_core.tools import Tool
23
19
  from langchain_text_splitters import CharacterTextSplitter
24
20
 
25
21
  logger = log.getLogger(__name__)
26
- from mindsdb.interfaces.storage.db import KnowledgeBase
27
- from mindsdb.utilities import log
28
22
 
29
23
  # Individual tools
30
24
  # Note: all tools are defined in a closure to pass required args (apart from LLM input) through it, as custom tools don't allow custom field assignment. # noqa
25
+
26
+
31
27
  def get_exec_call_tool(llm, executor, model_kwargs) -> Callable:
32
28
  def mdb_exec_call_tool(query: str) -> str:
33
29
  try:
@@ -50,6 +46,7 @@ def get_exec_call_tool(llm, executor, model_kwargs) -> Callable:
50
46
  return data
51
47
  return mdb_exec_call_tool
52
48
 
49
+
53
50
  def get_exec_metadata_tool(llm, executor, model_kwargs) -> Callable:
54
51
  def mdb_exec_metadata_call(query: str) -> str:
55
52
  try:
@@ -80,9 +77,9 @@ def get_exec_metadata_tool(llm, executor, model_kwargs) -> Callable:
80
77
  data = f'Metadata for table {table_name}:\n'
81
78
  fields = handler.get_columns(table_name).data_frame['Field'].to_list()
82
79
  types = handler.get_columns(table_name).data_frame['Type'].to_list()
83
- data += f'List of columns and types:\n'
80
+ data += 'List of columns and types:\n'
84
81
  data += '\n'.join([f'\tColumn: `{field}`\tType: `{typ}`' for field, typ in zip(fields, types)])
85
- except:
82
+ except BaseException:
86
83
  data = f'Table {table_name} not found.'
87
84
  except Exception as e:
88
85
  data = f"mindsdb tool failed with error:\n{str(e)}" # let the agent know
@@ -93,6 +90,7 @@ def get_exec_metadata_tool(llm, executor, model_kwargs) -> Callable:
93
90
  return data
94
91
  return mdb_exec_metadata_call
95
92
 
93
+
96
94
  def get_mdb_write_tool(executor) -> Callable:
97
95
  def mdb_write_call(query: str) -> str:
98
96
  try:
@@ -105,6 +103,7 @@ def get_mdb_write_tool(executor) -> Callable:
105
103
  return f"mindsdb write tool failed with error:\n{str(e)}"
106
104
  return mdb_write_call
107
105
 
106
+
108
107
  def _setup_standard_tools(tools, llm, model_kwargs):
109
108
  executor = skill_tool.get_command_executor()
110
109
 
@@ -2,7 +2,7 @@ from mindsdb.integrations.libs.const import HANDLER_TYPE
2
2
 
3
3
  from .__about__ import __version__ as version, __description__ as description
4
4
  try:
5
- from .leonardo_ai_handler import LeonardoAIHandler as Handler
5
+ from .leonardo_ai_handler import LeonardoAIHandler as Handler
6
6
  import_error = None
7
7
  except Exception as e:
8
8
  Handler = None
@@ -1 +1,2 @@
1
1
  lightfm==1.17
2
+ dataprep_ml==24.5.1.2
@@ -9,13 +9,12 @@ from pathlib import Path
9
9
  import lightwood
10
10
  import pandas as pd
11
11
  import requests
12
- from lightwood.api.types import JsonAI, ProblemDefinition
12
+ from lightwood.api.types import JsonAI
13
13
  from pandas.core.frame import DataFrame
14
14
 
15
15
  import mindsdb.utilities.profiler as profiler
16
16
  from mindsdb.integrations.libs.const import PREDICTOR_STATUS
17
17
  from mindsdb.integrations.utilities.utils import format_exception_error
18
- from mindsdb.interfaces.model.functions import get_model_records
19
18
  from mindsdb.interfaces.storage import db
20
19
  from mindsdb.interfaces.storage.fs import RESOURCE_GROUP, FileStorage
21
20
  from mindsdb.interfaces.storage.json import get_json_storage
@@ -26,6 +25,7 @@ from .utils import brack_to_mod, rep_recur, unpack_jsonai_old_args
26
25
 
27
26
  logger = log.getLogger(__name__)
28
27
 
28
+
29
29
  def create_learn_mark():
30
30
  if os.name == 'posix':
31
31
  p = Path(tempfile.gettempdir()).joinpath('mindsdb/learn_processes/')
@@ -1,6 +1,5 @@
1
1
  import copy
2
2
  import json
3
- import sys
4
3
  from datetime import datetime
5
4
  from functools import lru_cache
6
5
  from typing import Dict, Optional
@@ -21,8 +20,6 @@ from mindsdb.utilities.functions import cast_row_types
21
20
 
22
21
  from .functions import run_finetune, run_learn
23
22
 
24
- IS_PY36 = sys.version_info[1] <= 6
25
-
26
23
 
27
24
  class NumpyJSONEncoder(json.JSONEncoder):
28
25
  """
@@ -1,4 +1,4 @@
1
- lightwood>=25.3.3.3
2
- lightwood[extra]>=25.3.3.3
3
- lightwood[xai]>=25.3.3.3
4
- type_infer==0.0.20
1
+ lightwood>=25.5.2.2
2
+ lightwood[extra]>=25.5.2.2
3
+ lightwood[xai]>=25.5.2.2
4
+ type_infer==0.0.22
@@ -1,3 +1,12 @@
1
+ import mindsdb.interfaces.storage.db as db
2
+ from mindsdb.integrations.libs.response import RESPONSE_TYPE
3
+ from mindsdb.interfaces.model.model_controller import ModelController
4
+ from mindsdb.interfaces.storage.fs import FsStore
5
+ from mindsdb.integrations.handlers.lightwood_handler.lightwood_handler.lightwood_handler import LightwoodHandler
6
+ from mindsdb.interfaces.database.integrations import integration_controller
7
+ from mindsdb.integrations.utilities.test_utils import PG_HANDLER_NAME, PG_CONNECTION_DATA
8
+ from mindsdb.utilities.config import Config
9
+ from mindsdb.migrations import migrate
1
10
  import os
2
11
  import time
3
12
  import unittest
@@ -7,18 +16,9 @@ temp_dir = tempfile.mkdtemp(dir='/tmp/', prefix='lightwood_handler_test_')
7
16
  os.environ['MINDSDB_STORAGE_DIR'] = os.environ.get('MINDSDB_STORAGE_DIR', temp_dir)
8
17
  os.environ['MINDSDB_DB_CON'] = 'sqlite:///' + os.path.join(os.environ['MINDSDB_STORAGE_DIR'], 'mindsdb.sqlite3.db') + '?check_same_thread=False&timeout=30'
9
18
 
10
- from mindsdb.migrations import migrate
11
19
  migrate.migrate_to_head()
12
20
 
13
- from mindsdb.utilities.config import Config
14
- from mindsdb.integrations.utilities.test_utils import HandlerControllerMock, PG_HANDLER_NAME, PG_CONNECTION_DATA
15
- from mindsdb.interfaces.database.integrations import integration_controller
16
- from mindsdb.integrations.handlers.lightwood_handler.lightwood_handler.lightwood_handler import LightwoodHandler
17
21
  # from mindsdb.integrations.handlers.lightwood_handler.lightwood_handler.utils import load_predictor
18
- from mindsdb.interfaces.storage.fs import FsStore
19
- from mindsdb.interfaces.model.model_controller import ModelController
20
- from mindsdb.integrations.libs.response import RESPONSE_TYPE
21
- import mindsdb.interfaces.storage.db as db
22
22
 
23
23
 
24
24
  # TODO: drop all models and tables when closing tests
@@ -96,7 +96,7 @@ class LightwoodHandlerTest(unittest.TestCase):
96
96
  self.assertTrue(response.type == RESPONSE_TYPE.OK)
97
97
 
98
98
  def test_04_query_predictor_single_where_condition(self):
99
- time.sleep(120) # TODO
99
+ time.sleep(120) # TODO
100
100
  query = f"""
101
101
  SELECT target
102
102
  from {self.test_model_1}
@@ -255,4 +255,4 @@ class LightwoodHandlerTest(unittest.TestCase):
255
255
 
256
256
 
257
257
  if __name__ == "__main__":
258
- unittest.main(failfast=True)
258
+ unittest.main(failfast=True)
@@ -1,2 +1,3 @@
1
1
  pyphoenix
2
2
  phoenixdb
3
+ protobuf==3.20.3