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
@@ -7,45 +7,45 @@ from mindsdb.utilities.render.sqlalchemy_render import SqlalchemyRender
7
7
  from mindsdb.integrations.libs.response import (
8
8
  HandlerStatusResponse as StatusResponse,
9
9
  HandlerResponse as Response,
10
- RESPONSE_TYPE
10
+ RESPONSE_TYPE,
11
11
  )
12
12
 
13
13
  import pandas as pd
14
14
  import pymonetdb as mdb
15
- from .utils.monet_get_id import *
16
- from sqlalchemy_monetdb.dialect import MonetDialect
15
+ from .utils.monet_get_id import schema_id, table_id
16
+ from sqlalchemy_monetdb.dialect import MonetDialect
17
17
 
18
18
  logger = log.getLogger(__name__)
19
19
 
20
20
 
21
21
  class MonetDBHandler(DatabaseHandler):
22
- name= 'monetdb'
22
+ name = "monetdb"
23
23
 
24
24
  def __init__(self, name: str, connection_data: Optional[dict], **kwargs):
25
- """ Initialize the handler
25
+ """Initialize the handler
26
26
  Args:
27
27
  name (str): name of particular handler instance
28
28
  connection_data (dict): parameters for connecting to the database
29
29
  **kwargs: arbitrary keyword arguments.
30
30
  """
31
31
  super().__init__(name)
32
-
32
+
33
33
  self.kwargs = kwargs
34
34
  self.parser = parse_sql
35
- self.database = connection_data['database']
36
- self.user = connection_data['user']
37
- self.password = connection_data['password']
38
- self.schemaName = connection_data['schema_name'] if 'schema_name' in connection_data else None
39
- self.host = connection_data['host']
40
- self.port = connection_data['port']
41
-
35
+ self.database = connection_data["database"]
36
+ self.user = connection_data["user"]
37
+ self.password = connection_data["password"]
38
+ self.schemaName = (
39
+ connection_data["schema_name"] if "schema_name" in connection_data else None
40
+ )
41
+ self.host = connection_data["host"]
42
+ self.port = connection_data["port"]
42
43
 
43
44
  self.connection = None
44
45
  self.is_connected = False
45
-
46
-
46
+
47
47
  def connect(self):
48
- """ Set up any connections required by the handler
48
+ """Set up any connections required by the handler
49
49
  Should return output of check_connection() method after attempting
50
50
  connection. Should switch self.is_connected.
51
51
  Returns:
@@ -56,39 +56,35 @@ class MonetDBHandler(DatabaseHandler):
56
56
 
57
57
  try:
58
58
  self.connection = mdb.connect(
59
- database=self.database,
60
- hostname=self.host,
61
- port=self.port,
59
+ database=self.database,
60
+ hostname=self.host,
61
+ port=self.port,
62
62
  username=self.user,
63
63
  password=self.password,
64
64
  )
65
65
 
66
-
67
- self.is_connected= True
66
+ self.is_connected = True
68
67
  except Exception as e:
69
68
  logger.error(f"Error while connecting to {self.database}, {e}")
70
69
 
71
-
72
70
  return self.connection
73
71
 
74
-
75
72
  def disconnect(self):
76
- """ Close any existing connections
73
+ """Close any existing connections
77
74
  Should switch self.is_connected.
78
75
  """
79
76
  if self.is_connected is False:
80
77
  return
81
78
  try:
82
79
  self.connection.close()
83
- self.is_connected=False
80
+ self.is_connected = False
84
81
  except Exception as e:
85
82
  logger.error(f"Error while disconnecting to {self.database}, {e}")
86
83
 
87
- return
88
-
84
+ return
89
85
 
90
86
  def check_connection(self) -> StatusResponse:
91
- """ Check connection to the handler
87
+ """Check connection to the handler
92
88
  Returns:
93
89
  HandlerStatusResponse
