MindsDB 25.5.3.0__py3-none-any.whl → 25.5.4.1__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 (313) hide show
  1. mindsdb/__about__.py +8 -8
  2. mindsdb/__main__.py +127 -79
  3. mindsdb/api/a2a/__init__.py +0 -0
  4. mindsdb/api/a2a/__main__.py +144 -0
  5. mindsdb/api/a2a/agent.py +308 -0
  6. mindsdb/api/a2a/common/__init__.py +0 -0
  7. mindsdb/api/a2a/common/server/__init__.py +4 -0
  8. mindsdb/api/a2a/common/server/server.py +164 -0
  9. mindsdb/api/a2a/common/server/task_manager.py +287 -0
  10. mindsdb/api/a2a/common/server/utils.py +28 -0
  11. mindsdb/api/a2a/common/types.py +365 -0
  12. mindsdb/api/a2a/constants.py +9 -0
  13. mindsdb/api/a2a/run_a2a.py +86 -0
  14. mindsdb/api/a2a/task_manager.py +560 -0
  15. mindsdb/api/executor/command_executor.py +185 -309
  16. mindsdb/api/executor/datahub/classes/response.py +5 -2
  17. mindsdb/api/executor/datahub/datanodes/integration_datanode.py +39 -72
  18. mindsdb/api/executor/planner/query_planner.py +10 -1
  19. mindsdb/api/executor/sql_query/result_set.py +185 -52
  20. mindsdb/api/executor/sql_query/sql_query.py +1 -1
  21. mindsdb/api/executor/sql_query/steps/apply_predictor_step.py +9 -12
  22. mindsdb/api/executor/sql_query/steps/fetch_dataframe.py +8 -10
  23. mindsdb/api/executor/sql_query/steps/fetch_dataframe_partition.py +5 -44
  24. mindsdb/api/executor/sql_query/steps/insert_step.py +24 -15
  25. mindsdb/api/executor/sql_query/steps/join_step.py +1 -1
  26. mindsdb/api/executor/sql_query/steps/project_step.py +1 -1
  27. mindsdb/api/executor/sql_query/steps/sql_steps.py +1 -1
  28. mindsdb/api/executor/sql_query/steps/subselect_step.py +4 -8
  29. mindsdb/api/executor/sql_query/steps/union_step.py +1 -3
  30. mindsdb/api/http/initialize.py +99 -83
  31. mindsdb/api/http/namespaces/analysis.py +3 -3
  32. mindsdb/api/http/namespaces/config.py +61 -86
  33. mindsdb/api/http/namespaces/file.py +8 -2
  34. mindsdb/api/http/namespaces/sql.py +13 -27
  35. mindsdb/api/mcp/start.py +42 -5
  36. mindsdb/api/mysql/mysql_proxy/data_types/mysql_packet.py +0 -1
  37. mindsdb/api/mysql/mysql_proxy/data_types/mysql_packets/binary_resultset_row_package.py +52 -19
  38. mindsdb/api/mysql/mysql_proxy/executor/mysql_executor.py +8 -10
  39. mindsdb/api/mysql/mysql_proxy/libs/constants/mysql.py +54 -38
  40. mindsdb/api/mysql/mysql_proxy/mysql_proxy.py +82 -115
  41. mindsdb/api/mysql/mysql_proxy/utilities/dump.py +351 -0
  42. mindsdb/api/postgres/postgres_proxy/executor/executor.py +1 -1
  43. mindsdb/api/postgres/postgres_proxy/postgres_proxy.py +5 -6
  44. mindsdb/integrations/handlers/altibase_handler/altibase_handler.py +26 -27
  45. mindsdb/integrations/handlers/altibase_handler/connection_args.py +13 -13
  46. mindsdb/integrations/handlers/altibase_handler/tests/test_altibase_handler.py +8 -8
  47. mindsdb/integrations/handlers/altibase_handler/tests/test_altibase_handler_dsn.py +13 -13
  48. mindsdb/integrations/handlers/anthropic_handler/__init__.py +2 -2
  49. mindsdb/integrations/handlers/anthropic_handler/anthropic_handler.py +1 -3
  50. mindsdb/integrations/handlers/aurora_handler/aurora_handler.py +1 -0
  51. mindsdb/integrations/handlers/autosklearn_handler/autosklearn_handler.py +1 -1
  52. mindsdb/integrations/handlers/autosklearn_handler/config.py +0 -1
  53. mindsdb/integrations/handlers/bigquery_handler/bigquery_handler.py +1 -1
  54. mindsdb/integrations/handlers/bigquery_handler/tests/test_bigquery_handler.py +1 -1
  55. mindsdb/integrations/handlers/binance_handler/binance_handler.py +1 -0
  56. mindsdb/integrations/handlers/binance_handler/binance_tables.py +3 -4
  57. mindsdb/integrations/handlers/byom_handler/__init__.py +0 -1
  58. mindsdb/integrations/handlers/byom_handler/requirements.txt +1 -2
  59. mindsdb/integrations/handlers/ckan_handler/ckan_handler.py +3 -0
  60. mindsdb/integrations/handlers/clickhouse_handler/__init__.py +1 -1
  61. mindsdb/integrations/handlers/cloud_spanner_handler/tests/test_cloud_spanner_handler.py +0 -2
  62. mindsdb/integrations/handlers/cloud_sql_handler/cloud_sql_handler.py +0 -1
  63. mindsdb/integrations/handlers/cohere_handler/__init__.py +1 -1
  64. mindsdb/integrations/handlers/cohere_handler/cohere_handler.py +11 -13
  65. mindsdb/integrations/handlers/confluence_handler/confluence_tables.py +6 -0
  66. mindsdb/integrations/handlers/databend_handler/connection_args.py +1 -1
  67. mindsdb/integrations/handlers/databend_handler/databend_handler.py +4 -4
  68. mindsdb/integrations/handlers/databend_handler/tests/__init__.py +0 -1
  69. mindsdb/integrations/handlers/databend_handler/tests/test_databend_handler.py +1 -1
  70. mindsdb/integrations/handlers/derby_handler/connection_args.py +1 -1
  71. mindsdb/integrations/handlers/derby_handler/derby_handler.py +14 -22
  72. mindsdb/integrations/handlers/derby_handler/tests/test_derby_handler.py +6 -6
  73. mindsdb/integrations/handlers/discord_handler/discord_handler.py +5 -5
  74. mindsdb/integrations/handlers/discord_handler/discord_tables.py +3 -3
  75. mindsdb/integrations/handlers/discord_handler/tests/test_discord.py +5 -3
  76. mindsdb/integrations/handlers/dockerhub_handler/dockerhub.py +3 -3
  77. mindsdb/integrations/handlers/dockerhub_handler/dockerhub_handler.py +2 -2
  78. mindsdb/integrations/handlers/dockerhub_handler/dockerhub_tables.py +57 -54
  79. mindsdb/integrations/handlers/dremio_handler/__init__.py +2 -2
  80. mindsdb/integrations/handlers/druid_handler/__init__.py +1 -1
  81. mindsdb/integrations/handlers/druid_handler/druid_handler.py +2 -2
  82. mindsdb/integrations/handlers/edgelessdb_handler/tests/test_edgelessdb_handler.py +9 -9
  83. mindsdb/integrations/handlers/email_handler/email_client.py +1 -1
  84. mindsdb/integrations/handlers/email_handler/email_ingestor.py +1 -1
  85. mindsdb/integrations/handlers/email_handler/email_tables.py +0 -1
  86. mindsdb/integrations/handlers/email_handler/settings.py +0 -1
  87. mindsdb/integrations/handlers/eventstoredb_handler/eventstoredb_handler.py +2 -1
  88. mindsdb/integrations/handlers/firebird_handler/firebird_handler.py +1 -1
  89. mindsdb/integrations/handlers/flaml_handler/flaml_handler.py +9 -9
  90. mindsdb/integrations/handlers/frappe_handler/frappe_client.py +5 -5
  91. mindsdb/integrations/handlers/frappe_handler/frappe_handler.py +6 -5
  92. mindsdb/integrations/handlers/frappe_handler/frappe_tables.py +2 -2
  93. mindsdb/integrations/handlers/github_handler/connection_args.py +2 -2
  94. mindsdb/integrations/handlers/github_handler/github_handler.py +1 -8
  95. mindsdb/integrations/handlers/github_handler/github_tables.py +13 -24
  96. mindsdb/integrations/handlers/gitlab_handler/gitlab_handler.py +2 -1
  97. mindsdb/integrations/handlers/gitlab_handler/gitlab_tables.py +1 -4
  98. mindsdb/integrations/handlers/gmail_handler/gmail_handler.py +6 -13
  99. mindsdb/integrations/handlers/google_books_handler/google_books_handler.py +2 -1
  100. mindsdb/integrations/handlers/google_books_handler/google_books_tables.py +0 -3
  101. mindsdb/integrations/handlers/google_calendar_handler/google_calendar_handler.py +4 -4
  102. mindsdb/integrations/handlers/google_calendar_handler/google_calendar_tables.py +2 -6
  103. mindsdb/integrations/handlers/google_content_shopping_handler/google_content_shopping_handler.py +3 -2
  104. mindsdb/integrations/handlers/google_content_shopping_handler/google_content_shopping_tables.py +0 -3
  105. mindsdb/integrations/handlers/google_fit_handler/google_fit_handler.py +10 -12
  106. mindsdb/integrations/handlers/google_fit_handler/google_fit_tables.py +11 -13
  107. mindsdb/integrations/handlers/google_search_handler/google_search_handler.py +2 -1
  108. mindsdb/integrations/handlers/google_search_handler/google_search_tables.py +0 -3
  109. mindsdb/integrations/handlers/groq_handler/__init__.py +3 -3
  110. mindsdb/integrations/handlers/hackernews_handler/hn_handler.py +5 -7
  111. mindsdb/integrations/handlers/hackernews_handler/hn_table.py +6 -7
  112. mindsdb/integrations/handlers/hive_handler/tests/test_hive_handler.py +1 -1
  113. mindsdb/integrations/handlers/hsqldb_handler/connection_args.py +6 -6
  114. mindsdb/integrations/handlers/hsqldb_handler/hsqldb_handler.py +4 -3
  115. mindsdb/integrations/handlers/huggingface_api_handler/exceptions.py +1 -1
  116. mindsdb/integrations/handlers/huggingface_api_handler/huggingface_api_handler.py +1 -8
  117. mindsdb/integrations/handlers/huggingface_handler/huggingface_handler.py +6 -6
  118. mindsdb/integrations/handlers/huggingface_handler/requirements.txt +1 -1
  119. mindsdb/integrations/handlers/huggingface_handler/requirements_cpu.txt +1 -1
  120. mindsdb/integrations/handlers/ignite_handler/ignite_handler.py +2 -1
  121. mindsdb/integrations/handlers/impala_handler/impala_handler.py +9 -12
  122. mindsdb/integrations/handlers/impala_handler/tests/test_impala_handler.py +11 -11
  123. mindsdb/integrations/handlers/influxdb_handler/influxdb_handler.py +10 -13
  124. mindsdb/integrations/handlers/influxdb_handler/influxdb_tables.py +20 -20
  125. mindsdb/integrations/handlers/informix_handler/__about__.py +8 -8
  126. mindsdb/integrations/handlers/informix_handler/__init__.py +12 -5
  127. mindsdb/integrations/handlers/informix_handler/informix_handler.py +99 -133
  128. mindsdb/integrations/handlers/informix_handler/tests/test_informix_handler.py +13 -11
  129. mindsdb/integrations/handlers/ingres_handler/__about__.py +0 -1
  130. mindsdb/integrations/handlers/ingres_handler/ingres_handler.py +1 -0
  131. mindsdb/integrations/handlers/jira_handler/jira_handler.py +4 -4
  132. mindsdb/integrations/handlers/jira_handler/jira_tables.py +9 -9
  133. mindsdb/integrations/handlers/kinetica_handler/__init__.py +0 -1
  134. mindsdb/integrations/handlers/lancedb_handler/requirements.txt +0 -1
  135. mindsdb/integrations/handlers/langchain_handler/langchain_handler.py +4 -4
  136. mindsdb/integrations/handlers/langchain_handler/tools.py +9 -10
  137. mindsdb/integrations/handlers/leonardoai_handler/__init__.py +1 -1
  138. mindsdb/integrations/handlers/lightwood_handler/functions.py +2 -2
  139. mindsdb/integrations/handlers/lightwood_handler/lightwood_handler.py +0 -1
  140. mindsdb/integrations/handlers/lightwood_handler/tests/test_lightwood_handler.py +11 -11
  141. mindsdb/integrations/handlers/litellm_handler/litellm_handler.py +37 -20
  142. mindsdb/integrations/handlers/llama_index_handler/llama_index_handler.py +4 -4
  143. mindsdb/integrations/handlers/llama_index_handler/settings.py +10 -9
  144. mindsdb/integrations/handlers/materialize_handler/tests/test_materialize_handler.py +8 -10
  145. mindsdb/integrations/handlers/matrixone_handler/matrixone_handler.py +4 -4
  146. mindsdb/integrations/handlers/matrixone_handler/tests/test_matrixone_handler.py +8 -9
  147. mindsdb/integrations/handlers/maxdb_handler/connection_args.py +25 -25
  148. mindsdb/integrations/handlers/maxdb_handler/maxdb_handler.py +1 -0
  149. mindsdb/integrations/handlers/mediawiki_handler/mediawiki_handler.py +3 -2
  150. mindsdb/integrations/handlers/mediawiki_handler/mediawiki_tables.py +1 -1
  151. mindsdb/integrations/handlers/mendeley_handler/__about__.py +1 -1
  152. mindsdb/integrations/handlers/mendeley_handler/__init__.py +2 -2
  153. mindsdb/integrations/handlers/mendeley_handler/mendeley_handler.py +48 -56
  154. mindsdb/integrations/handlers/mendeley_handler/mendeley_tables.py +24 -29
  155. mindsdb/integrations/handlers/mendeley_handler/tests/test_mendeley_handler.py +19 -17
  156. mindsdb/integrations/handlers/merlion_handler/merlion_handler.py +5 -4
  157. mindsdb/integrations/handlers/minds_endpoint_handler/__init__.py +3 -3
  158. mindsdb/integrations/handlers/mlflow_handler/mlflow_handler.py +58 -36
  159. mindsdb/integrations/handlers/monetdb_handler/__about__.py +8 -8
  160. mindsdb/integrations/handlers/monetdb_handler/__init__.py +15 -5
  161. mindsdb/integrations/handlers/monetdb_handler/connection_args.py +17 -18
  162. mindsdb/integrations/handlers/monetdb_handler/monetdb_handler.py +40 -57
  163. mindsdb/integrations/handlers/monetdb_handler/tests/test_monetdb_handler.py +7 -8
  164. mindsdb/integrations/handlers/monetdb_handler/utils/monet_get_id.py +13 -14
  165. mindsdb/integrations/handlers/monkeylearn_handler/__about__.py +1 -1
  166. mindsdb/integrations/handlers/monkeylearn_handler/__init__.py +1 -1
  167. mindsdb/integrations/handlers/monkeylearn_handler/monkeylearn_handler.py +2 -5
  168. mindsdb/integrations/handlers/ms_one_drive_handler/ms_graph_api_one_drive_client.py +1 -0
  169. mindsdb/integrations/handlers/ms_one_drive_handler/ms_one_drive_handler.py +1 -1
  170. mindsdb/integrations/handlers/ms_teams_handler/ms_graph_api_teams_client.py +23 -23
  171. mindsdb/integrations/handlers/ms_teams_handler/ms_teams_handler.py +3 -3
  172. mindsdb/integrations/handlers/ms_teams_handler/ms_teams_tables.py +10 -5
  173. mindsdb/integrations/handlers/mssql_handler/mssql_handler.py +73 -8
  174. mindsdb/integrations/handlers/mysql_handler/__about__.py +8 -8
  175. mindsdb/integrations/handlers/mysql_handler/__init__.py +15 -5
  176. mindsdb/integrations/handlers/mysql_handler/connection_args.py +43 -47
  177. mindsdb/integrations/handlers/mysql_handler/mysql_handler.py +101 -34
  178. mindsdb/integrations/handlers/mysql_handler/settings.py +15 -13
  179. mindsdb/integrations/handlers/neuralforecast_handler/neuralforecast_handler.py +1 -1
  180. mindsdb/integrations/handlers/newsapi_handler/newsapi_handler.py +1 -1
  181. mindsdb/integrations/handlers/newsapi_handler/tests/test_newsapi_handler.py +4 -4
  182. mindsdb/integrations/handlers/nuo_jdbc_handler/connection_args.py +2 -2
  183. mindsdb/integrations/handlers/nuo_jdbc_handler/nuo_jdbc_handler.py +28 -36
  184. mindsdb/integrations/handlers/nuo_jdbc_handler/tests/test_nuo_handler.py +5 -5
  185. mindsdb/integrations/handlers/oceanbase_handler/oceanbase_handler.py +0 -1
  186. mindsdb/integrations/handlers/oceanbase_handler/tests/test_oceanbase_handler.py +8 -10
  187. mindsdb/integrations/handlers/ollama_handler/ollama_handler.py +3 -3
  188. mindsdb/integrations/handlers/opengauss_handler/tests/test_opengauss_handler.py +1 -2
  189. mindsdb/integrations/handlers/openstreetmap_handler/__init__.py +7 -7
  190. mindsdb/integrations/handlers/oracle_handler/connection_args.py +6 -0
  191. mindsdb/integrations/handlers/oracle_handler/oracle_handler.py +77 -11
  192. mindsdb/integrations/handlers/orioledb_handler/tests/test_orioledb_handler.py +8 -10
  193. mindsdb/integrations/handlers/palm_handler/__about__.py +1 -1
  194. mindsdb/integrations/handlers/palm_handler/__init__.py +1 -1
  195. mindsdb/integrations/handlers/palm_handler/palm_handler.py +1 -3
  196. mindsdb/integrations/handlers/paypal_handler/paypal_handler.py +2 -2
  197. mindsdb/integrations/handlers/paypal_handler/paypal_tables.py +15 -14
  198. mindsdb/integrations/handlers/pgvector_handler/pgvector_handler.py +53 -10
  199. mindsdb/integrations/handlers/phoenix_handler/__init__.py +1 -1
  200. mindsdb/integrations/handlers/phoenix_handler/phoenix_handler.py +1 -0
  201. mindsdb/integrations/handlers/pinot_handler/__init__.py +1 -1
  202. mindsdb/integrations/handlers/pinot_handler/pinot_handler.py +3 -2
  203. mindsdb/integrations/handlers/plaid_handler/plaid_handler.py +13 -13
  204. mindsdb/integrations/handlers/plaid_handler/plaid_tables.py +10 -12
  205. mindsdb/integrations/handlers/plaid_handler/utils.py +4 -6
  206. mindsdb/integrations/handlers/planetscale_handler/planetscale_handler.py +1 -4
  207. mindsdb/integrations/handlers/portkey_handler/__init__.py +2 -2
  208. mindsdb/integrations/handlers/postgres_handler/postgres_handler.py +105 -24
  209. mindsdb/integrations/handlers/postgres_handler/tests/test_postgres_handler.py +11 -6
  210. mindsdb/integrations/handlers/questdb_handler/questdb_handler.py +1 -2
  211. mindsdb/integrations/handlers/questdb_handler/tests/test_questdb_handler.py +2 -3
  212. mindsdb/integrations/handlers/quickbooks_handler/quickbooks_handler.py +6 -8
  213. mindsdb/integrations/handlers/quickbooks_handler/quickbooks_table.py +10 -10
  214. mindsdb/integrations/handlers/rag_handler/ingest.py +2 -2
  215. mindsdb/integrations/handlers/rag_handler/rag_handler.py +1 -1
  216. mindsdb/integrations/handlers/rag_handler/settings.py +1 -1
  217. mindsdb/integrations/handlers/reddit_handler/reddit_handler.py +2 -7
  218. mindsdb/integrations/handlers/reddit_handler/reddit_tables.py +2 -3
  219. mindsdb/integrations/handlers/replicate_handler/replicate_handler.py +6 -6
  220. mindsdb/integrations/handlers/rocket_chat_handler/rocket_chat_handler.py +1 -2
  221. mindsdb/integrations/handlers/rocket_chat_handler/rocket_chat_tables.py +0 -3
  222. mindsdb/integrations/handlers/rockset_handler/connection_args.py +14 -14
  223. mindsdb/integrations/handlers/rockset_handler/tests/test_rockset_handler.py +1 -0
  224. mindsdb/integrations/handlers/scylla_handler/scylla_handler.py +6 -5
  225. mindsdb/integrations/handlers/sendinblue_handler/sendinblue_handler.py +2 -1
  226. mindsdb/integrations/handlers/sendinblue_handler/sendinblue_tables.py +16 -16
  227. mindsdb/integrations/handlers/sentence_transformers_handler/__init__.py +1 -1
  228. mindsdb/integrations/handlers/sheets_handler/connection_args.py +1 -1
  229. mindsdb/integrations/handlers/shopify_handler/shopify_handler.py +7 -6
  230. mindsdb/integrations/handlers/shopify_handler/shopify_tables.py +38 -41
  231. mindsdb/integrations/handlers/singlestore_handler/__about__.py +1 -1
  232. mindsdb/integrations/handlers/singlestore_handler/__init__.py +0 -1
  233. mindsdb/integrations/handlers/singlestore_handler/singlestore_handler.py +1 -0
  234. mindsdb/integrations/handlers/singlestore_handler/tests/test_singlestore_handler.py +3 -3
  235. mindsdb/integrations/handlers/slack_handler/__init__.py +3 -3
  236. mindsdb/integrations/handlers/snowflake_handler/snowflake_handler.py +100 -6
  237. mindsdb/integrations/handlers/solr_handler/connection_args.py +7 -7
  238. mindsdb/integrations/handlers/solr_handler/solr_handler.py +2 -1
  239. mindsdb/integrations/handlers/solr_handler/tests/test_solr_handler.py +2 -1
  240. mindsdb/integrations/handlers/sqlany_handler/sqlany_handler.py +3 -2
  241. mindsdb/integrations/handlers/sqlite_handler/sqlite_handler.py +1 -0
  242. mindsdb/integrations/handlers/sqreamdb_handler/connection_args.py +1 -1
  243. mindsdb/integrations/handlers/sqreamdb_handler/sqreamdb_handler.py +15 -20
  244. mindsdb/integrations/handlers/sqreamdb_handler/tests/test_sqreamdb_handler.py +4 -4
  245. mindsdb/integrations/handlers/stabilityai_handler/__init__.py +1 -1
  246. mindsdb/integrations/handlers/starrocks_handler/starrocks_handler.py +0 -1
  247. mindsdb/integrations/handlers/starrocks_handler/tests/test_starrocks_handler.py +8 -10
  248. mindsdb/integrations/handlers/statsforecast_handler/statsforecast_handler.py +2 -2
  249. mindsdb/integrations/handlers/strava_handler/strava_handler.py +4 -8
  250. mindsdb/integrations/handlers/strava_handler/strava_tables.py +22 -30
  251. mindsdb/integrations/handlers/stripe_handler/stripe_handler.py +3 -2
  252. mindsdb/integrations/handlers/stripe_handler/stripe_tables.py +11 -27
  253. mindsdb/integrations/handlers/supabase_handler/tests/test_supabase_handler.py +1 -1
  254. mindsdb/integrations/handlers/surrealdb_handler/surrealdb_handler.py +4 -4
  255. mindsdb/integrations/handlers/tdengine_handler/tdengine_handler.py +25 -27
  256. mindsdb/integrations/handlers/tdengine_handler/tests/test_tdengine_handler.py +8 -8
  257. mindsdb/integrations/handlers/tidb_handler/tests/test_tidb_handler.py +1 -2
  258. mindsdb/integrations/handlers/timegpt_handler/timegpt_handler.py +5 -5
  259. mindsdb/integrations/handlers/tpot_handler/tpot_handler.py +21 -26
  260. mindsdb/integrations/handlers/trino_handler/trino_handler.py +14 -14
  261. mindsdb/integrations/handlers/twitter_handler/twitter_handler.py +2 -4
  262. mindsdb/integrations/handlers/unify_handler/tests/test_unify_handler.py +7 -8
  263. mindsdb/integrations/handlers/unify_handler/unify_handler.py +9 -9
  264. mindsdb/integrations/handlers/vertex_handler/vertex_client.py +1 -1
  265. mindsdb/integrations/handlers/vertica_handler/tests/test_vertica_handler.py +11 -11
  266. mindsdb/integrations/handlers/vertica_handler/vertica_handler.py +11 -14
  267. mindsdb/integrations/handlers/vitess_handler/tests/test_vitess_handler.py +9 -11
  268. mindsdb/integrations/handlers/vitess_handler/vitess_handler.py +0 -1
  269. mindsdb/integrations/handlers/web_handler/web_handler.py +1 -0
  270. mindsdb/integrations/handlers/whatsapp_handler/__init__.py +3 -3
  271. mindsdb/integrations/handlers/writer_handler/evaluate.py +1 -1
  272. mindsdb/integrations/handlers/writer_handler/settings.py +0 -1
  273. mindsdb/integrations/handlers/writer_handler/writer_handler.py +1 -0
  274. mindsdb/integrations/handlers/youtube_handler/youtube_handler.py +5 -5
  275. mindsdb/integrations/handlers/youtube_handler/youtube_tables.py +26 -27
  276. mindsdb/integrations/handlers/yugabyte_handler/tests/test_yugabyte_handler.py +3 -3
  277. mindsdb/integrations/handlers/yugabyte_handler/yugabyte_handler.py +0 -6
  278. mindsdb/integrations/libs/llm/config.py +13 -0
  279. mindsdb/integrations/libs/llm/utils.py +37 -65
  280. mindsdb/integrations/libs/response.py +67 -52
  281. mindsdb/integrations/libs/vectordatabase_handler.py +6 -0
  282. mindsdb/integrations/utilities/handler_utils.py +15 -3
  283. mindsdb/integrations/utilities/handlers/api_utilities/__init__.py +0 -1
  284. mindsdb/integrations/utilities/handlers/auth_utilities/__init__.py +0 -2
  285. mindsdb/integrations/utilities/rag/rerankers/base_reranker.py +230 -227
  286. mindsdb/integrations/utilities/utils.py +3 -3
  287. mindsdb/interfaces/agents/agents_controller.py +164 -1
  288. mindsdb/interfaces/agents/constants.py +32 -13
  289. mindsdb/interfaces/agents/langchain_agent.py +106 -95
  290. mindsdb/interfaces/agents/mindsdb_database_agent.py +101 -2
  291. mindsdb/interfaces/knowledge_base/controller.py +250 -216
  292. mindsdb/interfaces/knowledge_base/preprocessing/document_preprocessor.py +13 -10
  293. mindsdb/interfaces/knowledge_base/preprocessing/json_chunker.py +434 -0
  294. mindsdb/interfaces/knowledge_base/preprocessing/models.py +54 -0
  295. mindsdb/interfaces/query_context/context_controller.py +66 -10
  296. mindsdb/interfaces/skills/custom/text2sql/mindsdb_kb_tools.py +190 -0
  297. mindsdb/interfaces/skills/custom/text2sql/mindsdb_sql_toolkit.py +92 -0
  298. mindsdb/interfaces/skills/skill_tool.py +202 -57
  299. mindsdb/interfaces/skills/sql_agent.py +205 -17
  300. mindsdb/interfaces/storage/fs.py +1 -0
  301. mindsdb/interfaces/variables/__init__.py +0 -0
  302. mindsdb/interfaces/variables/variables_controller.py +97 -0
  303. mindsdb/migrations/env.py +5 -7
  304. mindsdb/migrations/migrate.py +47 -7
  305. mindsdb/migrations/versions/2025-05-21_9f150e4f9a05_checkpoint_1.py +360 -0
  306. mindsdb/utilities/config.py +287 -216
  307. mindsdb/utilities/starters.py +13 -0
  308. {mindsdb-25.5.3.0.dist-info → mindsdb-25.5.4.1.dist-info}/METADATA +646 -698
  309. {mindsdb-25.5.3.0.dist-info → mindsdb-25.5.4.1.dist-info}/RECORD +312 -295
  310. {mindsdb-25.5.3.0.dist-info → mindsdb-25.5.4.1.dist-info}/WHEEL +1 -1
  311. mindsdb/integrations/handlers/monkeylearn_handler/requirements.txt +0 -1
  312. {mindsdb-25.5.3.0.dist-info → mindsdb-25.5.4.1.dist-info}/licenses/LICENSE +0 -0
  313. {mindsdb-25.5.3.0.dist-info → mindsdb-25.5.4.1.dist-info}/top_level.txt +0 -0
