cmdbox 0.6.4.1__tar.gz → 0.6.4.2__tar.gz
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 cmdbox might be problematic. Click here for more details.
- {cmdbox-0.6.4.1/cmdbox.egg-info → cmdbox-0.6.4.2}/PKG-INFO +1 -1
- cmdbox-0.6.4.2/cmdbox/app/features/cli/cmdbox_vision_install.py +213 -0
- cmdbox-0.6.4.2/cmdbox/app/features/cli/cmdbox_vision_predict.py +192 -0
- cmdbox-0.6.4.2/cmdbox/app/features/cli/cmdbox_vision_start.py +230 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/web/cmdbox_web_versions_used.py +1 -1
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/version.py +2 -2
- cmdbox-0.6.4.2/cmdbox/web/voicevox_license_list.txt +41 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2/cmdbox.egg-info}/PKG-INFO +1 -1
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox.egg-info/SOURCES.txt +4 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/LICENSE +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/MANIFEST.in +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/README.md +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/__init__.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/__main__.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/__init__.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/app.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/auth/__init__.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/auth/azure_signin.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/auth/azure_signin_saml.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/auth/github_signin.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/auth/google_signin.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/auth/signin.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/auth/signin_saml.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/client.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/common.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/commons/convert.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/commons/loghandler.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/commons/module.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/commons/redis_client.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/edge.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/edge_tool.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/feature.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/cli/agent_base.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/cli/audit_base.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/cli/cmdbox_agent_mcp_client.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/cli/cmdbox_agent_mcp_proxy.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/cli/cmdbox_audit_createdb.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/cli/cmdbox_audit_delete.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/cli/cmdbox_audit_search.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/cli/cmdbox_audit_write.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/cli/cmdbox_client_file_copy.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/cli/cmdbox_client_file_download.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/cli/cmdbox_client_file_list.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/cli/cmdbox_client_file_mkdir.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/cli/cmdbox_client_file_move.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/cli/cmdbox_client_file_remove.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/cli/cmdbox_client_file_rmdir.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/cli/cmdbox_client_file_upload.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/cli/cmdbox_client_http.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/cli/cmdbox_client_server_info.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/cli/cmdbox_cmd_list.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/cli/cmdbox_cmd_load.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/cli/cmdbox_edge_config.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/cli/cmdbox_edge_start.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/cli/cmdbox_gui_start.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/cli/cmdbox_gui_stop.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/cli/cmdbox_server_list.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/cli/cmdbox_server_start.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/cli/cmdbox_server_stop.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/cli/cmdbox_tts_install.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/cli/cmdbox_tts_say.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/cli/cmdbox_tts_start.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/cli/cmdbox_tts_stop.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/cli/cmdbox_web_apikey_add.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/cli/cmdbox_web_apikey_del.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/cli/cmdbox_web_gencert.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/cli/cmdbox_web_genpass.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/cli/cmdbox_web_group_add.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/cli/cmdbox_web_group_del.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/cli/cmdbox_web_group_edit.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/cli/cmdbox_web_group_list.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/cli/cmdbox_web_start.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/cli/cmdbox_web_stop.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/cli/cmdbox_web_user_add.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/cli/cmdbox_web_user_del.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/cli/cmdbox_web_user_edit.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/cli/cmdbox_web_user_list.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/web/cmdbox_web_agent.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/web/cmdbox_web_assets.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/web/cmdbox_web_audit.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/web/cmdbox_web_audit_metrics.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/web/cmdbox_web_bbforce_cmd.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/web/cmdbox_web_copyright.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/web/cmdbox_web_del_cmd.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/web/cmdbox_web_del_pipe.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/web/cmdbox_web_do_signin.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/web/cmdbox_web_do_signout.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/web/cmdbox_web_exec_cmd.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/web/cmdbox_web_exec_pipe.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/web/cmdbox_web_filer download.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/web/cmdbox_web_filer.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/web/cmdbox_web_filer_upload.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/web/cmdbox_web_get_cmd_choices.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/web/cmdbox_web_get_cmds.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/web/cmdbox_web_get_modes.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/web/cmdbox_web_get_server_opt.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/web/cmdbox_web_gui.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/web/cmdbox_web_gui_callback.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/web/cmdbox_web_list_cmd.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/web/cmdbox_web_list_pipe.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/web/cmdbox_web_load_cmd.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/web/cmdbox_web_load_pipe.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/web/cmdbox_web_raw_cmd.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/web/cmdbox_web_raw_pipe.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/web/cmdbox_web_result.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/web/cmdbox_web_save_cmd.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/web/cmdbox_web_save_pipe.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/web/cmdbox_web_signin.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/web/cmdbox_web_user_data.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/web/cmdbox_web_users.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/web/cmdbox_web_usesignout.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/features/web/cmdbox_web_versions_cmdbox.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/filer.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/mcp.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/options.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/server.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/app/web.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/autoload.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/extensions/features.yml +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/extensions/sample_project/.vscode/launch.json +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/extensions/sample_project/requirements.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/extensions/sample_project/sample/__init__.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/extensions/sample_project/sample/__main__.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/extensions/sample_project/sample/app/app.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/extensions/sample_project/sample/app/features/cli/__init__.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/extensions/sample_project/sample/app/features/cli/sample_client_time.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/extensions/sample_project/sample/app/features/cli/sample_server_time.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/extensions/sample_project/sample/app/features/web/__init__.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/extensions/sample_project/sample/extensions/features.yml +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/extensions/sample_project/sample/extensions/user_list.yml +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/extensions/sample_project/sample/logconf_sample.yml +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/extensions/sample_project/sample/version.py +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/extensions/sample_project/sample/web/assets/sample/favicon.ico +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/extensions/sample_project/sample/web/assets/sample/icon.png +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/extensions/user_list.yml +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_APScheduler_3_11_0_MIT_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_Authlib_1_6_1_BSD_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_Jinja2_3_1_6_BSD_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_MarkupSafe_3_0_2_BSD_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_PyJWT_2_10_1_MIT_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_PyYAML_6_0_2_MIT_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_Pygments_2_19_2_BSD_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_SQLAlchemy_2_0_43_MIT.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_Sphinx_8_2_3_UNKNOWN.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_Werkzeug_3_1_1_BSD_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_absolufy-imports_0_3_1_MIT_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_aiohappyeyeballs_2_6_1_Python_Software_Foundation_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_aiohttp_3_12_15_Apache-2_0_AND_MIT.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_aiosignal_1_4_0_Apache_Software_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_alabaster_1_0_0_BSD_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_annotated-types_0_7_0_MIT_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_anyio_4_10_0_UNKNOWN.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_argcomplete_3_6_2_Apache_Software_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_async-timeout_5_0_1_Apache_Software_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_attrs_25_3_0_UNKNOWN.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_babel_2_17_0_BSD_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_backoff_2_2_1_MIT_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_backports_tarfile_1_2_0_MIT_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_cachetools_5_5_2_MIT_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_certifi_2025_8_3_Mozilla_Public_License_2_0-MPL_2_0.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_cffi_1_17_1_MIT_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_charset-normalizer_3_4_3_MIT.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_click_8_2_1_UNKNOWN.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_cloudpickle_3_1_1_BSD_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_colorama_0_4_6_BSD_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_cryptography_45_0_6_Apache-2_0_OR_BSD-3-Clause.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_cyclopts_3_22_5_Apache_Software_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_distro_1_9_0_Apache_Software_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_dnspython_2_7_0_ISC_License-ISCL.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_docstring_parser_0_17_0_MIT_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_docutils_0_21_2_BSD_License-GNU_General_Public_License-GPL-Public_Domain-Python_Software_Foundation_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_email_validator_2_2_0_The_Unlicense-Unlicense.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_exceptiongroup_1_3_0_MIT_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_fastapi-sso_0_18_0_MIT_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_fastapi_0_116_1_MIT_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_fastmcp_2_11_3_Apache_Software_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_filelock_3_18_0_The_Unlicense-Unlicense.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_frozenlist_1_7_0_Apache-2_0.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_fsspec_2025_7_0_BSD_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_gevent_25_5_1_MIT.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_google-adk_1_10_0_Apache_Software_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_google-api-core_2_25_1_Apache_Software_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_google-api-python-client_2_178_0_Apache_Software_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_google-auth-httplib2_0_2_0_Apache_Software_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_google-auth_2_40_3_Apache_Software_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_google-cloud-aiplatform_1_108_0_Apache_2_0.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_google-cloud-appengine-logging_1_6_2_Apache_Software_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_google-cloud-audit-log_0_3_2_Apache_Software_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_google-cloud-bigquery_3_35_1_Apache_Software_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_google-cloud-core_2_4_3_Apache_Software_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_google-cloud-logging_3_12_1_Apache_Software_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_google-cloud-resource-manager_1_14_2_Apache_Software_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_google-cloud-secret-manager_2_24_0_Apache_Software_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_google-cloud-speech_2_33_0_Apache_Software_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_google-cloud-storage_2_19_0_Apache_Software_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_google-cloud-trace_1_16_2_Apache_Software_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_google-crc32c_1_7_1_Apache_2_0.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_google-genai_1_29_0_Apache_Software_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_google-resumable-media_2_7_2_Apache_Software_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_googleapis-common-protos_1_70_0_Apache_Software_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_graphviz_0_21_UNKNOWN.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_greenlet_3_2_4_MIT_AND_Python-2_0.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_grpc-google-iam-v1_0_14_2_Apache_Software_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_grpcio-status_1_74_0_Apache_Software_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_grpcio_1_74_0_Apache_Software_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_gunicorn_23_0_0_MIT_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_h11_0_16_0_MIT_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_httpcore_1_0_9_BSD_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_httplib2_0_22_0_MIT_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_httpx-sse_0_4_1_MIT.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_httpx_0_28_1_BSD_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_huggingface-hub_0_34_4_Apache_Software_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_id_1_5_0_Apache_Software_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_idna_3_10_BSD_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_imagesize_1_4_1_MIT_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_importlib_metadata_8_7_0_Apache_Software_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_isodate_0_7_2_BSD_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_itsdangerous_2_2_0_BSD_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_jaraco_classes_3_4_0_MIT_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_jaraco_context_6_0_1_MIT_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_jaraco_functools_4_2_1_UNKNOWN.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_jiter_0_10_0_MIT_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_jsonschema-path_0_3_4_Apache_Software_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_jsonschema-specifications_2025_4_1_UNKNOWN.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_jsonschema_4_25_0_UNKNOWN.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_keyring_25_6_0_MIT_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_lazy-object-proxy_1_11_0_BSD_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_litellm-enterprise_0_1_19_UNKNOWN.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_litellm_1_75_5_post1_MIT_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_markdown-it-py_4_0_0_MIT_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_mcp_1_12_4_MIT_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_mdurl_0_1_2_MIT_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_more-itertools_10_7_0_MIT_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_multidict_6_6_4_Apache_License_2_0.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_nh3_0_3_0_MIT.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_numpy_2_3_2_BSD_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_oauthlib_3_3_1_BSD-3-Clause.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_openai_1_99_9_Apache_Software_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_openapi-core_0_19_5_BSD_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_openapi-pydantic_0_5_1_MIT_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_openapi-schema-validator_0_6_3_BSD_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_openapi-spec-validator_0_7_2_Apache_Software_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_opentelemetry-api_1_36_0_UNKNOWN.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_opentelemetry-exporter-gcp-trace_1_9_0_Apache_Software_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_opentelemetry-resourcedetector-gcp_1_9_0a0_Apache_Software_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_opentelemetry-sdk_1_36_0_UNKNOWN.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_opentelemetry-semantic-conventions_0_57b0_UNKNOWN.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_orjson_3_11_1_Apache_Software_License-MIT_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_packaging_25_0_Apache_Software_License-BSD_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_parse_1_20_2_MIT_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_pathable_0_4_4_Apache_Software_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_pillow_11_3_0_UNKNOWN.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_pip_24_0_MIT_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_plyer_2_1_0_MIT_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_prettytable_3_16_0_UNKNOWN.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_prompt_toolkit_3_0_51_BSD_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_propcache_0_3_2_Apache_Software_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_proto-plus_1_26_1_Apache_Software_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_protobuf_6_31_1_3-Clause_BSD_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_psycopg-binary_3_2_9_GNU_Lesser_General_Public_License_v3-LGPLv3.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_psycopg_3_2_9_GNU_Lesser_General_Public_License_v3-LGPLv3.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_pyasn1_0_6_1_BSD_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_pyasn1_modules_0_4_2_BSD_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_pycparser_2_22_BSD_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_pycryptodome_3_23_0_BSD_License-Public_Domain.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_pydantic-settings_2_10_1_MIT_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_pydantic_2_11_7_MIT_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_pydantic_core_2_33_2_MIT_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_pyparsing_3_2_3_MIT_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_pyperclip_1_9_0_BSD_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_pystray_0_19_5_GNU_Lesser_General_Public_License_v3-LGPLv3.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_python-dateutil_2_9_0_post0_Apache_Software_License-BSD_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_python-dotenv_1_1_1_BSD_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_python-multipart_0_0_20_Apache_Software_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_pywin32-ctypes_0_2_3_BSD-3-Clause.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_pywin32_311_Python_Software_Foundation_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_questionary_2_1_0_MIT_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_readme_renderer_44_0_Apache_Software_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_redis_6_4_0_MIT_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_referencing_0_36_2_UNKNOWN.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_regex_2025_7_34_UNKNOWN.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_requests-toolbelt_1_0_0_Apache_Software_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_requests_2_32_4_Apache_Software_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_rfc3339-validator_0_1_4_MIT_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_rfc3986_2_0_0_Apache_Software_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_rich-rst_1_3_1_MIT_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_rich_14_1_0_MIT_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_roman-numerals-py_3_1_0_CC0_1_0_Universal-CC0_1_0-Public_Domain_Dedication-Zero-Clause_BSD-0BSD.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_rpds-py_0_27_0_UNKNOWN.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_rsa_4_9_1_Apache_Software_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_setuptools_80_9_0_UNKNOWN.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_shapely_2_1_1_BSD_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_six_1_17_0_MIT_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_sniffio_1_3_1_Apache_Software_License-MIT_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_snowballstemmer_3_0_1_BSD_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_sphinx-intl_2_3_2_UNKNOWN.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_sphinx-last-updated-by-git_0_3_8_BSD_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_sphinx-rtd-theme_3_0_2_MIT_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_sphinx-sitemap_2_7_2_UNKNOWN.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_sphinx_fontawesome_0_0_6_GNU_General_Public_License_v2-GPLv2.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_sphinxcontrib-applehelp_2_0_0_BSD_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_sphinxcontrib-devhelp_2_0_0_BSD_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_sphinxcontrib-htmlhelp_2_1_0_BSD_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_sphinxcontrib-jquery_4_1_BSD_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_sphinxcontrib-jsmath_1_0_1_BSD_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_sphinxcontrib-qthelp_2_0_0_BSD_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_sphinxcontrib-serializinghtml_2_0_0_BSD_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_sse-starlette_3_0_2_UNKNOWN.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_starlette_0_47_2_BSD_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_tabulate_0_9_0_MIT_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_tenacity_9_1_2_Apache_Software_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_tiktoken_0_11_0_MIT_License-Copyright-c-2022_OpenAI-Shantanu_Jain-Permission_is_hereby_granted-free_of_charge-to_any_per.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_tokenizers_0_21_4_Apache_Software_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_tomli_2_2_1_MIT_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_tqdm_4_67_1_MIT_License-Mozilla_Public_License_2_0-MPL_2_0.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_twine_6_1_0_Apache_Software_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_typing-inspection_0_4_1_UNKNOWN.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_typing_extensions_4_14_1_UNKNOWN.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_tzdata_2025_2_Apache_Software_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_tzlocal_5_3_1_MIT_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_uritemplate_4_2_0_BSD_3-Clause_OR_Apache-2_0.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_urllib3_2_5_0_UNKNOWN.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_uvicorn_0_35_0_BSD_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_watchdog_6_0_0_Apache_Software_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_wcwidth_0_2_13_MIT_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_websockets_15_0_1_BSD_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_wheel_0_45_1_MIT_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_wsproto_1_2_0_MIT_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_yarl_1_20_1_Apache_Software_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_zipp_3_23_0_UNKNOWN.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_zope_event_5_1_1_Zope_Public_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/LICENSE_zope_interface_7_2_Zope_Public_License.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/licenses/files.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/logconf_cmdbox.yml +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/agent.html +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/assets/apexcharts/apexcharts.css +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/assets/apexcharts/apexcharts.min.js +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/assets/bootstrap/bootstrap.bundle.min.5.3.0.js +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/assets/bootstrap/bootstrap.min.5.3.0.css +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/assets/cmdbox/agent.js +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/assets/cmdbox/audit.js +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/assets/cmdbox/color_mode.css +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/assets/cmdbox/common.js +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/assets/cmdbox/favicon.ico +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/assets/cmdbox/filer_modal.js +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/assets/cmdbox/icon.png +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/assets/cmdbox/list_cmd.js +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/assets/cmdbox/list_pipe.js +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/assets/cmdbox/main.js +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/assets/cmdbox/open_capture.js +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/assets/cmdbox/open_output_json.js +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/assets/cmdbox/result.js +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/assets/cmdbox/signin.js +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/assets/cmdbox/svgicon.js +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/assets/cmdbox/users.js +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/assets/cmdbox/view_raw.js +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/assets/cmdbox/view_result.js +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/assets/encodingjs/LICENSE.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/assets/encodingjs/encoding.js +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/assets/encodingjs/encoding.min.js +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/assets/filer/filer.js +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/assets/filer/main.css +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/assets/filer/main.js +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/assets/highlight/default.css +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/assets/highlight/highlight.min.js +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/assets/highlight/styles/tokyo-night-dark.min.css +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/assets/jquery/jquery.min.3.2.0.js +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/assets/jquery-linedtextarea/README.md +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/assets/jquery-linedtextarea/jquery-linedtextarea-license.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/assets/jquery-linedtextarea/jquery-linedtextarea.css +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/assets/jquery-linedtextarea/jquery-linedtextarea.html +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/assets/jquery-linedtextarea/jquery-linedtextarea.js +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/assets/jquery-resizable/jquery-resizable.min.js +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/assets/jquery-ui/AUTHORS.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/assets/jquery-ui/LICENSE.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/assets/jquery-ui/images/ui-icons_444444_256x240.png +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/assets/jquery-ui/images/ui-icons_555555_256x240.png +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/assets/jquery-ui/images/ui-icons_777620_256x240.png +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/assets/jquery-ui/images/ui-icons_777777_256x240.png +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/assets/jquery-ui/images/ui-icons_cc0000_256x240.png +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/assets/jquery-ui/images/ui-icons_ffffff_256x240.png +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/assets/jquery-ui/jquery-ui.min.css +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/assets/jquery-ui/jquery-ui.min.js +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/assets/jquery-ui/jquery-ui.structure.min.css +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/assets/jquery-ui/jquery-ui.theme.min.css +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/assets/jquery-ui/package.json +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/assets/lightbox2/css/lightbox.min.css +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/assets/lightbox2/images/close.png +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/assets/lightbox2/images/loading.gif +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/assets/lightbox2/images/next.png +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/assets/lightbox2/images/prev.png +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/assets/lightbox2/js/lightbox.min.js +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/assets/split-pane/split-pane.css +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/assets/split-pane/split-pane.js +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/assets/tree-menu/css/tree-menu.css +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/assets/tree-menu/image/file.png +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/assets/tree-menu/image/folder-close.png +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/assets/tree-menu/image/folder-open.png +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/assets/tree-menu/js/tree-menu.js +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/assets_license_list.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/audit.html +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/filer.html +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/gui.html +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/result.html +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/signin.html +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox/web/users.html +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox.egg-info/dependency_links.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox.egg-info/entry_points.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox.egg-info/requires.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/cmdbox.egg-info/top_level.txt +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/setup.cfg +0 -0
- {cmdbox-0.6.4.1 → cmdbox-0.6.4.2}/setup.py +0 -0
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
from cmdbox import version
|
|
2
|
+
from cmdbox.app import common, client, feature
|
|
3
|
+
from cmdbox.app.commons import convert, redis_client
|
|
4
|
+
from cmdbox.app.options import Options
|
|
5
|
+
from cmdbox.app.features.cli import cmdbox_vision_start
|
|
6
|
+
from pathlib import Path
|
|
7
|
+
from typing import Dict, Any, Tuple, List, Union
|
|
8
|
+
import argparse
|
|
9
|
+
import glob
|
|
10
|
+
import logging
|
|
11
|
+
import pip
|
|
12
|
+
import requests
|
|
13
|
+
import shutil
|
|
14
|
+
import subprocess
|
|
15
|
+
import sys
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class VisionInstall(cmdbox_vision_start.VisionStart):
|
|
19
|
+
def get_mode(self) -> Union[str, List[str]]:
|
|
20
|
+
"""
|
|
21
|
+
この機能のモードを返します
|
|
22
|
+
|
|
23
|
+
Returns:
|
|
24
|
+
Union[str, List[str]]: モード
|
|
25
|
+
"""
|
|
26
|
+
return 'vision'
|
|
27
|
+
|
|
28
|
+
def get_cmd(self):
|
|
29
|
+
"""
|
|
30
|
+
この機能のコマンドを返します
|
|
31
|
+
|
|
32
|
+
Returns:
|
|
33
|
+
str: コマンド
|
|
34
|
+
"""
|
|
35
|
+
return 'install'
|
|
36
|
+
|
|
37
|
+
def get_option(self):
|
|
38
|
+
"""
|
|
39
|
+
この機能のオプションを返します
|
|
40
|
+
|
|
41
|
+
Returns:
|
|
42
|
+
Dict[str, Any]: オプション
|
|
43
|
+
"""
|
|
44
|
+
return dict(
|
|
45
|
+
use_redis=self.USE_REDIS_MEIGHT, nouse_webmode=True, use_agent=False,
|
|
46
|
+
description_ja="画像/動画の推論エンジンをインストールします。",
|
|
47
|
+
description_en="Installs the image/video inference engine.",
|
|
48
|
+
choice=[
|
|
49
|
+
dict(opt="host", type=Options.T_STR, default=self.default_host, required=True, multi=False, hide=True, choice=None, web="mask",
|
|
50
|
+
description_ja="Redisサーバーのサービスホストを指定します。",
|
|
51
|
+
description_en="Specify the service host of the Redis server."),
|
|
52
|
+
dict(opt="port", type=Options.T_INT, default=self.default_port, required=True, multi=False, hide=True, choice=None, web="mask",
|
|
53
|
+
description_ja="Redisサーバーのサービスポートを指定します。",
|
|
54
|
+
description_en="Specify the service port of the Redis server."),
|
|
55
|
+
dict(opt="password", type=Options.T_STR, default=self.default_pass, required=True, multi=False, hide=True, choice=None, web="mask",
|
|
56
|
+
description_ja=f"Redisサーバーのアクセスパスワード(任意)を指定します。省略時は `{self.default_pass}` を使用します。",
|
|
57
|
+
description_en=f"Specify the access password of the Redis server (optional). If omitted, `{self.default_pass}` is used."),
|
|
58
|
+
dict(opt="svname", type=Options.T_STR, default=self.default_svname, required=True, multi=False, hide=True, choice=None, web="readonly",
|
|
59
|
+
description_ja="サーバーのサービス名を指定します。省略時は `server` を使用します。",
|
|
60
|
+
description_en="Specify the service name of the inference server. If omitted, `server` is used."),
|
|
61
|
+
dict(opt="retry_count", type=Options.T_INT, default=3, required=False, multi=False, hide=True, choice=None,
|
|
62
|
+
description_ja="Redisサーバーへの再接続回数を指定します。0以下を指定すると永遠に再接続を行います。",
|
|
63
|
+
description_en="Specifies the number of reconnections to the Redis server.If less than 0 is specified, reconnection is forever."),
|
|
64
|
+
dict(opt="retry_interval", type=Options.T_INT, default=5, required=False, multi=False, hide=True, choice=None,
|
|
65
|
+
description_ja="Redisサーバーに再接続までの秒数を指定します。",
|
|
66
|
+
description_en="Specifies the number of seconds before reconnecting to the Redis server."),
|
|
67
|
+
dict(opt="timeout", type=Options.T_INT, default="300", required=False, multi=False, hide=True, choice=None,
|
|
68
|
+
description_ja="サーバーの応答が返ってくるまでの最大待ち時間を指定。",
|
|
69
|
+
description_en="Specify the maximum waiting time until the server responds."),
|
|
70
|
+
dict(opt="client_only", type=Options.T_BOOL, default=False, required=False, multi=False, hide=True, choice=[True, False],
|
|
71
|
+
description_ja="サーバーへの接続を行わないようにします。",
|
|
72
|
+
description_en="Do not make connections to the server."),
|
|
73
|
+
dict(opt="vision_engine", type=Options.T_STR, default="sam2", required=True, multi=False, hide=False,
|
|
74
|
+
choice=["sam2"],
|
|
75
|
+
description_ja="使用するVisionエンジンを指定します。",
|
|
76
|
+
description_en="Specify the Vision engine to use."),
|
|
77
|
+
]
|
|
78
|
+
)
|
|
79
|
+
|
|
80
|
+
def get_svcmd(self):
|
|
81
|
+
"""
|
|
82
|
+
この機能のサーバー側のコマンドを返します
|
|
83
|
+
|
|
84
|
+
Returns:
|
|
85
|
+
str: サーバー側のコマンド
|
|
86
|
+
"""
|
|
87
|
+
return 'vision_install'
|
|
88
|
+
|
|
89
|
+
def apprun(self, logger:logging.Logger, args:argparse.Namespace, tm:float, pf:List[Dict[str, float]]=[]) -> Tuple[int, Dict[str, Any], Any]:
|
|
90
|
+
"""
|
|
91
|
+
この機能の実行を行います
|
|
92
|
+
|
|
93
|
+
Args:
|
|
94
|
+
logger (logging.Logger): ロガー
|
|
95
|
+
args (argparse.Namespace): 引数
|
|
96
|
+
tm (float): 実行開始時間
|
|
97
|
+
pf (List[Dict[str, float]]): 呼出元のパフォーマンス情報
|
|
98
|
+
|
|
99
|
+
Returns:
|
|
100
|
+
Tuple[int, Dict[str, Any], Any]: 終了コード, 結果, オブジェクト
|
|
101
|
+
"""
|
|
102
|
+
if args.vision_engine is None:
|
|
103
|
+
msg = dict(warn=f"Please specify the --vision_engine option.")
|
|
104
|
+
common.print_format(msg, False, tm, args.output_json, args.output_json_append, pf=pf)
|
|
105
|
+
return self.RESP_WARN, msg, None
|
|
106
|
+
if args.vision_engine == 'sam2':
|
|
107
|
+
vision_engine_b64 = convert.str2b64str(args.vision_engine)
|
|
108
|
+
if args.client_only:
|
|
109
|
+
# クライアントのみの場合は、サーバーに接続せずに実行
|
|
110
|
+
ret = self.install(common.random_string(), args.vision_engine, logger)
|
|
111
|
+
else:
|
|
112
|
+
cl = client.Client(logger, redis_host=args.host, redis_port=args.port, redis_password=args.password, svname=args.svname)
|
|
113
|
+
ret = cl.redis_cli.send_cmd(self.get_svcmd(), [vision_engine_b64],
|
|
114
|
+
retry_count=args.retry_count, retry_interval=args.retry_interval, timeout=args.timeout, nowait=False)
|
|
115
|
+
common.print_format(ret, False, tm, None, False, pf=pf)
|
|
116
|
+
if 'success' not in ret:
|
|
117
|
+
return self.RESP_WARN, ret, None
|
|
118
|
+
return self.RESP_SUCCESS, ret, None
|
|
119
|
+
|
|
120
|
+
msg = dict(warn=f"Unsupported vision engine: {args.vision_engine}")
|
|
121
|
+
common.print_format(msg, False, tm, args.output_json, args.output_json_append, pf=pf)
|
|
122
|
+
return self.RESP_WARN, msg, None
|
|
123
|
+
|
|
124
|
+
def is_cluster_redirect(self):
|
|
125
|
+
"""
|
|
126
|
+
クラスター宛のメッセージの場合、メッセージを転送するかどうかを返します
|
|
127
|
+
|
|
128
|
+
Returns:
|
|
129
|
+
bool: メッセージを転送する場合はTrue
|
|
130
|
+
"""
|
|
131
|
+
return False
|
|
132
|
+
|
|
133
|
+
def svrun(self, data_dir:Path, logger:logging.Logger, redis_cli:redis_client.RedisClient, msg:List[str],
|
|
134
|
+
sessions:Dict[str, Dict[str, Any]]) -> int:
|
|
135
|
+
"""
|
|
136
|
+
この機能のサーバー側の実行を行います
|
|
137
|
+
|
|
138
|
+
Args:
|
|
139
|
+
data_dir (Path): データディレクトリ
|
|
140
|
+
logger (logging.Logger): ロガー
|
|
141
|
+
redis_cli (redis_client.RedisClient): Redisクライアント
|
|
142
|
+
msg (List[str]): 受信メッセージ
|
|
143
|
+
sessions (Dict[str, Dict[str, Any]]): セッション情報
|
|
144
|
+
|
|
145
|
+
Returns:
|
|
146
|
+
int: 終了コード
|
|
147
|
+
"""
|
|
148
|
+
if logger.level == logging.DEBUG:
|
|
149
|
+
logger.debug(f"audit write svrun msg: {msg}")
|
|
150
|
+
vision_engine = convert.b64str2str(msg[2])
|
|
151
|
+
ret = self.install(msg[1], vision_engine, logger)
|
|
152
|
+
|
|
153
|
+
if 'success' not in ret:
|
|
154
|
+
redis_cli.rpush(msg[1], ret)
|
|
155
|
+
return self.RESP_WARN
|
|
156
|
+
return self.RESP_SUCCESS
|
|
157
|
+
|
|
158
|
+
def install(self, reskey:str, vision_engine:str, logger:logging.Logger) -> Dict[str, Any]:
|
|
159
|
+
"""
|
|
160
|
+
SAML2をインストールします
|
|
161
|
+
|
|
162
|
+
Args:
|
|
163
|
+
reskey (str): レスポンスキー
|
|
164
|
+
vision_engine (str): Visionエンジン
|
|
165
|
+
logger (logging.Logger): ロガー
|
|
166
|
+
|
|
167
|
+
Returns:
|
|
168
|
+
Dict[str, Any]: 結果
|
|
169
|
+
"""
|
|
170
|
+
try:
|
|
171
|
+
if vision_engine == 'sam2':
|
|
172
|
+
#===============================================================
|
|
173
|
+
# SAM2のモデルファイルのダウンロード
|
|
174
|
+
sam2_dir = Path(version.__file__).parent / '.sam2' / 'model'
|
|
175
|
+
# すでにダウンローダーが存在する場合は削除
|
|
176
|
+
if sam2_dir.exists():
|
|
177
|
+
shutil.rmtree(sam2_dir)
|
|
178
|
+
for mk, mv in self.VISION_MODEL.items():
|
|
179
|
+
model_file = sam2_dir / mv['path']
|
|
180
|
+
model_file.parent.mkdir(parents=True, exist_ok=True)
|
|
181
|
+
# モデルファイルを保存
|
|
182
|
+
logger.info(f"Downloading.. : {mv['url']}")
|
|
183
|
+
responce = requests.get(f"{mv['url']}", allow_redirects=True)
|
|
184
|
+
if responce.status_code != 200:
|
|
185
|
+
_msg = f"Failed to download SAM2 model: {responce.status_code} {responce.reason}. {mv['url']}"
|
|
186
|
+
logger.error(_msg, exc_info=True)
|
|
187
|
+
return dict(warn=_msg)
|
|
188
|
+
with open(model_file, mode='wb') as f:
|
|
189
|
+
f.write(responce.content)
|
|
190
|
+
#===============================================================
|
|
191
|
+
# SAM2のpythonライブラリのインストール
|
|
192
|
+
whl_url = f'git+https://github.com/facebookresearch/sam2.git'
|
|
193
|
+
# whlファイルをpipでインストール
|
|
194
|
+
if logger.level == logging.DEBUG:
|
|
195
|
+
logger.debug(f"pip install {whl_url}")
|
|
196
|
+
rescode = pip.main(['install', str(whl_url)]) # pipのインストール
|
|
197
|
+
logger.info(f"Install wheel: {whl_url}")
|
|
198
|
+
if rescode != 0:
|
|
199
|
+
_msg = f"Failed to install SAM2 python library: Possible whl not in the environment. {whl_url}"
|
|
200
|
+
logger.error(_msg, exc_info=True)
|
|
201
|
+
return dict(warn=_msg)
|
|
202
|
+
#===============================================================
|
|
203
|
+
# 成功時の処理
|
|
204
|
+
rescode, _msg = (self.RESP_SUCCESS, dict(success=f'Success to install SAM2 python library. {whl_url}'))
|
|
205
|
+
return dict(success=_msg)
|
|
206
|
+
else:
|
|
207
|
+
_msg = f"Unsupported vision engine: {vision_engine}"
|
|
208
|
+
logger.error(_msg, exc_info=True)
|
|
209
|
+
return dict(warn=_msg)
|
|
210
|
+
except Exception as e:
|
|
211
|
+
_msg = f"Failed to install vision engine: {e}"
|
|
212
|
+
logger.warning(_msg, exc_info=True)
|
|
213
|
+
return dict(warn=_msg)
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
from cmdbox import version
|
|
2
|
+
from cmdbox.app import common, client, feature
|
|
3
|
+
from cmdbox.app.commons import convert, redis_client
|
|
4
|
+
from cmdbox.app.features.cli import cmdbox_vision_start
|
|
5
|
+
from cmdbox.app.options import Options
|
|
6
|
+
from pathlib import Path
|
|
7
|
+
from typing import Dict, Any, Tuple, List, Union
|
|
8
|
+
import argparse
|
|
9
|
+
import logging
|
|
10
|
+
import json
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class VisionPredict(cmdbox_vision_start.VisionStart):
|
|
14
|
+
|
|
15
|
+
def get_mode(self) -> Union[str, List[str]]:
|
|
16
|
+
"""
|
|
17
|
+
この機能のモードを返します
|
|
18
|
+
|
|
19
|
+
Returns:
|
|
20
|
+
Union[str, List[str]]: モード
|
|
21
|
+
"""
|
|
22
|
+
return 'vision'
|
|
23
|
+
|
|
24
|
+
def get_cmd(self):
|
|
25
|
+
"""
|
|
26
|
+
この機能のコマンドを返します
|
|
27
|
+
|
|
28
|
+
Returns:
|
|
29
|
+
str: コマンド
|
|
30
|
+
"""
|
|
31
|
+
return 'predict'
|
|
32
|
+
|
|
33
|
+
def get_option(self):
|
|
34
|
+
"""
|
|
35
|
+
この機能のオプションを返します
|
|
36
|
+
|
|
37
|
+
Returns:
|
|
38
|
+
Dict[str, Any]: オプション
|
|
39
|
+
"""
|
|
40
|
+
return dict(
|
|
41
|
+
use_redis=self.USE_REDIS_MEIGHT, nouse_webmode=False, use_agent=True,
|
|
42
|
+
description_ja="画像/動画の推論を実行します。",
|
|
43
|
+
description_en="Executes inference on images/videos.",
|
|
44
|
+
choice=[
|
|
45
|
+
dict(opt="host", type=Options.T_STR, default=self.default_host, required=True, multi=False, hide=True, choice=None, web="mask",
|
|
46
|
+
description_ja="Redisサーバーのサービスホストを指定します。",
|
|
47
|
+
description_en="Specify the service host of the Redis server."),
|
|
48
|
+
dict(opt="port", type=Options.T_INT, default=self.default_port, required=True, multi=False, hide=True, choice=None, web="mask",
|
|
49
|
+
description_ja="Redisサーバーのサービスポートを指定します。",
|
|
50
|
+
description_en="Specify the service port of the Redis server."),
|
|
51
|
+
dict(opt="password", type=Options.T_STR, default=self.default_pass, required=True, multi=False, hide=True, choice=None, web="mask",
|
|
52
|
+
description_ja=f"Redisサーバーのアクセスパスワード(任意)を指定します。省略時は `{self.default_pass}` を使用します。",
|
|
53
|
+
description_en=f"Specify the access password of the Redis server (optional). If omitted, `{self.default_pass}` is used."),
|
|
54
|
+
dict(opt="svname", type=Options.T_STR, default=self.default_svname, required=True, multi=False, hide=True, choice=None, web="readonly",
|
|
55
|
+
description_ja="サーバーのサービス名を指定します。省略時は `server` を使用します。",
|
|
56
|
+
description_en="Specify the service name of the inference server. If omitted, `server` is used."),
|
|
57
|
+
dict(opt="retry_count", type=Options.T_INT, default=3, required=False, multi=False, hide=True, choice=None,
|
|
58
|
+
description_ja="Redisサーバーへの再接続回数を指定します。0以下を指定すると永遠に再接続を行います。",
|
|
59
|
+
description_en="Specifies the number of reconnections to the Redis server.If less than 0 is specified, reconnection is forever."),
|
|
60
|
+
dict(opt="retry_interval", type=Options.T_INT, default=5, required=False, multi=False, hide=True, choice=None,
|
|
61
|
+
description_ja="Redisサーバーに再接続までの秒数を指定します。",
|
|
62
|
+
description_en="Specifies the number of seconds before reconnecting to the Redis server."),
|
|
63
|
+
dict(opt="timeout", type=Options.T_INT, default="60", required=False, multi=False, hide=True, choice=None,
|
|
64
|
+
description_ja="サーバーの応答が返ってくるまでの最大待ち時間を指定。",
|
|
65
|
+
description_en="Specify the maximum waiting time until the server responds."),
|
|
66
|
+
dict(opt="vision_engine", type=Options.T_STR, default="sam2", required=True, multi=False, hide=False,
|
|
67
|
+
choice=["sam2"],
|
|
68
|
+
choice_show=dict(sam2=["sam2_model", "sam2_point"]),
|
|
69
|
+
description_ja="使用するVisionエンジンを指定します。",
|
|
70
|
+
description_en="Specify the Vision engine to use."),
|
|
71
|
+
dict(opt="sam2_model", type=Options.T_STR, default="092824/sam2.1_hiera_tiny.pt", required=True, multi=False, hide=False,
|
|
72
|
+
choice=[k for k in self.VISION_MODEL.keys() if self.VISION_MODEL[k]['type'] == 'sam2'],
|
|
73
|
+
choice_edit=True,
|
|
74
|
+
description_ja="使用するSAM2モデルを指定します。",
|
|
75
|
+
description_en="Specify the SAM2 model to use."),
|
|
76
|
+
dict(opt="sam2_point", type=Options.T_STR, default=None, required=True, multi=True, hide=False, choice=None,
|
|
77
|
+
description_ja="使用するSAM2モデルのポイントを指定します。 `x,y` の形式で指定してください。",
|
|
78
|
+
description_en="Specify the SAM2 model points to use. Please specify in the format `x,y`."),
|
|
79
|
+
]
|
|
80
|
+
)
|
|
81
|
+
|
|
82
|
+
def get_svcmd(self):
|
|
83
|
+
"""
|
|
84
|
+
この機能のサーバー側のコマンドを返します
|
|
85
|
+
|
|
86
|
+
Returns:
|
|
87
|
+
str: サーバー側のコマンド
|
|
88
|
+
"""
|
|
89
|
+
return 'vision_predict'
|
|
90
|
+
|
|
91
|
+
def apprun(self, logger:logging.Logger, args:argparse.Namespace, tm:float, pf:List[Dict[str, float]]=[]) -> Tuple[int, Dict[str, Any], Any]:
|
|
92
|
+
"""
|
|
93
|
+
この機能の実行を行います
|
|
94
|
+
|
|
95
|
+
Args:
|
|
96
|
+
logger (logging.Logger): ロガー
|
|
97
|
+
args (argparse.Namespace): 引数
|
|
98
|
+
tm (float): 実行開始時間
|
|
99
|
+
pf (List[Dict[str, float]]): 呼出元のパフォーマンス情報
|
|
100
|
+
|
|
101
|
+
Returns:
|
|
102
|
+
Tuple[int, Dict[str, Any], Any]: 終了コード, 結果, オブジェクト
|
|
103
|
+
"""
|
|
104
|
+
if args.vision_engine is None:
|
|
105
|
+
msg = dict(warn=f"Please specify the --vision_engine option.")
|
|
106
|
+
common.print_format(msg, False, tm, args.output_json, args.output_json_append, pf=pf)
|
|
107
|
+
return self.RESP_WARN, msg, None
|
|
108
|
+
if args.vision_engine == 'sam2':
|
|
109
|
+
if args.sam2_model is None:
|
|
110
|
+
msg = dict(warn=f"Please specify the --sam2_model option.")
|
|
111
|
+
common.print_format(msg, False, tm, args.output_json, args.output_json_append, pf=pf)
|
|
112
|
+
return self.RESP_WARN, msg, None
|
|
113
|
+
|
|
114
|
+
vision_engine_b64 = convert.str2b64str(args.vision_engine)
|
|
115
|
+
sam2_model_b64 = convert.str2b64str(args.sam2_model)
|
|
116
|
+
sam2_point_b64 = convert.str2b64str(common.to_str(args.sam2_point))
|
|
117
|
+
|
|
118
|
+
cl = client.Client(logger, redis_host=args.host, redis_port=args.port, redis_password=args.password, svname=args.svname)
|
|
119
|
+
ret = cl.redis_cli.send_cmd(self.get_svcmd(),
|
|
120
|
+
[vision_engine_b64, sam2_model_b64, sam2_point_b64],
|
|
121
|
+
retry_count=args.retry_count, retry_interval=args.retry_interval, timeout=args.timeout, nowait=False)
|
|
122
|
+
common.print_format(ret, False, tm, None, False, pf=pf)
|
|
123
|
+
if 'success' not in ret:
|
|
124
|
+
return self.RESP_WARN, ret, cl
|
|
125
|
+
return self.RESP_SUCCESS, ret, cl
|
|
126
|
+
|
|
127
|
+
msg = dict(warn=f"Unsupported vision engine: {args.vision_engine}")
|
|
128
|
+
common.print_format(msg, False, tm, args.output_json, args.output_json_append, pf=pf)
|
|
129
|
+
return self.RESP_WARN, msg, None
|
|
130
|
+
|
|
131
|
+
def is_cluster_redirect(self):
|
|
132
|
+
"""
|
|
133
|
+
クラスター宛のメッセージの場合、メッセージを転送するかどうかを返します
|
|
134
|
+
|
|
135
|
+
Returns:
|
|
136
|
+
bool: メッセージを転送する場合はTrue
|
|
137
|
+
"""
|
|
138
|
+
return False
|
|
139
|
+
|
|
140
|
+
def svrun(self, data_dir:Path, logger:logging.Logger, redis_cli:redis_client.RedisClient, msg:List[str],
|
|
141
|
+
sessions:Dict[str, Dict[str, Any]]) -> int:
|
|
142
|
+
"""
|
|
143
|
+
この機能のサーバー側の実行を行います
|
|
144
|
+
|
|
145
|
+
Args:
|
|
146
|
+
data_dir (Path): データディレクトリ
|
|
147
|
+
logger (logging.Logger): ロガー
|
|
148
|
+
redis_cli (redis_client.RedisClient): Redisクライアント
|
|
149
|
+
msg (List[str]): 受信メッセージ
|
|
150
|
+
sessions (Dict[str, Dict[str, Any]]): セッション情報
|
|
151
|
+
|
|
152
|
+
Returns:
|
|
153
|
+
int: 終了コード
|
|
154
|
+
"""
|
|
155
|
+
if logger.level == logging.DEBUG:
|
|
156
|
+
logger.debug(f"audit write svrun msg: {msg}")
|
|
157
|
+
vision_engine = convert.b64str2str(msg[2])
|
|
158
|
+
sam2_model = convert.b64str2str(msg[3])
|
|
159
|
+
sam2_point = json.loads(convert.b64str2str(msg[4]))
|
|
160
|
+
st = self.predict(msg[1], vision_engine, sam2_model, sam2_point, data_dir, logger, redis_cli, sessions)
|
|
161
|
+
return st
|
|
162
|
+
|
|
163
|
+
def predict(self, reskey:str, vision_engine:str, sam2_model:str, sam2_point:List[List[int]], data_dir:Path, logger:logging.Logger,
|
|
164
|
+
redis_cli:redis_client.RedisClient, sessions:Dict[str, Dict[str, Any]]) -> int:
|
|
165
|
+
"""
|
|
166
|
+
SAM2のモデルを使用して指定したポイントのマスクを取得します
|
|
167
|
+
|
|
168
|
+
Args:
|
|
169
|
+
reskey (str): レスポンスキー
|
|
170
|
+
vision_engine (str): Visionエンジン
|
|
171
|
+
sam2_model (str): SAM2モデル
|
|
172
|
+
sam2_point (List[List[int,int]]): SAM2モデルのポイント
|
|
173
|
+
data_dir (Path): データディレクトリ
|
|
174
|
+
logger (logging.Logger): ロガー
|
|
175
|
+
redis_cli (redis_client.RedisClient): Redisクライアント
|
|
176
|
+
sessions (Dict[str, Dict[str, Any]]): セッション情報
|
|
177
|
+
|
|
178
|
+
Returns:
|
|
179
|
+
int: レスポンスコード
|
|
180
|
+
"""
|
|
181
|
+
try:
|
|
182
|
+
if vision_engine == 'sam2':
|
|
183
|
+
raise NotImplementedError("SAM2 model is not implemented yet.")
|
|
184
|
+
else:
|
|
185
|
+
logger.warning(f"Unsupported vision engine: {vision_engine}")
|
|
186
|
+
redis_cli.rpush(reskey, dict(warn=f"Unsupported vision engine: {vision_engine}"))
|
|
187
|
+
return self.RESP_WARN
|
|
188
|
+
|
|
189
|
+
except Exception as e:
|
|
190
|
+
logger.warning(f"Failed to start: {e}", exc_info=True)
|
|
191
|
+
redis_cli.rpush(reskey, dict(warn=f"Failed to start: {e}"))
|
|
192
|
+
return self.RESP_WARN
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
from cmdbox import version
|
|
2
|
+
from cmdbox.app import common, client, feature
|
|
3
|
+
from cmdbox.app.commons import convert, redis_client
|
|
4
|
+
from cmdbox.app.options import Options
|
|
5
|
+
from pathlib import Path
|
|
6
|
+
from typing import Dict, Any, Tuple, List, Union
|
|
7
|
+
import argparse
|
|
8
|
+
import logging
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class VisionStart(feature.UnsupportEdgeFeature):
|
|
12
|
+
VISION_MODEL = dict()
|
|
13
|
+
VISION_MODEL['092824/sam2.1_hiera_tiny'] = dict(type='sam2',
|
|
14
|
+
path='092824/sam2.1_hiera_tiny.pt',
|
|
15
|
+
conf='configs/sam2.1/sam2.1_hiera_t.yaml',
|
|
16
|
+
url='https://dl.fbaipublicfiles.com/segment_anything_2/092824/sam2.1_hiera_tiny.pt')
|
|
17
|
+
VISION_MODEL['092824/sam2.1_hiera_small'] = dict(type='sam2',
|
|
18
|
+
path='092824/sam2.1_hiera_small.pt',
|
|
19
|
+
conf='configs/sam2.1/sam2.1_hiera_s.yaml',
|
|
20
|
+
url='https://dl.fbaipublicfiles.com/segment_anything_2/092824/sam2.1_hiera_small.pt')
|
|
21
|
+
VISION_MODEL['092824/sam2.1_hiera_base_plus'] = dict(type='sam2',
|
|
22
|
+
path='092824/sam2.1_hiera_base_plus.pt',
|
|
23
|
+
conf='configs/sam2.1/sam2.1_hiera_b+.yaml',
|
|
24
|
+
url='https://dl.fbaipublicfiles.com/segment_anything_2/092824/sam2.1_hiera_base_plus.pt')
|
|
25
|
+
VISION_MODEL['092824/sam2.1_hiera_large'] = dict(type='sam2',
|
|
26
|
+
path='092824/sam2.1_hiera_large.pt',
|
|
27
|
+
conf='configs/sam2.1/sam2.1_hiera_l.yaml',
|
|
28
|
+
url='https://dl.fbaipublicfiles.com/segment_anything_2/092824/sam2.1_hiera_large.pt')
|
|
29
|
+
|
|
30
|
+
def get_mode(self) -> Union[str, List[str]]:
|
|
31
|
+
"""
|
|
32
|
+
この機能のモードを返します
|
|
33
|
+
|
|
34
|
+
Returns:
|
|
35
|
+
Union[str, List[str]]: モード
|
|
36
|
+
"""
|
|
37
|
+
return 'vision'
|
|
38
|
+
|
|
39
|
+
def get_cmd(self):
|
|
40
|
+
"""
|
|
41
|
+
この機能のコマンドを返します
|
|
42
|
+
|
|
43
|
+
Returns:
|
|
44
|
+
str: コマンド
|
|
45
|
+
"""
|
|
46
|
+
return 'start'
|
|
47
|
+
|
|
48
|
+
def get_option(self):
|
|
49
|
+
"""
|
|
50
|
+
この機能のオプションを返します
|
|
51
|
+
|
|
52
|
+
Returns:
|
|
53
|
+
Dict[str, Any]: オプション
|
|
54
|
+
"""
|
|
55
|
+
return dict(
|
|
56
|
+
use_redis=self.USE_REDIS_MEIGHT, nouse_webmode=False, use_agent=True,
|
|
57
|
+
description_ja="画像/動画の推論を開始します。",
|
|
58
|
+
description_en="Starts inference on images/videos.",
|
|
59
|
+
choice=[
|
|
60
|
+
dict(opt="host", type=Options.T_STR, default=self.default_host, required=True, multi=False, hide=True, choice=None, web="mask",
|
|
61
|
+
description_ja="Redisサーバーのサービスホストを指定します。",
|
|
62
|
+
description_en="Specify the service host of the Redis server."),
|
|
63
|
+
dict(opt="port", type=Options.T_INT, default=self.default_port, required=True, multi=False, hide=True, choice=None, web="mask",
|
|
64
|
+
description_ja="Redisサーバーのサービスポートを指定します。",
|
|
65
|
+
description_en="Specify the service port of the Redis server."),
|
|
66
|
+
dict(opt="password", type=Options.T_STR, default=self.default_pass, required=True, multi=False, hide=True, choice=None, web="mask",
|
|
67
|
+
description_ja=f"Redisサーバーのアクセスパスワード(任意)を指定します。省略時は `{self.default_pass}` を使用します。",
|
|
68
|
+
description_en=f"Specify the access password of the Redis server (optional). If omitted, `{self.default_pass}` is used."),
|
|
69
|
+
dict(opt="svname", type=Options.T_STR, default=self.default_svname, required=True, multi=False, hide=True, choice=None, web="readonly",
|
|
70
|
+
description_ja="サーバーのサービス名を指定します。省略時は `server` を使用します。",
|
|
71
|
+
description_en="Specify the service name of the inference server. If omitted, `server` is used."),
|
|
72
|
+
dict(opt="retry_count", type=Options.T_INT, default=3, required=False, multi=False, hide=True, choice=None,
|
|
73
|
+
description_ja="Redisサーバーへの再接続回数を指定します。0以下を指定すると永遠に再接続を行います。",
|
|
74
|
+
description_en="Specifies the number of reconnections to the Redis server.If less than 0 is specified, reconnection is forever."),
|
|
75
|
+
dict(opt="retry_interval", type=Options.T_INT, default=5, required=False, multi=False, hide=True, choice=None,
|
|
76
|
+
description_ja="Redisサーバーに再接続までの秒数を指定します。",
|
|
77
|
+
description_en="Specifies the number of seconds before reconnecting to the Redis server."),
|
|
78
|
+
dict(opt="timeout", type=Options.T_INT, default="60", required=False, multi=False, hide=True, choice=None,
|
|
79
|
+
description_ja="サーバーの応答が返ってくるまでの最大待ち時間を指定。",
|
|
80
|
+
description_en="Specify the maximum waiting time until the server responds."),
|
|
81
|
+
dict(opt="vision_engine", type=Options.T_STR, default="sam2", required=True, multi=False, hide=False,
|
|
82
|
+
choice=["sam2"],
|
|
83
|
+
choice_show=dict(sam2=["sam2_model"]),
|
|
84
|
+
description_ja="使用するVisionエンジンを指定します。",
|
|
85
|
+
description_en="Specify the Vision engine to use."),
|
|
86
|
+
dict(opt="sam2_model", type=Options.T_STR, default="092824/sam2.1_hiera_tiny.pt", required=True, multi=False, hide=False,
|
|
87
|
+
choice=[k for k in self.VISION_MODEL.keys() if self.VISION_MODEL[k]['type'] == 'sam2'],
|
|
88
|
+
choice_edit=True,
|
|
89
|
+
description_ja="使用するSAM2モデルを指定します。",
|
|
90
|
+
description_en="Specify the SAM2 model to use."),
|
|
91
|
+
]
|
|
92
|
+
)
|
|
93
|
+
|
|
94
|
+
def get_svcmd(self):
|
|
95
|
+
"""
|
|
96
|
+
この機能のサーバー側のコマンドを返します
|
|
97
|
+
|
|
98
|
+
Returns:
|
|
99
|
+
str: サーバー側のコマンド
|
|
100
|
+
"""
|
|
101
|
+
return 'vision_start'
|
|
102
|
+
|
|
103
|
+
def apprun(self, logger:logging.Logger, args:argparse.Namespace, tm:float, pf:List[Dict[str, float]]=[]) -> Tuple[int, Dict[str, Any], Any]:
|
|
104
|
+
"""
|
|
105
|
+
この機能の実行を行います
|
|
106
|
+
|
|
107
|
+
Args:
|
|
108
|
+
logger (logging.Logger): ロガー
|
|
109
|
+
args (argparse.Namespace): 引数
|
|
110
|
+
tm (float): 実行開始時間
|
|
111
|
+
pf (List[Dict[str, float]]): 呼出元のパフォーマンス情報
|
|
112
|
+
|
|
113
|
+
Returns:
|
|
114
|
+
Tuple[int, Dict[str, Any], Any]: 終了コード, 結果, オブジェクト
|
|
115
|
+
"""
|
|
116
|
+
if args.vision_engine is None:
|
|
117
|
+
msg = dict(warn=f"Please specify the --vision_engine option.")
|
|
118
|
+
common.print_format(msg, False, tm, args.output_json, args.output_json_append, pf=pf)
|
|
119
|
+
return self.RESP_WARN, msg, None
|
|
120
|
+
if args.vision_engine == 'sam2':
|
|
121
|
+
if args.sam2_model is None:
|
|
122
|
+
msg = dict(warn=f"Please specify the --sam2_model option.")
|
|
123
|
+
common.print_format(msg, False, tm, args.output_json, args.output_json_append, pf=pf)
|
|
124
|
+
return self.RESP_WARN, msg, None
|
|
125
|
+
|
|
126
|
+
vision_engine_b64 = convert.str2b64str(args.vision_engine)
|
|
127
|
+
sam2_model_b64 = convert.str2b64str(args.sam2_model)
|
|
128
|
+
cl = client.Client(logger, redis_host=args.host, redis_port=args.port, redis_password=args.password, svname=args.svname)
|
|
129
|
+
ret = cl.redis_cli.send_cmd(self.get_svcmd(),
|
|
130
|
+
[vision_engine_b64, sam2_model_b64],
|
|
131
|
+
retry_count=args.retry_count, retry_interval=args.retry_interval, timeout=args.timeout, nowait=False)
|
|
132
|
+
common.print_format(ret, False, tm, None, False, pf=pf)
|
|
133
|
+
if 'success' not in ret:
|
|
134
|
+
return self.RESP_WARN, ret, cl
|
|
135
|
+
return self.RESP_SUCCESS, ret, cl
|
|
136
|
+
|
|
137
|
+
msg = dict(warn=f"Unsupported vision engine: {args.vision_engine}")
|
|
138
|
+
common.print_format(msg, False, tm, args.output_json, args.output_json_append, pf=pf)
|
|
139
|
+
return self.RESP_WARN, msg, None
|
|
140
|
+
|
|
141
|
+
def is_cluster_redirect(self):
|
|
142
|
+
"""
|
|
143
|
+
クラスター宛のメッセージの場合、メッセージを転送するかどうかを返します
|
|
144
|
+
|
|
145
|
+
Returns:
|
|
146
|
+
bool: メッセージを転送する場合はTrue
|
|
147
|
+
"""
|
|
148
|
+
return True
|
|
149
|
+
|
|
150
|
+
def svrun(self, data_dir:Path, logger:logging.Logger, redis_cli:redis_client.RedisClient, msg:List[str],
|
|
151
|
+
sessions:Dict[str, Dict[str, Any]]) -> int:
|
|
152
|
+
"""
|
|
153
|
+
この機能のサーバー側の実行を行います
|
|
154
|
+
|
|
155
|
+
Args:
|
|
156
|
+
data_dir (Path): データディレクトリ
|
|
157
|
+
logger (logging.Logger): ロガー
|
|
158
|
+
redis_cli (redis_client.RedisClient): Redisクライアント
|
|
159
|
+
msg (List[str]): 受信メッセージ
|
|
160
|
+
sessions (Dict[str, Dict[str, Any]]): セッション情報
|
|
161
|
+
|
|
162
|
+
Returns:
|
|
163
|
+
int: 終了コード
|
|
164
|
+
"""
|
|
165
|
+
if logger.level == logging.DEBUG:
|
|
166
|
+
logger.debug(f"audit write svrun msg: {msg}")
|
|
167
|
+
vision_engine = convert.b64str2str(msg[2])
|
|
168
|
+
sam2_model = convert.b64str2str(msg[3])
|
|
169
|
+
st = self.start(msg[1], vision_engine, sam2_model, data_dir, logger, redis_cli, sessions)
|
|
170
|
+
return st
|
|
171
|
+
|
|
172
|
+
def start(self, reskey:str, vision_engine:str, sam2_model:str, data_dir:Path, logger:logging.Logger,
|
|
173
|
+
redis_cli:redis_client.RedisClient, sessions:Dict[str, Dict[str, Any]]) -> int:
|
|
174
|
+
"""
|
|
175
|
+
SAM2のモデルを開始します
|
|
176
|
+
|
|
177
|
+
Args:
|
|
178
|
+
reskey (str): レスポンスキー
|
|
179
|
+
vision_engine (str): Visionエンジン
|
|
180
|
+
sam2_model (str): SAM2モデル
|
|
181
|
+
data_dir (Path): データディレクトリ
|
|
182
|
+
logger (logging.Logger): ロガー
|
|
183
|
+
redis_cli (redis_client.RedisClient): Redisクライアント
|
|
184
|
+
sessions (Dict[str, Dict[str, Any]]): セッション情報
|
|
185
|
+
|
|
186
|
+
Returns:
|
|
187
|
+
int: レスポンスコード
|
|
188
|
+
"""
|
|
189
|
+
try:
|
|
190
|
+
if vision_engine == 'sam2':
|
|
191
|
+
#===============================================================
|
|
192
|
+
# SAM2モデルの初期化
|
|
193
|
+
from sam2.build_sam import build_sam2
|
|
194
|
+
from sam2.sam2_image_predictor import SAM2ImagePredictor
|
|
195
|
+
#from sam2.sam2_video_predictor import SAM2VideoPredictor
|
|
196
|
+
import torch
|
|
197
|
+
|
|
198
|
+
sam2_dir = Path(version.__file__).parent / '.sam2' / 'model'
|
|
199
|
+
if not sam2_dir.exists():
|
|
200
|
+
logger.error(f"Failed to start SAM2 model: sam2 directory does not exist: {sam2_dir}")
|
|
201
|
+
redis_cli.rpush(reskey, dict(warn=f"Failed to start SAM2 model: sam2 directory does not exist: {sam2_dir}"))
|
|
202
|
+
return self.RESP_WARN
|
|
203
|
+
|
|
204
|
+
model_file = sam2_dir / self.VISION_MODEL[sam2_model]['path']
|
|
205
|
+
config_file = self.VISION_MODEL[sam2_model]['conf']
|
|
206
|
+
if not model_file.exists():
|
|
207
|
+
logger.error(f"Failed to start SAM2 model: model file does not exist: {model_file}")
|
|
208
|
+
redis_cli.rpush(reskey, dict(warn=f"Failed to start SAM2 model: model file does not exist: {model_file}"))
|
|
209
|
+
return self.RESP_WARN
|
|
210
|
+
|
|
211
|
+
device = 'cuda' if torch.cuda.is_available() else 'cpu'
|
|
212
|
+
# vvmファイルの読込み
|
|
213
|
+
predictor = SAM2ImagePredictor(build_sam2(config_file, model_file, device=device))
|
|
214
|
+
sessions[sam2_model] = dict(
|
|
215
|
+
info=self.VISION_MODEL[sam2_model].copy(),
|
|
216
|
+
predictor=predictor,
|
|
217
|
+
)
|
|
218
|
+
#===============================================================
|
|
219
|
+
# 成功時の処理
|
|
220
|
+
rescode, msg = (self.RESP_SUCCESS, dict(success=f'Success to start SAM2. Model: {sam2_model}'))
|
|
221
|
+
redis_cli.rpush(reskey, msg)
|
|
222
|
+
return rescode
|
|
223
|
+
else:
|
|
224
|
+
logger.warning(f"Unsupported vision engine: {vision_engine}")
|
|
225
|
+
redis_cli.rpush(reskey, dict(warn=f"Unsupported vision engine: {vision_engine}"))
|
|
226
|
+
return self.RESP_WARN
|
|
227
|
+
except Exception as e:
|
|
228
|
+
logger.warning(f"Failed to start: {e}", exc_info=True)
|
|
229
|
+
redis_cli.rpush(reskey, dict(warn=f"Failed to start: {e}"))
|
|
230
|
+
return self.RESP_WARN
|
|
@@ -25,7 +25,7 @@ class VersionsUsed(feature.WebFeature):
|
|
|
25
25
|
for i, line in enumerate(f.readlines()):
|
|
26
26
|
parts = line.strip().split('\t')
|
|
27
27
|
ret.append(parts)
|
|
28
|
-
with open(Path(cmdbox.__file__).parent / '
|
|
28
|
+
with open(Path(cmdbox.__file__).parent / 'web' / 'voicevox_license_list.txt', 'r', encoding='utf-8') as f:
|
|
29
29
|
for i, line in enumerate(f.readlines()):
|
|
30
30
|
parts = line.strip().split('\t')
|
|
31
31
|
ret.append(parts)
|