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
|
@@ -7,9 +7,9 @@ class TDEngineHandlerTest(unittest.TestCase):
|
|
|
7
7
|
@classmethod
|
|
8
8
|
def setUpClass(cls):
|
|
9
9
|
cls.kwargs = {
|
|
10
|
-
"token":'<token_for_cloud>',
|
|
11
|
-
"url":"********.cloud.tdengine.com",
|
|
12
|
-
"database":"temp"
|
|
10
|
+
"token": '<token_for_cloud>',
|
|
11
|
+
"url": "********.cloud.tdengine.com",
|
|
12
|
+
"database": "temp"
|
|
13
13
|
}
|
|
14
14
|
cls.handler = TDEngineHandler('test_tdengine_handler', connection_data=cls.kwargs)
|
|
15
15
|
|
|
@@ -18,26 +18,26 @@ class TDEngineHandlerTest(unittest.TestCase):
|
|
|
18
18
|
|
|
19
19
|
def test_1_connect(self):
|
|
20
20
|
assert self.handler.connect()
|
|
21
|
-
|
|
21
|
+
|
|
22
22
|
def test_2_create_table(self):
|
|
23
23
|
query = "CREATE Table `hari` USING `temp` (`id`) TAGS (0);"
|
|
24
24
|
result = self.handler.query(query)
|
|
25
|
-
assert result.type is not RESPONSE_TYPE.ERROR
|
|
25
|
+
assert result.type is not RESPONSE_TYPE.ERROR
|
|
26
26
|
pass
|
|
27
27
|
|
|
28
28
|
def test_3_insert(self):
|
|
29
29
|
query = "INSERT INTO hari VALUES (NOW, 12);"
|
|
30
30
|
result = self.handler.query(query)
|
|
31
|
-
assert result.type is not RESPONSE_TYPE.ERROR
|
|
31
|
+
assert result.type is not RESPONSE_TYPE.ERROR
|
|
32
32
|
|
|
33
33
|
def test_4_native_query_select(self):
|
|
34
34
|
query = "SELECT * FROM hari;"
|
|
35
35
|
result = self.handler.query(query)
|
|
36
|
-
assert result.type is RESPONSE_TYPE.TABLE
|
|
36
|
+
assert result.type is RESPONSE_TYPE.TABLE
|
|
37
37
|
|
|
38
38
|
def test_5_get_tables(self):
|
|
39
39
|
tables = self.handler.get_tables()
|
|
40
|
-
assert tables.type is
|
|
40
|
+
assert tables.type is RESPONSE_TYPE.TABLE
|
|
41
41
|
|
|
42
42
|
def test_6_get_columns(self):
|
|
43
43
|
columns = self.handler.get_columns('hari')
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import unittest
|
|
2
|
-
import pandas as pd
|
|
3
2
|
from mindsdb.integrations.handlers.tidb_handler.tidb_handler import TiDBHandler
|
|
4
3
|
|
|
5
4
|
|
|
@@ -42,4 +41,4 @@ class TiDBHandlerTest(unittest.TestCase):
|
|
|
42
41
|
|
|
43
42
|
def test_7_select_query(self):
|
|
44
43
|
query = "SELECT * FROM dt_test WHERE 'id'='a'"
|
|
45
|
-
|
|
44
|
+
self.handler.native_query(query)
|
|
@@ -33,7 +33,7 @@ class TimeGPTHandler(BaseMLEngine):
|
|
|
33
33
|
if mode == 'forecasting':
|
|
34
34
|
assert time_settings["is_timeseries"], "Specify time series settings in your query"
|
|
35
35
|
|
|
36
|
-
timegpt_token =
|
|
36
|
+
timegpt_token = get_api_key('timegpt', using_args, self.engine_storage, strict=True)
|
|
37
37
|
timegpt = NixtlaClient(api_key=timegpt_token)
|
|
38
38
|
assert timegpt.validate_api_key(), "Invalid TimeGPT token provided."
|
|
39
39
|
|
|
@@ -64,7 +64,7 @@ class TimeGPTHandler(BaseMLEngine):
|
|
|
64
64
|
model_args['add_history'] = True
|
|
65
65
|
|
|
66
66
|
assert isinstance(model_args["level"], list), "`level` must be a list of integers"
|
|
67
|
-
assert all([isinstance(
|
|
67
|
+
assert all([isinstance(level, int) for level in model_args["level"]]), "`level` must be a list of integers"
|
|
68
68
|
|
|
69
69
|
self.model_storage.json_set("model_args", model_args) # persist changes to handler folder
|
|
70
70
|
|
|
@@ -73,7 +73,7 @@ class TimeGPTHandler(BaseMLEngine):
|
|
|
73
73
|
model_args = self.model_storage.json_get("model_args")
|
|
74
74
|
args = args['predict_params']
|
|
75
75
|
prediction_df = self._transform_to_nixtla_df(df, model_args)
|
|
76
|
-
|
|
76
|
+
|
|
77
77
|
timegpt = NixtlaClient(api_key=model_args['token'])
|
|
78
78
|
assert timegpt.validate_api_key(), "Invalid TimeGPT token provided."
|
|
79
79
|
|
|
@@ -122,7 +122,7 @@ class TimeGPTHandler(BaseMLEngine):
|
|
|
122
122
|
for i, level in enumerate(levels):
|
|
123
123
|
if i == 0:
|
|
124
124
|
# NOTE: this should be simplified once we refactor the expected time series output within MindsDB
|
|
125
|
-
results_df['confidence'] = level/100 # we report the highest level as the overall confidence
|
|
125
|
+
results_df['confidence'] = level / 100 # we report the highest level as the overall confidence
|
|
126
126
|
results_df['lower'] = forecast_df[f'TimeGPT-lo-{level}']
|
|
127
127
|
results_df['upper'] = forecast_df[f'TimeGPT-hi-{level}']
|
|
128
128
|
else:
|
|
@@ -171,7 +171,7 @@ class TimeGPTHandler(BaseMLEngine):
|
|
|
171
171
|
if mindate > pd.to_datetime('1970-01-01T00:00:00') and maxdate < pd.to_datetime('2050-12-31T23:59:59'):
|
|
172
172
|
unit = u
|
|
173
173
|
df[date_column] = pd.to_datetime(df[date_column], unit=unit, origin='unix')
|
|
174
|
-
else:
|
|
174
|
+
else:
|
|
175
175
|
df[date_column] = pd.to_datetime(df[date_column])
|
|
176
176
|
df[date_column] = df[date_column].dt.strftime('%Y-%m-%dT%H:%M:%S') # convert to ISO 8601 format
|
|
177
177
|
df[date_column] = pd.to_datetime(df[date_column])
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
from typing import Optional
|
|
2
1
|
import dill
|
|
3
2
|
import pandas as pd
|
|
4
3
|
from mindsdb.integrations.libs.base import BaseMLEngine
|
|
@@ -10,32 +9,30 @@ from sklearn.preprocessing import LabelEncoder
|
|
|
10
9
|
|
|
11
10
|
class TPOTHandler(BaseMLEngine):
|
|
12
11
|
name = "TPOT"
|
|
12
|
+
|
|
13
13
|
def create(self, target: str, df: Optional[pd.DataFrame] = None, args: Optional[Dict] = None) -> None:
|
|
14
14
|
if args is None:
|
|
15
15
|
args = {}
|
|
16
|
-
type_of_cols=infer_types(df,0).dtypes
|
|
17
|
-
target_dtype=type_of_cols[target]
|
|
18
|
-
|
|
16
|
+
type_of_cols = infer_types(df, 0).dtypes
|
|
17
|
+
target_dtype = type_of_cols[target]
|
|
19
18
|
|
|
20
|
-
if target_dtype in ['binary','categorical','tags']:
|
|
19
|
+
if target_dtype in ['binary', 'categorical', 'tags']:
|
|
21
20
|
model = TPOTClassifier(generations=args.get('generations', 10),
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
21
|
+
population_size=args.get('population_size', 100),
|
|
22
|
+
verbosity=0,
|
|
23
|
+
max_time_mins=args.get('max_time_mins', None),
|
|
24
|
+
n_jobs=args.get('n_jobs', -1))
|
|
27
25
|
|
|
28
|
-
elif target_dtype in ['integer','float','quantity']
|
|
26
|
+
elif target_dtype in ['integer', 'float', 'quantity']:
|
|
29
27
|
model = TPOTRegressor(generations=args.get('generations', 10),
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
28
|
+
population_size=args.get('population_size', 100),
|
|
29
|
+
verbosity=0,
|
|
30
|
+
max_time_mins=args.get('max_time_mins', None),
|
|
31
|
+
n_jobs=args.get('n_jobs', -1))
|
|
35
32
|
|
|
36
33
|
if df is not None:
|
|
37
34
|
# Separate out the categorical and non-categorical columns
|
|
38
|
-
categorical_cols=[col for col, type_col in type_of_cols.items() if type_col in ('categorical', 'binary')]
|
|
35
|
+
categorical_cols = [col for col, type_col in type_of_cols.items() if type_col in ('categorical', 'binary')]
|
|
39
36
|
|
|
40
37
|
# Fit a LabelEncoder for each categorical column and store it in a dictionary
|
|
41
38
|
le_dict = {}
|
|
@@ -47,30 +44,28 @@ class TPOTHandler(BaseMLEngine):
|
|
|
47
44
|
# Encode the categorical column using the fitted LabelEncoder
|
|
48
45
|
df[col] = le.transform(df[col])
|
|
49
46
|
|
|
50
|
-
|
|
51
47
|
model.fit(df.drop(columns=[target]), df[target])
|
|
52
48
|
self.model_storage.json_set('args', args)
|
|
53
49
|
self.model_storage.file_set('le_dict', dill.dumps(le_dict))
|
|
54
50
|
self.model_storage.file_set('model', dill.dumps(model.fitted_pipeline_))
|
|
55
|
-
else
|
|
51
|
+
else:
|
|
56
52
|
raise Exception(
|
|
57
53
|
"Data is empty!!"
|
|
58
54
|
)
|
|
59
|
-
|
|
60
55
|
|
|
61
56
|
def predict(self, df: pd.DataFrame, args: Optional[Dict] = None) -> pd.DataFrame:
|
|
62
57
|
|
|
63
|
-
model=dill.loads(self.model_storage.file_get("model"))
|
|
64
|
-
le_dict=dill.loads(self.model_storage.file_get("le_dict"))
|
|
65
|
-
target=self.model_storage.json_get('args').get("target")
|
|
58
|
+
model = dill.loads(self.model_storage.file_get("model"))
|
|
59
|
+
le_dict = dill.loads(self.model_storage.file_get("le_dict"))
|
|
60
|
+
target = self.model_storage.json_get('args').get("target")
|
|
66
61
|
|
|
67
|
-
|
|
62
|
+
# Encode the categorical columns in the input DataFrame using the saved LabelEncoders
|
|
68
63
|
for col, le in le_dict.items():
|
|
69
64
|
if col in df.columns:
|
|
70
65
|
df[col] = le.transform(df[col])
|
|
71
|
-
|
|
66
|
+
|
|
72
67
|
# Make predictions using the trained TPOT model
|
|
73
|
-
results=pd.DataFrame(model.predict(df),columns=[target])
|
|
68
|
+
results = pd.DataFrame(model.predict(df), columns=[target])
|
|
74
69
|
|
|
75
70
|
# Decode the predicted categorical values back into their original values
|
|
76
71
|
for col, le in le_dict.items():
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import re
|
|
2
2
|
from typing import Dict
|
|
3
3
|
import pandas as pd
|
|
4
|
-
from pyhive import
|
|
4
|
+
from pyhive import sqlalchemy_trino
|
|
5
5
|
from mindsdb_sql_parser import parse_sql, ASTNode
|
|
6
|
-
from trino.auth import
|
|
6
|
+
from trino.auth import BasicAuthentication
|
|
7
7
|
from trino.dbapi import connect
|
|
8
8
|
from mindsdb.utilities.render.sqlalchemy_render import SqlalchemyRender
|
|
9
9
|
from mindsdb.integrations.libs.base import DatabaseHandler
|
|
@@ -13,10 +13,10 @@ from mindsdb.integrations.libs.response import (
|
|
|
13
13
|
HandlerResponse as Response,
|
|
14
14
|
RESPONSE_TYPE
|
|
15
15
|
)
|
|
16
|
-
from .trino_config_provider import TrinoConfigProvider
|
|
17
16
|
|
|
18
17
|
logger = log.getLogger(__name__)
|
|
19
18
|
|
|
19
|
+
|
|
20
20
|
class TrinoHandler(DatabaseHandler):
|
|
21
21
|
"""
|
|
22
22
|
This handler handles connection and execution of the Trino statements
|
|
@@ -59,24 +59,24 @@ class TrinoHandler(DatabaseHandler):
|
|
|
59
59
|
return self.connection
|
|
60
60
|
|
|
61
61
|
# option configuration
|
|
62
|
-
http_scheme='http'
|
|
63
|
-
auth=None
|
|
64
|
-
auth_config=None
|
|
65
|
-
password=None
|
|
62
|
+
http_scheme = 'http'
|
|
63
|
+
auth = None
|
|
64
|
+
auth_config = None
|
|
65
|
+
password = None
|
|
66
66
|
|
|
67
67
|
if 'auth' in self.connection_data:
|
|
68
|
-
auth=self.connection_data['auth']
|
|
68
|
+
auth = self.connection_data['auth']
|
|
69
69
|
if 'password' in self.connection_data:
|
|
70
|
-
password=self.connection_data['password']
|
|
70
|
+
password = self.connection_data['password']
|
|
71
71
|
if 'http_scheme' in self.connection_data:
|
|
72
|
-
|
|
72
|
+
http_scheme = self.connection_data['http_scheme']
|
|
73
73
|
if 'with' in self.connection_data:
|
|
74
|
-
|
|
74
|
+
self.with_clause = self.connection_data['with']
|
|
75
75
|
|
|
76
|
-
if password and auth=='kerberos':
|
|
76
|
+
if password and auth == 'kerberos':
|
|
77
77
|
raise Exception("Kerberos authorization doesn't support password.")
|
|
78
78
|
elif password:
|
|
79
|
-
auth_config=BasicAuthentication(self.connection_data['user'], password)
|
|
79
|
+
auth_config = BasicAuthentication(self.connection_data['user'], password)
|
|
80
80
|
|
|
81
81
|
if auth:
|
|
82
82
|
conn = connect(
|
|
@@ -159,7 +159,7 @@ class TrinoHandler(DatabaseHandler):
|
|
|
159
159
|
renderer = SqlalchemyRender(sqlalchemy_trino.TrinoDialect)
|
|
160
160
|
query_str = renderer.get_string(query, with_failback=True)
|
|
161
161
|
modified_query_str = re.sub(
|
|
162
|
-
"(?is)(CREATE.+TABLE.+\(.*\))",
|
|
162
|
+
r"(?is)(CREATE.+TABLE.+\(.*\))",
|
|
163
163
|
f"\\1 {self.with_clause}",
|
|
164
164
|
query_str
|
|
165
165
|
)
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
import re
|
|
2
2
|
import os
|
|
3
3
|
import datetime as dt
|
|
4
|
-
import ast
|
|
5
4
|
import time
|
|
6
5
|
from collections import defaultdict
|
|
7
|
-
import pytz
|
|
8
6
|
import io
|
|
9
7
|
import requests
|
|
10
8
|
|
|
@@ -28,6 +26,7 @@ from mindsdb.integrations.libs.response import (
|
|
|
28
26
|
|
|
29
27
|
logger = log.getLogger(__name__)
|
|
30
28
|
|
|
29
|
+
|
|
31
30
|
class TweetsTable(APITable):
|
|
32
31
|
|
|
33
32
|
def select(self, query: ast.Select) -> Response:
|
|
@@ -39,7 +38,7 @@ class TweetsTable(APITable):
|
|
|
39
38
|
for op, arg1, arg2 in conditions:
|
|
40
39
|
|
|
41
40
|
if op == 'or':
|
|
42
|
-
raise NotImplementedError(
|
|
41
|
+
raise NotImplementedError('OR is not supported')
|
|
43
42
|
if arg1 == 'created_at':
|
|
44
43
|
date = parse_utc_date(arg2)
|
|
45
44
|
if op == '>':
|
|
@@ -170,7 +169,6 @@ class TweetsTable(APITable):
|
|
|
170
169
|
|
|
171
170
|
media_ids = [media.media_id]
|
|
172
171
|
|
|
173
|
-
|
|
174
172
|
words = re.split('( )', text)
|
|
175
173
|
|
|
176
174
|
messages = []
|
|
@@ -1,20 +1,19 @@
|
|
|
1
1
|
import os
|
|
2
2
|
import pytest
|
|
3
|
-
import pandas as pd
|
|
4
3
|
|
|
5
4
|
from mindsdb_sql_parser import parse_sql
|
|
6
5
|
|
|
7
6
|
from tests.unit.executor_test_base import BaseExecutorTest
|
|
8
7
|
|
|
8
|
+
|
|
9
9
|
class TestUnify(BaseExecutorTest):
|
|
10
|
-
|
|
10
|
+
|
|
11
11
|
def run_sql(self, sql):
|
|
12
12
|
ret = self.command_executor.execute_command(parse_sql(sql))
|
|
13
13
|
assert ret.error_code is None
|
|
14
14
|
if ret.data is not None:
|
|
15
15
|
return ret.data.to_df()
|
|
16
16
|
|
|
17
|
-
|
|
18
17
|
"""
|
|
19
18
|
Integration tests for the Unify handler.
|
|
20
19
|
"""
|
|
@@ -25,20 +24,20 @@ class TestUnify(BaseExecutorTest):
|
|
|
25
24
|
"""
|
|
26
25
|
super().setup_method()
|
|
27
26
|
self.run_sql("create database proj")
|
|
28
|
-
|
|
27
|
+
|
|
29
28
|
@pytest.mark.skipif(os.environ.get('UNIFY_API_KEY') is None, reason='Missing API key!')
|
|
30
29
|
def test_unify_correct_flow(self):
|
|
31
30
|
self.run_sql(
|
|
32
|
-
|
|
31
|
+
f"""
|
|
33
32
|
CREATE ML_ENGINE unify_engine
|
|
34
33
|
FROM unify
|
|
35
34
|
USING
|
|
36
35
|
unify_api_key = '{os.environ.get('UNIFY_API_KEY')}';
|
|
37
36
|
"""
|
|
38
37
|
)
|
|
39
|
-
|
|
38
|
+
|
|
40
39
|
self.run_sql(
|
|
41
|
-
|
|
40
|
+
"""
|
|
42
41
|
CREATE MODEL proj.test_unify_correct_flow
|
|
43
42
|
PREDICT output
|
|
44
43
|
USING
|
|
@@ -51,7 +50,7 @@ class TestUnify(BaseExecutorTest):
|
|
|
51
50
|
self.wait_predictor("proj", "test_unify_correct_flow")
|
|
52
51
|
|
|
53
52
|
result_df = self.run_sql(
|
|
54
|
-
|
|
53
|
+
"""
|
|
55
54
|
SELECT text, output
|
|
56
55
|
FROM proj.test_unify_correct_flow
|
|
57
56
|
WHERE text = 'Hello';
|
|
@@ -12,6 +12,7 @@ from mindsdb.integrations.utilities.handler_utils import get_api_key
|
|
|
12
12
|
|
|
13
13
|
logger = log.getLogger(__name__)
|
|
14
14
|
|
|
15
|
+
|
|
15
16
|
class UnifyHandler(BaseMLEngine):
|
|
16
17
|
"""
|
|
17
18
|
Integration with the Unifyai Python Library
|
|
@@ -26,9 +27,8 @@ class UnifyHandler(BaseMLEngine):
|
|
|
26
27
|
self.model_storage.json_set('args', args)
|
|
27
28
|
|
|
28
29
|
def predict(self, df: Optional[pd.DataFrame] = None, args: Optional[Dict] = None) -> None:
|
|
29
|
-
|
|
30
|
+
|
|
30
31
|
args = self.model_storage.json_get('args')
|
|
31
|
-
|
|
32
32
|
|
|
33
33
|
input_keys = list(args.keys())
|
|
34
34
|
|
|
@@ -41,7 +41,7 @@ class UnifyHandler(BaseMLEngine):
|
|
|
41
41
|
if 'provider' not in args['using']:
|
|
42
42
|
raise Exception("Unify requires a provider parameter in the USING clause! Refer to its documentation for more details.")
|
|
43
43
|
provider = args['using']['provider']
|
|
44
|
-
|
|
44
|
+
|
|
45
45
|
self.endpoint = model + '@' + provider
|
|
46
46
|
self.api_key = get_api_key('unify', args["using"], self.engine_storage, strict=False)
|
|
47
47
|
available_endpoints = unify.utils.list_endpoints(api_key=self.api_key)
|
|
@@ -51,15 +51,15 @@ class UnifyHandler(BaseMLEngine):
|
|
|
51
51
|
question_column = args['using']['column']
|
|
52
52
|
if question_column not in df.columns:
|
|
53
53
|
raise RuntimeError(f'Column "{question_column}" not found in input data')
|
|
54
|
-
|
|
55
|
-
result_df = pd.DataFrame()
|
|
56
|
-
result_df['predictions'] = df[question_column].apply(self.predict_answer)
|
|
54
|
+
|
|
55
|
+
result_df = pd.DataFrame()
|
|
56
|
+
result_df['predictions'] = df[question_column].apply(self.predict_answer)
|
|
57
57
|
result_df = result_df.rename(columns={'predictions': args['target']})
|
|
58
|
-
|
|
58
|
+
|
|
59
59
|
return result_df
|
|
60
|
-
|
|
60
|
+
|
|
61
61
|
def predict_answer(self, text):
|
|
62
|
-
|
|
62
|
+
|
|
63
63
|
client = unify.Unify(self.endpoint, api_key=self.api_key)
|
|
64
64
|
|
|
65
65
|
response = client.generate(text)
|
|
@@ -2,7 +2,7 @@ from mindsdb.utilities import log
|
|
|
2
2
|
from google.cloud.aiplatform import init, TabularDataset, Model, Endpoint
|
|
3
3
|
import pandas as pd
|
|
4
4
|
|
|
5
|
-
from mindsdb.integrations.utilities.handlers.auth_utilities import GoogleServiceAccountOAuth2Manager
|
|
5
|
+
from mindsdb.integrations.utilities.handlers.auth_utilities.google import GoogleServiceAccountOAuth2Manager
|
|
6
6
|
|
|
7
7
|
logger = log.getLogger(__name__)
|
|
8
8
|
|
|
@@ -8,14 +8,14 @@ class VerticaHandlerTest(unittest.TestCase):
|
|
|
8
8
|
def setUpClass(cls):
|
|
9
9
|
cls.kwargs = {
|
|
10
10
|
"connection_data": {
|
|
11
|
-
"host":'127.0.0.1',
|
|
12
|
-
"port":5433,
|
|
13
|
-
"user":'dbadmin',
|
|
14
|
-
"password":'',
|
|
15
|
-
"database":'VMart',
|
|
16
|
-
"schema_name":'public'
|
|
11
|
+
"host": '127.0.0.1',
|
|
12
|
+
"port": 5433,
|
|
13
|
+
"user": 'dbadmin',
|
|
14
|
+
"password": '',
|
|
15
|
+
"database": 'VMart',
|
|
16
|
+
"schema_name": 'public'
|
|
17
17
|
}
|
|
18
|
-
|
|
18
|
+
|
|
19
19
|
}
|
|
20
20
|
cls.handler = VerticaHandler('test_vertica_handler', cls.kwargs)
|
|
21
21
|
|
|
@@ -24,21 +24,21 @@ class VerticaHandlerTest(unittest.TestCase):
|
|
|
24
24
|
|
|
25
25
|
def test_1_connect(self):
|
|
26
26
|
assert self.handler.connect()
|
|
27
|
-
|
|
27
|
+
|
|
28
28
|
def test_2_create_table(self):
|
|
29
29
|
query = "CREATE Table TEST(id Number(1),Name Varchar(33))"
|
|
30
30
|
result = self.handler.query(query)
|
|
31
|
-
assert result.type is not RESPONSE_TYPE.ERROR
|
|
31
|
+
assert result.type is not RESPONSE_TYPE.ERROR
|
|
32
32
|
|
|
33
33
|
def test_3_insert(self):
|
|
34
34
|
query = "INSERT INTO TEST (1,'lOVe yOU)"
|
|
35
35
|
result = self.handler.query(query)
|
|
36
|
-
assert result.type is not RESPONSE_TYPE.ERROR
|
|
36
|
+
assert result.type is not RESPONSE_TYPE.ERROR
|
|
37
37
|
|
|
38
38
|
def test_4_native_query_select(self):
|
|
39
39
|
query = "SELECT * FROM TEST;"
|
|
40
40
|
result = self.handler.query(query)
|
|
41
|
-
assert result.type is RESPONSE_TYPE.TABLE
|
|
41
|
+
assert result.type is RESPONSE_TYPE.TABLE
|
|
42
42
|
|
|
43
43
|
def test_5_get_tables(self):
|
|
44
44
|
tables = self.handler.get_tables()
|
|
@@ -30,7 +30,7 @@ class VerticaHandler(DatabaseHandler):
|
|
|
30
30
|
|
|
31
31
|
def __init__(self, name, connection_data: Optional[dict], **kwargs):
|
|
32
32
|
super().__init__(name)
|
|
33
|
-
|
|
33
|
+
|
|
34
34
|
self.parser = parse_sql
|
|
35
35
|
self.dialect = 'vertica'
|
|
36
36
|
self.kwargs = kwargs
|
|
@@ -40,7 +40,6 @@ class VerticaHandler(DatabaseHandler):
|
|
|
40
40
|
self.connection = None
|
|
41
41
|
self.is_connected = False
|
|
42
42
|
|
|
43
|
-
|
|
44
43
|
def connect(self):
|
|
45
44
|
if self.is_connected is True:
|
|
46
45
|
return self.connection
|
|
@@ -66,7 +65,7 @@ class VerticaHandler(DatabaseHandler):
|
|
|
66
65
|
return
|
|
67
66
|
|
|
68
67
|
def check_connection(self) -> StatusResponse:
|
|
69
|
-
|
|
68
|
+
|
|
70
69
|
result = StatusResponse(False)
|
|
71
70
|
need_to_close = self.is_connected is False
|
|
72
71
|
|
|
@@ -96,10 +95,10 @@ class VerticaHandler(DatabaseHandler):
|
|
|
96
95
|
connection = self.connect()
|
|
97
96
|
with connection.cursor() as cur:
|
|
98
97
|
try:
|
|
99
|
-
e=cur.execute(query)
|
|
98
|
+
e = cur.execute(query)
|
|
100
99
|
result = e.fetchall()
|
|
101
100
|
if e.rowcount != -1:
|
|
102
|
-
|
|
101
|
+
|
|
103
102
|
response = Response(
|
|
104
103
|
RESPONSE_TYPE.TABLE,
|
|
105
104
|
pd.DataFrame(
|
|
@@ -135,26 +134,24 @@ class VerticaHandler(DatabaseHandler):
|
|
|
135
134
|
"""
|
|
136
135
|
Get a list with all of the tabels in VERTICA
|
|
137
136
|
"""
|
|
138
|
-
q = f'''SELECT
|
|
137
|
+
q = f'''SELECT
|
|
139
138
|
TABLE_NAME,
|
|
140
139
|
TABLE_SCHEMA
|
|
141
|
-
from v_catalog.tables
|
|
142
|
-
WHERE table_schema='{self.schema_name}'
|
|
140
|
+
from v_catalog.tables
|
|
141
|
+
WHERE table_schema='{self.schema_name}'
|
|
143
142
|
order by
|
|
144
143
|
table_name;'''
|
|
145
144
|
|
|
146
|
-
|
|
147
145
|
return self.native_query(q)
|
|
148
146
|
|
|
149
147
|
def get_columns(self, table_name) -> Response:
|
|
150
148
|
"""
|
|
151
149
|
Show details about the table
|
|
152
150
|
"""
|
|
153
|
-
q = f'''SELECT
|
|
154
|
-
column_name ,
|
|
155
|
-
data_type
|
|
156
|
-
FROM v_catalog.columns
|
|
151
|
+
q = f'''SELECT
|
|
152
|
+
column_name ,
|
|
153
|
+
data_type
|
|
154
|
+
FROM v_catalog.columns
|
|
157
155
|
WHERE table_name='{table_name}';'''
|
|
158
156
|
|
|
159
|
-
|
|
160
157
|
return self.native_query(q)
|
|
@@ -2,13 +2,14 @@ import unittest
|
|
|
2
2
|
from mindsdb.integrations.handlers.vitess_handler.vitess_handler import VitessHandler
|
|
3
3
|
from mindsdb.integrations.libs.response import RESPONSE_TYPE
|
|
4
4
|
|
|
5
|
+
|
|
5
6
|
class VitessHandlerTest(unittest.TestCase):
|
|
6
7
|
@classmethod
|
|
7
8
|
def setUpClass(cls):
|
|
8
9
|
cls.kwargs = {
|
|
9
10
|
"connection_data": {
|
|
10
11
|
"host": "localhost",
|
|
11
|
-
"port": 33577
|
|
12
|
+
"port": 33577,
|
|
12
13
|
"user": "root",
|
|
13
14
|
"password": "",
|
|
14
15
|
"database": "vitess",
|
|
@@ -21,36 +22,33 @@ class VitessHandlerTest(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
|
|
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
|
-
|
|
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
|
-
|
|
@@ -10,7 +10,7 @@ try:
|
|
|
10
10
|
except Exception as e:
|
|
11
11
|
Handler = None
|
|
12
12
|
import_error = e
|
|
13
|
-
|
|
13
|
+
|
|
14
14
|
title = 'WhatsApp'
|
|
15
15
|
name = 'whatsapp'
|
|
16
16
|
type = HANDLER_TYPE.DATA
|
|
@@ -21,8 +21,8 @@ __all__ = [
|
|
|
21
21
|
'version',
|
|
22
22
|
'name',
|
|
23
23
|
'type',
|
|
24
|
-
'title',
|
|
24
|
+
'title',
|
|
25
25
|
'description',
|
|
26
26
|
'import_error',
|
|
27
27
|
'icon_path'
|
|
28
|
-
]
|
|
28
|
+
]
|
|
@@ -2,7 +2,6 @@ from typing import List, Union
|
|
|
2
2
|
from pydantic import BaseModel, Extra, field_validator
|
|
3
3
|
|
|
4
4
|
from mindsdb.integrations.handlers.rag_handler.settings import (
|
|
5
|
-
DEFAULT_EMBEDDINGS_MODEL,
|
|
6
5
|
RAGBaseParameters,
|
|
7
6
|
)
|
|
8
7
|
from langchain_core.callbacks import StreamingStdOutCallbackHandler
|