@@ -1,8 +1,8 @@
1
- from typing import Text, Dict, Optional
1
+ from typing import Text, Dict, Optional, Any
2
2
 
3
3
  import oracledb
4
4
  import pandas as pd
5
- from oracledb import connect, Connection, DatabaseError
5
+ from oracledb import connect, Connection, DatabaseError, Cursor
6
6
  from mindsdb_sql_parser.ast.base import ASTNode
7
7
 
8
8
  from mindsdb.integrations.libs.base import DatabaseHandler
@@ -54,10 +54,80 @@ def _map_type(internal_type_name: str) -> MYSQL_DATA_TYPE:
54
54
  if internal_type_name in db_types_list:
55
55
  return mysql_data_type
56
56
 
57
- logger.warning(f"Oracle handler type mapping: unknown type: {internal_type_name}, use VARCHAR as fallback.")
57
+ logger.debug(f"Oracle handler type mapping: unknown type: {internal_type_name}, use VARCHAR as fallback.")
58
58
  return MYSQL_DATA_TYPE.VARCHAR
59
59
 
60
60
 
61
+ def _make_table_response(result: list[tuple[Any]], cursor: Cursor) -> Response:
62
+ """Build response from result and cursor.
63
+
64
+ Args:
65
+ result (list[tuple[Any]]): result of the query.
66
+ cursor (oracledb.Cursor): cursor object.
67
+
68
+ Returns:
69
+ Response: response object.
70
+ """
71
+ description: list[tuple[Any]] = cursor.description
72
+ mysql_types: list[MYSQL_DATA_TYPE] = []
73
+ for column in description:
74
+ db_type = column[1]
75
+ precision = column[4]
76
+ scale = column[5]
77
+ if db_type is oracledb.DB_TYPE_NUMBER:
78
+ if scale != 0:
79
+ mysql_types.append(MYSQL_DATA_TYPE.FLOAT)
80
+ else:
81
+ # python max int is 19 digits, oracle can return more
82
+ if precision > 18:
83
+ mysql_types.append(MYSQL_DATA_TYPE.DECIMAL)
84
+ else:
85
+ mysql_types.append(MYSQL_DATA_TYPE.INT)
86
+ elif db_type is oracledb.DB_TYPE_BINARY_FLOAT:
87
+ mysql_types.append(MYSQL_DATA_TYPE.FLOAT)
88
+ elif db_type is oracledb.DB_TYPE_BINARY_DOUBLE:
89
+ mysql_types.append(MYSQL_DATA_TYPE.FLOAT)
90
+ elif db_type is oracledb.DB_TYPE_BINARY_INTEGER:
91
+ mysql_types.append(MYSQL_DATA_TYPE.INT)
92
+ elif db_type is oracledb.DB_TYPE_BOOLEAN:
93
+ mysql_types.append(MYSQL_DATA_TYPE.BOOLEAN)
94
+ elif db_type in (
95
+ oracledb.DB_TYPE_CHAR, oracledb.DB_TYPE_NCHAR, oracledb.DB_TYPE_LONG,
96
+ oracledb.DB_TYPE_NVARCHAR, oracledb.DB_TYPE_VARCHAR, oracledb.DB_TYPE_LONG_NVARCHAR,
97
+ ):
98
+ mysql_types.append(MYSQL_DATA_TYPE.TEXT)
99
+ elif db_type in (oracledb.DB_TYPE_RAW, oracledb.DB_TYPE_LONG_RAW):
100
+ mysql_types.append(MYSQL_DATA_TYPE.BINARY)
101
+ elif db_type is oracledb.DB_TYPE_DATE:
102
+ mysql_types.append(MYSQL_DATA_TYPE.DATE)
103
+ elif db_type is oracledb.DB_TYPE_TIMESTAMP:
104
+ mysql_types.append(MYSQL_DATA_TYPE.TIMESTAMP)
105
+ else:
106
+ # fallback
107
+ mysql_types.append(MYSQL_DATA_TYPE.TEXT)
108
+
109
+ # region cast int and bool to nullable types
110
+ serieses = []
111
+ for i, mysql_type in enumerate(mysql_types):
112
+ expected_dtype = None
113
+ if mysql_type in (
114
+ MYSQL_DATA_TYPE.SMALLINT, MYSQL_DATA_TYPE.INT, MYSQL_DATA_TYPE.MEDIUMINT,
115
+ MYSQL_DATA_TYPE.BIGINT, MYSQL_DATA_TYPE.TINYINT
116
+ ):
117
+ expected_dtype = 'Int64'
118
+ elif mysql_type in (MYSQL_DATA_TYPE.BOOL, MYSQL_DATA_TYPE.BOOLEAN):
119
+ expected_dtype = 'boolean'
120
+ serieses.append(pd.Series([row[i] for row in result], dtype=expected_dtype, name=description[i][0]))
121
+ df = pd.concat(serieses, axis=1, copy=False)
122
+ # endregion
123
+
124
+ return Response(
125
+ RESPONSE_TYPE.TABLE,
126
+ data_frame=df,
127
+ mysql_types=mysql_types
128
+ )
129
+
130
+
61
131
  class OracleHandler(DatabaseHandler):