94
90
  """
@@ -99,7 +95,7 @@ class MonetDBHandler(DatabaseHandler):
99
95
  self.connect()
100
96
  responseCode.success = True
101
97
  except Exception as e:
102
- logger.error(f'Error connecting to database {self.database}, {e}!')
98
+ logger.error(f"Error connecting to database {self.database}, {e}!")
103
99
  responseCode.error_message = str(e)
104
100
  finally:
105
101
  if responseCode.success is True and need_to_close:
@@ -109,7 +105,6 @@ class MonetDBHandler(DatabaseHandler):
109
105
 
110
106
  return responseCode
111
107
 
112
-
113
108
  def native_query(self, query: str) -> StatusResponse:
114
109
  """Receive raw query and act upon it somehow.
115
110
  Args:
@@ -120,38 +115,33 @@ class MonetDBHandler(DatabaseHandler):
120
115
  """
121
116
  need_to_close = self.is_connected is False
122
117
  conn = self.connect()
123
- cur=conn.cursor()
118
+ cur = conn.cursor()
124
119
  try:
125
120
  cur.execute(query)
126
-
127
- if len(cur._rows)>0 :
128
- result = cur.fetchall()
121
+
122
+ if len(cur._rows) > 0:
123
+ result = cur.fetchall()
129
124
  response = Response(
130
125
  RESPONSE_TYPE.TABLE,
131
126
  data_frame=pd.DataFrame(
132
- result,
133
- columns=[x[0] for x in cur.description]
134
- )
127
+ result, columns=[x[0] for x in cur.description]
128
+ ),
135
129
  )
136
130
  else:
137
131
  response = Response(RESPONSE_TYPE.OK)
138
132
  self.connection.commit()
139
133
  except Exception as e:
140
- logger.error(f'Error running query: {query} on {self.database}!')
141
- response = Response(
142
- RESPONSE_TYPE.ERROR,
143
- error_message=str(e)
144
- )
134
+ logger.error(f"Error running query: {query} on {self.database}!")
135
+ response = Response(RESPONSE_TYPE.ERROR, error_message=str(e))
145
136
  self.connection.rollback()
146
137
 
147
- cur.close()
138
+ cur.close()
148
139
 
149
140
  if need_to_close is True:
150
141
  self.disconnect()
151
142
 
152
143
  return response
153
144
 
154
-
155
145
  def query(self, query: ASTNode) -> StatusResponse:
156
146
  """Receive query as AST (abstract syntax tree) and act upon it somehow.
157
147
  Args:
@@ -159,25 +149,20 @@ class MonetDBHandler(DatabaseHandler):
159
149
  of query: SELECT, INTSERT, DELETE, etc
160
150
  Returns: HandlerResponse
161
151
  """
162
-
163
-
164
152
 
165
153
  renderer = SqlalchemyRender(MonetDialect)
166
154
  query_str = renderer.get_string(query, with_failback=True)
167
155
  return self.native_query(query_str)
168
156
 
169
-
170
157
  def get_tables(self) -> StatusResponse:
171
- """ Return list of entities
158
+ """Return list of entities
172
159
  Return list of entities that will be accesible as tables.
173
160
  Returns: HandlerResponse: shoud have same columns as information_schema.tables
174
161
  (https://dev.mysql.com/doc/refman/8.0/en/information-schema-tables-table.html)
175
162
  Column 'TABLE_NAME' is mandatory, other is optional.
176
163
  """
177
164
  self.connect()
178
- schema = schema_id(connection=self.connection,schema_name=self.schemaName)
179
-
180
-
165
+ schema = schema_id(connection=self.connection, schema_name=self.schemaName)
181
166
 
182
167
  q = f"""
183
168
  SELECT name as TABLE_NAME
@@ -186,13 +171,11 @@ class MonetDBHandler(DatabaseHandler):
186
171
  AND type = 0
187
172
  AND schema_id = {schema}
188
173
  """
189
-
190
174
 
191
175
  return self.query(q)
192
176
 
193
-
194
177
  def get_columns(self, table_name: str) -> StatusResponse:
