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
|
@@ -28,12 +28,12 @@ class NewsApiHandlerTest(unittest.TestCase):
|
|
|
28
28
|
def test_3_select(self):
|
|
29
29
|
# table = self.handler.get_table("article")
|
|
30
30
|
with self.assertRaises(NewsAPIException):
|
|
31
|
-
|
|
31
|
+
self.handler.native_query("SELECT * FROM article")
|
|
32
32
|
|
|
33
33
|
def test_4_select(self):
|
|
34
34
|
# table = self.handler.get_table("article")
|
|
35
35
|
with self.assertRaises(NewsAPIException):
|
|
36
|
-
|
|
36
|
+
self.handler.native_query(
|
|
37
37
|
'SELECT * FROM article WHERE query="google" AND sources="google.com"'
|
|
38
38
|
)
|
|
39
39
|
|
|
@@ -46,7 +46,7 @@ class NewsApiHandlerTest(unittest.TestCase):
|
|
|
46
46
|
|
|
47
47
|
def test_6_select(self):
|
|
48
48
|
# table = self.handler.get_table("article")
|
|
49
|
-
|
|
49
|
+
self.handler.native_query(
|
|
50
50
|
'SELECT * FROM article WHERE query="google" AND publishedAt >= "2023-03-23" AND publishedAt <= "2023-04-23"'
|
|
51
51
|
)
|
|
52
52
|
|
|
@@ -74,7 +74,7 @@ class NewsApiHandlerTest(unittest.TestCase):
|
|
|
74
74
|
def test_10_select(self):
|
|
75
75
|
# table = self.handler.get_table("article")
|
|
76
76
|
with self.assertRaises(NotImplementedError):
|
|
77
|
-
|
|
77
|
+
self.handler.native_query(
|
|
78
78
|
'SELECT * FROM article WHERE query="google" ORDER BY query'
|
|
79
79
|
)
|
|
80
80
|
|
|
@@ -44,8 +44,8 @@ connection_args = OrderedDict(
|
|
|
44
44
|
driver_args={
|
|
45
45
|
'type': ARG_TYPE.STR,
|
|
46
46
|
'description': """
|
|
47
|
-
The extra arguments which can be specified to the driver.
|
|
48
|
-
Specify this in the format: "arg1=value1,arg2=value2.
|
|
47
|
+
The extra arguments which can be specified to the driver.
|
|
48
|
+
Specify this in the format: "arg1=value1,arg2=value2.
|
|
49
49
|
More information on the supported paramters can be found at: https://doc.nuodb.com/nuodb/latest/deployment-models/physical-or-vmware-environments-with-nuodb-admin/reference-information/connection-properties/'
|
|
50
50
|
"""
|
|
51
51
|
}
|
|
@@ -13,11 +13,10 @@ import jaydebeapi as jdbcconnector
|
|
|
13
13
|
|
|
14
14
|
logger = log.getLogger(__name__)
|
|
15
15
|
|
|
16
|
-
class NuoHandler(DatabaseHandler):
|
|
17
|
-
|
|
18
16
|
|
|
19
|
-
|
|
17
|
+
class NuoHandler(DatabaseHandler):
|
|
20
18
|
|
|
19
|
+
name = 'nuo_jdbc'
|
|
21
20
|
|
|
22
21
|
def __init__(self, name: str, connection_data: Optional[dict], **kwargs):
|
|
23
22
|
""" Initialize the handler
|
|
@@ -27,7 +26,7 @@ class NuoHandler(DatabaseHandler):
|
|
|
27
26
|
**kwargs: arbitrary keyword arguments.
|
|
28
27
|
"""
|
|
29
28
|
super().__init__(name)
|
|
30
|
-
|
|
29
|
+
|
|
31
30
|
self.kwargs = kwargs
|
|
32
31
|
self.parser = parse_sql
|
|
33
32
|
self.database = connection_data['database']
|
|
@@ -42,7 +41,7 @@ class NuoHandler(DatabaseHandler):
|
|
|
42
41
|
self.schema = None
|
|
43
42
|
|
|
44
43
|
self.jdbc_url = self.construct_jdbc_url()
|
|
45
|
-
|
|
44
|
+
|
|
46
45
|
def connect(self):
|
|
47
46
|
""" Set up any connections required by the handler
|
|
48
47
|
Should return output of check_connection() method after attempting
|
|
@@ -56,10 +55,10 @@ class NuoHandler(DatabaseHandler):
|
|
|
56
55
|
jdbc_class = "com.nuodb.jdbc.Driver"
|
|
57
56
|
jar_location = self.connection_config.get('jar_location')
|
|
58
57
|
|
|
59
|
-
try:
|
|
60
|
-
if(jar_location):
|
|
58
|
+
try:
|
|
59
|
+
if (jar_location):
|
|
61
60
|
self.connection = jdbcconnector.connect(jclassname=jdbc_class, url=self.jdbc_url, jars=jar_location)
|
|
62
|
-
else:
|
|
61
|
+
else:
|
|
63
62
|
self.connection = jdbcconnector.connect(jclassname=jdbc_class, url=self.jdbc_url)
|
|
64
63
|
except Exception as e:
|
|
65
64
|
logger.error(f"Error while connecting to {self.database}, {e}")
|
|
@@ -68,40 +67,38 @@ class NuoHandler(DatabaseHandler):
|
|
|
68
67
|
|
|
69
68
|
def construct_jdbc_url(self):
|
|
70
69
|
""" Constructs the JDBC url based on the paramters provided to the handler class.\
|
|
71
|
-
Returns:
|
|
72
|
-
The JDBC connection url string.
|
|
70
|
+
Returns:
|
|
71
|
+
The JDBC connection url string.
|
|
73
72
|
"""
|
|
74
73
|
|
|
75
74
|
jdbc_url = "jdbc:com.nuodb://" + self.host
|
|
76
75
|
|
|
77
|
-
#port is an optional paramter, if found then append
|
|
76
|
+
# port is an optional paramter, if found then append
|
|
78
77
|
port = self.connection_config.get('port')
|
|
79
|
-
if port:
|
|
78
|
+
if port:
|
|
80
79
|
jdbc_url = jdbc_url + ":" + str(port)
|
|
81
|
-
|
|
82
|
-
jdbc_url = jdbc_url + "/" + self.database + "?user=" + self.user + "&password=" + self.password
|
|
83
80
|
|
|
84
|
-
|
|
81
|
+
jdbc_url = jdbc_url + "/" + self.database + "?user=" + self.user + "&password=" + self.password
|
|
82
|
+
|
|
83
|
+
# check if a schema is provided in the connection args, if provided use the schema to establish connection
|
|
85
84
|
schema = self.connection_config.get('schema')
|
|
86
|
-
if schema:
|
|
85
|
+
if schema:
|
|
87
86
|
self.schema = schema
|
|
88
87
|
jdbc_url = jdbc_url + "&schema=" + schema
|
|
89
88
|
|
|
90
|
-
#sets direct paramter only if the paramters is specified to be true
|
|
91
|
-
if(str(self.is_direct).lower() == 'true'):
|
|
89
|
+
# sets direct paramter only if the paramters is specified to be true
|
|
90
|
+
if (str(self.is_direct).lower() == 'true'):
|
|
92
91
|
jdbc_url = jdbc_url + "&direct=true"
|
|
93
92
|
|
|
94
|
-
|
|
95
93
|
driver_args = self.connection_config.get('driver_args')
|
|
96
94
|
|
|
97
|
-
#if driver args are present then construct them in the form: &query=one#qquerytwo=true
|
|
98
|
-
#finally append these to the url
|
|
99
|
-
if(driver_args):
|
|
95
|
+
# if driver args are present then construct them in the form: &query=one#qquerytwo=true
|
|
96
|
+
# finally append these to the url
|
|
97
|
+
if (driver_args):
|
|
100
98
|
driver_arg_string = '&'.join(driver_args.split(","))
|
|
101
|
-
jdbc_url = jdbc_url + "&" + driver_arg_string
|
|
99
|
+
jdbc_url = jdbc_url + "&" + driver_arg_string
|
|
102
100
|
|
|
103
|
-
return jdbc_url
|
|
104
|
-
|
|
101
|
+
return jdbc_url
|
|
105
102
|
|
|
106
103
|
def disconnect(self):
|
|
107
104
|
""" Close any existing connections
|
|
@@ -111,12 +108,11 @@ class NuoHandler(DatabaseHandler):
|
|
|
111
108
|
return
|
|
112
109
|
try:
|
|
113
110
|
self.connection.close()
|
|
114
|
-
self.is_connected=False
|
|
111
|
+
self.is_connected = False
|
|
115
112
|
except Exception as e:
|
|
116
113
|
logger.error(f"Error while disconnecting to {self.database}, {e}")
|
|
117
114
|
|
|
118
|
-
return
|
|
119
|
-
|
|
115
|
+
return
|
|
120
116
|
|
|
121
117
|
def check_connection(self) -> StatusResponse:
|
|
122
118
|
""" Check connection to the handler
|
|
@@ -140,7 +136,6 @@ class NuoHandler(DatabaseHandler):
|
|
|
140
136
|
|
|
141
137
|
return responseCode
|
|
142
138
|
|
|
143
|
-
|
|
144
139
|
def native_query(self, query: str) -> StatusResponse:
|
|
145
140
|
"""Receive raw query and act upon it somehow.
|
|
146
141
|
Args:
|
|
@@ -155,7 +150,7 @@ class NuoHandler(DatabaseHandler):
|
|
|
155
150
|
try:
|
|
156
151
|
cur.execute(query)
|
|
157
152
|
if cur.description:
|
|
158
|
-
result = cur.fetchall()
|
|
153
|
+
result = cur.fetchall()
|
|
159
154
|
response = Response(
|
|
160
155
|
RESPONSE_TYPE.TABLE,
|
|
161
156
|
data_frame=pd.DataFrame(
|
|
@@ -179,7 +174,6 @@ class NuoHandler(DatabaseHandler):
|
|
|
179
174
|
|
|
180
175
|
return response
|
|
181
176
|
|
|
182
|
-
|
|
183
177
|
def query(self, query: ASTNode) -> StatusResponse:
|
|
184
178
|
"""Render and execute a SQL query.
|
|
185
179
|
|
|
@@ -196,24 +190,22 @@ class NuoHandler(DatabaseHandler):
|
|
|
196
190
|
|
|
197
191
|
return self.native_query(query_str)
|
|
198
192
|
|
|
199
|
-
|
|
200
193
|
def get_tables(self) -> StatusResponse:
|
|
201
194
|
"""Get a list of all the tables in the database.
|
|
202
195
|
|
|
203
196
|
Returns:
|
|
204
197
|
Response: Names of the tables in the database.
|
|
205
198
|
"""
|
|
206
|
-
if self.schema:
|
|
199
|
+
if self.schema:
|
|
207
200
|
query = f''' SELECT TABLENAME FROM SYSTEM.TABLES WHERE SCHEMA = '{self.schema}' '''
|
|
208
|
-
else:
|
|
201
|
+
else:
|
|
209
202
|
query = ''' SELECT TABLENAME FROM SYSTEM.TABLES WHERE SCHEMA != 'SYSTEM' '''
|
|
210
|
-
|
|
203
|
+
|
|
211
204
|
result = self.native_query(query)
|
|
212
205
|
df = result.data_frame
|
|
213
206
|
result.data_frame = df.rename(columns={df.columns[0]: 'table_name'})
|
|
214
207
|
return result
|
|
215
208
|
|
|
216
|
-
|
|
217
209
|
def get_columns(self, table_name: str) -> StatusResponse:
|
|
218
210
|
"""Get details about a table.
|
|
219
211
|
|
|
@@ -2,6 +2,7 @@ import unittest
|
|
|
2
2
|
from mindsdb.integrations.handlers.nuo_jdbc_handler.nuo_jdbc_handler import NuoHandler
|
|
3
3
|
from mindsdb.api.executor.data_types.response_type import RESPONSE_TYPE
|
|
4
4
|
|
|
5
|
+
|
|
5
6
|
class NuoHandlerTest(unittest.TestCase):
|
|
6
7
|
@classmethod
|
|
7
8
|
def setUpClass(cls):
|
|
@@ -20,7 +21,7 @@ class NuoHandlerTest(unittest.TestCase):
|
|
|
20
21
|
|
|
21
22
|
def test_0_connect(self):
|
|
22
23
|
self.handler.connect()
|
|
23
|
-
|
|
24
|
+
|
|
24
25
|
def test_1_check_connection(self):
|
|
25
26
|
self.handler.check_connection()
|
|
26
27
|
|
|
@@ -35,7 +36,7 @@ class NuoHandlerTest(unittest.TestCase):
|
|
|
35
36
|
def test_4_select(self):
|
|
36
37
|
res = self.handler.query('SELECT * FROM HOCKEY')
|
|
37
38
|
assert res.type is RESPONSE_TYPE.TABLE
|
|
38
|
-
|
|
39
|
+
|
|
39
40
|
def test_5_get_tables(self):
|
|
40
41
|
res = self.handler.get_tables()
|
|
41
42
|
assert res.type is RESPONSE_TYPE.TABLE
|
|
@@ -43,8 +44,7 @@ class NuoHandlerTest(unittest.TestCase):
|
|
|
43
44
|
def test_6_get_columns(self):
|
|
44
45
|
res = self.handler.get_columns("HOCKEY")
|
|
45
46
|
assert res.type is RESPONSE_TYPE.TABLE
|
|
46
|
-
|
|
47
47
|
|
|
48
|
-
|
|
48
|
+
|
|
49
49
|
if __name__ == '__main__':
|
|
50
|
-
unittest.main()
|
|
50
|
+
unittest.main()
|
|
@@ -2,6 +2,7 @@ import unittest
|
|
|
2
2
|
from mindsdb.integrations.handlers.oceanbase_handler.oceanbase_handler import OceanBaseHandler
|
|
3
3
|
from mindsdb.integrations.libs.response import RESPONSE_TYPE
|
|
4
4
|
|
|
5
|
+
|
|
5
6
|
class OceanBaseHandlerTest(unittest.TestCase):
|
|
6
7
|
@classmethod
|
|
7
8
|
def setUpClass(cls):
|
|
@@ -21,36 +22,33 @@ class OceanBaseHandlerTest(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
|
-
|
|
@@ -63,7 +63,7 @@ class OllamaHandler(BaseMLEngine):
|
|
|
63
63
|
responses = _model_check()
|
|
64
64
|
if 200 not in responses.values():
|
|
65
65
|
raise Exception(f"Ollama model `{args['model_name']}` is not working correctly. Please try pulling this model manually, check it works correctly and try again.") # noqa
|
|
66
|
-
|
|
66
|
+
|
|
67
67
|
supported_modes = {k: True if v == 200 else False for k, v in responses.items()}
|
|
68
68
|
|
|
69
69
|
# check if a mode has been provided and if it is valid
|
|
@@ -71,7 +71,7 @@ class OllamaHandler(BaseMLEngine):
|
|
|
71
71
|
if 'mode' in args:
|
|
72
72
|
if args['mode'] not in runnable_modes:
|
|
73
73
|
raise Exception(f"Mode `{args['mode']}` is not supported by the model `{args['model_name']}`.")
|
|
74
|
-
|
|
74
|
+
|
|
75
75
|
# if a mode has not been provided, check if the model supports only one mode
|
|
76
76
|
# if it does, set it as the default mode
|
|
77
77
|
# if it supports multiple modes, set the default mode to 'generate'
|
|
@@ -168,4 +168,4 @@ class OllamaHandler(BaseMLEngine):
|
|
|
168
168
|
'modelfile',
|
|
169
169
|
'parameters',
|
|
170
170
|
'ollama_base_template',
|
|
171
|
-
|
|
171
|
+
])
|
|
@@ -9,6 +9,7 @@ import subprocess
|
|
|
9
9
|
import concurrent.futures
|
|
10
10
|
from typing import Text, Tuple, Dict, List, Optional, Any
|
|
11
11
|
import openai
|
|
12
|
+
from openai.types.fine_tuning import FineTuningJob
|
|
12
13
|
from openai import OpenAI, AzureOpenAI, NotFoundError, AuthenticationError
|
|
13
14
|
import numpy as np
|
|
14
15
|
import pandas as pd
|
|
@@ -1116,7 +1117,7 @@ class OpenAIHandler(BaseMLEngine):
|
|
|
1116
1117
|
}
|
|
1117
1118
|
return {**ft_params, **extra_params}
|
|
1118
1119
|
|
|
1119
|
-
def _ft_call(self, ft_params: Dict, client: OpenAI, hour_budget: int) -> Tuple[
|
|
1120
|
+
def _ft_call(self, ft_params: Dict, client: OpenAI, hour_budget: int) -> Tuple[FineTuningJob, Text]:
|
|
1120
1121
|
"""
|
|
1121
1122
|
Submit a fine-tuning job via the OpenAI API.
|
|
1122
1123
|
This method handles requests to both the legacy and new endpoints.
|
|
@@ -1134,7 +1135,7 @@ class OpenAIHandler(BaseMLEngine):
|
|
|
1134
1135
|
PendingFT: If the fine-tuning process is still pending.
|
|
1135
1136
|
|
|
1136
1137
|
Returns:
|
|
1137
|
-
Tuple[
|
|
1138
|
+
Tuple[FineTuningJob, Text]: Fine-tuning stats and result file ID.
|
|
1138
1139
|
"""
|
|
1139
1140
|
ft_result = client.fine_tuning.jobs.create(
|
|
1140
1141
|
**{k: v for k, v in ft_params.items() if v is not None}
|
|
@@ -1143,7 +1144,7 @@ class OpenAIHandler(BaseMLEngine):
|
|
|
1143
1144
|
@retry_with_exponential_backoff(
|
|
1144
1145
|
hour_budget=hour_budget,
|
|
1145
1146
|
)
|
|
1146
|
-
def _check_ft_status(job_id: Text) ->
|
|
1147
|
+
def _check_ft_status(job_id: Text) -> FineTuningJob:
|
|
1147
1148
|
"""
|
|
1148
1149
|
Check the status of a fine-tuning job via the OpenAI API.
|
|
1149
1150
|
|
|
@@ -1154,7 +1155,7 @@ class OpenAIHandler(BaseMLEngine):
|
|
|
1154
1155
|
PendingFT: If the fine-tuning process is still pending.
|
|
1155
1156
|
|
|
1156
1157
|
Returns:
|
|
1157
|
-
|
|
1158
|
+
FineTuningJob: Fine-tuning stats.
|
|
1158
1159
|
"""
|
|
1159
1160
|
ft_retrieved = client.fine_tuning.jobs.retrieve(fine_tuning_job_id=job_id)
|
|
1160
1161
|
if ft_retrieved.status in ('succeeded', 'failed', 'cancelled'):
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import unittest
|
|
2
|
-
import pandas as pd
|
|
3
2
|
from mindsdb.integrations.handlers.opengauss_handler.opengauss_handler import OpenGaussHandler
|
|
4
3
|
|
|
5
4
|
|
|
@@ -42,4 +41,4 @@ class OpenGaussHandlerTest(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)
|
|
@@ -4,7 +4,7 @@ from .__about__ import __version__ as version, __description__ as description
|
|
|
4
4
|
|
|
5
5
|
try:
|
|
6
6
|
from .openstreetmap_handler import OpenStreetMapHandler as Handler
|
|
7
|
-
|
|
7
|
+
|
|
8
8
|
import_error = None
|
|
9
9
|
except Exception as e:
|
|
10
10
|
Handler = None
|
|
@@ -16,12 +16,12 @@ type = HANDLER_TYPE.DATA
|
|
|
16
16
|
icon_path = "icon.svg"
|
|
17
17
|
|
|
18
18
|
__all__ = [
|
|
19
|
-
"Handler",
|
|
20
|
-
"version",
|
|
21
|
-
"name",
|
|
22
|
-
"type",
|
|
23
|
-
"title",
|
|
19
|
+
"Handler",
|
|
20
|
+
"version",
|
|
21
|
+
"name",
|
|
22
|
+
"type",
|
|
23
|
+
"title",
|
|
24
24
|
"description",
|
|
25
|
-
"import_error",
|
|
25
|
+
"import_error",
|
|
26
26
|
"icon_path",
|
|
27
27
|
]
|
|
@@ -59,6 +59,12 @@ connection_args = OrderedDict(
|
|
|
59
59
|
"required": False,
|
|
60
60
|
"label": "Auth Mode",
|
|
61
61
|
},
|
|
62
|
+
thick_mode={
|
|
63
|
+
"type": ARG_TYPE.BOOL,
|
|
64
|
+
"description": "Set to `true` to use thick mode for the connection. Thin mode is used by default.",
|
|
65
|
+
"required": False,
|
|
66
|
+
"label": "Connection mode",
|
|
67
|
+
}
|
|
62
68
|
)
|
|
63
69
|
|
|
64
70
|
connection_args_example = OrderedDict(
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
from typing import Text, Dict, Optional
|
|
1
|
+
from typing import Text, Dict, Optional, Any
|
|
2
2
|
|
|
3
3
|
import oracledb
|
|
4
4
|
import pandas as pd
|
|
5
|
-
from oracledb import connect, Connection, DatabaseError
|
|
5
|
+
from oracledb import connect, Connection, DatabaseError, Cursor
|
|
6
6
|
from mindsdb_sql_parser.ast.base import ASTNode
|
|
7
7
|
|
|
8
8
|
from mindsdb.integrations.libs.base import DatabaseHandler
|
|
@@ -54,10 +54,80 @@ def _map_type(internal_type_name: str) -> MYSQL_DATA_TYPE:
|
|
|
54
54
|
if internal_type_name in db_types_list:
|
|
55
55
|
return mysql_data_type
|
|
56
56
|
|
|
57
|
-
logger.
|
|
57
|
+
logger.debug(f"Oracle handler type mapping: unknown type: {internal_type_name}, use VARCHAR as fallback.")
|
|
58
58
|
return MYSQL_DATA_TYPE.VARCHAR
|
|
59
59
|
|
|
60
60
|
|
|
61
|
+
def _make_table_response(result: list[tuple[Any]], cursor: Cursor) -> Response:
|
|
62
|
+
"""Build response from result and cursor.
|
|
63
|
+
|
|
64
|
+
Args:
|
|
65
|
+
result (list[tuple[Any]]): result of the query.
|
|
66
|
+
cursor (oracledb.Cursor): cursor object.
|
|
67
|
+
|
|
68
|
+
Returns:
|
|
69
|
+
Response: response object.
|
|
70
|
+
"""
|
|
71
|
+
description: list[tuple[Any]] = cursor.description
|
|
72
|
+
mysql_types: list[MYSQL_DATA_TYPE] = []
|
|
73
|
+
for column in description:
|
|
74
|
+
db_type = column[1]
|
|
75
|
+
precision = column[4]
|
|
76
|
+
scale = column[5]
|
|
77
|
+
if db_type is oracledb.DB_TYPE_NUMBER:
|
|
78
|
+
if scale != 0:
|
|
79
|
+
mysql_types.append(MYSQL_DATA_TYPE.FLOAT)
|
|
80
|
+
else:
|
|
81
|
+
# python max int is 19 digits, oracle can return more
|
|
82
|
+
if precision > 18:
|
|
83
|
+
mysql_types.append(MYSQL_DATA_TYPE.DECIMAL)
|
|
84
|
+
else:
|
|
85
|
+
mysql_types.append(MYSQL_DATA_TYPE.INT)
|
|
86
|
+
elif db_type is oracledb.DB_TYPE_BINARY_FLOAT:
|
|
87
|
+
mysql_types.append(MYSQL_DATA_TYPE.FLOAT)
|
|
88
|
+
elif db_type is oracledb.DB_TYPE_BINARY_DOUBLE:
|
|
89
|
+
mysql_types.append(MYSQL_DATA_TYPE.FLOAT)
|
|
90
|
+
elif db_type is oracledb.DB_TYPE_BINARY_INTEGER:
|
|
91
|
+
mysql_types.append(MYSQL_DATA_TYPE.INT)
|
|
92
|
+
elif db_type is oracledb.DB_TYPE_BOOLEAN:
|
|
93
|
+
mysql_types.append(MYSQL_DATA_TYPE.BOOLEAN)
|
|
94
|
+
elif db_type in (
|
|
95
|
+
oracledb.DB_TYPE_CHAR, oracledb.DB_TYPE_NCHAR, oracledb.DB_TYPE_LONG,
|
|
96
|
+
oracledb.DB_TYPE_NVARCHAR, oracledb.DB_TYPE_VARCHAR, oracledb.DB_TYPE_LONG_NVARCHAR,
|
|
97
|
+
):
|
|
98
|
+
mysql_types.append(MYSQL_DATA_TYPE.TEXT)
|
|
99
|
+
elif db_type in (oracledb.DB_TYPE_RAW, oracledb.DB_TYPE_LONG_RAW):
|
|
100
|
+
mysql_types.append(MYSQL_DATA_TYPE.BINARY)
|
|
101
|
+
elif db_type is oracledb.DB_TYPE_DATE:
|
|
102
|
+
mysql_types.append(MYSQL_DATA_TYPE.DATE)
|
|
103
|
+
elif db_type is oracledb.DB_TYPE_TIMESTAMP:
|
|
104
|
+
mysql_types.append(MYSQL_DATA_TYPE.TIMESTAMP)
|
|
105
|
+
else:
|
|
106
|
+
# fallback
|
|
107
|
+
mysql_types.append(MYSQL_DATA_TYPE.TEXT)
|
|
108
|
+
|
|
109
|
+
# region cast int and bool to nullable types
|
|
110
|
+
serieses = []
|
|
111
|
+
for i, mysql_type in enumerate(mysql_types):
|
|
112
|
+
expected_dtype = None
|
|
113
|
+
if mysql_type in (
|
|
114
|
+
MYSQL_DATA_TYPE.SMALLINT, MYSQL_DATA_TYPE.INT, MYSQL_DATA_TYPE.MEDIUMINT,
|
|
115
|
+
MYSQL_DATA_TYPE.BIGINT, MYSQL_DATA_TYPE.TINYINT
|
|
116
|
+
):
|
|
117
|
+
expected_dtype = 'Int64'
|
|
118
|
+
elif mysql_type in (MYSQL_DATA_TYPE.BOOL, MYSQL_DATA_TYPE.BOOLEAN):
|
|
119
|
+
expected_dtype = 'boolean'
|
|
120
|
+
serieses.append(pd.Series([row[i] for row in result], dtype=expected_dtype, name=description[i][0]))
|
|
121
|
+
df = pd.concat(serieses, axis=1, copy=False)
|
|
122
|
+
# endregion
|
|
123
|
+
|
|
124
|
+
return Response(
|
|
125
|
+
RESPONSE_TYPE.TABLE,
|
|
126
|
+
data_frame=df,
|
|
127
|
+
mysql_types=mysql_types
|
|
128
|
+
)
|
|
129
|
+
|
|
130
|
+
|
|
61
131
|
class OracleHandler(DatabaseHandler):
|
|
62
132
|
"""
|
|
63
133
|
This handler handles connection and execution of SQL queries on Oracle.
|
|
@@ -98,6 +168,9 @@ class OracleHandler(DatabaseHandler):
|
|
|
98
168
|
if not all(key in self.connection_data for key in ['user', 'password']):
|
|
99
169
|
raise ValueError('Required parameters (user, password) must be provided.')
|
|
100
170
|
|
|
171
|
+
if self.connection_data.get('thick_mode', False):
|
|
172
|
+
oracledb.init_oracle_client()
|
|
173
|
+
|
|
101
174
|
config = {
|
|
102
175
|
'user': self.connection_data['user'],
|
|
103
176
|
'password': self.connection_data['password'],
|
|
@@ -209,14 +282,7 @@ class OracleHandler(DatabaseHandler):
|
|
|
209
282
|
response = Response(RESPONSE_TYPE.OK, affected_rows=cur.rowcount)
|
|
210
283
|
else:
|
|
211
284
|
result = cur.fetchall()
|
|
212
|
-
response =
|
|
213
|
-
RESPONSE_TYPE.TABLE,
|
|
214
|
-
data_frame=pd.DataFrame(
|
|
215
|
-
result,
|
|
216
|
-
columns=[row[0] for row in cur.description],
|
|
217
|
-
),
|
|
218
|
-
)
|
|
219
|
-
|
|
285
|
+
response = _make_table_response(result, cur)
|
|
220
286
|
connection.commit()
|
|
221
287
|
except DatabaseError as database_error:
|
|
222
288
|
logger.error(f"Error running query: {query} on Oracle, {database_error}!")
|
|
@@ -2,6 +2,7 @@ import unittest
|
|
|
2
2
|
from mindsdb.integrations.handlers.orioledb_handler.orioledb_handler import OrioleDBHandler
|
|
3
3
|
from mindsdb.integrations.libs.response import RESPONSE_TYPE
|
|
4
4
|
|
|
5
|
+
|
|
5
6
|
class OrioleDBHandlerTest(unittest.TestCase):
|
|
6
7
|
@classmethod
|
|
7
8
|
def setUpClass(cls):
|
|
@@ -21,36 +22,33 @@ class OrioleDBHandlerTest(unittest.TestCase):
|
|
|
21
22
|
|
|
22
23
|
def test_1_connect(self):
|
|
23
24
|
assert self.handler.connect()
|
|
24
|
-
|
|
25
|
+
|
|
25
26
|
def test_2_create_table(self):
|
|
26
27
|
query = "CREATE Table IF NOT EXISTS Lover(name varchar(101));"
|
|
27
28
|
result = self.handler.query(query)
|
|
28
|
-
assert result.type is not RESPONSE_TYPE.ERROR
|
|
29
|
+
assert result.type is not RESPONSE_TYPE.ERROR
|
|
29
30
|
|
|
30
31
|
def test_3_insert(self):
|
|
31
32
|
query = "INSERT INTO LOVER VALUES('Shiv Shakti');"
|
|
32
33
|
result = self.handler.query(query)
|
|
33
|
-
assert result.type is not RESPONSE_TYPE.ERROR
|
|
34
|
+
assert result.type is not RESPONSE_TYPE.ERROR
|
|
34
35
|
|
|
35
36
|
def test_4_native_query_select(self):
|
|
36
37
|
query = "SELECT * FROM LOVER;"
|
|
37
38
|
result = self.handler.query(query)
|
|
38
|
-
assert result.type is RESPONSE_TYPE.TABLE
|
|
39
|
+
assert result.type is RESPONSE_TYPE.TABLE
|
|
39
40
|
|
|
40
41
|
def test_5_get_tables(self):
|
|
41
42
|
tables = self.handler.get_tables()
|
|
42
|
-
assert tables.type is
|
|
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
|
-
|
|
@@ -78,8 +78,6 @@ class PalmHandler(BaseMLEngine):
|
|
|
78
78
|
else:
|
|
79
79
|
args = args["using"]
|
|
80
80
|
|
|
81
|
-
args_model = PalmHandlerArgs(**args)
|
|
82
|
-
|
|
83
81
|
if (
|
|
84
82
|
len(set(args.keys()) & {"question_column", "prompt_template", "prompt"})
|
|
85
83
|
== 0
|
|
@@ -331,7 +329,7 @@ class PalmHandler(BaseMLEngine):
|
|
|
331
329
|
def _submit_embedding_completion(kwargs, prompts, api_args):
|
|
332
330
|
def _tidy(comp):
|
|
333
331
|
tidy_comps = []
|
|
334
|
-
if
|
|
332
|
+
if "embedding" not in comp:
|
|
335
333
|
return [f"No completion found, err {comp}"]
|
|
336
334
|
for c in comp["embedding"]:
|
|
337
335
|
tidy_comps.append([c])
|
|
@@ -9,7 +9,7 @@ from mindsdb.integrations.handlers.paypal_handler.paypal_tables import (
|
|
|
9
9
|
)
|
|
10
10
|
from mindsdb.integrations.libs.api_handler import APIHandler
|
|
11
11
|
from mindsdb.integrations.libs.response import (
|
|
12
|
-
|
|
12
|
+
HandlerStatusResponse as StatusResponse,
|
|
13
13
|
)
|
|
14
14
|
|
|
15
15
|
from mindsdb.utilities import log
|
|
@@ -95,7 +95,7 @@ class PayPalHandler(APIHandler):
|
|
|
95
95
|
connection.get_access_token()
|
|
96
96
|
response.success = True
|
|
97
97
|
except Exception as e:
|
|
98
|
-
logger.error(
|
|
98
|
+
logger.error('Error connecting to PayPal!')
|
|
99
99
|
response.error_message = str(e)
|
|
100
100
|
|
|
101
101
|
self.is_connected = response.success
|