62
132
  """
63
133
  This handler handles connection and execution of SQL queries on Oracle.
@@ -98,6 +168,9 @@ class OracleHandler(DatabaseHandler):
98
168
  if not all(key in self.connection_data for key in ['user', 'password']):
99
169
  raise ValueError('Required parameters (user, password) must be provided.')
100
170
 
171
+ if self.connection_data.get('thick_mode', False):
172
+ oracledb.init_oracle_client()
173
+
101
174
  config = {
102
175
  'user': self.connection_data['user'],
103
176
  'password': self.connection_data['password'],
@@ -209,14 +282,7 @@ class OracleHandler(DatabaseHandler):
209
282
  response = Response(RESPONSE_TYPE.OK, affected_rows=cur.rowcount)
210
283
  else:
211
284
  result = cur.fetchall()
212
- response = Response(
213
- RESPONSE_TYPE.TABLE,
214
- data_frame=pd.DataFrame(
215
- result,
216
- columns=[row[0] for row in cur.description],
217
- ),
218
- )
219
-
285
+ response = _make_table_response(result, cur)
220
286
  connection.commit()
221
287
  except DatabaseError as database_error:
222
288
  logger.error(f"Error running query: {query} on Oracle, {database_error}!")
@@ -2,6 +2,7 @@ import unittest
2
2
  from mindsdb.integrations.handlers.orioledb_handler.orioledb_handler import OrioleDBHandler
3
3
  from mindsdb.integrations.libs.response import RESPONSE_TYPE
4
4
 
5
+
5
6
  class OrioleDBHandlerTest(unittest.TestCase):
6
7
  @classmethod
7
8
  def setUpClass(cls):
@@ -21,36 +22,33 @@ class OrioleDBHandlerTest(unittest.TestCase):
21
22
 
22
23
  def test_1_connect(self):
23
24
  assert self.handler.connect()
24
-
25
+
25
26
  def test_2_create_table(self):
26
27
  query = "CREATE Table IF NOT EXISTS Lover(name varchar(101));"
27
28
  result = self.handler.query(query)
28
- assert result.type is not RESPONSE_TYPE.ERROR
29
+ assert result.type is not RESPONSE_TYPE.ERROR
29
30
 
30
31
  def test_3_insert(self):
31
32
  query = "INSERT INTO LOVER VALUES('Shiv Shakti');"
32
33
  result = self.handler.query(query)
33
- assert result.type is not RESPONSE_TYPE.ERROR
34
+ assert result.type is not RESPONSE_TYPE.ERROR
34
35
 
35
36
  def test_4_native_query_select(self):
36
37
  query = "SELECT * FROM LOVER;"
37
38
  result = self.handler.query(query)
38
- assert result.type is RESPONSE_TYPE.TABLE
39
+ assert result.type is RESPONSE_TYPE.TABLE
39
40
 
40
41
  def test_5_get_tables(self):
41
42
  tables = self.handler.get_tables()
42
- assert tables.type is RESPONSE_TYPE.TABLE
43
+ assert tables.type is RESPONSE_TYPE.TABLE
43
44
 
44
45
  def test_6_get_columns(self):
45
46
  columns = self.handler.get_columns('LOVER')
46
-
47
+
47
48
  query = "DROP Table IF EXISTS Lover;"
48
- result = self.handler.query(query)
49
+ self.handler.query(query)
49
50
  assert columns.type is not RESPONSE_TYPE.ERROR
50
51
 
51
52
 
52
53
  if __name__ == '__main__':
53
54
  unittest.main()
54
-
55
-
56
-
@@ -6,4 +6,4 @@ __author__ = 'MindsDB Inc'
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
+ ]
@@ -78,8 +78,6 @@ class PalmHandler(BaseMLEngine):
78
78
  else:
79
79
  args = args["using"]
80
80
 
81
- args_model = PalmHandlerArgs(**args)
82
-
83
81
  if (
84
82
  len(set(args.keys()) & {"question_column", "prompt_template", "prompt"})
85
83
  == 0
@@ -331,7 +329,7 @@ class PalmHandler(BaseMLEngine):
331
329
  def _submit_embedding_completion(kwargs, prompts, api_args):
332
330
  def _tidy(comp):
333
331
  tidy_comps = []
334
- if not "embedding" in comp:
332
+ if "embedding" not in comp:
335
333
  return [f"No completion found, err {comp}"]
336
334
  for c in comp["embedding"]:
337
335
  tidy_comps.append([c])
@@ -9,7 +9,7 @@ from mindsdb.integrations.handlers.paypal_handler.paypal_tables import (
9
9
  )
10
10
  from mindsdb.integrations.libs.api_handler import APIHandler
11
11
  from mindsdb.integrations.libs.response import (
12
- HandlerStatusResponse as StatusResponse,
12
+ HandlerStatusResponse as StatusResponse,
13
13
  )
14
14
 
15
15
  from mindsdb.utilities import log
@@ -95,7 +95,7 @@ class PayPalHandler(APIHandler):
95
95
  connection.get_access_token()
96
96
  response.success = True
97
97
  except Exception as e:
98
- logger.error(f'Error connecting to PayPal!')
98
+ logger.error('Error connecting to PayPal!')
99
99
  response.error_message = str(e)
100
100
 
101
101
  self.is_connected = response.success
@@ -104,7 +104,7 @@ class SubscriptionsTable(APITable):
104
104
  return subscriptions_df
105
105
 
106
106
  def get_columns(self) -> List[Text]:
107
- return pd.json_normalize(self.get_subscriptions(count = 1)).columns.tolist()
107
+ return pd.json_normalize(self.get_subscriptions(count=1)).columns.tolist()
108
108
 
109
109
  def get_subscriptions(self, **kwargs) -> List[Dict]:
110
110
  connection = self.handler.connect()
@@ -114,6 +114,7 @@ class SubscriptionsTable(APITable):
114
114
 
115
115
  class OrdersTable(APITable):
116
116
  """The PayPal Orders Table implementation"""
117
+
117
118
  def select(self, query: ast.Select) -> pd.DataFrame:
118
119
  """