195
- """ Returns a list of entity columns
178
+ """Returns a list of entity columns
196
179
  Args:
197
180
  table_name (str): name of one of tables returned by self.get_tables()
198
181
  Returns:
@@ -203,14 +186,14 @@ class MonetDBHandler(DatabaseHandler):
203
186
  python data types (by default it str).
204
187
  """
205
188
  self.connect()
206
- table=table_id(
189
+ table = table_id(
207
190
  connection=self.connection,
208
191
  table_name=table_name,
209
- schema_name=self.schemaName
192
+ schema_name=self.schemaName,
210
193
  )
211
194
 
212
195
  q = f"""
213
- SELECT
196
+ SELECT
214
197
  name as COLUMN_NAME,
215
198
  type as DATA_TYPE
216
199
  FROM sys.columns
@@ -14,28 +14,27 @@ class MonetDBHandlerTest(unittest.TestCase):
14
14
  "password": "monetdb",
15
15
  "database": "demo",
16
16
  }
17
-
18
17
  }
19
- cls.handler = MonetDBHandler('test_monet_handler', cls.kwargs)
18
+ cls.handler = MonetDBHandler("test_monet_handler", cls.kwargs)
20
19
 
21
20
  def test_0_connect(self):
22
21
  self.handler.connect()
23
22
 
24
23
  def test_1_drop_table(self):
25
24
  res = self.handler.query("DROP TABLE IF EXISTS PREM;")
26
- assert res.type is not RESPONSE_TYPE.ERROR
25
+ assert res.type is not RESPONSE_TYPE.ERROR
27
26
 
28
27
  def test_2_create_table(self):
29
28
  res = self.handler.query("CREATE TABLE IF NOT EXISTS PREM (Premi varchar(50));")
30
- assert res.type is not RESPONSE_TYPE.ERROR
29
+ assert res.type is not RESPONSE_TYPE.ERROR
31
30
 
32
31
  def test_3_insert_table(self):
33
32
  res = self.handler.query("INSERT INTO PREM VALUES('Radha <3 Krishna');")
34
- assert res.type is not RESPONSE_TYPE.ERROR
33
+ assert res.type is not RESPONSE_TYPE.ERROR
35
34
 
36
35
  def test_4_get_tables(self):
37
36
  tables = self.handler.get_tables()
38
- assert tables.type is not RESPONSE_TYPE.ERROR
37
+ assert tables.type is not RESPONSE_TYPE.ERROR
39
38
 
40
39
  def test_5_select_query(self):
41
40
  query = "SELECT * FROM PREM;"
@@ -46,5 +45,5 @@ class MonetDBHandlerTest(unittest.TestCase):
46
45
  self.handler.check_connection()
47
46
 
48
47
 
49
- if __name__ == '__main__':
50
- unittest.main()
48
+ if __name__ == "__main__":
49
+ unittest.main()
@@ -1,34 +1,35 @@
1
- from sqlalchemy import exc
1
+ from sqlalchemy import exc
2
+
2
3
 
3
4
  def schema_id(connection, schema_name=None):
4
5
  """Fetch the id for schema"""
5
- cur=connection.cursor()
6
+ cur = connection.cursor()
6
7
  if schema_name is None:
7
8
  cur.execute("SELECT current_schema")
8
- schema_name=cur.fetchall()[0][0]
9
+ schema_name = cur.fetchall()[0][0]
9
10
 
10
11
  query = f"""
11
12
  SELECT id
12
13
  FROM sys.schemas
13
14
  WHERE name = '{schema_name}'
14
15
  """
15
-
16
+
16
17
  cur.execute(query)
17
18
 
18
19
  try:
19
20
  schema_id = cur.fetchall()[0][0]
20
- except:
21
+ except Exception:
21
22
  raise exc.InvalidRequestError(schema_name)
22
-
23
+
23
24
  return schema_id
24
25
 
25
-
26
+
26
27
  def table_id(connection, table_name, schema_name=None):
