MindsDB 25.5.3.0__py3-none-any.whl → 25.5.4.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of MindsDB might be problematic. Click here for more details.
- mindsdb/__about__.py +8 -8
- mindsdb/__main__.py +127 -79
- mindsdb/api/a2a/__init__.py +0 -0
- mindsdb/api/a2a/__main__.py +144 -0
- mindsdb/api/a2a/agent.py +308 -0
- mindsdb/api/a2a/common/__init__.py +0 -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 +86 -0
- mindsdb/api/a2a/task_manager.py +560 -0
- mindsdb/api/executor/command_executor.py +185 -309
- mindsdb/api/executor/datahub/classes/response.py +5 -2
- mindsdb/api/executor/datahub/datanodes/integration_datanode.py +39 -72
- mindsdb/api/executor/planner/query_planner.py +10 -1
- 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 +9 -12
- 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 +99 -83
- mindsdb/api/http/namespaces/analysis.py +3 -3
- mindsdb/api/http/namespaces/config.py +61 -86
- mindsdb/api/http/namespaces/file.py +8 -2
- mindsdb/api/http/namespaces/sql.py +13 -27
- 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 +82 -115
- mindsdb/api/mysql/mysql_proxy/utilities/dump.py +351 -0
- mindsdb/api/postgres/postgres_proxy/executor/executor.py +1 -1
- 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/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/byom_handler/requirements.txt +1 -2
- 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/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_calendar_handler/google_calendar_handler.py +4 -4
- mindsdb/integrations/handlers/google_calendar_handler/google_calendar_tables.py +2 -6
- 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_fit_handler/google_fit_handler.py +10 -12
- mindsdb/integrations/handlers/google_fit_handler/google_fit_tables.py +11 -13
- 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/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.py +4 -4
- mindsdb/integrations/handlers/jira_handler/jira_tables.py +9 -9
- mindsdb/integrations/handlers/kinetica_handler/__init__.py +0 -1
- mindsdb/integrations/handlers/lancedb_handler/requirements.txt +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/lightwood_handler/functions.py +2 -2
- mindsdb/integrations/handlers/lightwood_handler/lightwood_handler.py +0 -1
- mindsdb/integrations/handlers/lightwood_handler/tests/test_lightwood_handler.py +11 -11
- mindsdb/integrations/handlers/litellm_handler/litellm_handler.py +37 -20
- 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_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/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/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/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/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/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/llm/config.py +13 -0
- mindsdb/integrations/libs/llm/utils.py +37 -65
- mindsdb/integrations/libs/response.py +67 -52
- mindsdb/integrations/libs/vectordatabase_handler.py +6 -0
- 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/rag/rerankers/base_reranker.py +230 -227
- mindsdb/integrations/utilities/utils.py +3 -3
- mindsdb/interfaces/agents/agents_controller.py +164 -1
- mindsdb/interfaces/agents/constants.py +32 -13
- mindsdb/interfaces/agents/langchain_agent.py +106 -95
- mindsdb/interfaces/agents/mindsdb_database_agent.py +101 -2
- mindsdb/interfaces/knowledge_base/controller.py +250 -216
- mindsdb/interfaces/knowledge_base/preprocessing/document_preprocessor.py +13 -10
- mindsdb/interfaces/knowledge_base/preprocessing/json_chunker.py +434 -0
- mindsdb/interfaces/knowledge_base/preprocessing/models.py +54 -0
- 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 +205 -17
- 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 -7
- mindsdb/migrations/versions/2025-05-21_9f150e4f9a05_checkpoint_1.py +360 -0
- mindsdb/utilities/config.py +287 -216
- mindsdb/utilities/starters.py +13 -0
- {mindsdb-25.5.3.0.dist-info → mindsdb-25.5.4.1.dist-info}/METADATA +646 -698
- {mindsdb-25.5.3.0.dist-info → mindsdb-25.5.4.1.dist-info}/RECORD +312 -295
- {mindsdb-25.5.3.0.dist-info → mindsdb-25.5.4.1.dist-info}/WHEEL +1 -1
- mindsdb/integrations/handlers/monkeylearn_handler/requirements.txt +0 -1
- {mindsdb-25.5.3.0.dist-info → mindsdb-25.5.4.1.dist-info}/licenses/LICENSE +0 -0
- {mindsdb-25.5.3.0.dist-info → mindsdb-25.5.4.1.dist-info}/top_level.txt +0 -0
|
@@ -16,6 +16,7 @@ from mindsdb.integrations.libs.llm.config import (
|
|
|
16
16
|
OpenAIConfig,
|
|
17
17
|
NvidiaNIMConfig,
|
|
18
18
|
MindsdbConfig,
|
|
19
|
+
WriterConfig,
|
|
19
20
|
)
|
|
20
21
|
from mindsdb.utilities.config import config
|
|
21
22
|
from langchain_text_splitters import Language, RecursiveCharacterTextSplitter
|
|
@@ -41,16 +42,12 @@ DEFAULT_LITELLM_BASE_URL = "https://ai.dev.mindsdb.com"
|
|
|
41
42
|
DEFAULT_OLLAMA_BASE_URL = "http://localhost:11434"
|
|
42
43
|
DEFAULT_OLLAMA_MODEL = "llama2"
|
|
43
44
|
|
|
44
|
-
DEFAULT_NVIDIA_NIM_BASE_URL =
|
|
45
|
-
"http://localhost:8000/v1" # Assumes local port forwarding through ssh
|
|
46
|
-
)
|
|
45
|
+
DEFAULT_NVIDIA_NIM_BASE_URL = "http://localhost:8000/v1" # Assumes local port forwarding through ssh
|
|
47
46
|
DEFAULT_NVIDIA_NIM_MODEL = "meta/llama-3_1-8b-instruct"
|
|
48
47
|
DEFAULT_VLLM_SERVER_URL = "http://localhost:8000/v1"
|
|
49
48
|
|
|
50
49
|
|
|
51
|
-
def get_completed_prompts(
|
|
52
|
-
base_template: str, df: pd.DataFrame, strict=True
|
|
53
|
-
) -> Tuple[List[str], np.ndarray]:
|
|
50
|
+
def get_completed_prompts(base_template: str, df: pd.DataFrame, strict=True) -> Tuple[List[str], np.ndarray]:
|
|
54
51
|
"""
|
|
55
52
|
Helper method that produces formatted prompts given a template and data in a Pandas DataFrame.
|
|
56
53
|
It also returns the ID of any empty templates that failed to be filled due to missing data.
|
|
@@ -69,9 +66,7 @@ def get_completed_prompts(
|
|
|
69
66
|
if len(matches) == 0:
|
|
70
67
|
# no placeholders
|
|
71
68
|
if strict:
|
|
72
|
-
raise AssertionError(
|
|
73
|
-
"No placeholders found in the prompt, please provide a valid prompt template."
|
|
74
|
-
)
|
|
69
|
+
raise AssertionError("No placeholders found in the prompt, please provide a valid prompt template.")
|
|
75
70
|
prompts = [base_template] * len(df)
|
|
76
71
|
return prompts, np.ndarray(0)
|
|
77
72
|
|
|
@@ -95,12 +90,8 @@ def get_completed_prompts(
|
|
|
95
90
|
for i in range(len(template)):
|
|
96
91
|
atom = template[i]
|
|
97
92
|
if i < len(columns):
|
|
98
|
-
col = df[columns[i]].replace(
|
|
99
|
-
|
|
100
|
-
) # add empty quote if data is missing
|
|
101
|
-
df["__mdb_prompt"] = df["__mdb_prompt"].apply(
|
|
102
|
-
lambda x: x + atom
|
|
103
|
-
) + col.astype("string")
|
|
93
|
+
col = df[columns[i]].replace(to_replace=[None], value="") # add empty quote if data is missing
|
|
94
|
+
df["__mdb_prompt"] = df["__mdb_prompt"].apply(lambda x: x + atom) + col.astype("string")
|
|
104
95
|
else:
|
|
105
96
|
df["__mdb_prompt"] = df["__mdb_prompt"].apply(lambda x: x + atom)
|
|
106
97
|
prompts = list(df["__mdb_prompt"])
|
|
@@ -119,8 +110,7 @@ def get_llm_config(provider: str, args: Dict) -> BaseLLMConfig:
|
|
|
119
110
|
"""
|
|
120
111
|
temperature = min(1.0, max(0.0, args.get("temperature", 0.0)))
|
|
121
112
|
if provider == "openai":
|
|
122
|
-
|
|
123
|
-
if any(x in args.get("model_name", "") for x in ['o1', 'o3']):
|
|
113
|
+
if any(x in args.get("model_name", "") for x in ["o1", "o3"]):
|
|
124
114
|
# for o1 and 03, 'temperature' does not support 0.0 with this model. Only the default (1) value is supported
|
|
125
115
|
temperature = 1
|
|
126
116
|
|
|
@@ -173,9 +163,7 @@ def get_llm_config(provider: str, args: Dict) -> BaseLLMConfig:
|
|
|
173
163
|
max_tokens=args.get("max_tokens", DEFAULT_OPENAI_MAX_TOKENS),
|
|
174
164
|
top_p=args.get("top_p", None),
|
|
175
165
|
top_k=args.get("top_k", None),
|
|
176
|
-
custom_llm_provider=args.get(
|
|
177
|
-
"custom_llm_provider", DEFAULT_LITELLM_PROVIDER
|
|
178
|
-
),
|
|
166
|
+
custom_llm_provider=args.get("custom_llm_provider", DEFAULT_LITELLM_PROVIDER),
|
|
179
167
|
model_kwargs=model_kwargs,
|
|
180
168
|
)
|
|
181
169
|
if provider == "ollama":
|
|
@@ -237,6 +225,18 @@ def get_llm_config(provider: str, args: Dict) -> BaseLLMConfig:
|
|
|
237
225
|
max_output_tokens=args.get("max_tokens", None),
|
|
238
226
|
google_api_key=args["api_keys"].get("google", None),
|
|
239
227
|
)
|
|
228
|
+
if provider == "writer":
|
|
229
|
+
return WriterConfig(
|
|
230
|
+
model_name=args.get("model_name", "palmyra-x5"),
|
|
231
|
+
temperature=temperature,
|
|
232
|
+
max_tokens=args.get("max_tokens", None),
|
|
233
|
+
top_p=args.get("top_p", None),
|
|
234
|
+
stop=args.get("stop", None),
|
|
235
|
+
best_of=args.get("best_of", None),
|
|
236
|
+
writer_api_key=args["api_keys"].get("writer", None),
|
|
237
|
+
writer_org_id=args.get("writer_org_id", None),
|
|
238
|
+
base_url=args.get("base_url", None),
|
|
239
|
+
)
|
|
240
240
|
|
|
241
241
|
raise ValueError(f"Provider {provider} is not supported.")
|
|
242
242
|
|
|
@@ -290,9 +290,7 @@ def ft_jsonl_validation(
|
|
|
290
290
|
) # noqa
|
|
291
291
|
|
|
292
292
|
if messages_col not in batch:
|
|
293
|
-
raise Exception(
|
|
294
|
-
f"{prefix}Each line in the provided data should have a '{messages_col}' key"
|
|
295
|
-
)
|
|
293
|
+
raise Exception(f"{prefix}Each line in the provided data should have a '{messages_col}' key")
|
|
296
294
|
|
|
297
295
|
messages = batch[messages_col]
|
|
298
296
|
try:
|
|
@@ -350,30 +348,22 @@ def ft_chat_format_validation(
|
|
|
350
348
|
|
|
351
349
|
for c in chat:
|
|
352
350
|
if any(k not in valid_keys for k in c.keys()):
|
|
353
|
-
raise Exception(
|
|
354
|
-
f"Each message should only have these keys: `{valid_keys}`. Found: `{c.keys()}`"
|
|
355
|
-
)
|
|
351
|
+
raise Exception(f"Each message should only have these keys: `{valid_keys}`. Found: `{c.keys()}`")
|
|
356
352
|
|
|
357
353
|
roles = [m[role_key] for m in chat]
|
|
358
354
|
contents = [m[content_key] for m in chat]
|
|
359
355
|
|
|
360
356
|
if len(roles) != len(contents):
|
|
361
|
-
raise Exception(
|
|
362
|
-
f"Each message should contain both `{role_key}` and `{content_key}` fields"
|
|
363
|
-
)
|
|
357
|
+
raise Exception(f"Each message should contain both `{role_key}` and `{content_key}` fields")
|
|
364
358
|
|
|
365
359
|
if len(roles) == 0:
|
|
366
360
|
raise Exception("Chat should have at least one message")
|
|
367
361
|
|
|
368
362
|
if assistant_key not in roles:
|
|
369
|
-
raise Exception(
|
|
370
|
-
"Chat should have at least one assistant message"
|
|
371
|
-
) # otherwise it is useless for FT
|
|
363
|
+
raise Exception("Chat should have at least one assistant message") # otherwise it is useless for FT
|
|
372
364
|
|
|
373
365
|
if user_key not in roles:
|
|
374
|
-
raise Exception(
|
|
375
|
-
"Chat should have at least one user message"
|
|
376
|
-
) # perhaps remove in the future
|
|
366
|
+
raise Exception("Chat should have at least one user message") # perhaps remove in the future
|
|
377
367
|
|
|
378
368
|
# set default transitions for finite state machine if undefined
|
|
379
369
|
if transitions is None:
|
|
@@ -387,20 +377,15 @@ def ft_chat_format_validation(
|
|
|
387
377
|
# check order is valid via finite state machine
|
|
388
378
|
state = None
|
|
389
379
|
for i, (role, content) in enumerate(zip(roles, contents)):
|
|
390
|
-
|
|
391
380
|
prefix = f"message #{i + 1}: "
|
|
392
381
|
|
|
393
382
|
# check invalid roles
|
|
394
383
|
if role not in valid_roles:
|
|
395
|
-
raise Exception(
|
|
396
|
-
f"{prefix}Invalid role (found `{role}`, expected one of `{valid_roles}`)"
|
|
397
|
-
)
|
|
384
|
+
raise Exception(f"{prefix}Invalid role (found `{role}`, expected one of `{valid_roles}`)")
|
|
398
385
|
|
|
399
386
|
# check content
|
|
400
387
|
if not isinstance(content, str):
|
|
401
|
-
raise Exception(
|
|
402
|
-
f"{prefix}Content should be a string, got type `{type(content)}`"
|
|
403
|
-
)
|
|
388
|
+
raise Exception(f"{prefix}Content should be a string, got type `{type(content)}`")
|
|
404
389
|
|
|
405
390
|
# check transition
|
|
406
391
|
if role not in transitions[state]:
|
|
@@ -464,9 +449,7 @@ def ft_chat_formatter(df: pd.DataFrame) -> List[Dict]:
|
|
|
464
449
|
df = df.sort_values(["chat_id"], kind="stable")
|
|
465
450
|
elif "message_id" in df.columns:
|
|
466
451
|
if df["message_id"].duplicated().any():
|
|
467
|
-
raise Exception(
|
|
468
|
-
"If `message_id` is provided, it must not contain duplicate IDs."
|
|
469
|
-
)
|
|
452
|
+
raise Exception("If `message_id` is provided, it must not contain duplicate IDs.")
|
|
470
453
|
df = df.sort_values(["message_id"])
|
|
471
454
|
|
|
472
455
|
# 2. build chats
|
|
@@ -477,12 +460,8 @@ def ft_chat_formatter(df: pd.DataFrame) -> List[Dict]:
|
|
|
477
460
|
for _, row in df.iterrows():
|
|
478
461
|
try:
|
|
479
462
|
chat = json.loads(row["chat_json"])
|
|
480
|
-
assert list(chat.keys()) == [
|
|
481
|
-
|
|
482
|
-
], "Each chat should have a 'messages' key, and nothing else."
|
|
483
|
-
ft_chat_format_validation(
|
|
484
|
-
chat["messages"]
|
|
485
|
-
) # will raise Exception if chat is invalid
|
|
463
|
+
assert list(chat.keys()) == ["messages"], "Each chat should have a 'messages' key, and nothing else."
|
|
464
|
+
ft_chat_format_validation(chat["messages"]) # will raise Exception if chat is invalid
|
|
486
465
|
chats.append(chat)
|
|
487
466
|
except json.JSONDecodeError:
|
|
488
467
|
pass # TODO: add logger info here, prompt user to clean dataset carefully
|
|
@@ -492,9 +471,7 @@ def ft_chat_formatter(df: pd.DataFrame) -> List[Dict]:
|
|
|
492
471
|
chat = []
|
|
493
472
|
for i, row in df.iterrows():
|
|
494
473
|
if row["role"] == "system" and len(chat) > 0:
|
|
495
|
-
ft_chat_format_validation(
|
|
496
|
-
chat
|
|
497
|
-
) # will raise Exception if chat is invalid
|
|
474
|
+
ft_chat_format_validation(chat) # will raise Exception if chat is invalid
|
|
498
475
|
chats.append({"messages": chat})
|
|
499
476
|
chat = []
|
|
500
477
|
event = {"role": row["role"], "content": row["content"]}
|
|
@@ -529,15 +506,11 @@ def ft_code_formatter(
|
|
|
529
506
|
# input and setup validation
|
|
530
507
|
assert len(df) > 0, "Input dataframe should not be empty"
|
|
531
508
|
assert "code" in df.columns, "Input dataframe should have a 'code' column"
|
|
532
|
-
assert chunk_size > 0 and isinstance(
|
|
533
|
-
chunk_size, int
|
|
534
|
-
), "`chunk_size` should be a positive integer"
|
|
509
|
+
assert chunk_size > 0 and isinstance(chunk_size, int), "`chunk_size` should be a positive integer"
|
|
535
510
|
|
|
536
511
|
supported_formats = ["chat", "fim"]
|
|
537
512
|
supported_langs = [e.value for e in Language]
|
|
538
|
-
assert (
|
|
539
|
-
language.lower() in supported_langs
|
|
540
|
-
), f"Invalid language. Valid choices are: {supported_langs}"
|
|
513
|
+
assert language.lower() in supported_langs, f"Invalid language. Valid choices are: {supported_langs}"
|
|
541
514
|
|
|
542
515
|
# ensure correct encoding
|
|
543
516
|
df["code"] = df["code"].map(lambda x: x.encode("utf8").decode("unicode_escape"))
|
|
@@ -574,7 +547,7 @@ def ft_code_formatter(
|
|
|
574
547
|
roles = []
|
|
575
548
|
contents = []
|
|
576
549
|
for idx in range(0, len(chunks), 3):
|
|
577
|
-
pre, mid, suf = chunks[idx: idx + 3]
|
|
550
|
+
pre, mid, suf = chunks[idx : idx + 3]
|
|
578
551
|
interleaved = list(itertools.chain(*zip(templates, (pre, suf, mid))))
|
|
579
552
|
user = "\n".join(interleaved[:-1])
|
|
580
553
|
assistant = "\n".join(interleaved[-1:])
|
|
@@ -595,12 +568,11 @@ def ft_cqa_formatter(
|
|
|
595
568
|
default_instruction="You are a helpful assistant.",
|
|
596
569
|
default_context="",
|
|
597
570
|
) -> pd.DataFrame:
|
|
598
|
-
|
|
599
571
|
# input and setup validation
|
|
600
572
|
assert len(df) > 0, "Input dataframe should not be empty"
|
|
601
|
-
assert {question_col, answer_col}.issubset(
|
|
602
|
-
|
|
603
|
-
)
|
|
573
|
+
assert {question_col, answer_col}.issubset(set(df.columns)), (
|
|
574
|
+
f"Input dataframe must have columns `{question_col}`, and `{answer_col}`"
|
|
575
|
+
) # noqa
|
|
604
576
|
|
|
605
577
|
if instruction_col not in df.columns:
|
|
606
578
|
df[instruction_col] = default_instruction
|
|
@@ -6,6 +6,7 @@ import pandas
|
|
|
6
6
|
|
|
7
7
|
from mindsdb.utilities import log
|
|
8
8
|
from mindsdb.api.executor.data_types.response_type import RESPONSE_TYPE
|
|
9
|
+
from mindsdb.api.mysql.mysql_proxy.libs.constants.mysql import MYSQL_DATA_TYPE
|
|
9
10
|
from mindsdb_sql_parser.ast import ASTNode
|
|
10
11
|
|
|
11
12
|
|
|
@@ -18,29 +19,32 @@ class _INFORMATION_SCHEMA_COLUMNS_NAMES:
|
|
|
18
19
|
These column names match the standard INFORMATION_SCHEMA.COLUMNS structure
|
|
19
20
|
used in SQL databases to describe table metadata.
|
|
20
21
|
"""
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
22
|
+
|
|
23
|
+
COLUMN_NAME: str = "COLUMN_NAME"
|
|
24
|
+
DATA_TYPE: str = "DATA_TYPE"
|
|
25
|
+
ORDINAL_POSITION: str = "ORDINAL_POSITION"
|
|
26
|
+
COLUMN_DEFAULT: str = "COLUMN_DEFAULT"
|
|
27
|
+
IS_NULLABLE: str = "IS_NULLABLE"
|
|
28
|
+
CHARACTER_MAXIMUM_LENGTH: str = "CHARACTER_MAXIMUM_LENGTH"
|
|
29
|
+
CHARACTER_OCTET_LENGTH: str = "CHARACTER_OCTET_LENGTH"
|
|
30
|
+
NUMERIC_PRECISION: str = "NUMERIC_PRECISION"
|
|
31
|
+
NUMERIC_SCALE: str = "NUMERIC_SCALE"
|
|
32
|
+
DATETIME_PRECISION: str = "DATETIME_PRECISION"
|
|
33
|
+
CHARACTER_SET_NAME: str = "CHARACTER_SET_NAME"
|
|
34
|
+
COLLATION_NAME: str = "COLLATION_NAME"
|
|
35
|
+
MYSQL_DATA_TYPE: str = "MYSQL_DATA_TYPE"
|
|
34
36
|
|
|
35
37
|
|
|
36
38
|
INF_SCHEMA_COLUMNS_NAMES = _INFORMATION_SCHEMA_COLUMNS_NAMES()
|
|
37
39
|
INF_SCHEMA_COLUMNS_NAMES_SET = set(f.name for f in fields(INF_SCHEMA_COLUMNS_NAMES))
|
|
38
40
|
|
|
39
41
|
|
|
40
|
-
|
|
41
42
|
class HandlerResponse:
|
|
42
|
-
def __init__(
|
|
43
|
-
|
|
43
|
+
def __init__(
|
|
44
|
+
self, resp_type: RESPONSE_TYPE, data_frame: pandas.DataFrame = None, query: ASTNode = 0,
|
|
45
|
+
error_code: int = 0, error_message: str | None = None, affected_rows: int | None = None,
|
|
46
|
+
mysql_types: list[MYSQL_DATA_TYPE] | None = None
|
|
47
|
+
) -> None:
|
|
44
48
|
self.resp_type = resp_type
|
|
45
49
|
self.query = query
|
|
46
50
|
self.data_frame = data_frame
|
|
@@ -49,6 +53,7 @@ class HandlerResponse:
|
|
|
49
53
|
self.affected_rows = affected_rows
|
|
50
54
|
if isinstance(self.affected_rows, int) is False or self.affected_rows < 0:
|
|
51
55
|
self.affected_rows = 0
|
|
56
|
+
self.mysql_types = mysql_types
|
|
52
57
|
|
|
53
58
|
@property
|
|
54
59
|
def type(self):
|
|
@@ -66,7 +71,9 @@ class HandlerResponse:
|
|
|
66
71
|
f"Cannot convert {self.resp_type} to {RESPONSE_TYPE.COLUMNS_TABLE}, "
|
|
67
72
|
f"the error is: {self.error_message}"
|
|
68
73
|
)
|
|
69
|
-
raise ValueError(
|
|
74
|
+
raise ValueError(
|
|
75
|
+
f"Cannot convert {self.resp_type} to {RESPONSE_TYPE.COLUMNS_TABLE}"
|
|
76
|
+
)
|
|
70
77
|
|
|
71
78
|
self.data_frame.columns = [name.upper() for name in self.data_frame.columns]
|
|
72
79
|
self.data_frame[INF_SCHEMA_COLUMNS_NAMES.MYSQL_DATA_TYPE] = self.data_frame[
|
|
@@ -77,24 +84,26 @@ class HandlerResponse:
|
|
|
77
84
|
current_columns_set = set(self.data_frame.columns)
|
|
78
85
|
if INF_SCHEMA_COLUMNS_NAMES_SET != current_columns_set:
|
|
79
86
|
raise ValueError(
|
|
80
|
-
f
|
|
87
|
+
f"Columns set for INFORMATION_SCHEMA.COLUMNS is wrong: {list(current_columns_set)}"
|
|
81
88
|
)
|
|
82
89
|
# endregion
|
|
83
90
|
|
|
84
|
-
self.data_frame = self.data_frame.astype(
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
91
|
+
self.data_frame = self.data_frame.astype(
|
|
92
|
+
{
|
|
93
|
+
INF_SCHEMA_COLUMNS_NAMES.COLUMN_NAME: "string",
|
|
94
|
+
INF_SCHEMA_COLUMNS_NAMES.DATA_TYPE: "string",
|
|
95
|
+
INF_SCHEMA_COLUMNS_NAMES.ORDINAL_POSITION: "Int32",
|
|
96
|
+
INF_SCHEMA_COLUMNS_NAMES.COLUMN_DEFAULT: "string",
|
|
97
|
+
INF_SCHEMA_COLUMNS_NAMES.IS_NULLABLE: "string",
|
|
98
|
+
INF_SCHEMA_COLUMNS_NAMES.CHARACTER_MAXIMUM_LENGTH: "Int32",
|
|
99
|
+
INF_SCHEMA_COLUMNS_NAMES.CHARACTER_OCTET_LENGTH: "Int32",
|
|
100
|
+
INF_SCHEMA_COLUMNS_NAMES.NUMERIC_PRECISION: "Int32",
|
|
101
|
+
INF_SCHEMA_COLUMNS_NAMES.NUMERIC_SCALE: "Int32",
|
|
102
|
+
INF_SCHEMA_COLUMNS_NAMES.DATETIME_PRECISION: "Int32",
|
|
103
|
+
INF_SCHEMA_COLUMNS_NAMES.CHARACTER_SET_NAME: "string",
|
|
104
|
+
INF_SCHEMA_COLUMNS_NAMES.COLLATION_NAME: "string",
|
|
105
|
+
}
|
|
106
|
+
)
|
|
98
107
|
self.data_frame.replace([numpy.NaN, pandas.NA], None, inplace=True)
|
|
99
108
|
|
|
100
109
|
self.resp_type = RESPONSE_TYPE.COLUMNS_TABLE
|
|
@@ -103,33 +112,39 @@ class HandlerResponse:
|
|
|
103
112
|
try:
|
|
104
113
|
data = None
|
|
105
114
|
if self.data_frame is not None:
|
|
106
|
-
data = self.data_frame.to_json(
|
|
115
|
+
data = self.data_frame.to_json(
|
|
116
|
+
orient="split", index=False, date_format="iso"
|
|
117
|
+
)
|
|
107
118
|
except Exception as e:
|
|
108
119
|
logger.error("%s.to_json: error - %s", self.__class__.__name__, e)
|
|
109
120
|
data = None
|
|
110
|
-
return
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
121
|
+
return {
|
|
122
|
+
"type": self.resp_type,
|
|
123
|
+
"query": self.query,
|
|
124
|
+
"data_frame": data,
|
|
125
|
+
"error_code": self.error_code,
|
|
126
|
+
"error": self.error_message,
|
|
127
|
+
}
|
|
115
128
|
|
|
116
129
|
def __repr__(self):
|
|
117
|
-
return "%s: resp_type=%s, query=%s, data_frame
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
130
|
+
return "%s: resp_type=%s, query=%s, data_frame=\n%s\nerr_code=%s, error=%s, affected_rows=%s" % (
|
|
131
|
+
self.__class__.__name__,
|
|
132
|
+
self.resp_type,
|
|
133
|
+
self.query,
|
|
134
|
+
self.data_frame,
|
|
135
|
+
self.error_code,
|
|
136
|
+
self.error_message,
|
|
137
|
+
self.affected_rows,
|
|
138
|
+
)
|
|
126
139
|
|
|
127
140
|
|
|
128
141
|
class HandlerStatusResponse:
|
|
129
|
-
def __init__(
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
142
|
+
def __init__(
|
|
143
|
+
self,
|
|
144
|
+
success: bool = True,
|
|
145
|
+
error_message: str = None,
|
|
146
|
+
redirect_url: str = None,
|
|
147
|
+
copy_storage: str = None,
|
|
133
148
|
) -> None:
|
|
134
149
|
self.success = success
|
|
135
150
|
self.error_message = error_message
|
|
@@ -139,7 +154,7 @@ class HandlerStatusResponse:
|
|
|
139
154
|
def to_json(self):
|
|
140
155
|
data = {"success": self.success, "error": self.error_message}
|
|
141
156
|
if self.redirect_url is not None:
|
|
142
|
-
data[
|
|
157
|
+
data["redirect_url"] = self.redirect_url
|
|
143
158
|
return data
|
|
144
159
|
|
|
145
160
|
def __repr__(self):
|
|
@@ -553,3 +553,9 @@ class VectorStoreHandler(BaseHandler):
|
|
|
553
553
|
df(pd.DataFrame): Hybrid search result, sorted by hybrid search rank
|
|
554
554
|
'''
|
|
555
555
|
raise NotImplementedError(f'Hybrid search not supported for VectorStoreHandler {self.name}')
|
|
556
|
+
|
|
557
|
+
def create_index(self, *args, **kwargs):
|
|
558
|
+
"""
|
|
559
|
+
Create an index on the specified table.
|
|
560
|
+
"""
|
|
561
|
+
raise NotImplementedError(f'create_index not supported for VectorStoreHandler {self.name}')
|
|
@@ -43,6 +43,11 @@ def get_api_key(
|
|
|
43
43
|
if f"{api_name.lower()}_api_key" in create_args:
|
|
44
44
|
return create_args[f"{api_name.lower()}_api_key"]
|
|
45
45
|
|
|
46
|
+
# 2.5 - Check in params dictionary if it exists (for agents)
|
|
47
|
+
if "params" in create_args and create_args["params"] is not None:
|
|
48
|
+
if f"{api_name.lower()}_api_key" in create_args["params"]:
|
|
49
|
+
return create_args["params"][f"{api_name.lower()}_api_key"]
|
|
50
|
+
|
|
46
51
|
# 3
|
|
47
52
|
if engine_storage is not None:
|
|
48
53
|
connection_args = engine_storage.get_connection_args()
|
|
@@ -68,7 +73,14 @@ def get_api_key(
|
|
|
68
73
|
return create_args['api_keys'][api_name]
|
|
69
74
|
|
|
70
75
|
if strict:
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
)
|
|
76
|
+
provider_upper = api_name.upper()
|
|
77
|
+
api_key_env_var = f"{provider_upper}_API_KEY"
|
|
78
|
+
api_key_arg = f"{api_name.lower()}_api_key"
|
|
79
|
+
error_message = (
|
|
80
|
+
f"API key for {api_name} not found. Please provide it using one of the following methods:\n"
|
|
81
|
+
f"1. Set the {api_key_env_var} environment variable\n"
|
|
82
|
+
f"2. Provide it as '{api_key_arg}' parameter when creating an agent using the CREATE AGENT syntax\n"
|
|
83
|
+
f" Example: CREATE AGENT my_agent USING model='gpt-4', provider='{api_name}', {api_key_arg}='your-api-key';\n"
|
|
84
|
+
)
|
|
85
|
+
raise Exception(error_message)
|
|
74
86
|
return None
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
from .microsoft import MSGraphAPIBaseClient
|