119
120
  Pulls PayPal Orders data.
@@ -137,18 +138,18 @@ class OrdersTable(APITable):
137
138
  )
138
139
  selected_columns, where_conditions, order_by_conditions, result_limit = select_statement_parser.parse_query()
139
140
 
140
- id=None
141
+ id = None
141
142
  subset_where_conditions = []
142
143
  for op, arg1, arg2 in where_conditions:
143
144
  if arg1 == 'id':
144
145
  if op == '=':
145
- id=arg2
146
+ id = arg2
146
147
  else:
147
148
  raise NotImplementedError("Only '=' operator is supported for 'ids' column")
148
149
  elif arg1 in ['state', 'amount', 'create_time', 'update_time', 'links', 'pending_reason', 'parent_payment']:
149
150
  subset_where_conditions.append([op, arg1, arg2])
150
151
 
151
- if not id :
152
+ if not id:
152
153
  raise NotImplementedError("id column is required for this table")
153
154
 
154
155
  orders_df = pd.json_normalize(self.get_orders(id))
@@ -160,16 +161,17 @@ class OrdersTable(APITable):
160
161
  )
161
162
  orders_df = select_statement_executor.execute_query()
162
163
  return orders_df
164
+
163
165
  def get_columns(self) -> List[Text]:
164
- return ["id",
165
- "status",
166
- "intent",
167
- "purchase_units",
168
- "links",
169
- "create_time"]
166
+ return ["id",
167
+ "status",
168
+ "intent",
169
+ "purchase_units",
170
+ "links",
171
+ "create_time"]
170
172
 