27
28
  """Fetch the id for schema.table_name, defaulting to current schema if
28
- schema is None
29
+ schema is None
29
30
  """
30
31
 
31
- schema_idm = schema_id(connection=connection,schema_name=schema_name)
32
+ schema_idm = schema_id(connection=connection, schema_name=schema_name)
32
33
 
33
34
  q = f"""
34
35
  SELECT id
@@ -36,15 +37,13 @@ def table_id(connection, table_name, schema_name=None):
36
37
  WHERE name = '{table_name}'
37
38
  AND schema_id = {schema_idm}
38
39
  """
39
-
40
+
40
41
  cur = connection.cursor()
41
42
  cur.execute(q)
42
43
 
43
44
  try:
44
- table_id = cur.fetchall()[0][0]
45
- except:
45
+ table_id = cur.fetchall()[0][0]
46
+ except Exception:
46
47
  raise exc.NoSuchTableError(table_name)
47
48
 
48
-
49
-
50
49
  return table_id
@@ -6,4 +6,4 @@ __author__ = 'Pranav Prajapati'
6
6
  __github__ = 'https://github.com/mindsdb/mindsdb'
7
7
  __pypi__ = 'https://pypi.org/project/mindsdb/'
8
8
  __license__ = 'MIT'
9
- __copyright__ = 'Copyright 2022- mindsdb'
9
+ __copyright__ = 'Copyright 2022- mindsdb'
@@ -16,4 +16,4 @@ permanent = False
16
16
 
17
17
  __all__ = [
18
18
  'Handler', 'version', 'name', 'type', 'title', 'description', 'import_error', 'icon_path'
19
- ]
19
+ ]
@@ -2,10 +2,7 @@ from typing import Optional, Dict
2
2
  import pandas as pd
3
3
  import requests
4
4
 
5
- from monkeylearn import MonkeyLearn
6
-
7
5
  from mindsdb.integrations.libs.base import BaseMLEngine
8
-
9
6
  from mindsdb.integrations.utilities.handler_utils import get_api_key
10
7
 
11
8
 
@@ -13,7 +10,7 @@ class monkeylearnHandler(BaseMLEngine):
13
10
  name = "monkeylearn"
14
11
 
15
12
  @staticmethod
16
- def create_validations(self,args=None,**kwargs):
13
+ def create_validations(self, args=None, **kwargs):
17
14
 
18
15
  if "using" in args:
19
16
  args = args["using"]
@@ -78,4 +75,4 @@ class monkeylearnHandler(BaseMLEngine):
78
75
  # pre-trained monkeylearn models guide about what industries they can be used
79
76
  description['industries'] = response.body['industries']
80
77
  des_df = pd.DataFrame([description])
81
- return des_df
78
+ return des_df
@@ -14,6 +14,7 @@ class MSGraphAPIOneDriveClient(MSGraphAPIBaseClient):
14
14
  This client is used for accessing the Microsoft OneDrive specific endpoints of the Microsoft Graph API.
15
15
  Several common methods for submitting requests, fetching data, etc. are inherited from the base class.
16
16
  """
17
+
17
18
  def __init__(self, access_token: Text) -> None:
18
19
  super().__init__(access_token)
19
20
 
@@ -9,7 +9,7 @@ from requests.exceptions import RequestException
9
9
 
10
10
  from mindsdb.integrations.handlers.ms_one_drive_handler.ms_graph_api_one_drive_client import MSGraphAPIOneDriveClient
11
11
  from mindsdb.integrations.handlers.ms_one_drive_handler.ms_one_drive_tables import FileTable, ListFilesTable
12
- from mindsdb.integrations.utilities.handlers.auth_utilities import MSGraphAPIDelegatedPermissionsManager
12
+ from mindsdb.integrations.utilities.handlers.auth_utilities.microsoft import MSGraphAPIDelegatedPermissionsManager
13
13
  from mindsdb.integrations.utilities.handlers.auth_utilities.exceptions import AuthException
14
14
  from mindsdb.integrations.libs.response import (
15
15
  HandlerResponse as Response,
@@ -0,0 +1,2 @@
1
+ msal
2
+ -r mindsdb/integrations/utilities/handlers/auth_utilities/microsoft/requirements.txt
@@ -28,7 +28,7 @@ class MSGraphAPITeamsClient(MSGraphAPIBaseClient, ABC):
28
28
  except RequestException as request_error:
29
29
  logger.error(f"Failed to check connection to Microsoft Teams: {request_error}")
30
30
  return False
31
-
31
+
32
32
  def get_teams(self) -> List[Dict]:
33
33
  """
