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
@@ -27,13 +27,13 @@ connection_args = OrderedDict(
27
27
  'description': 'The password to authenticate.',
28
28
  'secret': True
29
29
  },
30
-
30
+
31
31
  )
32
32
 
33
33
  connection_args_example = OrderedDict(
34
- server_name = 'localhost',
35
- port = 9001,
36
- database_name = 'xdb',
37
- username = 'SA',
38
- password = 'password'
34
+ server_name='localhost',
35
+ port=9001,
36
+ database_name='xdb',
37
+ username='SA',
38
+ password='password'
39
39
  )
@@ -14,6 +14,7 @@ from mindsdb.utilities.render.sqlalchemy_render import SqlalchemyRender
14
14
 
15
15
  logger = log.getLogger(__name__)
16
16
 
17
+
17
18
  class HSQLDBHandler(DatabaseHandler):
18
19
  """
19
20
  This handler handles connection and execution of the HyperSQL statements.
@@ -21,7 +22,7 @@ class HSQLDBHandler(DatabaseHandler):
21
22
 
22
23
  name = 'hsqldb'
23
24
 
24
- def __init__(self, name: str, **kwargs):
25
+ def __init__(self, name: str, **kwargs):
25
26
  """
26
27
  Initialize the handler.
27
28
  Args:
@@ -162,7 +163,7 @@ class HSQLDBHandler(DatabaseHandler):
162
163
  cursor = connection.cursor()
163
164
  cursor.execute("SELECT * FROM information_schema.tables WHERE table_schema NOT IN ('information_schema', 'pg_catalog') AND table_type='BASE TABLE'")
164
165
  results = cursor.fetchall()
