We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Fix address already in use when running mindsdb
We need help with find and fix bug:
When you run mindsdb in console, for each interface (specified during --api argument) it needs to run the separate process. When you interrupt the main process by ctrl-c, all other processes should stop too. But sometimes it doesn't happen. We don't know why, maybe it depends on OS, or terminal, or something else. You can check it easy:
1. for your convenience create and activate venv (commands below will be slightly different on windows):
```
python3 -m venv venv
source venv/bin/activate
```
2. install mindsdb:
```
pip3 install mindsdb
```
3. run mindsdb as:
```
python3 -m mindsdb
```
by default will be stated 2 interfaces: HTTP on port 47334 and MySQL on port 47335.
4. Interrupt it by ctrl-c
5. Run mindsdb again. If you see the error 'address already in use', then well, you caught the error :)

All processes start and close in __main__.py https://github.com/mindsdb/mindsdb/blob/staging/mindsdb/__main__.py
We assume on 'ctrl-c' interrupt should be executed in close_api_gracefully function https://github.com/mindsdb/mindsdb/blob/staging/mindsdb/__main__.py#L23

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `mindsdb/__main__.py`
Content:
```
1 import atexit
2 import traceback
3 import sys
4 import os
5 import time
6 import asyncio
7 
8 from pkg_resources import get_distribution
9 import torch.multiprocessing as mp
10 
11 from mindsdb.utilities.config import Config
12 from mindsdb.interfaces.native.mindsdb import MindsdbNative
13 from mindsdb.interfaces.custom.custom_models import CustomModels
14 from mindsdb.api.http.start import start as start_http
15 from mindsdb.api.mysql.start import start as start_mysql
16 from mindsdb.api.mongo.start import start as start_mongo
17 from mindsdb.utilities.fs import (
18     get_or_create_dir_struct,
19     update_versions_file,
20     archive_obsolete_predictors,
21     remove_corrupted_predictors
22 )
23 from mindsdb.utilities.ps import is_pid_listen_port
24 from mindsdb.interfaces.database.database import DatabaseWrapper
25 from mindsdb.utilities.functions import args_parse
26 from mindsdb.utilities.log import initialize_log
27 
28 
29 def close_api_gracefully(apis):
30     for api in apis.values():
31         process = api['process']
32         sys.stdout.flush()
33         process.terminate()
34         process.join()
35         sys.stdout.flush()
36 
37 
38 if __name__ == '__main__':
39     version_error_msg = """
40 MindsDB server requires Python >= 3.6 to run
41 
42 Once you have Python 3.6 installed you can tun mindsdb as follows:
43 
44 1. create and activate venv:
45 python3.6 -m venv venv
46 source venv/bin/activate
47 
48 2. install MindsDB:
49 pip3 install mindsdb
50 
51 3. Run MindsDB
52 python3.6 -m mindsdb
53 
54 More instructions in https://docs.mindsdb.com
55     """
56 
57     if not (sys.version_info[0] >= 3 and sys.version_info[1] >= 6):
58         print(version_error_msg)
59         exit(1)
60 
61     mp.freeze_support()
62 
63     args = args_parse()
64 
65     from mindsdb.__about__ import __version__ as mindsdb_version
66 
67     if args.version:
68         print(f'MindsDB {mindsdb_version}')
69         sys.exit(0)
70 
71     config_path = args.config
72     if config_path is None:
73         config_dir, _ = get_or_create_dir_struct()
74         config_path = os.path.join(config_dir, 'config.json')
75 
76     config = Config(config_path)
77 
78     if args.verbose is True:
79         config['log']['level']['console'] = 'DEBUG'
80     os.environ['DEFAULT_LOG_LEVEL'] = config['log']['level']['console']
81     os.environ['LIGHTWOOD_LOG_LEVEL'] = config['log']['level']['console']
82 
83     log = initialize_log(config)
84 
85     try:
86         lightwood_version = get_distribution('lightwood').version
87     except Exception:
88         from lightwood.__about__ import __version__ as lightwood_version
89 
90     try:
91         mindsdb_native_version = get_distribution('mindsdb_native').version
92     except Exception:
93         from mindsdb_native.__about__ import __version__ as mindsdb_native_version
94 
95     print(f'Configuration file:\n   {config_path}')
96     print(f"Storage path:\n   {config.paths['root']}")
97 
98     print('Versions:')
99     print(f' - lightwood {lightwood_version}')
100     print(f' - MindsDB_native {mindsdb_native_version}')
101     print(f' - MindsDB {mindsdb_version}')
102 
103     os.environ['MINDSDB_STORAGE_PATH'] = config.paths['predictors']
104 
105     update_versions_file(
106         config,
107         {
108             'lightwood': lightwood_version,
109             'mindsdb_native': mindsdb_native_version,
110             'mindsdb': mindsdb_version,
111             'python': sys.version.replace('\n', '')
112         }
113     )
114 
115     if args.api is None:
116         api_arr = ['http', 'mysql']
117     else:
118         api_arr = args.api.split(',')
119 
120     apis = {
121         api: {
122             'port': config['api'][api]['port'],
123             'process': None,
124             'started': False
125         } for api in api_arr
126     }
127 
128     for api_name in apis.keys():
129         if api_name not in config['api']:
130             print(f"Trying run '{api_name}' API, but is no config for this api.")
131             print(f"Please, fill config['api']['{api_name}']")
132             sys.exit(0)
133 
134     start_functions = {
135         'http': start_http,
136         'mysql': start_mysql,
137         'mongodb': start_mongo
138     }
139 
140     archive_obsolete_predictors(config, '2.11.0')
141 
142     mdb = MindsdbNative(config)
143     cst = CustomModels(config)
144 
145     remove_corrupted_predictors(config, mdb)
146 
147     # @TODO Maybe just use `get_model_data` directly here ? Seems like a useless abstraction
148     model_data_arr = [
149         {
150             'name': x['name'],
151             'predict': x['predict'],
152             'data_analysis': mdb.get_model_data(x['name'])['data_analysis_v2']
153         } for x in mdb.get_models()
154     ]
155 
156     model_data_arr.extend(cst.get_models())
157 
158     dbw = DatabaseWrapper(config)
159     dbw.register_predictors(model_data_arr)
160 
161     for broken_name in [name for name, connected in dbw.check_connections().items() if connected is False]:
162         log.error(f'Error failed to integrate with database aliased: {broken_name}')
163 
164     ctx = mp.get_context('spawn')
165 
166     for api_name, api_data in apis.items():
167         print(f'{api_name} API: starting...')
168         try:
169             p = ctx.Process(target=start_functions[api_name], args=(config_path, args.verbose))
170             p.start()
171             api_data['process'] = p
172         except Exception as e:
173             close_api_gracefully(apis)
174             log.error(f'Failed to start {api_name} API with exception {e}\n{traceback.format_exc()}')
175             raise
176 
177     atexit.register(close_api_gracefully, apis=apis)
178 
179     async def wait_api_start(api_name, pid, port):
180         timeout = 60
181         start_time = time.time()
182         started = is_pid_listen_port(pid, port)
183         while (time.time() - start_time) < timeout and started is False:
184             await asyncio.sleep(0.5)
185             started = is_pid_listen_port(pid, port)
186         return api_name, port, started
187 
188     async def wait_apis_start():
189         futures = [
190             wait_api_start(api_name, api_data['process'].pid, api_data['port'])
191             for api_name, api_data in apis.items()
192         ]
193         for i, future in enumerate(asyncio.as_completed(futures)):
194             api_name, port, started = await future
195             if started:
196                 print(f"{api_name} API: started on {port}")
197             else:
198                 log.error(f"ERROR: {api_name} API cant start on {port}")
199 
200     ioloop = asyncio.get_event_loop()
201     ioloop.run_until_complete(wait_apis_start())
202     ioloop.close()
203 
204     try:
205         for api_data in apis.values():
206             api_data['process'].join()
207     except KeyboardInterrupt:
208         print('Closing app...')
209
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/mindsdb/__main__.py b/mindsdb/__main__.py
--- a/mindsdb/__main__.py
+++ b/mindsdb/__main__.py
@@ -27,13 +27,15 @@
 
 
 def close_api_gracefully(apis):
-    for api in apis.values():
-        process = api['process']
-        sys.stdout.flush()
-        process.terminate()
-        process.join()
-        sys.stdout.flush()
-
+    try: 
+        for api in apis.values():
+            process = api['process']
+            sys.stdout.flush()
+            process.terminate()
+            process.join()
+            sys.stdout.flush()
+    except KeyboardInterrupt:
+        sys.exit(0)
 
 if __name__ == '__main__':
     version_error_msg = """

{"golden_diff": "diff --git a/mindsdb/__main__.py b/mindsdb/__main__.py\n--- a/mindsdb/__main__.py\n+++ b/mindsdb/__main__.py\n@@ -27,13 +27,15 @@\n \n \n def close_api_gracefully(apis):\n-    for api in apis.values():\n-        process = api['process']\n-        sys.stdout.flush()\n-        process.terminate()\n-        process.join()\n-        sys.stdout.flush()\n-\n+    try: \n+        for api in apis.values():\n+            process = api['process']\n+            sys.stdout.flush()\n+            process.terminate()\n+            process.join()\n+            sys.stdout.flush()\n+    except KeyboardInterrupt:\n+        sys.exit(0)\n \n if __name__ == '__main__':\n     version_error_msg = \"\"\"\n", "issue": "Fix address already in use when running mindsdb\nWe need help with find and fix bug:\r\nWhen you run mindsdb in console, for each interface (specified during --api argument) it needs to run the separate process. When you interrupt the main process by ctrl-c, all other processes should stop too. But sometimes it doesn't happen. We don't know why, maybe it depends on OS, or terminal, or something else. You can check it easy:\r\n1. for your convenience create and activate venv (commands below will be slightly different on windows):\r\n```\r\npython3 -m venv venv\r\nsource venv/bin/activate\r\n```\r\n2. install mindsdb:\r\n```\r\npip3 install mindsdb\r\n```\r\n3. run mindsdb as:\r\n```\r\npython3 -m mindsdb\r\n```\r\nby default will be stated 2 interfaces: HTTP on port 47334 and MySQL on port 47335.\r\n4. Interrupt it by ctrl-c\r\n5. Run mindsdb again. If you see the error 'address already in use', then well, you caught the error :)\r\n\r\nAll processes start and close in __main__.py https://github.com/mindsdb/mindsdb/blob/staging/mindsdb/__main__.py\r\nWe assume on 'ctrl-c' interrupt should be executed in close_api_gracefully function https://github.com/mindsdb/mindsdb/blob/staging/mindsdb/__main__.py#L23\n", "before_files": [{"content": "import atexit\nimport traceback\nimport sys\nimport os\nimport time\nimport asyncio\n\nfrom pkg_resources import get_distribution\nimport torch.multiprocessing as mp\n\nfrom mindsdb.utilities.config import Config\nfrom mindsdb.interfaces.native.mindsdb import MindsdbNative\nfrom mindsdb.interfaces.custom.custom_models import CustomModels\nfrom mindsdb.api.http.start import start as start_http\nfrom mindsdb.api.mysql.start import start as start_mysql\nfrom mindsdb.api.mongo.start import start as start_mongo\nfrom mindsdb.utilities.fs import (\n    get_or_create_dir_struct,\n    update_versions_file,\n    archive_obsolete_predictors,\n    remove_corrupted_predictors\n)\nfrom mindsdb.utilities.ps import is_pid_listen_port\nfrom mindsdb.interfaces.database.database import DatabaseWrapper\nfrom mindsdb.utilities.functions import args_parse\nfrom mindsdb.utilities.log import initialize_log\n\n\ndef close_api_gracefully(apis):\n    for api in apis.values():\n        process = api['process']\n        sys.stdout.flush()\n        process.terminate()\n        process.join()\n        sys.stdout.flush()\n\n\nif __name__ == '__main__':\n    version_error_msg = \"\"\"\nMindsDB server requires Python >= 3.6 to run\n\nOnce you have Python 3.6 installed you can tun mindsdb as follows:\n\n1. create and activate venv:\npython3.6 -m venv venv\nsource venv/bin/activate\n\n2. install MindsDB:\npip3 install mindsdb\n\n3. Run MindsDB\npython3.6 -m mindsdb\n\nMore instructions in https://docs.mindsdb.com\n    \"\"\"\n\n    if not (sys.version_info[0] >= 3 and sys.version_info[1] >= 6):\n        print(version_error_msg)\n        exit(1)\n\n    mp.freeze_support()\n\n    args = args_parse()\n\n    from mindsdb.__about__ import __version__ as mindsdb_version\n\n    if args.version:\n        print(f'MindsDB {mindsdb_version}')\n        sys.exit(0)\n\n    config_path = args.config\n    if config_path is None:\n        config_dir, _ = get_or_create_dir_struct()\n        config_path = os.path.join(config_dir, 'config.json')\n\n    config = Config(config_path)\n\n    if args.verbose is True:\n        config['log']['level']['console'] = 'DEBUG'\n    os.environ['DEFAULT_LOG_LEVEL'] = config['log']['level']['console']\n    os.environ['LIGHTWOOD_LOG_LEVEL'] = config['log']['level']['console']\n\n    log = initialize_log(config)\n\n    try:\n        lightwood_version = get_distribution('lightwood').version\n    except Exception:\n        from lightwood.__about__ import __version__ as lightwood_version\n\n    try:\n        mindsdb_native_version = get_distribution('mindsdb_native').version\n    except Exception:\n        from mindsdb_native.__about__ import __version__ as mindsdb_native_version\n\n    print(f'Configuration file:\\n   {config_path}')\n    print(f\"Storage path:\\n   {config.paths['root']}\")\n\n    print('Versions:')\n    print(f' - lightwood {lightwood_version}')\n    print(f' - MindsDB_native {mindsdb_native_version}')\n    print(f' - MindsDB {mindsdb_version}')\n\n    os.environ['MINDSDB_STORAGE_PATH'] = config.paths['predictors']\n\n    update_versions_file(\n        config,\n        {\n            'lightwood': lightwood_version,\n            'mindsdb_native': mindsdb_native_version,\n            'mindsdb': mindsdb_version,\n            'python': sys.version.replace('\\n', '')\n        }\n    )\n\n    if args.api is None:\n        api_arr = ['http', 'mysql']\n    else:\n        api_arr = args.api.split(',')\n\n    apis = {\n        api: {\n            'port': config['api'][api]['port'],\n            'process': None,\n            'started': False\n        } for api in api_arr\n    }\n\n    for api_name in apis.keys():\n        if api_name not in config['api']:\n            print(f\"Trying run '{api_name}' API, but is no config for this api.\")\n            print(f\"Please, fill config['api']['{api_name}']\")\n            sys.exit(0)\n\n    start_functions = {\n        'http': start_http,\n        'mysql': start_mysql,\n        'mongodb': start_mongo\n    }\n\n    archive_obsolete_predictors(config, '2.11.0')\n\n    mdb = MindsdbNative(config)\n    cst = CustomModels(config)\n\n    remove_corrupted_predictors(config, mdb)\n\n    # @TODO Maybe just use `get_model_data` directly here ? Seems like a useless abstraction\n    model_data_arr = [\n        {\n            'name': x['name'],\n            'predict': x['predict'],\n            'data_analysis': mdb.get_model_data(x['name'])['data_analysis_v2']\n        } for x in mdb.get_models()\n    ]\n\n    model_data_arr.extend(cst.get_models())\n\n    dbw = DatabaseWrapper(config)\n    dbw.register_predictors(model_data_arr)\n\n    for broken_name in [name for name, connected in dbw.check_connections().items() if connected is False]:\n        log.error(f'Error failed to integrate with database aliased: {broken_name}')\n\n    ctx = mp.get_context('spawn')\n\n    for api_name, api_data in apis.items():\n        print(f'{api_name} API: starting...')\n        try:\n            p = ctx.Process(target=start_functions[api_name], args=(config_path, args.verbose))\n            p.start()\n            api_data['process'] = p\n        except Exception as e:\n            close_api_gracefully(apis)\n            log.error(f'Failed to start {api_name} API with exception {e}\\n{traceback.format_exc()}')\n            raise\n\n    atexit.register(close_api_gracefully, apis=apis)\n\n    async def wait_api_start(api_name, pid, port):\n        timeout = 60\n        start_time = time.time()\n        started = is_pid_listen_port(pid, port)\n        while (time.time() - start_time) < timeout and started is False:\n            await asyncio.sleep(0.5)\n            started = is_pid_listen_port(pid, port)\n        return api_name, port, started\n\n    async def wait_apis_start():\n        futures = [\n            wait_api_start(api_name, api_data['process'].pid, api_data['port'])\n            for api_name, api_data in apis.items()\n        ]\n        for i, future in enumerate(asyncio.as_completed(futures)):\n            api_name, port, started = await future\n            if started:\n                print(f\"{api_name} API: started on {port}\")\n            else:\n                log.error(f\"ERROR: {api_name} API cant start on {port}\")\n\n    ioloop = asyncio.get_event_loop()\n    ioloop.run_until_complete(wait_apis_start())\n    ioloop.close()\n\n    try:\n        for api_data in apis.values():\n            api_data['process'].join()\n    except KeyboardInterrupt:\n        print('Closing app...')\n", "path": "mindsdb/__main__.py"}], "after_files": [{"content": "import atexit\nimport traceback\nimport sys\nimport os\nimport time\nimport asyncio\n\nfrom pkg_resources import get_distribution\nimport torch.multiprocessing as mp\n\nfrom mindsdb.utilities.config import Config\nfrom mindsdb.interfaces.native.mindsdb import MindsdbNative\nfrom mindsdb.interfaces.custom.custom_models import CustomModels\nfrom mindsdb.api.http.start import start as start_http\nfrom mindsdb.api.mysql.start import start as start_mysql\nfrom mindsdb.api.mongo.start import start as start_mongo\nfrom mindsdb.utilities.fs import (\n    get_or_create_dir_struct,\n    update_versions_file,\n    archive_obsolete_predictors,\n    remove_corrupted_predictors\n)\nfrom mindsdb.utilities.ps import is_pid_listen_port\nfrom mindsdb.interfaces.database.database import DatabaseWrapper\nfrom mindsdb.utilities.functions import args_parse\nfrom mindsdb.utilities.log import initialize_log\n\n\ndef close_api_gracefully(apis):\n    try: \n        for api in apis.values():\n            process = api['process']\n            sys.stdout.flush()\n            process.terminate()\n            process.join()\n            sys.stdout.flush()\n    except KeyboardInterrupt:\n        sys.exit(0)\n\nif __name__ == '__main__':\n    version_error_msg = \"\"\"\nMindsDB server requires Python >= 3.6 to run\n\nOnce you have Python 3.6 installed you can tun mindsdb as follows:\n\n1. create and activate venv:\npython3.6 -m venv venv\nsource venv/bin/activate\n\n2. install MindsDB:\npip3 install mindsdb\n\n3. Run MindsDB\npython3.6 -m mindsdb\n\nMore instructions in https://docs.mindsdb.com\n    \"\"\"\n\n    if not (sys.version_info[0] >= 3 and sys.version_info[1] >= 6):\n        print(version_error_msg)\n        exit(1)\n\n    mp.freeze_support()\n\n    args = args_parse()\n\n    from mindsdb.__about__ import __version__ as mindsdb_version\n\n    if args.version:\n        print(f'MindsDB {mindsdb_version}')\n        sys.exit(0)\n\n    config_path = args.config\n    if config_path is None:\n        config_dir, _ = get_or_create_dir_struct()\n        config_path = os.path.join(config_dir, 'config.json')\n\n    config = Config(config_path)\n\n    if args.verbose is True:\n        config['log']['level']['console'] = 'DEBUG'\n    os.environ['DEFAULT_LOG_LEVEL'] = config['log']['level']['console']\n    os.environ['LIGHTWOOD_LOG_LEVEL'] = config['log']['level']['console']\n\n    log = initialize_log(config)\n\n    try:\n        lightwood_version = get_distribution('lightwood').version\n    except Exception:\n        from lightwood.__about__ import __version__ as lightwood_version\n\n    try:\n        mindsdb_native_version = get_distribution('mindsdb_native').version\n    except Exception:\n        from mindsdb_native.__about__ import __version__ as mindsdb_native_version\n\n    print(f'Configuration file:\\n   {config_path}')\n    print(f\"Storage path:\\n   {config.paths['root']}\")\n\n    print('Versions:')\n    print(f' - lightwood {lightwood_version}')\n    print(f' - MindsDB_native {mindsdb_native_version}')\n    print(f' - MindsDB {mindsdb_version}')\n\n    os.environ['MINDSDB_STORAGE_PATH'] = config.paths['predictors']\n\n    update_versions_file(\n        config,\n        {\n            'lightwood': lightwood_version,\n            'mindsdb_native': mindsdb_native_version,\n            'mindsdb': mindsdb_version,\n            'python': sys.version.replace('\\n', '')\n        }\n    )\n\n    if args.api is None:\n        api_arr = ['http', 'mysql']\n    else:\n        api_arr = args.api.split(',')\n\n    apis = {\n        api: {\n            'port': config['api'][api]['port'],\n            'process': None,\n            'started': False\n        } for api in api_arr\n    }\n\n    for api_name in apis.keys():\n        if api_name not in config['api']:\n            print(f\"Trying run '{api_name}' API, but is no config for this api.\")\n            print(f\"Please, fill config['api']['{api_name}']\")\n            sys.exit(0)\n\n    start_functions = {\n        'http': start_http,\n        'mysql': start_mysql,\n        'mongodb': start_mongo\n    }\n\n    archive_obsolete_predictors(config, '2.11.0')\n\n    mdb = MindsdbNative(config)\n    cst = CustomModels(config)\n\n    remove_corrupted_predictors(config, mdb)\n\n    # @TODO Maybe just use `get_model_data` directly here ? Seems like a useless abstraction\n    model_data_arr = [\n        {\n            'name': x['name'],\n            'predict': x['predict'],\n            'data_analysis': mdb.get_model_data(x['name'])['data_analysis_v2']\n        } for x in mdb.get_models()\n    ]\n\n    model_data_arr.extend(cst.get_models())\n\n    dbw = DatabaseWrapper(config)\n    dbw.register_predictors(model_data_arr)\n\n    for broken_name in [name for name, connected in dbw.check_connections().items() if connected is False]:\n        log.error(f'Error failed to integrate with database aliased: {broken_name}')\n\n    ctx = mp.get_context('spawn')\n\n    for api_name, api_data in apis.items():\n        print(f'{api_name} API: starting...')\n        try:\n            p = ctx.Process(target=start_functions[api_name], args=(config_path, args.verbose))\n            p.start()\n            api_data['process'] = p\n        except Exception as e:\n            close_api_gracefully(apis)\n            log.error(f'Failed to start {api_name} API with exception {e}\\n{traceback.format_exc()}')\n            raise\n\n    atexit.register(close_api_gracefully, apis=apis)\n\n    async def wait_api_start(api_name, pid, port):\n        timeout = 60\n        start_time = time.time()\n        started = is_pid_listen_port(pid, port)\n        while (time.time() - start_time) < timeout and started is False:\n            await asyncio.sleep(0.5)\n            started = is_pid_listen_port(pid, port)\n        return api_name, port, started\n\n    async def wait_apis_start():\n        futures = [\n            wait_api_start(api_name, api_data['process'].pid, api_data['port'])\n            for api_name, api_data in apis.items()\n        ]\n        for i, future in enumerate(asyncio.as_completed(futures)):\n            api_name, port, started = await future\n            if started:\n                print(f\"{api_name} API: started on {port}\")\n            else:\n                log.error(f\"ERROR: {api_name} API cant start on {port}\")\n\n    ioloop = asyncio.get_event_loop()\n    ioloop.run_until_complete(wait_apis_start())\n    ioloop.close()\n\n    try:\n        for api_data in apis.values():\n            api_data['process'].join()\n    except KeyboardInterrupt:\n        print('Closing app...')\n", "path": "mindsdb/__main__.py"}]}