34
34
  Get teams from Microsoft Teams.
@@ -37,7 +37,7 @@ class MSGraphAPITeamsClient(MSGraphAPIBaseClient, ABC):
37
37
  List[Dict]: The teams data.
38
38
  """
39
39
  return self._get_all_groups()
40
-
40
+
41
41
  def get_channels(self, group_id: Text = None, channel_ids: List[Text] = None) -> List[Dict]:
42
42
  """
43
43
  Get channels from Microsoft Teams.
@@ -57,7 +57,7 @@ class MSGraphAPITeamsClient(MSGraphAPIBaseClient, ABC):
57
57
  return self._get_channels_across_all_groups_by_ids(channel_ids)
58
58
  else:
59
59
  return self._get_all_channels_across_all_groups()
60
-
60
+
61
61
  def get_channel_messages(self, group_id: Text, channel_id: Text, message_ids: List[Text] = None) -> List[Dict]:
62
62
  """
63
63
  Get channel messages from Microsoft Teams.
@@ -74,7 +74,7 @@ class MSGraphAPITeamsClient(MSGraphAPIBaseClient, ABC):
74
74
  return self._get_messages_in_channel_by_ids(group_id, channel_id, message_ids)
75
75
  else:
76
76
  return self._get_all_messages_in_channel(group_id, channel_id)
77
-
77
+
78
78
  def get_chats(self, chat_ids: List[Text] = None) -> List[Dict]:
79
79
  """
80
80
  Get chats from Microsoft Teams.
@@ -89,7 +89,7 @@ class MSGraphAPITeamsClient(MSGraphAPIBaseClient, ABC):
89
89
  return self._get_chats_by_ids(chat_ids)
90
90
  else:
91
91
  return self._get_all_chats()
92
-
92
+
93
93
  def get_chat_messages(self, chat_id: Text, message_ids: List[Text] = None) -> List[Dict]:
94
94
  """
95
95
  Get chat messages from Microsoft Teams.
@@ -118,7 +118,7 @@ class MSGraphAPITeamsClient(MSGraphAPIBaseClient, ABC):
118
118
  self._group_ids = [group["id"] for group in groups]
119
119
 
120
120
  return self._group_ids
121
-
121
+
122
122
  @abstractmethod
123
123
  def _get_all_groups(self) -> List[Dict]:
124
124
  """
@@ -198,7 +198,7 @@ class MSGraphAPITeamsClient(MSGraphAPIBaseClient, ABC):
198
198
  channel.update({"teamId": group_id})
199
199
 
200
200
  return channel
201
-
201
+
202
202
  def _get_channels_in_group_by_ids(self, group_id: Text, channel_ids: List[Text]) -> List[Dict]:
203
203
  """
204
204
  Get channels by their IDs and the ID of the group that they belong to.
@@ -215,7 +215,7 @@ class MSGraphAPITeamsClient(MSGraphAPIBaseClient, ABC):
215
215
  channels.append(self._get_channel_in_group_by_id(group_id, channel_id))
216
216
 
217
217
  return channels
218
-
218
+
219
219
  def _get_all_channels_in_group(self, group_id: Text) -> List[Dict]:
220
220
  """
221
221
  Get all channels of a group by its ID.
@@ -231,7 +231,7 @@ class MSGraphAPITeamsClient(MSGraphAPIBaseClient, ABC):
231
231
  channel["teamId"] = group_id
232
232
 
233
233
  return channels
