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.
- mindsdb/__about__.py +1 -1
- mindsdb/__main__.py +215 -185
- mindsdb/api/a2a/__init__.py +0 -0
- mindsdb/api/a2a/__main__.py +114 -0
- mindsdb/api/a2a/a2a_client.py +439 -0
- mindsdb/api/a2a/agent.py +308 -0
- mindsdb/api/a2a/common/__init__.py +0 -0
- mindsdb/api/a2a/common/client/__init__.py +4 -0
- mindsdb/api/a2a/common/client/card_resolver.py +21 -0
- mindsdb/api/a2a/common/client/client.py +86 -0
- mindsdb/api/a2a/common/server/__init__.py +4 -0
- mindsdb/api/a2a/common/server/server.py +164 -0
- mindsdb/api/a2a/common/server/task_manager.py +287 -0
- mindsdb/api/a2a/common/server/utils.py +28 -0
- mindsdb/api/a2a/common/types.py +365 -0
- mindsdb/api/a2a/constants.py +9 -0
- mindsdb/api/a2a/run_a2a.py +129 -0
- mindsdb/api/a2a/task_manager.py +594 -0
- mindsdb/api/executor/command_executor.py +49 -28
- mindsdb/api/executor/datahub/classes/response.py +5 -2
- mindsdb/api/executor/datahub/datanodes/information_schema_datanode.py +8 -0
- mindsdb/api/executor/datahub/datanodes/integration_datanode.py +39 -72
- mindsdb/api/executor/datahub/datanodes/system_tables.py +10 -13
- mindsdb/api/executor/planner/query_planner.py +14 -2
- mindsdb/api/executor/sql_query/result_set.py +185 -52
- mindsdb/api/executor/sql_query/sql_query.py +1 -1
- mindsdb/api/executor/sql_query/steps/apply_predictor_step.py +11 -13
- mindsdb/api/executor/sql_query/steps/fetch_dataframe.py +8 -10
- mindsdb/api/executor/sql_query/steps/fetch_dataframe_partition.py +5 -44
- mindsdb/api/executor/sql_query/steps/insert_step.py +24 -15
- mindsdb/api/executor/sql_query/steps/join_step.py +1 -1
- mindsdb/api/executor/sql_query/steps/project_step.py +1 -1
- mindsdb/api/executor/sql_query/steps/sql_steps.py +1 -1
- mindsdb/api/executor/sql_query/steps/subselect_step.py +4 -8
- mindsdb/api/executor/sql_query/steps/union_step.py +1 -3
- mindsdb/api/http/initialize.py +118 -85
- mindsdb/api/http/namespaces/analysis.py +17 -4
- mindsdb/api/http/namespaces/file.py +8 -2
- mindsdb/api/http/namespaces/sql.py +13 -27
- mindsdb/api/http/namespaces/tree.py +1 -1
- mindsdb/api/http/start.py +7 -2
- mindsdb/api/mcp/start.py +42 -5
- mindsdb/api/mysql/mysql_proxy/data_types/mysql_packet.py +0 -1
- mindsdb/api/mysql/mysql_proxy/data_types/mysql_packets/binary_resultset_row_package.py +52 -19
- mindsdb/api/mysql/mysql_proxy/executor/mysql_executor.py +8 -10
- mindsdb/api/mysql/mysql_proxy/libs/constants/mysql.py +54 -38
- mindsdb/api/mysql/mysql_proxy/mysql_proxy.py +86 -123
- mindsdb/api/mysql/mysql_proxy/utilities/dump.py +351 -0
- mindsdb/api/mysql/mysql_proxy/utilities/exceptions.py +0 -4
- mindsdb/api/postgres/postgres_proxy/executor/executor.py +1 -1
- mindsdb/api/postgres/postgres_proxy/postgres_packets/postgres_message_formats.py +2 -2
- mindsdb/api/postgres/postgres_proxy/postgres_proxy.py +5 -6
- mindsdb/integrations/handlers/altibase_handler/altibase_handler.py +26 -27
- mindsdb/integrations/handlers/altibase_handler/connection_args.py +13 -13
- mindsdb/integrations/handlers/altibase_handler/tests/test_altibase_handler.py +8 -8
- mindsdb/integrations/handlers/altibase_handler/tests/test_altibase_handler_dsn.py +13 -13
- mindsdb/integrations/handlers/anthropic_handler/__init__.py +2 -2
- mindsdb/integrations/handlers/anthropic_handler/anthropic_handler.py +1 -3
- mindsdb/integrations/handlers/aurora_handler/aurora_handler.py +1 -0
- mindsdb/integrations/handlers/autosklearn_handler/autosklearn_handler.py +1 -1
- mindsdb/integrations/handlers/autosklearn_handler/config.py +0 -1
- mindsdb/integrations/handlers/bigquery_handler/bigquery_handler.py +1 -1
- mindsdb/integrations/handlers/bigquery_handler/requirements.txt +1 -0
- mindsdb/integrations/handlers/bigquery_handler/tests/test_bigquery_handler.py +1 -1
- mindsdb/integrations/handlers/binance_handler/binance_handler.py +1 -0
- mindsdb/integrations/handlers/binance_handler/binance_tables.py +3 -4
- mindsdb/integrations/handlers/byom_handler/__init__.py +0 -1
- mindsdb/integrations/handlers/chromadb_handler/requirements.txt +1 -0
- mindsdb/integrations/handlers/ckan_handler/ckan_handler.py +3 -0
- mindsdb/integrations/handlers/clickhouse_handler/__init__.py +1 -1
- mindsdb/integrations/handlers/cloud_spanner_handler/tests/test_cloud_spanner_handler.py +0 -2
- mindsdb/integrations/handlers/cloud_sql_handler/cloud_sql_handler.py +0 -1
- mindsdb/integrations/handlers/cohere_handler/__init__.py +1 -1
- mindsdb/integrations/handlers/cohere_handler/cohere_handler.py +11 -13
- mindsdb/integrations/handlers/confluence_handler/confluence_tables.py +6 -0
- mindsdb/integrations/handlers/databend_handler/connection_args.py +1 -1
- mindsdb/integrations/handlers/databend_handler/databend_handler.py +4 -4
- mindsdb/integrations/handlers/databend_handler/tests/__init__.py +0 -1
- mindsdb/integrations/handlers/databend_handler/tests/test_databend_handler.py +1 -1
- mindsdb/integrations/handlers/derby_handler/connection_args.py +1 -1
- mindsdb/integrations/handlers/derby_handler/derby_handler.py +14 -22
- mindsdb/integrations/handlers/derby_handler/tests/test_derby_handler.py +6 -6
- mindsdb/integrations/handlers/discord_handler/discord_handler.py +5 -5
- mindsdb/integrations/handlers/discord_handler/discord_tables.py +3 -3
- mindsdb/integrations/handlers/discord_handler/tests/test_discord.py +5 -3
- mindsdb/integrations/handlers/dockerhub_handler/dockerhub.py +3 -3
- mindsdb/integrations/handlers/dockerhub_handler/dockerhub_handler.py +2 -2
- mindsdb/integrations/handlers/dockerhub_handler/dockerhub_tables.py +57 -54
- mindsdb/integrations/handlers/dremio_handler/__init__.py +2 -2
- mindsdb/integrations/handlers/druid_handler/__init__.py +1 -1
- mindsdb/integrations/handlers/druid_handler/druid_handler.py +2 -2
- mindsdb/integrations/handlers/edgelessdb_handler/tests/test_edgelessdb_handler.py +9 -9
- mindsdb/integrations/handlers/email_handler/email_client.py +1 -1
- mindsdb/integrations/handlers/email_handler/email_ingestor.py +1 -1
- mindsdb/integrations/handlers/email_handler/email_tables.py +0 -1
- mindsdb/integrations/handlers/email_handler/settings.py +0 -1
- mindsdb/integrations/handlers/eventstoredb_handler/eventstoredb_handler.py +2 -1
- mindsdb/integrations/handlers/firebird_handler/firebird_handler.py +1 -1
- mindsdb/integrations/handlers/flaml_handler/flaml_handler.py +9 -9
- mindsdb/integrations/handlers/frappe_handler/frappe_client.py +5 -5
- mindsdb/integrations/handlers/frappe_handler/frappe_handler.py +6 -5
- mindsdb/integrations/handlers/frappe_handler/frappe_tables.py +2 -2
- mindsdb/integrations/handlers/github_handler/connection_args.py +2 -2
- mindsdb/integrations/handlers/github_handler/github_handler.py +1 -8
- mindsdb/integrations/handlers/github_handler/github_tables.py +13 -24
- mindsdb/integrations/handlers/gitlab_handler/gitlab_handler.py +2 -1
- mindsdb/integrations/handlers/gitlab_handler/gitlab_tables.py +1 -4
- mindsdb/integrations/handlers/gmail_handler/gmail_handler.py +6 -13
- mindsdb/integrations/handlers/gmail_handler/requirements.txt +1 -0
- mindsdb/integrations/handlers/google_analytics_handler/requirements.txt +2 -1
- mindsdb/integrations/handlers/google_books_handler/google_books_handler.py +2 -1
- mindsdb/integrations/handlers/google_books_handler/google_books_tables.py +0 -3
- mindsdb/integrations/handlers/google_books_handler/requirements.txt +1 -1
- mindsdb/integrations/handlers/google_calendar_handler/google_calendar_handler.py +4 -4
- mindsdb/integrations/handlers/google_calendar_handler/google_calendar_tables.py +2 -6
- mindsdb/integrations/handlers/google_calendar_handler/requirements.txt +1 -0
- mindsdb/integrations/handlers/google_content_shopping_handler/google_content_shopping_handler.py +3 -2
- mindsdb/integrations/handlers/google_content_shopping_handler/google_content_shopping_tables.py +0 -3
- mindsdb/integrations/handlers/google_content_shopping_handler/requirements.txt +1 -1
- mindsdb/integrations/handlers/google_fit_handler/google_fit_handler.py +10 -12
- mindsdb/integrations/handlers/google_fit_handler/google_fit_tables.py +11 -13
- mindsdb/integrations/handlers/google_fit_handler/requirements.txt +2 -0
- mindsdb/integrations/handlers/google_search_handler/google_search_handler.py +2 -1
- mindsdb/integrations/handlers/google_search_handler/google_search_tables.py +0 -3
- mindsdb/integrations/handlers/google_search_handler/requirements.txt +1 -1
- mindsdb/integrations/handlers/groq_handler/__init__.py +3 -3
- mindsdb/integrations/handlers/hackernews_handler/hn_handler.py +5 -7
- mindsdb/integrations/handlers/hackernews_handler/hn_table.py +6 -7
- mindsdb/integrations/handlers/hive_handler/tests/test_hive_handler.py +1 -1
- mindsdb/integrations/handlers/hsqldb_handler/connection_args.py +6 -6
- mindsdb/integrations/handlers/hsqldb_handler/hsqldb_handler.py +4 -3
- mindsdb/integrations/handlers/huggingface_api_handler/exceptions.py +1 -1
- mindsdb/integrations/handlers/huggingface_api_handler/huggingface_api_handler.py +1 -8
- mindsdb/integrations/handlers/huggingface_handler/huggingface_handler.py +6 -6
- mindsdb/integrations/handlers/huggingface_handler/requirements.txt +1 -1
- mindsdb/integrations/handlers/huggingface_handler/requirements_cpu.txt +1 -1
- mindsdb/integrations/handlers/ignite_handler/ignite_handler.py +2 -1
- mindsdb/integrations/handlers/impala_handler/impala_handler.py +9 -12
- mindsdb/integrations/handlers/impala_handler/tests/test_impala_handler.py +11 -11
- mindsdb/integrations/handlers/influxdb_handler/influxdb_handler.py +10 -13
- mindsdb/integrations/handlers/influxdb_handler/influxdb_tables.py +20 -20
- mindsdb/integrations/handlers/informix_handler/__about__.py +8 -8
- mindsdb/integrations/handlers/informix_handler/__init__.py +12 -5
- mindsdb/integrations/handlers/informix_handler/informix_handler.py +99 -133
- mindsdb/integrations/handlers/informix_handler/tests/test_informix_handler.py +13 -11
- mindsdb/integrations/handlers/ingres_handler/__about__.py +0 -1
- mindsdb/integrations/handlers/ingres_handler/ingres_handler.py +1 -0
- mindsdb/integrations/handlers/jira_handler/jira_handler.archived.py +75 -0
- mindsdb/integrations/handlers/jira_handler/jira_handler.py +113 -38
- mindsdb/integrations/handlers/jira_handler/jira_tables.py +229 -0
- mindsdb/integrations/handlers/jira_handler/requirements.txt +1 -0
- mindsdb/integrations/handlers/kinetica_handler/__init__.py +0 -1
- mindsdb/integrations/handlers/langchain_handler/langchain_handler.py +4 -4
- mindsdb/integrations/handlers/langchain_handler/tools.py +9 -10
- mindsdb/integrations/handlers/leonardoai_handler/__init__.py +1 -1
- mindsdb/integrations/handlers/lightfm_handler/requirements.txt +1 -0
- mindsdb/integrations/handlers/lightwood_handler/functions.py +2 -2
- mindsdb/integrations/handlers/lightwood_handler/lightwood_handler.py +0 -3
- mindsdb/integrations/handlers/lightwood_handler/requirements.txt +4 -4
- mindsdb/integrations/handlers/lightwood_handler/tests/test_lightwood_handler.py +11 -11
- mindsdb/integrations/handlers/lindorm_handler/requirements.txt +1 -0
- mindsdb/integrations/handlers/llama_index_handler/llama_index_handler.py +4 -4
- mindsdb/integrations/handlers/llama_index_handler/settings.py +10 -9
- mindsdb/integrations/handlers/materialize_handler/tests/test_materialize_handler.py +8 -10
- mindsdb/integrations/handlers/matrixone_handler/matrixone_handler.py +4 -4
- mindsdb/integrations/handlers/matrixone_handler/tests/test_matrixone_handler.py +8 -9
- mindsdb/integrations/handlers/maxdb_handler/connection_args.py +25 -25
- mindsdb/integrations/handlers/maxdb_handler/maxdb_handler.py +1 -0
- mindsdb/integrations/handlers/mediawiki_handler/mediawiki_handler.py +3 -2
- mindsdb/integrations/handlers/mediawiki_handler/mediawiki_tables.py +1 -1
- mindsdb/integrations/handlers/mendeley_handler/__about__.py +1 -1
- mindsdb/integrations/handlers/mendeley_handler/__init__.py +2 -2
- mindsdb/integrations/handlers/mendeley_handler/mendeley_handler.py +48 -56
- mindsdb/integrations/handlers/mendeley_handler/mendeley_tables.py +24 -29
- mindsdb/integrations/handlers/mendeley_handler/tests/test_mendeley_handler.py +19 -17
- mindsdb/integrations/handlers/merlion_handler/merlion_handler.py +5 -4
- mindsdb/integrations/handlers/minds_endpoint_handler/__init__.py +3 -3
- mindsdb/integrations/handlers/mlflow_handler/mlflow_handler.py +58 -36
- mindsdb/integrations/handlers/monetdb_handler/__about__.py +8 -8
- mindsdb/integrations/handlers/monetdb_handler/__init__.py +15 -5
- mindsdb/integrations/handlers/monetdb_handler/connection_args.py +17 -18
- mindsdb/integrations/handlers/monetdb_handler/monetdb_handler.py +40 -57
- mindsdb/integrations/handlers/monetdb_handler/tests/test_monetdb_handler.py +7 -8
- mindsdb/integrations/handlers/monetdb_handler/utils/monet_get_id.py +13 -14
- mindsdb/integrations/handlers/monkeylearn_handler/__about__.py +1 -1
- mindsdb/integrations/handlers/monkeylearn_handler/__init__.py +1 -1
- mindsdb/integrations/handlers/monkeylearn_handler/monkeylearn_handler.py +2 -5
- mindsdb/integrations/handlers/ms_one_drive_handler/ms_graph_api_one_drive_client.py +1 -0
- mindsdb/integrations/handlers/ms_one_drive_handler/ms_one_drive_handler.py +1 -1
- mindsdb/integrations/handlers/ms_one_drive_handler/requirements.txt +2 -0
- mindsdb/integrations/handlers/ms_teams_handler/ms_graph_api_teams_client.py +23 -23
- mindsdb/integrations/handlers/ms_teams_handler/ms_teams_handler.py +3 -3
- mindsdb/integrations/handlers/ms_teams_handler/ms_teams_tables.py +10 -5
- mindsdb/integrations/handlers/ms_teams_handler/requirements.txt +3 -1
- mindsdb/integrations/handlers/mssql_handler/mssql_handler.py +73 -8
- mindsdb/integrations/handlers/mysql_handler/__about__.py +8 -8
- mindsdb/integrations/handlers/mysql_handler/__init__.py +15 -5
- mindsdb/integrations/handlers/mysql_handler/connection_args.py +43 -47
- mindsdb/integrations/handlers/mysql_handler/mysql_handler.py +101 -34
- mindsdb/integrations/handlers/mysql_handler/settings.py +15 -13
- mindsdb/integrations/handlers/neuralforecast_handler/neuralforecast_handler.py +1 -1
- mindsdb/integrations/handlers/newsapi_handler/newsapi_handler.py +1 -1
- mindsdb/integrations/handlers/newsapi_handler/tests/test_newsapi_handler.py +4 -4
- mindsdb/integrations/handlers/nuo_jdbc_handler/connection_args.py +2 -2
- mindsdb/integrations/handlers/nuo_jdbc_handler/nuo_jdbc_handler.py +28 -36
- mindsdb/integrations/handlers/nuo_jdbc_handler/tests/test_nuo_handler.py +5 -5
- mindsdb/integrations/handlers/oceanbase_handler/oceanbase_handler.py +0 -1
- mindsdb/integrations/handlers/oceanbase_handler/tests/test_oceanbase_handler.py +8 -10
- mindsdb/integrations/handlers/ollama_handler/ollama_handler.py +3 -3
- mindsdb/integrations/handlers/openai_handler/openai_handler.py +5 -4
- mindsdb/integrations/handlers/opengauss_handler/tests/test_opengauss_handler.py +1 -2
- mindsdb/integrations/handlers/openstreetmap_handler/__init__.py +7 -7
- mindsdb/integrations/handlers/oracle_handler/connection_args.py +6 -0
- mindsdb/integrations/handlers/oracle_handler/oracle_handler.py +77 -11
- mindsdb/integrations/handlers/orioledb_handler/tests/test_orioledb_handler.py +8 -10
- mindsdb/integrations/handlers/palm_handler/__about__.py +1 -1
- mindsdb/integrations/handlers/palm_handler/__init__.py +1 -1
- mindsdb/integrations/handlers/palm_handler/palm_handler.py +1 -3
- mindsdb/integrations/handlers/paypal_handler/paypal_handler.py +2 -2
- mindsdb/integrations/handlers/paypal_handler/paypal_tables.py +15 -14
- mindsdb/integrations/handlers/pgvector_handler/pgvector_handler.py +53 -10
- mindsdb/integrations/handlers/phoenix_handler/__init__.py +1 -1
- mindsdb/integrations/handlers/phoenix_handler/phoenix_handler.py +1 -0
- mindsdb/integrations/handlers/pinot_handler/__init__.py +1 -1
- mindsdb/integrations/handlers/pinot_handler/pinot_handler.py +3 -2
- mindsdb/integrations/handlers/plaid_handler/plaid_handler.py +13 -13
- mindsdb/integrations/handlers/plaid_handler/plaid_tables.py +10 -12
- mindsdb/integrations/handlers/plaid_handler/utils.py +4 -6
- mindsdb/integrations/handlers/planetscale_handler/planetscale_handler.py +1 -4
- mindsdb/integrations/handlers/portkey_handler/__init__.py +2 -2
- mindsdb/integrations/handlers/postgres_handler/postgres_handler.py +105 -24
- mindsdb/integrations/handlers/postgres_handler/tests/test_postgres_handler.py +11 -6
- mindsdb/integrations/handlers/questdb_handler/questdb_handler.py +1 -2
- mindsdb/integrations/handlers/questdb_handler/tests/test_questdb_handler.py +2 -3
- mindsdb/integrations/handlers/quickbooks_handler/quickbooks_handler.py +6 -8
- mindsdb/integrations/handlers/quickbooks_handler/quickbooks_table.py +10 -10
- mindsdb/integrations/handlers/rag_handler/ingest.py +2 -2
- mindsdb/integrations/handlers/rag_handler/rag_handler.py +1 -1
- mindsdb/integrations/handlers/rag_handler/settings.py +1 -1
- mindsdb/integrations/handlers/reddit_handler/reddit_handler.py +2 -7
- mindsdb/integrations/handlers/reddit_handler/reddit_tables.py +2 -3
- mindsdb/integrations/handlers/replicate_handler/replicate_handler.py +6 -6
- mindsdb/integrations/handlers/rocket_chat_handler/rocket_chat_handler.py +1 -2
- mindsdb/integrations/handlers/rocket_chat_handler/rocket_chat_tables.py +0 -3
- mindsdb/integrations/handlers/rockset_handler/connection_args.py +14 -14
- mindsdb/integrations/handlers/rockset_handler/tests/test_rockset_handler.py +1 -0
- mindsdb/integrations/handlers/scylla_handler/scylla_handler.py +6 -5
- mindsdb/integrations/handlers/sendinblue_handler/sendinblue_handler.py +2 -1
- mindsdb/integrations/handlers/sendinblue_handler/sendinblue_tables.py +16 -16
- mindsdb/integrations/handlers/sentence_transformers_handler/__init__.py +1 -1
- mindsdb/integrations/handlers/sheets_handler/connection_args.py +1 -1
- mindsdb/integrations/handlers/shopify_handler/shopify_handler.py +7 -6
- mindsdb/integrations/handlers/shopify_handler/shopify_tables.py +38 -41
- mindsdb/integrations/handlers/singlestore_handler/__about__.py +1 -1
- mindsdb/integrations/handlers/singlestore_handler/__init__.py +0 -1
- mindsdb/integrations/handlers/singlestore_handler/singlestore_handler.py +1 -0
- mindsdb/integrations/handlers/singlestore_handler/tests/test_singlestore_handler.py +3 -3
- mindsdb/integrations/handlers/slack_handler/__init__.py +3 -3
- mindsdb/integrations/handlers/snowflake_handler/requirements.txt +1 -1
- mindsdb/integrations/handlers/snowflake_handler/snowflake_handler.py +100 -6
- mindsdb/integrations/handlers/solr_handler/connection_args.py +7 -7
- mindsdb/integrations/handlers/solr_handler/solr_handler.py +2 -1
- mindsdb/integrations/handlers/solr_handler/tests/test_solr_handler.py +2 -1
- mindsdb/integrations/handlers/sqlany_handler/sqlany_handler.py +3 -2
- mindsdb/integrations/handlers/sqlite_handler/sqlite_handler.py +1 -0
- mindsdb/integrations/handlers/sqreamdb_handler/connection_args.py +1 -1
- mindsdb/integrations/handlers/sqreamdb_handler/sqreamdb_handler.py +15 -20
- mindsdb/integrations/handlers/sqreamdb_handler/tests/test_sqreamdb_handler.py +4 -4
- mindsdb/integrations/handlers/stabilityai_handler/__init__.py +1 -1
- mindsdb/integrations/handlers/starrocks_handler/starrocks_handler.py +0 -1
- mindsdb/integrations/handlers/starrocks_handler/tests/test_starrocks_handler.py +8 -10
- mindsdb/integrations/handlers/statsforecast_handler/statsforecast_handler.py +2 -2
- mindsdb/integrations/handlers/strava_handler/strava_handler.py +4 -8
- mindsdb/integrations/handlers/strava_handler/strava_tables.py +22 -30
- mindsdb/integrations/handlers/stripe_handler/stripe_handler.py +3 -2
- mindsdb/integrations/handlers/stripe_handler/stripe_tables.py +11 -27
- mindsdb/integrations/handlers/supabase_handler/tests/test_supabase_handler.py +1 -1
- mindsdb/integrations/handlers/surrealdb_handler/surrealdb_handler.py +4 -4
- mindsdb/integrations/handlers/tdengine_handler/tdengine_handler.py +25 -27
- mindsdb/integrations/handlers/tdengine_handler/tests/test_tdengine_handler.py +8 -8
- mindsdb/integrations/handlers/tidb_handler/tests/test_tidb_handler.py +1 -2
- mindsdb/integrations/handlers/timegpt_handler/timegpt_handler.py +5 -5
- mindsdb/integrations/handlers/tpot_handler/tpot_handler.py +21 -26
- mindsdb/integrations/handlers/trino_handler/trino_handler.py +14 -14
- mindsdb/integrations/handlers/twitter_handler/twitter_handler.py +2 -4
- mindsdb/integrations/handlers/unify_handler/tests/test_unify_handler.py +7 -8
- mindsdb/integrations/handlers/unify_handler/unify_handler.py +9 -9
- mindsdb/integrations/handlers/vertex_handler/requirements.txt +1 -0
- mindsdb/integrations/handlers/vertex_handler/vertex_client.py +1 -1
- mindsdb/integrations/handlers/vertica_handler/tests/test_vertica_handler.py +11 -11
- mindsdb/integrations/handlers/vertica_handler/vertica_handler.py +11 -14
- mindsdb/integrations/handlers/vitess_handler/tests/test_vitess_handler.py +9 -11
- mindsdb/integrations/handlers/vitess_handler/vitess_handler.py +0 -1
- mindsdb/integrations/handlers/web_handler/web_handler.py +1 -0
- mindsdb/integrations/handlers/whatsapp_handler/__init__.py +3 -3
- mindsdb/integrations/handlers/writer_handler/evaluate.py +1 -1
- mindsdb/integrations/handlers/writer_handler/settings.py +0 -1
- mindsdb/integrations/handlers/writer_handler/writer_handler.py +1 -0
- mindsdb/integrations/handlers/youtube_handler/requirements.txt +1 -0
- mindsdb/integrations/handlers/youtube_handler/youtube_handler.py +5 -5
- mindsdb/integrations/handlers/youtube_handler/youtube_tables.py +26 -27
- mindsdb/integrations/handlers/yugabyte_handler/tests/test_yugabyte_handler.py +3 -3
- mindsdb/integrations/handlers/yugabyte_handler/yugabyte_handler.py +0 -6
- mindsdb/integrations/libs/response.py +67 -52
- mindsdb/integrations/libs/vectordatabase_handler.py +6 -0
- mindsdb/integrations/utilities/files/file_reader.py +5 -2
- mindsdb/integrations/utilities/handler_utils.py +15 -3
- mindsdb/integrations/utilities/handlers/api_utilities/__init__.py +0 -1
- mindsdb/integrations/utilities/handlers/auth_utilities/__init__.py +0 -2
- mindsdb/integrations/utilities/utils.py +3 -3
- mindsdb/interfaces/agents/agents_controller.py +164 -1
- mindsdb/interfaces/agents/constants.py +29 -2
- mindsdb/interfaces/agents/langchain_agent.py +18 -8
- mindsdb/interfaces/agents/mindsdb_database_agent.py +101 -2
- mindsdb/interfaces/database/projects.py +1 -7
- mindsdb/interfaces/functions/controller.py +11 -14
- mindsdb/interfaces/functions/to_markdown.py +9 -124
- mindsdb/interfaces/knowledge_base/controller.py +47 -19
- mindsdb/interfaces/knowledge_base/preprocessing/document_preprocessor.py +41 -15
- mindsdb/interfaces/knowledge_base/preprocessing/json_chunker.py +434 -0
- mindsdb/interfaces/knowledge_base/preprocessing/models.py +54 -0
- mindsdb/interfaces/knowledge_base/utils.py +10 -15
- mindsdb/interfaces/model/model_controller.py +0 -2
- mindsdb/interfaces/query_context/context_controller.py +66 -10
- mindsdb/interfaces/skills/custom/text2sql/mindsdb_kb_tools.py +190 -0
- mindsdb/interfaces/skills/custom/text2sql/mindsdb_sql_toolkit.py +92 -0
- mindsdb/interfaces/skills/skill_tool.py +202 -57
- mindsdb/interfaces/skills/sql_agent.py +238 -28
- mindsdb/interfaces/storage/fs.py +1 -0
- mindsdb/interfaces/variables/__init__.py +0 -0
- mindsdb/interfaces/variables/variables_controller.py +97 -0
- mindsdb/migrations/env.py +5 -7
- mindsdb/migrations/migrate.py +47 -9
- mindsdb/migrations/versions/2025-05-21_9f150e4f9a05_checkpoint_1.py +360 -0
- mindsdb/utilities/config.py +333 -220
- mindsdb/utilities/context.py +1 -1
- mindsdb/utilities/functions.py +0 -36
- mindsdb/utilities/langfuse.py +19 -10
- mindsdb/utilities/otel/__init__.py +9 -193
- mindsdb/utilities/otel/metric_handlers/__init__.py +5 -1
- mindsdb/utilities/otel/prepare.py +198 -0
- mindsdb/utilities/sql.py +83 -0
- mindsdb/utilities/starters.py +13 -0
- {mindsdb-25.4.5.0.dist-info → mindsdb-25.5.4.0.dist-info}/METADATA +351 -338
- {mindsdb-25.4.5.0.dist-info → mindsdb-25.5.4.0.dist-info}/RECORD +348 -322
- {mindsdb-25.4.5.0.dist-info → mindsdb-25.5.4.0.dist-info}/WHEEL +1 -1
- mindsdb/api/mysql/mysql_proxy/classes/sql_statement_parser.py +0 -151
- mindsdb/integrations/handlers/monkeylearn_handler/requirements.txt +0 -1
- {mindsdb-25.4.5.0.dist-info → mindsdb-25.5.4.0.dist-info}/licenses/LICENSE +0 -0
- {mindsdb-25.4.5.0.dist-info → mindsdb-25.5.4.0.dist-info}/top_level.txt +0 -0
|
@@ -32,6 +32,7 @@ from mindsdb.integrations.handlers.langchain_embedding_handler.langchain_embeddi
|
|
|
32
32
|
from mindsdb.interfaces.agents.constants import DEFAULT_EMBEDDINGS_MODEL_CLASS
|
|
33
33
|
from mindsdb.interfaces.agents.langchain_agent import create_chat_model, get_llm_provider
|
|
34
34
|
from mindsdb.interfaces.database.projects import ProjectController
|
|
35
|
+
from mindsdb.interfaces.variables.variables_controller import variables_controller
|
|
35
36
|
from mindsdb.interfaces.knowledge_base.preprocessing.models import PreprocessingConfig, Document
|
|
36
37
|
from mindsdb.interfaces.knowledge_base.preprocessing.document_preprocessor import PreprocessorFactory
|
|
37
38
|
from mindsdb.interfaces.model.functions import PredictorRecordNotFound
|
|
@@ -41,13 +42,14 @@ from mindsdb.utilities.config import config
|
|
|
41
42
|
from mindsdb.utilities.context import context as ctx
|
|
42
43
|
|
|
43
44
|
from mindsdb.api.executor.command_executor import ExecuteCommands
|
|
45
|
+
from mindsdb.api.executor.utilities.sql import query_df
|
|
44
46
|
from mindsdb.utilities import log
|
|
45
47
|
from mindsdb.integrations.utilities.rag.rerankers.base_reranker import BaseLLMReranker
|
|
46
48
|
|
|
47
49
|
logger = log.getLogger(__name__)
|
|
48
50
|
|
|
49
51
|
KB_TO_VECTORDB_COLUMNS = {
|
|
50
|
-
'id': '
|
|
52
|
+
'id': 'original_doc_id',
|
|
51
53
|
'chunk_id': 'id',
|
|
52
54
|
'chunk_content': 'content'
|
|
53
55
|
}
|
|
@@ -124,6 +126,11 @@ class KnowledgeBaseTable:
|
|
|
124
126
|
logger.debug(f"Configuring preprocessing with config: {config}")
|
|
125
127
|
self.document_preprocessor = None # Reset existing preprocessor
|
|
126
128
|
if config is not None:
|
|
129
|
+
# Ensure content_column is set for JSON chunking if not already specified
|
|
130
|
+
if config.get('type') == 'json_chunking' and config.get('json_chunking_config'):
|
|
131
|
+
if 'content_column' not in config['json_chunking_config']:
|
|
132
|
+
config['json_chunking_config']['content_column'] = 'content'
|
|
133
|
+
|
|
127
134
|
preprocessing_config = PreprocessingConfig(**config)
|
|
128
135
|
self.document_preprocessor = PreprocessorFactory.create_preprocessor(preprocessing_config)
|
|
129
136
|
logger.debug(f"Created preprocessor of type: {type(self.document_preprocessor)}")
|
|
@@ -150,13 +157,8 @@ class KnowledgeBaseTable:
|
|
|
150
157
|
query.from_table = Identifier(parts=[self._kb.vector_database_table])
|
|
151
158
|
logger.debug(f"Set table name to: {self._kb.vector_database_table}")
|
|
152
159
|
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
if isinstance(target, Star):
|
|
156
|
-
requested_kb_columns = None
|
|
157
|
-
break
|
|
158
|
-
else:
|
|
159
|
-
requested_kb_columns.append(target.parts[-1].lower())
|
|
160
|
+
# Copy query for complex execution via DuckDB: DISTINCT, GROUP BY etc.
|
|
161
|
+
query_copy = copy.deepcopy(query)
|
|
160
162
|
|
|
161
163
|
query.targets = [
|
|
162
164
|
Identifier(TableField.ID.value),
|
|
@@ -220,9 +222,17 @@ class KnowledgeBaseTable:
|
|
|
220
222
|
|
|
221
223
|
df = self.add_relevance(df, query_text, relevance_threshold)
|
|
222
224
|
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
225
|
+
if (
|
|
226
|
+
query.group_by is not None
|
|
227
|
+
or query.order_by is not None
|
|
228
|
+
or query.having is not None
|
|
229
|
+
or query.distinct is True
|
|
230
|
+
or len(query.targets) != 1
|
|
231
|
+
or not isinstance(query.targets[0], Star)
|
|
232
|
+
):
|
|
233
|
+
query_copy.where = None
|
|
234
|
+
df = query_df(df, query_copy, session=self.session)
|
|
235
|
+
|
|
226
236
|
return df
|
|
227
237
|
|
|
228
238
|
def add_relevance(self, df, query_text, relevance_threshold=None):
|
|
@@ -290,7 +300,7 @@ class KnowledgeBaseTable:
|
|
|
290
300
|
columns = list(df.columns)
|
|
291
301
|
# update id, get from metadata
|
|
292
302
|
df[TableField.ID.value] = df[TableField.METADATA.value].apply(
|
|
293
|
-
lambda m: None if m is None else m.get('
|
|
303
|
+
lambda m: None if m is None else m.get('original_doc_id')
|
|
294
304
|
)
|
|
295
305
|
|
|
296
306
|
# id on first place
|
|
@@ -479,12 +489,9 @@ class KnowledgeBaseTable:
|
|
|
479
489
|
# Use provided_id directly if it exists, otherwise generate one
|
|
480
490
|
doc_id = self._generate_document_id(content_str, col, provided_id)
|
|
481
491
|
|
|
482
|
-
# Need provided ID to link chunks back to original source (e.g. database row).
|
|
483
|
-
row_id = provided_id if provided_id else idx
|
|
484
|
-
|
|
485
492
|
metadata = {
|
|
486
493
|
**base_metadata,
|
|
487
|
-
'
|
|
494
|
+
'original_row_index': str(idx), # provide link to original row index
|
|
488
495
|
'content_column': col,
|
|
489
496
|
}
|
|
490
497
|
|
|
@@ -787,7 +794,7 @@ class KnowledgeBaseTable:
|
|
|
787
794
|
def _generate_document_id(self, content: str, content_column: str, provided_id: str = None) -> str:
|
|
788
795
|
"""Generate a deterministic document ID using the utility function."""
|
|
789
796
|
from mindsdb.interfaces.knowledge_base.utils import generate_document_id
|
|
790
|
-
return generate_document_id(content,
|
|
797
|
+
return generate_document_id(content=content, provided_id=provided_id)
|
|
791
798
|
|
|
792
799
|
def _convert_metadata_value(self, value):
|
|
793
800
|
"""
|
|
@@ -819,6 +826,15 @@ class KnowledgeBaseTable:
|
|
|
819
826
|
# Convert everything else to string
|
|
820
827
|
return str(value)
|
|
821
828
|
|
|
829
|
+
def create_index(self):
|
|
830
|
+
"""
|
|
831
|
+
Create an index on the knowledge base table
|
|
832
|
+
:param index_name: name of the index
|
|
833
|
+
:param params: parameters for the index
|
|
834
|
+
"""
|
|
835
|
+
db_handler = self.get_vector_db()
|
|
836
|
+
db_handler.create_index(self._kb.vector_database_table)
|
|
837
|
+
|
|
822
838
|
|
|
823
839
|
class KnowledgeBaseController:
|
|
824
840
|
"""
|
|
@@ -845,6 +861,9 @@ class KnowledgeBaseController:
|
|
|
845
861
|
:param is_sparse: Whether to use sparse vectors for embeddings
|
|
846
862
|
:param vector_size: Optional size specification for vectors, required when is_sparse=True
|
|
847
863
|
"""
|
|
864
|
+
# fill variables
|
|
865
|
+
params = variables_controller.fill_parameters(params)
|
|
866
|
+
|
|
848
867
|
# Validate preprocessing config first if provided
|
|
849
868
|
if preprocessing_config is not None:
|
|
850
869
|
PreprocessingConfig(**preprocessing_config) # Validate before storing
|
|
@@ -1004,6 +1023,8 @@ class KnowledgeBaseController:
|
|
|
1004
1023
|
if 'provider' in params:
|
|
1005
1024
|
engine = params.pop('provider').lower()
|
|
1006
1025
|
|
|
1026
|
+
api_key = get_api_key(engine, params, strict=False) or params.pop('api_key')
|
|
1027
|
+
|
|
1007
1028
|
if engine == 'azure_openai':
|
|
1008
1029
|
engine = 'openai'
|
|
1009
1030
|
params['provider'] = 'azure'
|
|
@@ -1011,8 +1032,10 @@ class KnowledgeBaseController:
|
|
|
1011
1032
|
if engine == 'openai':
|
|
1012
1033
|
if 'question_column' not in params:
|
|
1013
1034
|
params['question_column'] = 'content'
|
|
1014
|
-
if
|
|
1015
|
-
params[f"{engine}_api_key"] =
|
|
1035
|
+
if api_key:
|
|
1036
|
+
params[f"{engine}_api_key"] = api_key
|
|
1037
|
+
if 'api_key' in params:
|
|
1038
|
+
params.pop('api_key')
|
|
1016
1039
|
if 'base_url' in params:
|
|
1017
1040
|
params['api_base'] = params.pop('base_url')
|
|
1018
1041
|
|
|
@@ -1150,6 +1173,11 @@ class KnowledgeBaseController:
|
|
|
1150
1173
|
|
|
1151
1174
|
return data
|
|
1152
1175
|
|
|
1176
|
+
def create_index(self, table_name, project_name):
|
|
1177
|
+
project_id = self.session.database_controller.get_project(project_name).id
|
|
1178
|
+
kb_table = self.get_table(table_name, project_id)
|
|
1179
|
+
kb_table.create_index()
|
|
1180
|
+
|
|
1153
1181
|
def update(self, name: str, project_id: int, **kwargs) -> db.KnowledgeBase:
|
|
1154
1182
|
"""
|
|
1155
1183
|
Update a knowledge base record
|
|
@@ -25,6 +25,8 @@ from langchain_core.documents import Document as LangchainDocument
|
|
|
25
25
|
|
|
26
26
|
logger = log.getLogger(__name__)
|
|
27
27
|
|
|
28
|
+
_DEFAULT_CONTENT_COLUMN_NAME = "content"
|
|
29
|
+
|
|
28
30
|
|
|
29
31
|
class DocumentPreprocessor:
|
|
30
32
|
"""Base class for document preprocessing"""
|
|
@@ -90,14 +92,18 @@ class DocumentPreprocessor:
|
|
|
90
92
|
start_char: Optional[int] = None,
|
|
91
93
|
end_char: Optional[int] = None,
|
|
92
94
|
provided_id: str = None,
|
|
95
|
+
content_column: str = None,
|
|
93
96
|
) -> str:
|
|
94
97
|
"""Generate human-readable deterministic ID for a chunk
|
|
95
|
-
Format: <doc_id>:<chunk_number>of<total_chunks>:<start_char>to<end_char>
|
|
98
|
+
Format: <doc_id>:<content_column>:<chunk_number>of<total_chunks>:<start_char>to<end_char>
|
|
96
99
|
"""
|
|
97
100
|
if provided_id is None:
|
|
98
101
|
raise ValueError("Document ID must be provided for chunk ID generation")
|
|
99
102
|
|
|
100
|
-
|
|
103
|
+
if content_column is None:
|
|
104
|
+
raise ValueError("Content column must be provided for chunk ID generation")
|
|
105
|
+
|
|
106
|
+
chunk_id = f"{provided_id}:{content_column}:{chunk_index + 1}of{total_chunks}:{start_char}to{end_char}"
|
|
101
107
|
logger.debug(f"Generated chunk ID: {chunk_id}")
|
|
102
108
|
return chunk_id
|
|
103
109
|
|
|
@@ -254,8 +260,15 @@ Please give a short succinct context to situate this chunk within the overall do
|
|
|
254
260
|
if doc.metadata:
|
|
255
261
|
metadata.update(doc.metadata)
|
|
256
262
|
|
|
263
|
+
# Get content_column from metadata or use default
|
|
264
|
+
content_column = metadata.get('content_column')
|
|
265
|
+
if content_column is None:
|
|
266
|
+
# If content_column is not in metadata, use the default column name
|
|
267
|
+
content_column = _DEFAULT_CONTENT_COLUMN_NAME
|
|
268
|
+
logger.debug(f"No content_column found in metadata, using default: {_DEFAULT_CONTENT_COLUMN_NAME}")
|
|
269
|
+
|
|
257
270
|
chunk_id = self._generate_chunk_id(
|
|
258
|
-
chunk_index=chunk_index, provided_id=doc.id
|
|
271
|
+
chunk_index=chunk_index, provided_id=doc.id, content_column=content_column
|
|
259
272
|
)
|
|
260
273
|
processed_chunks.append(
|
|
261
274
|
ProcessedChunk(
|
|
@@ -324,13 +337,23 @@ class TextChunkingPreprocessor(DocumentPreprocessor):
|
|
|
324
337
|
metadata["start_char"] = start_char
|
|
325
338
|
metadata["end_char"] = end_char
|
|
326
339
|
|
|
327
|
-
#
|
|
340
|
+
# Get content_column from metadata or use default
|
|
341
|
+
content_column = None
|
|
342
|
+
if doc.metadata:
|
|
343
|
+
content_column = doc.metadata.get('content_column')
|
|
344
|
+
|
|
345
|
+
if content_column is None:
|
|
346
|
+
# If content_column is not in metadata, use the default column name
|
|
347
|
+
content_column = _DEFAULT_CONTENT_COLUMN_NAME
|
|
348
|
+
logger.debug(f"No content_column found in metadata, using default: {_DEFAULT_CONTENT_COLUMN_NAME}")
|
|
349
|
+
|
|
328
350
|
chunk_id = self._generate_chunk_id(
|
|
329
351
|
chunk_index=i,
|
|
330
352
|
total_chunks=total_chunks,
|
|
331
353
|
start_char=start_char,
|
|
332
354
|
end_char=end_char,
|
|
333
|
-
provided_id=doc.id
|
|
355
|
+
provided_id=doc.id,
|
|
356
|
+
content_column=content_column
|
|
334
357
|
)
|
|
335
358
|
|
|
336
359
|
processed_chunks.append(
|
|
@@ -354,18 +377,21 @@ class PreprocessorFactory:
|
|
|
354
377
|
) -> DocumentPreprocessor:
|
|
355
378
|
"""
|
|
356
379
|
Create appropriate preprocessor based on configuration
|
|
357
|
-
:
|
|
358
|
-
:
|
|
359
|
-
:
|
|
380
|
+
:param config: Preprocessing configuration
|
|
381
|
+
:return: Configured preprocessor instance
|
|
382
|
+
:raises ValueError: If unknown preprocessor type specified
|
|
360
383
|
"""
|
|
361
384
|
if config is None:
|
|
385
|
+
# Default to text chunking if no config provided
|
|
362
386
|
return TextChunkingPreprocessor()
|
|
363
387
|
|
|
364
|
-
if config.type == PreprocessorType.
|
|
365
|
-
return ContextualPreprocessor(
|
|
366
|
-
config.contextual_config or ContextualConfig()
|
|
367
|
-
)
|
|
368
|
-
elif config.type == PreprocessorType.TEXT_CHUNKING:
|
|
388
|
+
if config.type == PreprocessorType.TEXT_CHUNKING:
|
|
369
389
|
return TextChunkingPreprocessor(config.text_chunking_config)
|
|
370
|
-
|
|
371
|
-
|
|
390
|
+
elif config.type == PreprocessorType.CONTEXTUAL:
|
|
391
|
+
return ContextualPreprocessor(config.contextual_config)
|
|
392
|
+
elif config.type == PreprocessorType.JSON_CHUNKING:
|
|
393
|
+
# Import here to avoid circular imports
|
|
394
|
+
from mindsdb.interfaces.knowledge_base.preprocessing.json_chunker import JSONChunkingPreprocessor
|
|
395
|
+
return JSONChunkingPreprocessor(config.json_chunking_config)
|
|
396
|
+
else:
|
|
397
|
+
raise ValueError(f"Unknown preprocessor type: {config.type}")
|