171
173
  # restore this or similar header list for API 2.0 refactor
172
- #restore this list when restore paypalsdk api, and retired the request call
174
+ # restore this list when restore paypalsdk api, and retired the request call
173
175
  # return ["id",
174
176
  # "status",
175
177
  # "intent",
@@ -183,7 +185,7 @@ class OrdersTable(APITable):
183
185
  # "create_time"]
184
186
 
185
187
  def get_orders(self, id) -> List[Dict]:
186
- #we can use the paypalrestsdk api to get the order if they refactor their code
188
+ # we can use the paypalrestsdk api to get the order if they refactor their code
187
189
  connection = self.handler.connect()
188
190
  endpoint = f"v2/checkout/orders/{id}"
189
191
  order = connection.get(endpoint)
@@ -259,7 +261,7 @@ class PayoutsTable(APITable):
259
261
  "fees_value",
260
262
  ]
261
263
 
262
- def get_payout(self, payout_batch_id:str) -> List[Dict]:
264
+ def get_payout(self, payout_batch_id: str) -> List[Dict]:
263
265
  connection = self.handler.connect()
264
266
  endpoint = f"v1/payments/payouts/{payout_batch_id}"
265
267
  payout = connection.get(endpoint)
@@ -280,4 +282,3 @@ class PayoutsTable(APITable):
280
282
  }