234
-
234
+
235
235
  def _get_all_channels_across_all_groups(self) -> List[Dict]:
236
236
  """
237
237
  Get all channels across all groups related to Microsoft Teams.
@@ -244,7 +244,7 @@ class MSGraphAPITeamsClient(MSGraphAPIBaseClient, ABC):
244
244
  channels += self._get_all_channels_in_group(group_id)
245
245
 
246
246
  return channels
247
-
247
+
248
248
  def _get_channels_across_all_groups_by_ids(self, channel_ids: List[Text]) -> List[Dict]:
249
249
  """
250
250
  Get channels by their IDs.
@@ -258,7 +258,7 @@ class MSGraphAPITeamsClient(MSGraphAPIBaseClient, ABC):
258
258
  channels = self._get_all_channels_across_all_groups()
259
259
 
260
260
  return [channel for channel in channels if channel["id"] in channel_ids]
261
-
261
+
262
262
  def _get_message_in_channel_by_id(self, group_id: Text, channel_id: Text, message_id: Text) -> Dict:
263
263
  """
264
264
  Get a message by its ID, the ID of the group that it belongs to, and the ID of the channel that it belongs to.
@@ -272,7 +272,7 @@ class MSGraphAPITeamsClient(MSGraphAPIBaseClient, ABC):
272
272
  Dict: The message data.
273
273
  """
274
274
  return self.fetch_data_json(f"teams/{group_id}/channels/{channel_id}/messages/{message_id}")
275
-
275
+
276
276
  def _get_messages_in_channel_by_ids(self, group_id: Text, channel_id: Text, message_ids: List[Text]) -> List[Dict]:
277
277
  """
278
278
  Get messages by their IDs, the ID of the group that they belong to, and the ID of the channel that they belong to.
@@ -310,7 +310,7 @@ class MSGraphAPITeamsClient(MSGraphAPIBaseClient, ABC):
310
310
  break
311
311
 
312
312
  return messages[:limit]
313
-
313
+
314
314
  def _get_chats_by_ids(self, chat_ids: List[Text]) -> List[Dict]:
315
315
  """
316
316
  Get chats by their IDs.
@@ -326,7 +326,7 @@ class MSGraphAPITeamsClient(MSGraphAPIBaseClient, ABC):
326
326
  chats.append(self._get_chat_by_id(chat_id))
327
327
 
328
328
  return chats
329
-
329
+
330
330
  def _get_messages_in_chat_by_ids(self, chat_id: Text, message_ids: List[Text]) -> List[Dict]:
331
331
  """
332
332
  Get messages by their IDs and the ID of the chat that they belong to.
@@ -351,7 +351,7 @@ class MSGraphAPITeamsApplicationPermissionsClient(MSGraphAPITeamsClient):
351
351
  This client is used for accessing the Microsoft Teams specific endpoints of the Microsoft Graph API.
352
352
  Several common methods for submitting requests, fetching data, etc. are inherited from the base class.
353
353
  """
354
-
354
+
355
355
  def _get_all_groups(self) -> List[Dict]:
356
356
  """
357
357
  Get all groups related to Microsoft Teams.
@@ -363,7 +363,7 @@ class MSGraphAPITeamsApplicationPermissionsClient(MSGraphAPITeamsClient):
363
363
  "/groups",
364
364
  params={"$filter": "resourceProvisioningOptions/Any(x:x eq 'Team')"}
365
365
  )
366
-
366
+
367
367
  def _get_chat_by_id(self, chat_id: Text) -> Dict:
368
368
  """
369
369
  Get a chat by its ID.
@@ -375,7 +375,7 @@ class MSGraphAPITeamsApplicationPermissionsClient(MSGraphAPITeamsClient):
375
375
  Dict: The chat data.
376
376
  """
377
377
  return self.fetch_data_json(f"chats/{chat_id}")
378
-
378
+
379
379
  def _get_all_chats(self, limit: int = None) -> List[Dict]:
380
380
  """
381
381
  Get all chats related to Microsoft Teams.