165
- df = pd.DataFrame([x[2] for x in results], columns=['table_name']) # Workaround since cursor.tables() wont work with postgres driver
166
+ df = pd.DataFrame([x[2] for x in results], columns=['table_name']) # Workaround since cursor.tables() wont work with postgres driver
166
167
  response = Response(
167
168
  RESPONSE_TYPE.TABLE,
168
169
  df
@@ -181,7 +182,7 @@ class HSQLDBHandler(DatabaseHandler):
181
182
 
182
183
  connection = self.connect()
183
184
  cursor = connection.cursor()
184
- query = f'SELECT * FROM information_schema.columns WHERE table_name ={table_name}' # Workaround since cursor.columns() wont work with postgres driver
185
+ query = f'SELECT * FROM information_schema.columns WHERE table_name ={table_name}' # Workaround since cursor.columns() wont work with postgres driver
185
186
  cursor.execute(query)
186
187
  results = cursor.fetchall()
187
188
  df = pd.DataFrame(
@@ -3,4 +3,4 @@ class UnsupportedTaskException(Exception):
3
3
 
4
4
 
5
5
  class InsufficientParametersException(Exception):
6
- pass
6
+ pass
@@ -1,20 +1,13 @@
1
1
  import json
2
- import os
3
2
  from typing import Optional, Dict
4
-
5
3
  import pandas as pd
6
-
7
4
  from huggingface_hub import HfApi
8
5
  from huggingface_hub import hf_hub_download
9
-
10
6
  from hugging_py_face import NLP, ComputerVision, AudioProcessing, get_in_df_supported_tasks
11
7
 
12
- from mindsdb.utilities.config import Config
13
8
  from mindsdb.integrations.libs.base import BaseMLEngine
14
-
15
- from .exceptions import UnsupportedTaskException, InsufficientParametersException
16
-
17
9
  from mindsdb.integrations.utilities.handler_utils import get_api_key
10
+ from .exceptions import UnsupportedTaskException, InsufficientParametersException
18
11
 
19
12
 
20
13
  class HuggingFaceInferenceAPIHandler(BaseMLEngine):
@@ -117,7 +117,7 @@ class HuggingFaceHandler(BaseMLEngine):
117
117
  try:
118
118
  pipeline = transformers.pipeline(task=args['task_proper'], model=hf_model_storage_path,
119
119
  tokenizer=hf_model_storage_path)
120
- logger.debug(f'Model already downloaded!')
120
+ logger.debug('Model already downloaded!')
121
121
  ####
122
122
  # Otherwise download it
123
123
  except (ValueError, OSError):
@@ -154,10 +154,10 @@ class HuggingFaceHandler(BaseMLEngine):
154
154
  labels_map[labels_default[num]] = labels_default[num]
155
155
  args["labels_map"] = labels_map
156
156
 
157
- ###### store and persist in model folder
157
+ # store and persist in model folder
158
158
  self.model_storage.json_set("args", args)
159
159
 
160
- ###### persist changes to handler folder
160
+ # persist changes to handler folder
161
161
  self.engine_storage.folder_sync(model_name)
162
162
 
163
163
  # todo move infer tasks to a seperate file
@@ -257,7 +257,7 @@ class HuggingFaceHandler(BaseMLEngine):
257
257
  "fill-mask": self.predict_fill_mask,
258
258
  }
259
259
 
260
- ###### get stuff from model folder
260
+ # get stuff from model folder
261
261
  args = self.model_storage.json_get("args")
262
262
 
263
263
  task = args["task"]
@@ -310,11 +310,11 @@ class HuggingFaceHandler(BaseMLEngine):
310
310
  continue
311
311
  elif truncation_policy == "left":
312
312
  tokens = tokens[
313
- -max_tokens + 1 : -1
313
+ -max_tokens + 1: -1
314
314
  ] # cut 2 empty tokens from left and right
315
315
  else:
316
316
  tokens = tokens[
317
- 1 : max_tokens - 1
317
+ 1: max_tokens - 1
318
318
  ] # cut 2 empty tokens from left and right
319
319
 
320
320
  item = pipeline.tokenizer.decode(tokens)
@@ -3,4 +3,4 @@ datasets==2.16.1
3
3
  evaluate==0.4.3
4
4
  nltk==3.9.1
5
5
  huggingface-hub==0.29.3
6
- torch==2.6.0
6
+ torch==2.6.0
@@ -3,4 +3,4 @@ datasets==2.16.1
3
3
  evaluate==0.4.3
4
4
  nltk==3.9.1
5
5
  huggingface-hub==0.29.3
6
- torch==2.6.0+cpu
6
+ torch==2.6.0+cpu
@@ -18,6 +18,7 @@ from mindsdb.integrations.libs.response import (
18
18
 
19
19
  logger = log.getLogger(__name__)
20
20
 
21
+
21
22
  class IgniteHandler(DatabaseHandler):
22
23
  """
23
24
  This handler handles connection and execution of the Apache Ignite statements.
@@ -105,7 +106,7 @@ class IgniteHandler(DatabaseHandler):
105
106
  self.connect()
106
107
  response.success = True
107
108
  except Exception as e:
108
- logger.error(f'Error connecting to Apache Ignite!')
109
+ logger.error('Error connecting to Apache Ignite!')
109
110
  response.error_message = str(e)
110
111
  finally:
111
112
  if response.success is True and need_to_close:
@@ -1,7 +1,7 @@
1
1
  from typing import Optional
2
2
 
3
3
  import pandas as pd
4
- from impala import dbapi as db , sqlalchemy as SA
4
+ from impala import dbapi as db, sqlalchemy as SA
5
5
 
6
6
  from mindsdb_sql_parser import parse_sql
7
7
  from mindsdb.utilities.render.sqlalchemy_render import SqlalchemyRender
@@ -29,7 +29,6 @@ class ImpalaHandler(DatabaseHandler):
29
29
  def __init__(self, name: str, connection_data: Optional[dict], **kwargs):
30
30
  super().__init__(name)
31
31
 
32
-
33
32
  self.parser = parse_sql
34
33
  self.dialect = 'impala'
35
34
  self.kwargs = kwargs
@@ -38,20 +37,18 @@ class ImpalaHandler(DatabaseHandler):
38
37
  self.connection = None
39
38
  self.is_connected = False
40
39
 
41
-
42
-
43
40
  def connect(self):
44
41
  if self.is_connected is True:
45
42
  return self.connection
46
43
 
47
44
  config = {
48
45
  'host': self.connection_data.get('host'),
49
- 'port': self.connection_data.get('port',21050),
46
+ 'port': self.connection_data.get('port', 21050),
50
47
  'user': self.connection_data.get('user'),
51
48
  'password': self.connection_data.get('password'),
52
49
  'database': self.connection_data.get('database'),
53
-
54
-
50
+
51
+
55
52
  }
56
53
 
57
54
  connection = db.connect(**config)
@@ -67,7 +64,7 @@ class ImpalaHandler(DatabaseHandler):
67
64
  return
68
65
 
69
66
  def check_connection(self) -> StatusResponse:
70
-
67
+
71
68
  result = StatusResponse(False)
72
69
  need_to_close = self.is_connected is False
73
70
 
@@ -100,7 +97,7 @@ class ImpalaHandler(DatabaseHandler):
100
97
  cur.execute(query)
101
98
  result = cur.fetchall()
102
99
  if cur.has_result_set:
103
-
100
+
104
101
  response = Response(
105
102
  RESPONSE_TYPE.TABLE,
106
103
  pd.DataFrame(
@@ -137,7 +134,7 @@ class ImpalaHandler(DatabaseHandler):
137
134
  Get a list with all of the tabels in Impala
138
135
  """
139
136
  q = "SHOW TABLES;"
140
- result= self.native_query(q)
137
+ result = self.native_query(q)
141
138
  df = result.data_frame.rename(columns={'name': 'TABLE_NAME'})
142
139
  result.data_frame = df
143
140
 
@@ -149,8 +146,8 @@ class ImpalaHandler(DatabaseHandler):
149
146
  """
150
147
  q = f"DESCRIBE {table_name};"
151
148
 
152
- result= self.native_query(q)
153
- df = result.data_frame.iloc[:,0:2].rename(columns={'name': 'COLUMN_NAME', 'type': 'Data_Type'})
149
+ result = self.native_query(q)
150
+ df = result.data_frame.iloc[:, 0:2].rename(columns={'name': 'COLUMN_NAME', 'type': 'Data_Type'})
154
151
  result.data_frame = df
155
152
 
156
153
  return result
@@ -7,12 +7,12 @@ class ImpalaHandlerTest(unittest.TestCase):
7
7
  @classmethod
8
8
  def setUpClass(cls):
9
9
  cls.kwargs = {
10
- 'user':'<UID>',
11
- 'password':'<P455w0rd>',
12
- 'host':'127.0.0.1',
13
- 'port':21050,
14
- 'database':'temp'
15
-
10
+ 'user': '<UID>',
11
+ 'password': '<P455w0rd>',
12
+ 'host': '127.0.0.1',
13
+ 'port': 21050,
14
+ 'database': 'temp'
15
+
16
16
  }
17
17
  cls.handler = ImpalaHandler('test_impala_handler', **cls.kwargs)
18
18
 
@@ -21,25 +21,25 @@ class ImpalaHandlerTest(unittest.TestCase):
21
21
 
22
22
  def test_1_connect(self):
23
23
  assert self.handler.connect()
24
-
24
+
25
25
  def test_2_create_table(self):
26
26
  query = "CREATE Table Car(Name Varchar, Price Integer);"
27
27
  result = self.handler.query(query)
28
- assert result.type is not RESPONSE_TYPE.ERROR
28
+ assert result.type is not RESPONSE_TYPE.ERROR
29
29
 
30
30
  def test_3_insert(self):
31
31
  query = "INSERT INTO Car ('Tata SUV', 860000)"
32
32
  result = self.handler.query(query)
33
- assert result.type is not RESPONSE_TYPE.ERROR
33
+ assert result.type is not RESPONSE_TYPE.ERROR
34
34
 
35
35
  def test_4_native_query_select(self):
36
36
  query = "SELECT * FROM Car;"
37
37
  result = self.handler.query(query)
38
- assert result.type is RESPONSE_TYPE.TABLE
38
+ assert result.type is RESPONSE_TYPE.TABLE
39
39
 
40
40
  def test_5_get_tables(self):
41
41
  tables = self.handler.get_tables()
42
- assert tables.type is RESPONSE_TYPE.TABLE
42
+ assert tables.type is RESPONSE_TYPE.TABLE
43
43
 
44
44
  def test_6_get_columns(self):
45
45
  columns = self.handler.get_columns('Car')
@@ -8,9 +8,9 @@ from mindsdb.utilities import log
8
8
  from mindsdb_sql_parser import parse_sql
9
9
 
10
10
 
11
-
12
11
  logger = log.getLogger(__name__)
13
12
 
13
+
14
14
  class InfluxDBHandler(APIHandler):
15
15
  """InfluxDB handler implementation"""
16
16
 
@@ -34,7 +34,6 @@ class InfluxDBHandler(APIHandler):
34
34
 
35
35
  influxdb_tables_data = InfluxDBTables(self)
36
36
  self._register_table("tables", influxdb_tables_data)
37
-
38
37
 
39
38
  def connect(self):
40
39
  """Set up the connection required by the handler.
@@ -44,17 +43,15 @@ class InfluxDBHandler(APIHandler):
44
43
 
45
44
  Raises Expection if ping check fails
46
45
  """
47
-
46
+
48
47
  if self.is_connected is True:
49
48
  return self.connection
50
-
51
- self.connection=InfluxDBClient3(host=self.connection_data['influxdb_url'],token=self.connection_data['influxdb_token'],org=self.connection_data.get('org'))
52
49
 
50
+ self.connection = InfluxDBClient3(host=self.connection_data['influxdb_url'], token=self.connection_data['influxdb_token'], org=self.connection_data.get('org'))
53
51
 
54
52
  self.is_connected = True
55
53
 
56
54
  return self.connection
57
-
58
55
 
59
56
  def check_connection(self) -> StatusResponse:
60
57
  """Check connection to the handler.
@@ -90,16 +87,16 @@ class InfluxDBHandler(APIHandler):
90
87
  ast = parse_sql(query)
91
88
  return self.query(ast)
92
89
 
93
- def call_influxdb_tables(self,query):
90
+ def call_influxdb_tables(self, query):
94
91
  """Pulls all the records from the given InfluxDB table and returns it select()
95
-
92
+
96
93
  Returns
97
94
  -------
98
- pd.DataFrame of all the records of the particular InfluxDB
95
+ pd.DataFrame of all the records of the particular InfluxDB
99
96
  """
100
- influx_connection=self.connect()
97
+ influx_connection = self.connect()
101
98
  if query is None:
102
- query='SELECT * FROM '+ f"{self.connection_data['influxdb_table_name']}"
103
-
104
- table=influx_connection.query(query=query,database=self.connection_data['influxdb_db_name'], language='sql')
99
+ query = 'SELECT * FROM ' + f"{self.connection_data['influxdb_table_name']}"
100
+
101
+ table = influx_connection.query(query=query, database=self.connection_data['influxdb_db_name'], language='sql')
105
102
  return table.to_pandas()
@@ -3,7 +3,6 @@ import pandas as pd
3
3
  from typing import List
4
4
 
5
5
  from mindsdb.integrations.libs.api_handler import APITable
6
- from mindsdb.integrations.utilities.sql_utils import extract_comparison_conditions
7
6
  from mindsdb.utilities import log
8
7
 
9
8
  from mindsdb_sql_parser import ast
@@ -12,6 +11,7 @@ from mindsdb.integrations.utilities.handlers.query_utilities.select_query_utilit
12
11
 
13
12
  logger = log.getLogger(__name__)
14
13
 
14
+
15
15
  class InfluxDBTables(APITable):
16
16
  """InfluxDB Tables implementation"""
17
17
 
@@ -29,23 +29,23 @@ class InfluxDBTables(APITable):
29
29
  ValueError
30
30
  If the query contains an unsupported condition
31
31
  """
32
-
33
- table_name=self.handler.connection_data['influxdb_table_name']
32
+
33
+ table_name = self.handler.connection_data['influxdb_table_name']
34
34
  select_statement_parser = SELECTQueryParser(
35
35
  query,
36
36
  "tables",
37
37
  self.get_columns()
38
38
  )
39
39
  selected_columns, where_conditions, order_by_conditions, _ = select_statement_parser.parse_query()
40
-
40
+
41
41
  try:
42
42
  selected_columns.remove("name")
43
43
  selected_columns.remove("tags")
44
44
  except Exception as e:
45
45
  logger.warn(e)
46
46
 
47
- formatted_query=self.get_select_query(table_name,selected_columns,where_conditions,order_by_conditions,query.limit)
48
- influxdb_tables_df = self.handler.call_influxdb_tables(formatted_query)
47
+ formatted_query = self.get_select_query(table_name, selected_columns, where_conditions, order_by_conditions, query.limit)
48
+ influxdb_tables_df = self.handler.call_influxdb_tables(formatted_query)
49
49
 
50
50
  return influxdb_tables_df
51
51
 
@@ -56,26 +56,26 @@ class InfluxDBTables(APITable):
56
56
  List[str]
57
57
  List of columns
58
58
  """
59
-
59
+
60
60
  dataframe = self.handler.call_influxdb_tables(f"SELECT * FROM {self.handler.connection_data['influxdb_table_name']} LIMIT 1")
61
61
 
62
62
  return list(dataframe.columns)
63
- def get_select_query(self,table_name,selected_columns, where_conditions, order_by_conditions, result_limit):
63
+
64
+ def get_select_query(self, table_name, selected_columns, where_conditions, order_by_conditions, result_limit):
64
65
  """Gets Well formed Query
65
66
  Returns
66
67
  -------
67
68
  str
68
69
  """
69
- columns=", ".join([f'"{column}"' for column in selected_columns])
70
- query=f'SELECT {columns} FROM "{table_name}"'
71
- if(where_conditions is not None and len(where_conditions)>0):
72
- query+=" WHERE "
73
- query+=" AND ".join([f"{i[1]} {i[0]} {i[2]}" for i in where_conditions])
74
- if (order_by_conditions!={} and order_by_conditions['columns'] is not None and len(order_by_conditions['columns'])>0):
75
- query+=" ORDER BY "
76
- query+=", ".join([f'{column_name} {"ASC"if asc else "DESC"}' for column_name,asc in zip(order_by_conditions['columns'],order_by_conditions['ascending'])] )
77
- if(result_limit is not None):
78
- query+=f" LIMIT {result_limit}"
79
- query+=";"
70
+ columns = ", ".join([f'"{column}"' for column in selected_columns])
71
+ query = f'SELECT {columns} FROM "{table_name}"'
72
+ if (where_conditions is not None and len(where_conditions) > 0):
73
+ query += " WHERE "
74
+ query += " AND ".join([f"{i[1]} {i[0]} {i[2]}" for i in where_conditions])
75
+ if (order_by_conditions != {} and order_by_conditions['columns'] is not None and len(order_by_conditions['columns']) > 0):
76
+ query += " ORDER BY "
77
+ query += ", ".join([f'{column_name} {"ASC"if asc else "DESC"}' for column_name, asc in zip(order_by_conditions['columns'], order_by_conditions['ascending'])])
78
+ if (result_limit is not None):
79
+ query += f" LIMIT {result_limit}"
80
+ query += ";"
80
81
  return query
81
-
@@ -1,9 +1,9 @@
1
- __title__ = 'MindsDB IBM Informix handler'
2
- __package_name__ = 'mindsdb_informix_handler'
3
- __version__ = '0.0.1'
1
+ __title__ = "MindsDB IBM Informix handler"
2
+ __package_name__ = "mindsdb_informix_handler"
3
+ __version__ = "0.0.1"
4
4
  __description__ = "MindsDB handler for IBM Informix"
5
- __author__ = 'Parthiv Makwana'
6
- __github__ = 'https://github.com/mindsdb/mindsdb'
7
- __pypi__ = 'https://pypi.org/project/mindsdb/'
8
- __license__ = 'MIT'
9
- __copyright__ = 'Copyright 2022- mindsdb'
5
+ __author__ = "Parthiv Makwana"
6
+ __github__ = "https://github.com/mindsdb/mindsdb"
7
+ __pypi__ = "https://pypi.org/project/mindsdb/"
8
+ __license__ = "MIT"
9
+ __copyright__ = "Copyright 2022- mindsdb"
@@ -2,6 +2,7 @@ from mindsdb.integrations.libs.const import HANDLER_TYPE
2
2
 
3
3
  try:
4
4
  from .informix_handler import InformixHandler as Handler
5
+
5
6
  import_error = None
6
7
  except Exception as e:
7
8
  Handler = None
@@ -9,12 +10,18 @@ except Exception as e:
9
10
  from .__about__ import __version__ as version, __description__ as description
10
11
 
11
12
 
12
- title = 'IBM Informix'
13
- name = 'informix'
13
+ title = "IBM Informix"
14
+ name = "informix"
14
15
  type = HANDLER_TYPE.DATA
15
- icon_path = 'icon.svg'
16
+ icon_path = "icon.svg"
16
17
 
17
18
  __all__ = [
18
- 'Handler', 'version', 'name', 'type', 'title', 'description',
19
- 'import_error', 'icon_path'
19
+ "Handler",
20
+ "version",
21
+ "name",
22
+ "type",
23
+ "title",
24
+ "description",
25
+ "import_error",
26
+ "icon_path",
20
27
  ]