281
283
 
282
284
  return [payout_data]
283
-
@@ -1,7 +1,6 @@
1
1
  import os
2
2
  import json
3
- from enum import Enum
4
- from typing import Dict, List, Union
3
+ from typing import Dict, List, Union, Literal
5
4
  from urllib.parse import urlparse
6
5
 
7
6
  import pandas as pd
@@ -39,7 +38,7 @@ class PgVectorHandler(PostgresHandler, VectorStoreHandler):
39
38
  self._is_vector_registered = False
40
39
  # we get these from the connection args on PostgresHandler parent
41
40
  self._is_sparse = self.connection_args.get('is_sparse', False)
42
- self._vector_size = self.connection_args.get('vector_size', None)
41
+ self._vector_size = self.connection_args.get('vector_size', None)
43
42
 
44
43
  if self._is_sparse:
45
44
  if not self._vector_size:
@@ -67,6 +66,21 @@ class PgVectorHandler(PostgresHandler, VectorStoreHandler):
67
66
  self.distance_op = distance_op
68
67
  self.connect()
69
68
 
69
+ def get_metric_type(self) -> str:
70
+ """
71
+ Get the metric type from the distance ops
72
+
73
+ """
74
+ distance_ops_to_metric_type_map = {
75
+ '<->': 'vector_l2_ops',
76
+ '<#>': 'vector_ip_ops',
77
+ '<=>': 'vector_cosine_ops',
78
+ '<+>': 'vector_l1_ops',
79
+ '<~>': 'bit_hamming_ops',
80
+ '<%>': 'bit_jaccard_ops'
81
+ }
82
+ return distance_ops_to_metric_type_map.get(self.distance_op, 'vector_cosine_ops')
83
+
70
84
  def _make_connection_args(self):
71
85
  cloud_pgvector_url = os.environ.get('KB_PGVECTOR_URL')
72
86
  # if no connection args and shared pg vector defined - use it
@@ -234,7 +248,6 @@ class PgVectorHandler(PostgresHandler, VectorStoreHandler):
234
248
 
235
249
  targets = ', '.join(modified_columns)
236
250
 
237
-
238
251
  if filter_conditions:
239
252
 
240
253
  if embedding_search:
@@ -255,7 +268,7 @@ class PgVectorHandler(PostgresHandler, VectorStoreHandler):
255
268
  # Calculate distance as part of the query if needed
256
269
  if has_distance:
257
270
  targets = f"{targets}, (embeddings {self.distance_op} '{search_vector}') as distance"
258
-
271
+
259
272
  return f"SELECT {targets} FROM {table_name} {where_clause} ORDER BY embeddings {self.distance_op} '{search_vector}' ASC {limit_clause} {offset_clause} "
260
273
 
261
274
  else:
@@ -304,7 +317,7 @@ class PgVectorHandler(PostgresHandler, VectorStoreHandler):
304
317
  embeddings: List[float],
305
318
  query: str = None,
306
319
  metadata: Dict[str, str] = None,
307
- distance_function = DistanceFunction.COSINE_DISTANCE,
320
+ distance_function=DistanceFunction.COSINE_DISTANCE,
308
321
  **kwargs
309
322
  ) -> pd.DataFrame:
310
323
  '''
@@ -348,7 +361,7 @@ class PgVectorHandler(PostgresHandler, VectorStoreHandler):
348
361
  # See https://docs.pgvecto.rs/use-case/hybrid-search.html#advanced-search-merge-the-results-of-full-text-search-and-vector-search.
349
362
  #
350
363
  # We can break down the below query as follows:
351
- #
364
+ #
352
365
  # Start with a CTE (Common Table Expression) called semantic_search (https://www.postgresql.org/docs/current/queries-with.html).
353
366
  # This expression calculates rank by the defined distance function, which measures the distance between the
354
367
  # embeddings column and the given embeddings vector. Results are ordered by this rank.
@@ -409,11 +422,11 @@ class PgVectorHandler(PostgresHandler, VectorStoreHandler):
409
422
  with self.connection.cursor() as cur:
410
423
  # For sparse vectors, use sparsevec type
411
424
  vector_column_type = 'sparsevec' if self._is_sparse else 'vector'
412
-
425
+
413
426
  # Vector size is required for sparse vectors, optional for dense
414
427
  if self._is_sparse and not self._vector_size:
415
428
  raise ValueError("vector_size is required for sparse vectors")
416
-
429
+
417
430
  # Add vector size specification only if provided
418
431
  size_spec = f"({self._vector_size})" if self._vector_size is not None else "()"
419
432
  if vector_column_type == 'vector':
@@ -438,7 +451,7 @@ class PgVectorHandler(PostgresHandler, VectorStoreHandler):
438
451
  table_name = self._check_table(table_name)
439
452
 
440
453
  if 'metadata' in data.columns:
441
- data['metadata'] = data['metadata'].apply(json.dumps)
454
+ data['metadata'] = data['metadata'].apply(json.dumps)
442
455
 
443
456
  resp = super().insert(table_name, data)
444
457
  if resp.resp_type == RESPONSE_TYPE.ERROR:
@@ -521,3 +534,33 @@ class PgVectorHandler(PostgresHandler, VectorStoreHandler):
521
534
  """
522
535
  table_name = self._check_table(table_name)
523
536
  self.raw_query(f"DROP TABLE IF EXISTS {table_name}")
537
+
538
+ def create_index(self, table_name: str, column_name: str = "embeddings", index_type: Literal['ivfflat', 'hnsw'] = "hnsw", metric_type: str = None):
539
+ """
540
+ Create an index on the pgvector table.
541
+ Args:
542
+ table_name (str): Name of the table to create the index on.
543
+ column_name (str): Name of the column to create the index on.
544
+ index_type (str): Type of the index to create. Supported types are 'ivfflat' and 'hnsw'.
545
+ metric_type (str): Metric type for the index. Supported types are 'vector_l2_ops', 'vector_ip_ops', and 'vector_cosine_ops'.
546
+ """
547
+ if metric_type is None:
548
+ metric_type = self.get_metric_type()
549
+ # Check if the index type is supported
550
+ if index_type not in ['ivfflat', 'hnsw']:
551
+ raise ValueError("Invalid index type. Supported types are 'ivfflat' and 'hnsw'.")
552
+ table_name = self._check_table(table_name)
553
+ # first we make sure embedding dimension is set
554
+ embedding_dim_size_df = self.raw_query(f"SELECT vector_dims({column_name}) FROM {table_name} LIMIT 1")
555
+ # check if answer is empty
556
+ if embedding_dim_size_df.empty:
557
+ raise ValueError("Could not determine embedding dimension size. Make sure that knowledge base isn't empty")
558
+ try:
559
+ embedding_dim = int(embedding_dim_size_df.iloc[0, 0])
560
+ # alter table to add dimension
561
+ self.raw_query(f"ALTER TABLE {table_name} ALTER COLUMN {column_name} TYPE vector({embedding_dim})")
562
+ except Exception:
563
+ raise ValueError("Could not determine embedding dimension size. Make sure that knowledge base isn't empty")
564
+
565
+ # Create the index
566
+ self.raw_query(f"CREATE INDEX ON {table_name} USING {index_type} ({column_name} {metric_type})")
@@ -17,4 +17,4 @@ icon_path = 'icon.png'
17
17
  __all__ = [
18
18
  'Handler', 'version', 'name', 'type', 'title', 'description',
19
19
  'connection_args', 'connection_args_example', 'import_error', 'icon_path'
20
- ]
20
+ ]
@@ -20,6 +20,7 @@ from mindsdb.integrations.libs.response import (
20
20
 
21
21
  logger = log.getLogger(__name__)
22
22
 
23
+
23
24
  class PhoenixHandler(DatabaseHandler):
24
25
  """
25
26
  This handler handles connection and execution of the Apache Phoenix statements.
@@ -17,4 +17,4 @@ icon_path = 'icon.svg'
17
17
  __all__ = [
18
18
  'Handler', 'version', 'name', 'type', 'title', 'description',
19
19
  'connection_args', 'connection_args_example', 'import_error', 'icon_path'
20
- ]
20
+ ]
@@ -23,6 +23,7 @@ from mindsdb.integrations.libs.response import (
23
23
 
24
24
  logger = log.getLogger(__name__)
25
25
 
26
+
26
27
  class PinotHandler(DatabaseHandler):
27
28
  """
28
29
  This handler handles connection and execution of the Apache Pinot statements.
@@ -182,7 +183,7 @@ class PinotHandler(DatabaseHandler):
182
183
  api_url = f"{self.connection_data['host']}:{self.connection_data['controller_port']}/tables"
183
184
  try:
184
185
  result = requests.get(api_url)
185
- except InvalidSchema as e:
186
+ except InvalidSchema:
186
187
  api_url = f"{self.connection_data['scheme']}://{api_url}"
187
188
  result = requests.get(api_url)
188
189
 
@@ -208,7 +209,7 @@ class PinotHandler(DatabaseHandler):
208
209
  api_url = f"{self.connection_data['host']}:{self.connection_data['controller_port']}/tables/{table_name}/schema"
209
210
  try:
210
211
  result = requests.get(api_url)
211
- except InvalidSchema as e:
212
+ except InvalidSchema:
212
213
  api_url = f"{self.connection_data['scheme']}://{api_url}"
213
214
  result = requests.get(api_url)
214
215
 
@@ -1,6 +1,5 @@
1
1
  import pandas as pd
2
2
  from mindsdb.utilities import log
3
- from mindsdb_sql_parser import parse_sql
4
3
  from mindsdb.integrations.libs.api_handler import APIHandler, FuncParser
5
4
  from mindsdb.integrations.libs.response import (
6
5
  HandlerStatusResponse as StatusResponse,
@@ -27,12 +26,13 @@ PLAID_ENV = {
27
26
 
28
27
  logger = log.getLogger(__name__)
29
28
 
29
+
30
30
  class PlaidHandler(APIHandler):
31
31
  '''A class for handling connections and interactions with the Plaid API.