@@ -400,7 +400,7 @@ class MSGraphAPITeamsApplicationPermissionsClient(MSGraphAPITeamsClient):
400
400
  Dict: The message data.
401
401
  """
402
402
  return self.fetch_data_json(f"chats/{chat_id}/messages/{message_id}")
403
-
403
+
404
404
  def _get_all_messages_in_chat(self, chat_id: Text, limit: int = None) -> List[Dict]:
405
405
  """
406
406
  Get messages of a chat by its ID.
@@ -421,13 +421,13 @@ class MSGraphAPITeamsApplicationPermissionsClient(MSGraphAPITeamsClient):
421
421
  return messages[:limit]
422
422
 
423
423
 
424
- class MSGraphAPITeamsDelegatedPermissionsClient(MSGraphAPITeamsClient):
424
+ class MSGraphAPITeamsDelegatedPermissionsClient(MSGraphAPITeamsClient):
425
425
  """
426
426
  The Microsoft Graph API client for the Microsoft Teams handler with delegated permissions.
427
427
  This client is used for accessing the Microsoft Teams specific endpoints of the Microsoft Graph API.
428
428
  Several common methods for submitting requests, fetching data, etc. are inherited from the base class.
429
429
  """
430
-
430
+
431
431
  def _get_all_groups(self) -> List[Dict]:
432
432
  """
433
433
  Get all groups that the signed in user is a member of.
@@ -436,7 +436,7 @@ class MSGraphAPITeamsDelegatedPermissionsClient(MSGraphAPITeamsClient):
436
436
  List[Dict]: The groups data.
437
437
  """
438
438
  return self.fetch_data_json("me/joinedTeams")
439
-
439
+
440
440
  def _get_chat_by_id(self, chat_id: Text) -> Dict:
441
441
  """
442
442
  Get a chat by its ID.
@@ -467,7 +467,7 @@ class MSGraphAPITeamsDelegatedPermissionsClient(MSGraphAPITeamsClient):
467
467
  break
468
468
 
469
469
  return chats[:limit]
470
-
470
+
471
471
  def _get_message_in_chat_by_id(self, chat_id: Text, message_id: Text) -> Dict:
472
472
  """
473
473
  Get a message by its ID and the ID of the chat that it belongs to.
@@ -480,7 +480,7 @@ class MSGraphAPITeamsDelegatedPermissionsClient(MSGraphAPITeamsClient):
480
480
  Dict: The message data.
481
481
  """
482
482
  return self.fetch_data_json(f"me/chats/{chat_id}/messages/{message_id}")
483
-
483
+
484
484
  def _get_all_messages_in_chat(self, chat_id: Text, limit: int = None) -> List[Dict]:
485
485
  """
486
486
  Get messages of a chat by its ID.
@@ -1,4 +1,4 @@
1
- from typing import Callable, Dict, Text, Callable, Union
1
+ from typing import Dict, Text, Callable, Union
2
2
 
3
3
  from botbuilder.schema import Activity, ActivityTypes
4
4
  from botbuilder.schema import ChannelAccount
@@ -19,7 +19,7 @@ from mindsdb.integrations.libs.response import (
19
19
  HandlerStatusResponse as StatusResponse,
20
20
  )
21
21
  from mindsdb.integrations.libs.api_handler import APIChatHandler
22
- from mindsdb.integrations.utilities.handlers.auth_utilities import (
22
+ from mindsdb.integrations.utilities.handlers.auth_utilities.microsoft import (
23
23
  MSGraphAPIApplicationPermissionsManager,
24
24
  MSGraphAPIDelegatedPermissionsManager
25
25
  )
@@ -233,7 +233,7 @@ class MSTeamsHandler(APIChatHandler):
233
233
  callback(
234
234
  chat_id=request['conversation']['id'],
235
235
  message=chat_bot_message
236
- )
236
+ )
237
237
 
238
238
  @chatbot_only
239
239
  def respond(self, message: ChatBotMessage) -> None: