MindsDB 25.5.3.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 +127 -79
- 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 +47 -27
- 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/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/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/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/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/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/utils.py +3 -3
- mindsdb/interfaces/agents/agents_controller.py +164 -1
- mindsdb/interfaces/agents/constants.py +15 -0
- mindsdb/interfaces/agents/langchain_agent.py +16 -4
- mindsdb/interfaces/agents/mindsdb_database_agent.py +101 -2
- mindsdb/interfaces/knowledge_base/controller.py +25 -0
- 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 +331 -219
- mindsdb/utilities/starters.py +13 -0
- {mindsdb-25.5.3.0.dist-info → mindsdb-25.5.4.0.dist-info}/METADATA +641 -695
- {mindsdb-25.5.3.0.dist-info → mindsdb-25.5.4.0.dist-info}/RECORD +309 -288
- {mindsdb-25.5.3.0.dist-info → mindsdb-25.5.4.0.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.0.dist-info}/licenses/LICENSE +0 -0
- {mindsdb-25.5.3.0.dist-info → mindsdb-25.5.4.0.dist-info}/top_level.txt +0 -0
|
@@ -8,98 +8,92 @@ from mindsdb.utilities.render.sqlalchemy_render import SqlalchemyRender
|
|
|
8
8
|
from mindsdb.integrations.libs.response import (
|
|
9
9
|
HandlerStatusResponse as StatusResponse,
|
|
10
10
|
HandlerResponse as Response,
|
|
11
|
-
RESPONSE_TYPE
|
|
11
|
+
RESPONSE_TYPE,
|
|
12
12
|
)
|
|
13
13
|
from mindsdb.integrations.libs.const import HANDLER_CONNECTION_ARG_TYPE as ARG_TYPE
|
|
14
14
|
|
|
15
15
|
|
|
16
|
-
|
|
17
16
|
import pandas as pd
|
|
18
|
-
import IfxPyDbi as
|
|
19
|
-
from sqlalchemy_informix.ibmdb import
|
|
17
|
+
import IfxPyDbi as Ifx
|
|
18
|
+
from sqlalchemy_informix.ibmdb import InformixDialect
|
|
20
19
|
|
|
21
20
|
logger = log.getLogger(__name__)
|
|
22
21
|
|
|
23
|
-
class InformixHandler(DatabaseHandler):
|
|
24
22
|
|
|
23
|
+
class InformixHandler(DatabaseHandler):
|
|
25
24
|
|
|
26
|
-
name=
|
|
25
|
+
name = "informix"
|
|
27
26
|
|
|
28
27
|
def __init__(self, name: str, connection_data: Optional[dict], **kwargs):
|
|
29
|
-
|
|
28
|
+
"""Initialize the handler
|
|
30
29
|
Args:
|
|
31
30
|
name (str): name of particular handler instance
|
|
32
31
|
connection_data (dict): parameters for connecting to the database
|
|
33
32
|
**kwargs: arbitrary keyword arguments.
|
|
34
|
-
|
|
33
|
+
"""
|
|
35
34
|
super().__init__(name)
|
|
36
|
-
|
|
35
|
+
|
|
37
36
|
self.kwargs = kwargs
|
|
38
37
|
self.parser = parse_sql
|
|
39
|
-
self.loging_enabled =
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
self.
|
|
45
|
-
self.
|
|
46
|
-
self.
|
|
38
|
+
self.loging_enabled = (
|
|
39
|
+
connection_data["loging_enabled"]
|
|
40
|
+
if "loging_enabled" in connection_data
|
|
41
|
+
else True
|
|
42
|
+
)
|
|
43
|
+
self.server = connection_data["server"]
|
|
44
|
+
self.database = connection_data["database"]
|
|
45
|
+
self.user = connection_data["user"]
|
|
46
|
+
self.password = connection_data["password"]
|
|
47
|
+
self.schemaName = connection_data["schema_name"]
|
|
48
|
+
self.host = connection_data["host"]
|
|
49
|
+
self.port = connection_data["port"]
|
|
47
50
|
self.connString = (
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
'UID={4};'
|
|
53
|
-
'PWD={5};').format(self.server, self.database, self.host, self.port, self.user, self.password)
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
51
|
+
"SERVER={0};" "DATABASE={1};" "HOST={2};" "PORT={3};" "UID={4};" "PWD={5};"
|
|
52
|
+
).format(
|
|
53
|
+
self.server, self.database, self.host, self.port, self.user, self.password
|
|
54
|
+
)
|
|
57
55
|
|
|
58
56
|
self.connection = None
|
|
59
57
|
self.is_connected = False
|
|
60
|
-
|
|
61
|
-
|
|
58
|
+
|
|
62
59
|
def connect(self):
|
|
63
|
-
|
|
60
|
+
"""Set up any connections required by the handler
|
|
64
61
|
Should return output of check_connection() method after attempting
|
|
65
62
|
connection. Should switch self.is_connected.
|
|
66
63
|
Returns:
|
|
67
64
|
Connection Object
|
|
68
|
-
|
|
65
|
+
"""
|
|
69
66
|
if self.is_connected is True:
|
|
70
67
|
return self.connection
|
|
71
68
|
|
|
72
69
|
try:
|
|
73
|
-
self.connection =
|
|
74
|
-
|
|
75
|
-
self.is_connected= True
|
|
76
|
-
except Exception as e:
|
|
77
|
-
logger.error(f'Error while connecting to {self.database}, {e}')
|
|
70
|
+
self.connection = Ifx.connect(self.connString, "", "")
|
|
78
71
|
|
|
72
|
+
self.is_connected = True
|
|
73
|
+
except Exception as e:
|
|
74
|
+
logger.error(f"Error while connecting to {self.database}, {e}")
|
|
79
75
|
|
|
80
76
|
return self.connection
|
|
81
77
|
|
|
82
|
-
|
|
83
78
|
def disconnect(self):
|
|
84
|
-
|
|
79
|
+
"""Close any existing connections
|
|
85
80
|
Should switch self.is_connected.
|
|
86
|
-
|
|
81
|
+
"""
|
|
87
82
|
if self.is_connected is False:
|
|
88
83
|
return
|
|
89
84
|
try:
|
|
90
85
|
self.connection.close()
|
|
91
86
|
self.is_connected = False
|
|
92
87
|
except Exception as e:
|
|
93
|
-
logger.error(f
|
|
94
|
-
|
|
95
|
-
return
|
|
88
|
+
logger.error(f"Error while disconnecting to {self.database}, {e}")
|
|
96
89
|
|
|
90
|
+
return
|
|
97
91
|
|
|
98
92
|
def check_connection(self) -> StatusResponse:
|
|
99
|
-
|
|
93
|
+
"""Check connection to the handler
|
|
100
94
|
Returns:
|
|
101
95
|
HandlerStatusResponse
|
|
102
|
-
|
|
96
|
+
"""
|
|
103
97
|
responseCode = StatusResponse(False)
|
|
104
98
|
need_to_close = self.is_connected is False
|
|
105
99
|
|
|
@@ -107,7 +101,7 @@ class InformixHandler(DatabaseHandler):
|
|
|
107
101
|
self.connect()
|
|
108
102
|
responseCode.success = True
|
|
109
103
|
except Exception as e:
|
|
110
|
-
logger.error(f
|
|
104
|
+
logger.error(f"Error connecting to database {self.database}, {e}!")
|
|
111
105
|
responseCode.error_message = str(e)
|
|
112
106
|
finally:
|
|
113
107
|
if responseCode.success is True and need_to_close:
|
|
@@ -117,107 +111,93 @@ class InformixHandler(DatabaseHandler):
|
|
|
117
111
|
|
|
118
112
|
return responseCode
|
|
119
113
|
|
|
120
|
-
|
|
121
114
|
def native_query(self, query: str) -> StatusResponse:
|
|
122
|
-
|
|
115
|
+
"""Receive raw query and act upon it somehow.
|
|
123
116
|
Args:
|
|
124
117
|
query (Any): query in native format (str for sql databases,
|
|
125
118
|
dict for mongo, etc)
|
|
126
119
|
Returns:
|
|
127
120
|
HandlerResponse
|
|
128
|
-
|
|
121
|
+
"""
|
|
129
122
|
need_to_close = self.is_connected is False
|
|
130
123
|
conn = self.connect()
|
|
131
124
|
cur = conn.cursor()
|
|
132
125
|
try:
|
|
133
126
|
cur.execute(query)
|
|
134
|
-
|
|
135
|
-
if cur._result_set_produced
|
|
136
|
-
result = cur.fetchall()
|
|
127
|
+
|
|
128
|
+
if cur._result_set_produced:
|
|
129
|
+
result = cur.fetchall()
|
|
137
130
|
response = Response(
|
|
138
131
|
RESPONSE_TYPE.TABLE,
|
|
139
132
|
data_frame=pd.DataFrame(
|
|
140
|
-
result,
|
|
141
|
-
|
|
142
|
-
)
|
|
133
|
+
result, columns=[x[0] for x in cur.description]
|
|
134
|
+
),
|
|
143
135
|
)
|
|
144
136
|
else:
|
|
145
137
|
response = Response(RESPONSE_TYPE.OK)
|
|
146
138
|
if self.loging_enabled:
|
|
147
139
|
self.connection.commit()
|
|
148
140
|
except Exception as e:
|
|
149
|
-
logger.error(f
|
|
150
|
-
response = Response(
|
|
151
|
-
RESPONSE_TYPE.ERROR,
|
|
152
|
-
error_message=str(e)
|
|
153
|
-
)
|
|
141
|
+
logger.error(f"Error running query: {query} on {self.database}")
|
|
142
|
+
response = Response(RESPONSE_TYPE.ERROR, error_message=str(e))
|
|
154
143
|
if self.loging_enabled:
|
|
155
144
|
self.connection.rollback()
|
|
156
145
|
|
|
157
146
|
cur.close()
|
|
158
147
|
|
|
159
|
-
|
|
160
148
|
if need_to_close is True:
|
|
161
149
|
self.disconnect()
|
|
162
150
|
|
|
163
151
|
return response
|
|
164
152
|
|
|
165
|
-
|
|
166
153
|
def query(self, query: ASTNode) -> StatusResponse:
|
|
167
|
-
|
|
154
|
+
"""Receive query as AST (abstract syntax tree) and act upon it somehow.
|
|
168
155
|
Args:
|
|
169
156
|
query (ASTNode): sql query represented as AST. May be any kind
|
|
170
157
|
of query: SELECT, INTSERT, DELETE, etc
|
|
171
158
|
Returns:
|
|
172
159
|
HandlerResponse
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
160
|
+
"""
|
|
176
161
|
|
|
177
162
|
renderer = SqlalchemyRender(InformixDialect)
|
|
178
163
|
query_str = renderer.get_string(query, with_failback=True)
|
|
179
164
|
return self.native_query(query_str)
|
|
180
165
|
|
|
181
|
-
|
|
182
166
|
def get_tables(self) -> StatusResponse:
|
|
183
|
-
|
|
167
|
+
"""Return list of entities
|
|
184
168
|
Return list of entities that will be accesible as tables.
|
|
185
169
|
Returns:
|
|
186
170
|
HandlerResponse: shoud have same columns as information_schema.tables
|
|
187
171
|
(https://dev.mysql.com/doc/refman/8.0/en/information-schema-tables-table.html)
|
|
188
172
|
Column 'TABLE_NAME' is mandatory, other is optional.
|
|
189
|
-
|
|
173
|
+
"""
|
|
190
174
|
self.connect()
|
|
191
175
|
|
|
192
|
-
|
|
193
|
-
result=self.connection.tables()
|
|
176
|
+
result = self.connection.tables()
|
|
194
177
|
try:
|
|
195
178
|
if result:
|
|
196
179
|
response = Response(
|
|
197
180
|
RESPONSE_TYPE.TABLE,
|
|
198
181
|
data_frame=pd.DataFrame(
|
|
199
|
-
[
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
182
|
+
[
|
|
183
|
+
x["TABLE_NAME"]
|
|
184
|
+
for x in result
|
|
185
|
+
if x["TABLE_SCHEM"] == self.schemaName
|
|
186
|
+
],
|
|
187
|
+
columns=["TABLE_NAME"],
|
|
188
|
+
),
|
|
203
189
|
)
|
|
204
190
|
else:
|
|
205
191
|
response = Response(RESPONSE_TYPE.OK)
|
|
206
|
-
|
|
207
|
-
except Exception as e:
|
|
208
|
-
logger.error(f'Error running while getting table {e} on ')
|
|
209
|
-
response = Response(
|
|
210
|
-
RESPONSE_TYPE.ERROR,
|
|
211
|
-
error_message=str(e)
|
|
212
|
-
)
|
|
213
|
-
|
|
214
192
|
|
|
193
|
+
except Exception as e:
|
|
194
|
+
logger.error(f"Error running while getting table {e} on ")
|
|
195
|
+
response = Response(RESPONSE_TYPE.ERROR, error_message=str(e))
|
|
215
196
|
|
|
216
197
|
return response
|
|
217
198
|
|
|
218
|
-
|
|
219
199
|
def get_columns(self, table_name: str) -> StatusResponse:
|
|
220
|
-
|
|
200
|
+
"""Returns a list of entity columns
|
|
221
201
|
Args:
|
|
222
202
|
table_name (str): name of one of tables returned by self.get_tables()
|
|
223
203
|
Returns:
|
|
@@ -226,93 +206,79 @@ class InformixHandler(DatabaseHandler):
|
|
|
226
206
|
Column 'COLUMN_NAME' is mandatory, other is optional. Hightly
|
|
227
207
|
recomended to define also 'DATA_TYPE': it should be one of
|
|
228
208
|
python data types (by default it str).
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
self.connect()
|
|
209
|
+
"""
|
|
232
210
|
|
|
211
|
+
self.connect()
|
|
233
212
|
|
|
234
|
-
result=self.connection.columns(table_name=table_name)
|
|
213
|
+
result = self.connection.columns(table_name=table_name)
|
|
235
214
|
try:
|
|
236
215
|
if result:
|
|
237
216
|
response = Response(
|
|
238
217
|
RESPONSE_TYPE.TABLE,
|
|
239
218
|
data_frame=pd.DataFrame(
|
|
240
|
-
[result[i][
|
|
241
|
-
columns=[
|
|
242
|
-
|
|
243
|
-
)
|
|
219
|
+
[result[i]["COLUMN_NAME"] for i in range(len(result))],
|
|
220
|
+
columns=["COLUMN_NAME"],
|
|
221
|
+
),
|
|
244
222
|
)
|
|
245
223
|
else:
|
|
246
224
|
response = Response(RESPONSE_TYPE.OK)
|
|
247
|
-
|
|
248
|
-
except Exception as e:
|
|
249
|
-
logger.error(f'Error running while getting table {e} on ')
|
|
250
|
-
response = Response(
|
|
251
|
-
RESPONSE_TYPE.ERROR,
|
|
252
|
-
error_message=str(e)
|
|
253
|
-
)
|
|
254
|
-
|
|
255
225
|
|
|
226
|
+
except Exception as e:
|
|
227
|
+
logger.error(f"Error running while getting table {e} on ")
|
|
228
|
+
response = Response(RESPONSE_TYPE.ERROR, error_message=str(e))
|
|
256
229
|
|
|
257
230
|
return response
|
|
258
231
|
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
232
|
|
|
265
233
|
connection_args = OrderedDict(
|
|
266
234
|
server={
|
|
267
|
-
|
|
268
|
-
|
|
235
|
+
"type": ARG_TYPE.STR,
|
|
236
|
+
"description": """
|
|
269
237
|
The server name you want to get connected.
|
|
270
|
-
|
|
238
|
+
""",
|
|
271
239
|
},
|
|
272
240
|
database={
|
|
273
|
-
|
|
274
|
-
|
|
241
|
+
"type": ARG_TYPE.STR,
|
|
242
|
+
"description": """
|
|
275
243
|
The database name to use when connecting with the DB2 server.
|
|
276
|
-
|
|
244
|
+
""",
|
|
277
245
|
},
|
|
278
246
|
user={
|
|
279
|
-
|
|
280
|
-
|
|
247
|
+
"type": ARG_TYPE.STR,
|
|
248
|
+
"description": "The user name used to authenticate with the DB2 server.",
|
|
281
249
|
},
|
|
282
250
|
password={
|
|
283
|
-
|
|
284
|
-
|
|
251
|
+
"type": ARG_TYPE.STR,
|
|
252
|
+
"description": "The password to authenticate the user with the DB2 server.",
|
|
285
253
|
},
|
|
286
254
|
host={
|
|
287
|
-
|
|
288
|
-
|
|
255
|
+
"type": ARG_TYPE.STR,
|
|
256
|
+
"description": "The host name or IP address of the DB2 server/database.",
|
|
289
257
|
},
|
|
290
258
|
port={
|
|
291
|
-
|
|
292
|
-
|
|
259
|
+
"type": ARG_TYPE.INT,
|
|
260
|
+
"description": "Specify port to connect DB2 through TCP/IP",
|
|
293
261
|
},
|
|
294
262
|
schema_name={
|
|
295
|
-
|
|
296
|
-
|
|
263
|
+
"type": ARG_TYPE.STR,
|
|
264
|
+
"description": "Specify the schema name for showing tables ",
|
|
297
265
|
},
|
|
298
266
|
logging_enabled={
|
|
299
|
-
|
|
300
|
-
|
|
267
|
+
"type": ARG_TYPE.BOOL,
|
|
268
|
+
"description": """
|
|
301
269
|
Used for COMMIT and ROLLBACK as this command works only for logging enabled database.
|
|
302
270
|
Note: Its optional.
|
|
303
271
|
Default is TRUE
|
|
304
|
-
|
|
305
|
-
}
|
|
306
|
-
|
|
272
|
+
""",
|
|
273
|
+
},
|
|
307
274
|
)
|
|
308
275
|
|
|
309
276
|
connection_args_example = OrderedDict(
|
|
310
|
-
server=
|
|
311
|
-
database=
|
|
312
|
-
user=
|
|
313
|
-
password=
|
|
314
|
-
host=
|
|
315
|
-
port=
|
|
316
|
-
schema_name=
|
|
317
|
-
|
|
277
|
+
server="server",
|
|
278
|
+
database="stores_demo",
|
|
279
|
+
user="informix",
|
|
280
|
+
password="in4mix",
|
|
281
|
+
host="127.0.0.1",
|
|
282
|
+
port="9091",
|
|
283
|
+
schema_name="Love",
|
|
318
284
|
)
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import unittest
|
|
2
|
-
from mindsdb.integrations.handlers.informix_handler.informix_handler import
|
|
2
|
+
from mindsdb.integrations.handlers.informix_handler.informix_handler import (
|
|
3
|
+
InformixHandler,
|
|
4
|
+
)
|
|
3
5
|
from mindsdb.api.executor.data_types.response_type import RESPONSE_TYPE
|
|
4
6
|
|
|
5
7
|
|
|
@@ -15,30 +17,30 @@ class InformixHandlerTest(unittest.TestCase):
|
|
|
15
17
|
"password": "in4mix",
|
|
16
18
|
"database": "demo",
|
|
17
19
|
"schema_name": "love",
|
|
18
|
-
"loging_enabled": False
|
|
20
|
+
"loging_enabled": False,
|
|
19
21
|
}
|
|
20
22
|
}
|
|
21
|
-
cls.handler = InformixHandler(
|
|
23
|
+
cls.handler = InformixHandler("test_informix_handler", cls.kwargs)
|
|
22
24
|
|
|
23
25
|
def test_0_connect(self):
|
|
24
26
|
self.handler.connect()
|
|
25
27
|
|
|
26
28
|
def test_1_drop_table(self):
|
|
27
29
|
res = self.handler.query("DROP TABLE IF EXISTS LOVE;")
|
|
28
|
-
assert res.type is
|
|
30
|
+
assert res.type is not RESPONSE_TYPE.ERROR
|
|
29
31
|
|
|
30
32
|
def test_2_create_table(self):
|
|
31
33
|
res = self.handler.query("CREATE TABLE IF NOT EXISTS LOVE (LOVER varchar(20));")
|
|
32
|
-
assert res.type is not
|
|
33
|
-
|
|
34
|
+
assert res.type is not RESPONSE_TYPE.ERROR
|
|
35
|
+
|
|
34
36
|
def test_3_insert(self):
|
|
35
37
|
res = self.handler.query("INSERT INTO LOVE VALUES('Hari');")
|
|
36
38
|
assert res.type is not RESPONSE_TYPE.ERROR
|
|
37
|
-
|
|
39
|
+
|
|
38
40
|
def test_4_get_tables(self):
|
|
39
41
|
tables = self.handler.get_tables()
|
|
40
42
|
assert tables.type is RESPONSE_TYPE.TABLE
|
|
41
|
-
|
|
43
|
+
|
|
42
44
|
def test_5_select_query(self):
|
|
43
45
|
query = "SELECT * FROM LOVE;"
|
|
44
46
|
result = self.handler.native_query(query)
|
|
@@ -47,6 +49,6 @@ class InformixHandlerTest(unittest.TestCase):
|
|
|
47
49
|
def test_5_check_connection(self):
|
|
48
50
|
self.handler.check_connection()
|
|
49
51
|
|
|
50
|
-
|
|
51
|
-
if __name__ ==
|
|
52
|
-
unittest.main()
|
|
52
|
+
|
|
53
|
+
if __name__ == "__main__":
|
|
54
|
+
unittest.main()
|
|
@@ -55,14 +55,14 @@ class JiraHandler(APIHandler):
|
|
|
55
55
|
"""
|
|
56
56
|
if self.is_connected is True:
|
|
57
57
|
return self.connection
|
|
58
|
-
|
|
58
|
+
|
|
59
59
|
is_cloud = self.connection_data.get("cloud", True)
|
|
60
60
|
|
|
61
61
|
if is_cloud:
|
|
62
62
|
# Jira Cloud supports API token authentication.
|
|
63
63
|
if not all(key in self.connection_data for key in ['username', 'api_token', 'url']):
|
|
64
64
|
raise ValueError("Required parameters (username, api_token, url) must be provided.")
|
|
65
|
-
|
|
65
|
+
|
|
66
66
|
config = {
|
|
67
67
|
"username": self.connection_data['username'],
|
|
68
68
|
"password": self.connection_data['api_token'],
|
|
@@ -72,7 +72,7 @@ class JiraHandler(APIHandler):
|
|
|
72
72
|
# Jira Server supports personal access token authentication or open access.
|
|
73
73
|
if 'url' not in self.connection_data:
|
|
74
74
|
raise ValueError("Required parameter 'url' must be provided.")
|
|
75
|
-
|
|
75
|
+
|
|
76
76
|
config = {
|
|
77
77
|
"url": self.connection_data['url'],
|
|
78
78
|
"cloud": False
|
|
@@ -147,4 +147,4 @@ class JiraHandler(APIHandler):
|
|
|
147
147
|
error_message=str(unknown_error)
|
|
148
148
|
)
|
|
149
149
|
|
|
150
|
-
return response
|
|
150
|
+
return response
|
|
@@ -24,7 +24,7 @@ class JiraProjectsTable(APIResource):
|
|
|
24
24
|
|
|
25
25
|
projects = []
|
|
26
26
|
for condition in conditions:
|
|
27
|
-
if condition.column in ('id', 'key'):
|
|
27
|
+
if condition.column in ('id', 'key'):
|
|
28
28
|
if condition.op == FilterOperator.EQUAL:
|
|
29
29
|
projects = [client.get_project(condition.value)]
|
|
30
30
|
elif condition.op == FilterOperator.IN:
|
|
@@ -43,7 +43,7 @@ class JiraProjectsTable(APIResource):
|
|
|
43
43
|
projects_df = pd.DataFrame([], columns=self.get_columns())
|
|
44
44
|
|
|
45
45
|
return projects_df
|
|
46
|
-
|
|
46
|
+
|
|
47
47
|
def get_columns(self) -> List[str]:
|
|
48
48
|
return [
|
|
49
49
|
"id",
|
|
@@ -56,7 +56,7 @@ class JiraProjectsTable(APIResource):
|
|
|
56
56
|
"entityId",
|
|
57
57
|
"uuid",
|
|
58
58
|
]
|
|
59
|
-
|
|
59
|
+
|
|
60
60
|
|
|
61
61
|
class JiraIssuesTable(APIResource):
|
|
62
62
|
def list(
|
|
@@ -71,7 +71,7 @@ class JiraIssuesTable(APIResource):
|
|
|
71
71
|
|
|
72
72
|
issues = []
|
|
73
73
|
for condition in conditions:
|
|
74
|
-
if condition.column in ('id', 'key'):
|
|
74
|
+
if condition.column in ('id', 'key'):
|
|
75
75
|
if condition.op == FilterOperator.EQUAL:
|
|
76
76
|
issues = [client.get_issue(condition.value)]
|
|
77
77
|
elif condition.op == FilterOperator.IN:
|
|
@@ -88,7 +88,7 @@ class JiraIssuesTable(APIResource):
|
|
|
88
88
|
issues.extend(client.get_all_project_issues(project_id, limit=limit))
|
|
89
89
|
|
|
90
90
|
condition.applied = True
|
|
91
|
-
|
|
91
|
+
|
|
92
92
|
if not issues:
|
|
93
93
|
project_ids = [project['id'] for project in client.get_all_projects()]
|
|
94
94
|
for project_id in project_ids:
|
|
@@ -100,7 +100,7 @@ class JiraIssuesTable(APIResource):
|
|
|
100
100
|
issues_df = pd.DataFrame([], columns=self.get_columns())
|
|
101
101
|
|
|
102
102
|
return issues_df
|
|
103
|
-
|
|
103
|
+
|
|
104
104
|
def _get_project_issues_with_limit(self, client: Jira, project_id, limit=None, current_issues=None):
|
|
105
105
|
"""
|
|
106
106
|
Helper to get issues from a project, respecting the limit.
|
|
@@ -147,8 +147,8 @@ class JiraIssuesTable(APIResource):
|
|
|
147
147
|
"assignee",
|
|
148
148
|
"status",
|
|
149
149
|
]
|
|
150
|
-
|
|
151
|
-
|
|
150
|
+
|
|
151
|
+
|
|
152
152
|
class JiraGroupsTable(APIResource):
|
|
153
153
|
def list(
|
|
154
154
|
self,
|
|
@@ -194,7 +194,7 @@ class JiraUsersTable(APIResource):
|
|
|
194
194
|
|
|
195
195
|
users = []
|
|
196
196
|
for condition in conditions:
|
|
197
|
-
if condition.column == 'accountId':
|
|
197
|
+
if condition.column == 'accountId':
|
|
198
198
|
if condition.op == FilterOperator.EQUAL:
|
|
199
199
|
users = [client.user(account_id=condition.value)]
|
|
200
200
|
elif condition.op == FilterOperator.IN:
|
|
@@ -108,7 +108,7 @@ AI: {response}'''
|
|
|
108
108
|
self.model_storage.json_set('args', args)
|
|
109
109
|
|
|
110
110
|
@staticmethod
|
|
111
|
-
def create_validation(_, args: Dict=None, **kwargs):
|
|
111
|
+
def create_validation(_, args: Dict = None, **kwargs):
|
|
112
112
|
if 'using' not in args:
|
|
113
113
|
raise Exception("LangChain engine requires a USING clause! Refer to its documentation for more details.")
|
|
114
114
|
else:
|
|
@@ -117,7 +117,7 @@ AI: {response}'''
|
|
|
117
117
|
if not args.get('mode') == 'retrieval':
|
|
118
118
|
raise ValueError('Please provide a `prompt_template` for this engine.')
|
|
119
119
|
|
|
120
|
-
def predict(self, df: pd.DataFrame, args: Dict=None) -> pd.DataFrame:
|
|
120
|
+
def predict(self, df: pd.DataFrame, args: Dict = None) -> pd.DataFrame:
|
|
121
121
|
"""
|
|
122
122
|
Dispatch is performed depending on the underlying model type. Currently, only the default text completion
|
|
123
123
|
is supported.
|
|
@@ -125,7 +125,7 @@ AI: {response}'''
|
|
|
125
125
|
pred_args = args['predict_params'] if args else {}
|
|
126
126
|
args = self.model_storage.json_get('args')
|
|
127
127
|
if 'prompt_template' not in args and 'prompt_template' not in pred_args:
|
|
128
|
-
raise ValueError(
|
|
128
|
+
raise ValueError("This model expects a `prompt_template`, please provide one.")
|
|
129
129
|
# Back compatibility for old models
|
|
130
130
|
args['provider'] = args.get('provider', get_llm_provider(args))
|
|
131
131
|
args['embedding_model_provider'] = args.get('embedding_model', get_embedding_model_provider(args))
|
|
@@ -155,7 +155,7 @@ AI: {response}'''
|
|
|
155
155
|
|
|
156
156
|
return pd.DataFrame([resp.content], columns=[assistant_column])
|
|
157
157
|
|
|
158
|
-
def create_agent(self, df: pd.DataFrame, args: Dict=None, pred_args: Dict=None) -> AgentExecutor:
|
|
158
|
+
def create_agent(self, df: pd.DataFrame, args: Dict = None, pred_args: Dict = None) -> AgentExecutor:
|
|
159
159
|
pred_args = pred_args if pred_args else {}
|
|
160
160
|
|
|
161
161
|
# Set up tools.
|