32
32
 
33
33
  Attributes:
34
34
  plaid_env (str): Enviroment used by user [ 'sandbox'(default) OR 'development' OR 'production' ].
35
- client_id (str): Your Plaid API client_id.
35
+ client_id (str): Your Plaid API client_id.
36
36
  secret (str): Your Plaid API secret
37
37
  access_token (str): The access token for the Plaid account.
38
38
  '''
@@ -119,7 +119,7 @@ class PlaidHandler(APIHandler):
119
119
  DataFrame
120
120
  '''
121
121
 
122
- result=pd.DataFrame()
122
+ result = pd.DataFrame()
123
123
  if method_name == 'get_balance':
124
124
  result = self.get_balance(params=params)
125
125
  result = BalanceTable(self).filter_columns(result=result)
@@ -143,9 +143,9 @@ class PlaidHandler(APIHandler):
143
143
  self.connect()
144
144
  if params.get('last_updated_datetime') is not None:
145
145
  options = AccountsBalanceGetRequestOptions(
146
- min_last_updated_datetime=datetime.strptime(
146
+ min_last_updated_datetime=datetime.strptime(
147
147
  params.get('last_updated_datetime')
148
- )
148
+ )
149
149
  )
150
150
 
151
151
  response = self.api.accounts_balance_get(
@@ -192,7 +192,7 @@ class PlaidHandler(APIHandler):
192
192
  end_date = datetime.strptime(params.get('end_date'), '%Y-%m-%d').date()
193
193
  else:
194
194
  raise Exception('start_date and end_date is required in format YYYY-MM-DD ')
195
-
195
+
196
196
  request = TransactionsGetRequest(
197
197
  access_token=self.access_token,
198
198
  start_date=start_date,
@@ -207,17 +207,17 @@ class PlaidHandler(APIHandler):
207
207
  # transactions and retrieve all available data
208
208
  while len(transactions) < response['total_transactions']:
209
209
  request = TransactionsGetRequest(
210
- access_token=self.access_token,
211
- start_date=start_date,
212
- end_date=end_date,
213
- options=TransactionsGetRequestOptions(
214
- offset=len(transactions)
215
- )
210
+ access_token=self.access_token,
211
+ start_date=start_date,
212
+ end_date=end_date,
213
+ options=TransactionsGetRequestOptions(
214
+ offset=len(transactions)
215
+ )
216
216
  )
217
217
  response = self.api.transactions_get(request)
218
218
  transactions.extend(parse_transaction(response['transactions']))
219
219
 
220
- # Converting date column from str
220
+ # Converting date column from str
221
221
  df = pd.DataFrame(transactions)
222
222
  for i in ['date', 'authorized_date']:
223
223
  df[i] = pd.to_datetime(df[i]).dt.date
@@ -1,5 +1,5 @@
1
1
  import pandas as pd
2
- from mindsdb.integrations.libs.api_handler import APITable
2
+ from mindsdb.integrations.libs.api_handler import APITable
3
3
  from mindsdb.integrations.utilities.sql_utils import extract_comparison_conditions
4
4
  from mindsdb_sql_parser import ast
5
5
 
@@ -15,8 +15,8 @@ class BalanceTable(APITable):
15
15
  get_columns(): Get the list of column names for the balance table.
16
16
 
17
17
  '''
18
-
19
- def select(self, query: ast.Select) :
18
+
19
+ def select(self, query: ast.Select):
20
20
  '''Select data from the balance table and return it as a pandas DataFrame.
21
21
 
22
22
  Args:
@@ -34,21 +34,21 @@ class BalanceTable(APITable):
34
34
  params[i[1]] = i[2]
35
35
  else:
36
36
  raise Exception("Only equals to '=' is Supported with 'last_updated_datetime'")
37
-
37
+
38
38
  result = self.handler.call_plaid_api(method_name='get_balance', params=params)
39
39
 
40
40
  self.filter_columns(query=query, result=result)
41
41
  return result
42
-
42
+
43
43
  def get_columns(self):
44
44
  '''Get the list of column names for the balance table.
45
-
45
+
46
46
  Returns:
47
47
  list: A list of column names for the balance table.
48
48
 
49
49
  '''
50
50
  return [
51
- 'account_id',
51
+ 'account_id',
52
52
  'account_name',
53
53
  'account_mask',
54
54
  'account_type',
@@ -58,11 +58,11 @@ class BalanceTable(APITable):
58
58
  'balance_unofficial_currency_code',
59
59
  'balance_available',
60
60
  'balance_current',
61
- 'balance_limit'
61
+ 'balance_limit'
62
62
  ]
63
63
 
64
64
  def filter_columns(self, result: pd.DataFrame, query: ast.Select = None):
65
-
65
+
66
66
  columns = []
67
67
  if query is not None:
68
68
  for target in query.targets:
@@ -103,7 +103,7 @@ class TransactionTable(BalanceTable):
103
103
 
104
104
  '''
105
105
 
106
- def select(self, query: ast.Select) :
106
+ def select(self, query: ast.Select):
107
107
  '''Select data from the transaction table and return it as a pandas DataFrame.
108
108
 
109
109
  Args:
@@ -155,5 +155,3 @@ class TransactionTable(BalanceTable):
155
155
  'payment_channel',
156
156
  'pending',
157
157
  ]
158
-
159
-
@@ -1,9 +1,7 @@
1
- def parse_transaction(res:list):
2
- parsed=[]
1
+ def parse_transaction(res: list):
2
+ parsed = []
3
3
  for dic in res:
4
- dic=dic.to_dict()
4
+ dic = dic.to_dict()
5
5
  parsed.append(dic)
6
-
7
- return parsed
8
-
9
6
 
7
+ return parsed
@@ -1,6 +1,3 @@
1
- from collections import OrderedDict
2
-
3
- from mindsdb.integrations.libs.const import HANDLER_CONNECTION_ARG_TYPE as ARG_TYPE
4
1
  from mindsdb.integrations.handlers.mysql_handler import Handler as MySQLHandler
5
2
 
6
3
 
@@ -9,6 +6,6 @@ class PlanetScaleHandler(MySQLHandler):
9
6
  This handler handles the connection and execution of queries against PlanetScale.
10
7
  """
11
8
  name = 'planet_scale'
12
-
9
+
13
10
  def __init__(self, name, **kwargs):
14
11
  super().__init__(name, **kwargs)