zcbot 1.8.7__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- core_plugins/__init__.py +2 -0
- core_plugins/aiwriter/__init__.py +0 -0
- core_plugins/aiwriter/agent.py +107 -0
- core_plugins/aiwriter/llm.py +107 -0
- core_plugins/aiwriter/main.py +912 -0
- core_plugins/aiwriter/prompt.py +70 -0
- core_plugins/aiwriter/requirements.txt +1 -0
- core_plugins/aiwriter/session.py +221 -0
- core_plugins/aiwriter/tools.py +583 -0
- core_plugins/aiwriter/tui.py +1005 -0
- core_plugins/discord/__init__.py +1 -0
- core_plugins/discord/main.py +717 -0
- core_plugins/html_assembler/__init__.py +0 -0
- core_plugins/html_assembler/engine.py +353 -0
- core_plugins/html_assembler/main.py +140 -0
- core_plugins/http_api/__init__.py +0 -0
- core_plugins/http_api/main.py +502 -0
- core_plugins/http_inject/__init__.py +0 -0
- core_plugins/http_inject/main.py +213 -0
- core_plugins/image_renderer/__init__.py +0 -0
- core_plugins/image_renderer/charset_common.txt +2 -0
- core_plugins/image_renderer/charset_ext.txt +2 -0
- core_plugins/image_renderer/main.py +1059 -0
- core_plugins/image_renderer/msyh_subset_common.ttf +0 -0
- core_plugins/image_renderer/msyh_subset_ext.ttf +0 -0
- core_plugins/image_renderer/native/bin/linux-aarch64/zcbot_render.so +0 -0
- core_plugins/image_renderer/native/bin/linux-armv7/zcbot_render.so +0 -0
- core_plugins/image_renderer/native/bin/linux-i686/zcbot_render.so +0 -0
- core_plugins/image_renderer/native/bin/linux-loongarch64/zcbot_render.so +0 -0
- core_plugins/image_renderer/native/bin/linux-x86_64/zcbot_render.so +0 -0
- core_plugins/image_renderer/native/bin/win32/zcbot_render.pyd +0 -0
- core_plugins/image_renderer/native/bin/win64/.gitkeep +2 -0
- core_plugins/image_renderer/native/bin/win64/zcbot_render.pyd +0 -0
- core_plugins/image_renderer/native/build_log.txt +0 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/adler2-60e0f389d9a839a2/lib-adler2.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/adler2-f0df85187edd40b4/lib-adler2.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/allocator-api2-444491f58dce4a64/lib-allocator_api2.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/allocator-api2-6a2dcdde8d9c54c0/lib-allocator_api2.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/autocfg-839c30db35f6bf7a/lib-autocfg.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/autocfg-bea47de417134ff0/lib-autocfg.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/bitflags-657147261055007f/lib-bitflags.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/bitflags-9adf6a2300ecb6f4/lib-bitflags.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/bytemuck-10bf5cd863881013/lib-bytemuck.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/bytemuck-d0235cf33fead1f7/lib-bytemuck.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/byteorder-lite-03c69a501902d7d0/lib-byteorder_lite.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/byteorder-lite-044f156e2e2cff3e/lib-byteorder_lite.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/cfg-if-3c6fbde612da8706/lib-cfg_if.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/cfg-if-ed9beea493f62c32/lib-cfg_if.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/core_maths-49a57f2c6b9adccd/lib-core_maths.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/core_maths-f7d11df06b84ca34/lib-core_maths.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/crc32fast-002f496849e96dce/run-build-script-build-script-build.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/crc32fast-8ce485404ec24ee4/build-script-build-script-build.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/crc32fast-a565ca6ecf60e974/lib-crc32fast.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/crc32fast-ccdd9cc94c822748/build-script-build-script-build.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/crc32fast-debd5611b55e6254/run-build-script-build-script-build.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/crc32fast-fc26abab7d402e28/lib-crc32fast.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/equivalent-de5f31ed4cb78e47/lib-equivalent.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/equivalent-f3bc8f123b74f73a/lib-equivalent.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/fdeflate-57b0ca2858ea0590/lib-fdeflate.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/fdeflate-da61824180c8697a/lib-fdeflate.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/flate2-03dda1a44c86b1dd/lib-flate2.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/flate2-77baef1877b7ff9c/lib-flate2.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/foldhash-0cbab29fbe81acc0/lib-foldhash.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/foldhash-232f5c2b42ba74eb/lib-foldhash.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/fontdue-74fe9201df08857c/lib-fontdue.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/fontdue-d00ed7d4556b9287/lib-fontdue.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/hashbrown-14177460a716ad11/lib-hashbrown.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/hashbrown-20a3ed3242ffd34a/lib-hashbrown.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/heck-140f68f05deb8a6a/lib-heck.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/heck-5118a0c687ad7ebf/lib-heck.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/image-27c504da68dfe5e0/lib-image.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/image-c9f198ea6eccf354/lib-image.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/indoc-804bf973066b1da0/lib-indoc.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/indoc-8d90f9c2dbcfce5c/lib-indoc.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/libc-4baeab7477aa1fb0/build-script-build-script-build.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/libc-4c8dad10963c297a/run-build-script-build-script-build.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/libc-962e07e8c93997d6/build-script-build-script-build.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/libc-ba40758695074df5/lib-libc.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/libc-d79539ec5fee31fd/lib-libc.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/libc-edb3776a26d319a6/run-build-script-build-script-build.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/libm-0fb3efbc291f844c/lib-libm.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/libm-2560d93d509df909/run-build-script-build-script-build.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/libm-2c403b1b643e5299/build-script-build-script-build.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/libm-331266db6b7c9099/run-build-script-build-script-build.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/libm-8f6147356e4cd6a2/build-script-build-script-build.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/libm-da46b819873a0de0/lib-libm.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/memoffset-341bbab307f62b8e/run-build-script-build-script-build.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/memoffset-53da34981eced0a4/run-build-script-build-script-build.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/memoffset-6911e4b47ea722b8/lib-memoffset.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/memoffset-7150b07120e335bc/build-script-build-script-build.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/memoffset-a6f9ece644c54080/build-script-build-script-build.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/memoffset-ff6594d5eb48889f/lib-memoffset.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/miniz_oxide-5b03085b9e16fdf3/lib-miniz_oxide.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/miniz_oxide-a48fc48d4fb45ca8/lib-miniz_oxide.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/moxcms-431d500412313cc5/lib-moxcms.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/moxcms-5974e28f95fc6dc5/lib-moxcms.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/num-traits-04cca2d6d5f200b5/build-script-build-script-build.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/num-traits-412858521e64181d/lib-num_traits.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/num-traits-5596bd3eeadfbf05/build-script-build-script-build.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/num-traits-bb96e9e68ec85a5e/run-build-script-build-script-build.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/num-traits-ee093734d4d34162/run-build-script-build-script-build.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/num-traits-f3c86490576ab8c3/lib-num_traits.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/once_cell-03c0e091aa9dc081/lib-once_cell.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/once_cell-214a9ef388a67619/lib-once_cell.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/once_cell-45259d3b6d9f1199/lib-once_cell.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/once_cell-4a5c55417b5defe6/lib-once_cell.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/png-8909a5e9c7304858/lib-png.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/png-b190385f4004d6d0/lib-png.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/proc-macro2-0cdf1aa860a34b42/build-script-build-script-build.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/proc-macro2-0f0d0e2b48964f8c/run-build-script-build-script-build.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/proc-macro2-1365473e44660476/lib-proc_macro2.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/proc-macro2-5fe21b7e6326112e/run-build-script-build-script-build.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/proc-macro2-b64e39c3f0a88515/lib-proc_macro2.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/proc-macro2-bc81195b9e51be24/build-script-build-script-build.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/pxfm-4101b4b7f28eba22/lib-pxfm.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/pxfm-48da70428b6e8f91/lib-pxfm.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/pyo3-07dc509a5abaa4bd/build-script-build-script-build.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/pyo3-1a979946b8854413/build-script-build-script-build.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/pyo3-2539d9e53b11cace/run-build-script-build-script-build.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/pyo3-793708b9739ec55f/run-build-script-build-script-build.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/pyo3-af03276eb0d2b18d/lib-pyo3.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/pyo3-build-config-0f76c09571dbc0df/build-script-build-script-build.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/pyo3-build-config-356b44667a2e4cc5/build-script-build-script-build.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/pyo3-build-config-41996710caf3f660/run-build-script-build-script-build.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/pyo3-build-config-43163ad51bdec9c0/lib-pyo3_build_config.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/pyo3-build-config-87bf1c399d4f6583/lib-pyo3_build_config.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/pyo3-build-config-f00e4e1c8102b8f8/run-build-script-build-script-build.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/pyo3-ffi-27fbea920ea1dcf5/run-build-script-build-script-build.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/pyo3-ffi-78a78e120d4608ed/lib-pyo3_ffi.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/pyo3-ffi-b97d190d71f9cb9c/run-build-script-build-script-build.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/pyo3-ffi-c1ec9fff47c01e3a/build-script-build-script-build.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/pyo3-ffi-cc9415eb8b62c8e1/build-script-build-script-build.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/pyo3-ffi-ec00601cd3067b2e/lib-pyo3_ffi.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/pyo3-macros-backend-2bc4098ac5ea54ea/build-script-build-script-build.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/pyo3-macros-backend-50e7897e819f71a0/run-build-script-build-script-build.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/pyo3-macros-backend-6a6cd065544bc915/build-script-build-script-build.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/pyo3-macros-backend-708a096532d429fd/lib-pyo3_macros_backend.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/pyo3-macros-backend-9d168c5cbb19c45b/run-build-script-build-script-build.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/pyo3-macros-backend-f093fb5432f8a592/lib-pyo3_macros_backend.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/pyo3-macros-cb98f6f4c41a09e2/lib-pyo3_macros.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/quote-0cc8eddd94b56120/build-script-build-script-build.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/quote-259b94fdd086baa6/lib-quote.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/quote-5bb089ed6cbd99d4/build-script-build-script-build.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/quote-a1fc150556ace7d5/run-build-script-build-script-build.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/quote-d736d5e25070f17a/run-build-script-build-script-build.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/quote-fe137dd09296fcd9/lib-quote.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/simd-adler32-30dd3d0bd68c6837/lib-simd_adler32.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/simd-adler32-cfe751f4465701f2/lib-simd_adler32.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/syn-9c487ca4c75cdcf2/lib-syn.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/syn-cdf9c79a302c0ca1/lib-syn.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/target-lexicon-40f60cdca584a140/build-script-build-script-build.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/target-lexicon-79e61bcd21c2ef69/run-build-script-build-script-build.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/target-lexicon-7cd56ad1fbcaa92e/lib-target_lexicon.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/target-lexicon-82efecdf86795885/build-script-build-script-build.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/target-lexicon-ab6c7ae6d378df3c/lib-target_lexicon.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/target-lexicon-c11113d1056608da/run-build-script-build-script-build.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/ttf-parser-4476d54c98aaf99a/lib-ttf_parser.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/ttf-parser-6bdfa2b0a316b700/lib-ttf_parser.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/unicode-ident-4f5b468ec41298da/lib-unicode_ident.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/unicode-ident-ad577973381505d1/lib-unicode_ident.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/unindent-2f09a6e9107fd200/lib-unindent.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/unindent-d040ec9ecbcd83d4/lib-unindent.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/zcbot_render-5b02cc90b438e824/lib-zcbot_render.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/zune-core-6fd2987a01740c52/lib-zune_core.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/zune-core-ab79956116b96467/lib-zune_core.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/zune-jpeg-b08abf620e0f22f0/lib-zune_jpeg.json +1 -0
- core_plugins/image_renderer/native/target/release/.fingerprint/zune-jpeg-dac268e8263290cd/lib-zune_jpeg.json +1 -0
- core_plugins/image_renderer/native/target/release/build/pyo3-build-config-41996710caf3f660/out/pyo3-build-config-file.txt +0 -0
- core_plugins/image_renderer/native/target/release/build/pyo3-build-config-41996710caf3f660/out/pyo3-build-config.txt +11 -0
- core_plugins/image_renderer/native/target/release/build/pyo3-build-config-f00e4e1c8102b8f8/out/pyo3-build-config-file.txt +0 -0
- core_plugins/image_renderer/native/target/release/build/pyo3-build-config-f00e4e1c8102b8f8/out/pyo3-build-config.txt +11 -0
- core_plugins/image_renderer/requirements.txt +1 -0
- core_plugins/llm_load/main.py +348 -0
- core_plugins/llm_load/src/llm_core/_conf_schema.json +112 -0
- core_plugins/llm_load/src/llm_core/agent.py +219 -0
- core_plugins/llm_load/src/llm_core/history.py +497 -0
- core_plugins/llm_load/src/llm_core/main.py +1114 -0
- core_plugins/llm_load/src/llm_core/mcp.py +268 -0
- core_plugins/llm_load/src/llm_core/media.py +200 -0
- core_plugins/llm_load/src/llm_core/providers.py +324 -0
- core_plugins/llm_load/src/llm_core/tools.py +454 -0
- core_plugins/llm_load/src/llm_core/web/index.html +86 -0
- core_plugins/llm_load/src/llm_core/web/overview.html +177 -0
- core_plugins/llm_load/src/llm_core/web/sessions.html +525 -0
- core_plugins/onebot_adapter/__init__.py +0 -0
- core_plugins/onebot_adapter/main.py +743 -0
- core_plugins/onebot_adapter/onebot_api.py +268 -0
- core_plugins/qq_official/__init__.py +1 -0
- core_plugins/qq_official/main.py +1932 -0
- core_plugins/rust_accel/__init__.py +0 -0
- core_plugins/rust_accel/bench.py +116 -0
- core_plugins/rust_accel/it_smoke.py +104 -0
- core_plugins/rust_accel/main.py +612 -0
- core_plugins/rust_accel/plugin_smoke.py +147 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/block-buffer-b7f9b38f5360d590/lib-block_buffer.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/byteorder-5110583a8f025ce2/lib-byteorder.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/byteorder-ed9f785eb665e22b/lib-byteorder.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/bytes-2f9d322571dba0cb/lib-bytes.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/bytes-d46f851b694f155e/lib-bytes.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/cfg-if-15ac546cc1032930/lib-cfg_if.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/cfg-if-81a34b24e83fe16b/lib-cfg_if.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/cpufeatures-43b6b6a446baee3a/lib-cpufeatures.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/cpufeatures-ea6e7549bd47a192/lib-cpufeatures.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/crypto-common-70c1221d6fe5691f/lib-crypto_common.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/data-encoding-68d8e22446189e40/lib-data_encoding.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/data-encoding-a82ddca3fe1b57e1/lib-data_encoding.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/digest-4ccc7bfecae921ed/lib-digest.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/futures-core-5a206671efb93e5b/lib-futures_core.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/futures-sink-5c274d0b6d3e99da/lib-futures_sink.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/futures-sink-cf17326a98da966b/lib-futures_sink.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/futures-task-0fa5ce4510002509/lib-futures_task.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/futures-task-3475443fbd197879/lib-futures_task.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/generic-array-29bf4c77a6a36b47/lib-generic_array.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/generic-array-ae256c96f7ea5771/build-script-build-script-build.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/generic-array-bbd6fb8cc2b26da2/run-build-script-build-script-build.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/generic-array-bf6ff93ff769cef3/run-build-script-build-script-build.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/generic-array-fc867d087c4417f3/build-script-build-script-build.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/getrandom-94fbdac55cc0e135/lib-getrandom.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/getrandom-b0244f2f98a985bc/lib-getrandom.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/http-471dc769cf2eb91d/lib-http.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/http-a74827a6c68d13f3/lib-http.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/httparse-7ffb9ff69ea8f692/build-script-build-script-build.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/httparse-8398ee54dcd843c9/build-script-build-script-build.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/httparse-9101ce2337e3bff5/lib-httparse.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/httparse-e341ff7defbaf542/run-build-script-build-script-build.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/itoa-a471049e27fddcc1/lib-itoa.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/itoa-b66c244a06960eae/lib-itoa.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/log-4384d00572348f83/lib-log.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/log-7319a8589759f8e6/lib-log.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/memchr-839f5854322b145b/lib-memchr.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/mio-f0f98e52ac92f0ec/lib-mio.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/pin-project-lite-3cd8b79b8de92f55/lib-pin_project_lite.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/pin-project-lite-d363cb2089899577/lib-pin_project_lite.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/proc-macro2-8689ac220f1d613c/run-build-script-build-script-build.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/proc-macro2-d7b1169fa0777042/build-script-build-script-build.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/proc-macro2-ee2c524f2ec88397/lib-proc_macro2.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/proc-macro2-f5e3e717f5fbf6de/build-script-build-script-build.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/quote-0898d32afe80c218/run-build-script-build-script-build.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/quote-77fd950fd7a7c4b5/build-script-build-script-build.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/quote-9fb9ee7c0d9b5de8/build-script-build-script-build.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/quote-d9ee40e57fe36f52/lib-quote.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/quote-ec29f4f7be257884/run-build-script-build-script-build.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/rand_core-23d374d3fb9423ac/lib-rand_core.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/rand_core-bae7f18c75a7f5e0/lib-rand_core.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/serde-3f62421dace0ca37/build-script-build-script-build.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/serde-d90a96f062c4acde/build-script-build-script-build.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/serde-f90fee3f7d441a44/run-build-script-build-script-build.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/serde_core-7d14e87044786ddd/build-script-build-script-build.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/serde_core-af0aacbfe80dc624/build-script-build-script-build.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/serde_core-d3bf9d7020559541/lib-serde_core.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/serde_core-d443095cf9adbd69/run-build-script-build-script-build.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/serde_json-244596be6c04721c/build-script-build-script-build.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/serde_json-a00b003936c9ac11/run-build-script-build-script-build.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/serde_json-c0b8cbf60e100957/lib-serde_json.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/serde_json-c738827fd19d3ca5/build-script-build-script-build.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/sha1-449be2079d06c309/lib-sha1.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/slab-c66cf6f917fdd609/lib-slab.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/socket2-0ca59a6684afff67/lib-socket2.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/socket2-e63b6385905221ad/lib-socket2.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/syn-7cc5744fac1d5c76/lib-syn.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/syn-91790193a39c9e80/lib-syn.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/thiserror-17ff965ec4f0d3c9/run-build-script-build-script-build.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/thiserror-39bab743d755ba30/build-script-build-script-build.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/thiserror-3ebfe228d5acaf75/build-script-build-script-build.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/thiserror-8126a2568002f807/run-build-script-build-script-build.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/typenum-7abc7fe51c27c97f/lib-typenum.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/typenum-9c0af58e6325d920/lib-typenum.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/unicode-ident-1f541c5e2ba2bb87/lib-unicode_ident.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/unicode-ident-278812adf962e6af/lib-unicode_ident.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/utf-8-198b05e17be54bd5/lib-utf8.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/version_check-5d7fe9b4c6165ce8/lib-version_check.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/version_check-9eeabdd3500b2be7/lib-version_check.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/windows-link-923bea013f34b97a/lib-windows_link.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/windows-link-a6df22b01e120c7b/lib-windows_link.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/zerocopy-3178be3d5adcda93/lib-zerocopy.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/zerocopy-a956ca345fcffb1c/build-script-build-script-build.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/zerocopy-ac0916ec8e4ce420/build-script-build-script-build.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/zerocopy-cf7fe92b5978139b/run-build-script-build-script-build.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/zmij-0ca82a9ff3a9c2b5/build-script-build-script-build.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/zmij-306d51a67fcc8a78/run-build-script-build-script-build.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/zmij-672d4a7360f4b1f6/run-build-script-build-script-build.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/zmij-6a85214a9a7e534d/build-script-build-script-build.json +1 -0
- core_plugins/rust_accel/rust_accel/target/debug/.fingerprint/zmij-fff15df10af687db/lib-zmij.json +1 -0
- core_plugins/scheduler/__init__.py +0 -0
- core_plugins/scheduler/main.py +66 -0
- core_plugins/session/__init__.py +0 -0
- core_plugins/session/main.py +300 -0
- core_plugins/telegram/__init__.py +1 -0
- core_plugins/telegram/main.py +673 -0
- core_plugins/webui/__init__.py +0 -0
- core_plugins/webui/main.py +60 -0
- core_plugins/webui/requirements.txt +9 -0
- core_plugins/webui/web/css/app.D9lpyuHP.css +1 -0
- core_plugins/webui/web/index.html +21 -0
- core_plugins/webui/web/js/ApiKeys.Dgc9NBaq.js +1 -0
- core_plugins/webui/web/js/Commands.DvRODuQW.js +1 -0
- core_plugins/webui/web/js/Connection.DOq43d9w.js +1 -0
- core_plugins/webui/web/js/Dashboard.C8tWdYwf.js +1 -0
- core_plugins/webui/web/js/Database.Lo0MTCaJ.js +1 -0
- core_plugins/webui/web/js/FileBrowser.eNJSDINS.js +1 -0
- core_plugins/webui/web/js/Groups.CcdJA2AB.js +1 -0
- core_plugins/webui/web/js/Layout.CvgUXQa3.js +1 -0
- core_plugins/webui/web/js/Login.DNAGbYQJ.js +1 -0
- core_plugins/webui/web/js/Logs.DNQfQosX.js +1 -0
- core_plugins/webui/web/js/Marketplace.DRQ6pRrW.js +1 -0
- core_plugins/webui/web/js/Permissions.CIv_Y_Or.js +1 -0
- core_plugins/webui/web/js/PluginWebUI.uZaSqKvi.js +1 -0
- core_plugins/webui/web/js/Plugins.DuEc4Rir.js +1 -0
- core_plugins/webui/web/js/Runtime.CqdArSNe.js +1 -0
- core_plugins/webui/web/js/Settings.BW0ACqpp.js +1 -0
- core_plugins/webui/web/js/Tasks.DowG5Jtb.js +1 -0
- core_plugins/webui/web/js/Users.DbrWclge.js +1 -0
- core_plugins/webui/web/js/api.UlG5V_Nn.js +1 -0
- core_plugins/webui/web/js/app.BYWuT0Pz.js +1 -0
- core_plugins/webui/web/js/element-plus.D55LgY9V.js +1 -0
- core_plugins/webui/web/js/sidebar.DXMHx7n7.js +1 -0
- core_plugins/webui/web/js/theme-init.js +24 -0
- core_plugins/webui/web/js/vue-vendor.CBNadUYd.js +1 -0
- core_plugins/ws_client/__init__.py +0 -0
- core_plugins/ws_client/main.py +475 -0
- framework/__init__.py +1 -0
- framework/api/__init__.py +17 -0
- framework/api/admins.py +86 -0
- framework/api/apikeys.py +105 -0
- framework/api/app_helpers.py +560 -0
- framework/api/auth.py +246 -0
- framework/api/commands.py +287 -0
- framework/api/config.py +274 -0
- framework/api/context.py +42 -0
- framework/api/dashboard.py +228 -0
- framework/api/db_gateway.py +136 -0
- framework/api/files.py +333 -0
- framework/api/framework_ops.py +110 -0
- framework/api/framework_update.py +272 -0
- framework/api/honeypot.py +1250 -0
- framework/api/human_check.py +149 -0
- framework/api/logs.py +152 -0
- framework/api/perm_api.py +320 -0
- framework/api/plugin_market.py +498 -0
- framework/api/plugin_meta.py +327 -0
- framework/api/plugins.py +426 -0
- framework/api/registry.py +167 -0
- framework/api/security_levels.py +286 -0
- framework/api/static_routes.py +99 -0
- framework/api/stats.py +155 -0
- framework/api/tasks.py +185 -0
- framework/api/users_groups.py +137 -0
- framework/api/webapp.py +677 -0
- framework/api/webserver.py +203 -0
- framework/api/webui.py +90 -0
- framework/apis.py +15 -0
- framework/coalesce_log.py +145 -0
- framework/config.py +552 -0
- framework/console_server.py +474 -0
- framework/core/__init__.py +14 -0
- framework/core/base.py +687 -0
- framework/core/dispatch.py +410 -0
- framework/core/event_buffer.py +932 -0
- framework/core/runtime.py +358 -0
- framework/core/stats_writer.py +227 -0
- framework/ctx/__init__.py +15 -0
- framework/ctx/base.py +343 -0
- framework/ctx/db.py +98 -0
- framework/ctx/events.py +231 -0
- framework/ctx/messaging.py +180 -0
- framework/ctx/webui.py +113 -0
- framework/database/__init__.py +27 -0
- framework/database/db.py +403 -0
- framework/database/db_conn.py +259 -0
- framework/database/dialect.py +400 -0
- framework/database/init_db.py +365 -0
- framework/database/schema.py +533 -0
- framework/database/sql_sim.py +1584 -0
- framework/database/storage.py +60 -0
- framework/deps/__init__.py +400 -0
- framework/deps/pip.py +247 -0
- framework/dual_auth.py +415 -0
- framework/hooks.py +192 -0
- framework/ipc/__init__.py +11 -0
- framework/ipc/core_runtime.py +213 -0
- framework/ipc/core_services.py +258 -0
- framework/ipc/host_entry.py +139 -0
- framework/ipc/host_log.py +77 -0
- framework/ipc/ipc_adapter.py +124 -0
- framework/ipc/ipc_client.py +116 -0
- framework/ipc/ipc_server.py +134 -0
- framework/ipc/protocol.py +324 -0
- framework/ipc/remote_api_caller.py +50 -0
- framework/ipc/remote_db.py +120 -0
- framework/ipc/remote_route.py +53 -0
- framework/ipc/remote_tx.py +176 -0
- framework/loader/__init__.py +37 -0
- framework/loader/base.py +495 -0
- framework/loader/config.py +191 -0
- framework/loader/lifecycle.py +524 -0
- framework/loader/runtime.py +278 -0
- framework/loader/ui.py +385 -0
- framework/log_broker.py +195 -0
- framework/memory.py +80 -0
- framework/messaging/__init__.py +28 -0
- framework/messaging/contract.py +415 -0
- framework/messaging/event.py +554 -0
- framework/messaging/event_bus.py +169 -0
- framework/messaging/protocol.py +440 -0
- framework/messaging/router.py +392 -0
- framework/messaging/router_keywords.py +167 -0
- framework/messaging/router_match.py +271 -0
- framework/messaging/segments.py +435 -0
- framework/perm/__init__.py +531 -0
- framework/perm/admin.py +84 -0
- framework/perm/groups.py +220 -0
- framework/perm/tracks.py +99 -0
- framework/plugin.py +204 -0
- framework/runtime.py +15 -0
- framework/scheduler.py +182 -0
- framework/stats_writer.py +9 -0
- framework/terminal/__init__.py +13 -0
- framework/terminal/builtins.py +25 -0
- framework/terminal/cmd_core.py +125 -0
- framework/terminal/cmd_info.py +66 -0
- framework/terminal/cmd_msg.py +277 -0
- framework/terminal/cmd_ops.py +120 -0
- framework/terminal/cmd_plugin.py +244 -0
- framework/terminal/cmd_update.py +108 -0
- framework/terminal/command.py +107 -0
- framework/terminal/context.py +38 -0
- framework/terminal/encoding.py +87 -0
- framework/terminal/helper.py +17 -0
- framework/terminal/input.py +166 -0
- framework/terminal/panel.py +905 -0
- framework/tls.py +64 -0
- main.py +349 -0
- plugins/llm_blacklist/main.py +244 -0
- plugins/llm_core/agent.py +219 -0
- plugins/llm_core/history.py +497 -0
- plugins/llm_core/main.py +1114 -0
- plugins/llm_core/mcp.py +268 -0
- plugins/llm_core/media.py +200 -0
- plugins/llm_core/providers.py +324 -0
- plugins/llm_core/tools.py +454 -0
- plugins/llm_core/web/index.html +86 -0
- plugins/llm_core/web/overview.html +177 -0
- plugins/llm_core/web/sessions.html +525 -0
- sql/__init__.py +7 -0
- sql/init.sql +421 -0
- sql/init_mysql55.sql +389 -0
- sql/migration_alias.sql +18 -0
- zcbot-1.8.7.dist-info/METADATA +99 -0
- zcbot-1.8.7.dist-info/RECORD +454 -0
- zcbot-1.8.7.dist-info/WHEEL +5 -0
- zcbot-1.8.7.dist-info/entry_points.txt +2 -0
- zcbot-1.8.7.dist-info/licenses/LICENSE +230 -0
- zcbot-1.8.7.dist-info/top_level.txt +6 -0
- zcbot_cli.py +64 -0
core_plugins/__init__.py
ADDED
|
File without changes
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
"""智能体循环(工具调用闭环)。
|
|
3
|
+
|
|
4
|
+
把用户的话交给模型 → 模型流式输出文本 / 点名要调哪只「手」(工具)→ 本地执行
|
|
5
|
+
→ 结果回灌 → 模型再说话,直到不再调用工具。多轮收敛,到达 max_rounds 强制收口。
|
|
6
|
+
|
|
7
|
+
整轮以「事件」对外汇报(text / tool_start / tool_end /
|
|
8
|
+
error / done),终端据此实时渲染过程;循环本身不打印,便于测试与复用。
|
|
9
|
+
"""
|
|
10
|
+
import json
|
|
11
|
+
|
|
12
|
+
try: # 包导入(测试 / 包内引用)
|
|
13
|
+
from .llm import LLMError, stream_chat
|
|
14
|
+
except ImportError: # 框架 loader 以「顶层模块」加载本插件:无父包,退回同目录绝对导入
|
|
15
|
+
import os as _os
|
|
16
|
+
import sys as _sys
|
|
17
|
+
_sys.path.insert(0, _os.path.dirname(_os.path.abspath(__file__)))
|
|
18
|
+
from llm import LLMError, stream_chat
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class Agent:
|
|
22
|
+
"""一次会话内的智能体执行器(无状态之外仅持 cfg / tools / 事件回调)。"""
|
|
23
|
+
|
|
24
|
+
def __init__(self, cfg, tools, on_event=None, should_stop=None):
|
|
25
|
+
self.cfg = cfg
|
|
26
|
+
self.tools = tools
|
|
27
|
+
self._emit = on_event or (lambda kind, payload=None: None)
|
|
28
|
+
self._should_stop = should_stop or (lambda: False)
|
|
29
|
+
|
|
30
|
+
# ── 主循环 ─────────────────────────────────────────────────────────
|
|
31
|
+
def run(self, messages):
|
|
32
|
+
"""就地把一轮交互追加进 messages,返回本轮最终文本。
|
|
33
|
+
|
|
34
|
+
messages 需自带 system 提示(见 prompt.build)。返回值为模型最后一段
|
|
35
|
+
自然语言(可能为空字符串);历史与工具轮均已写入 messages。
|
|
36
|
+
"""
|
|
37
|
+
tool_specs = self.tools.specs()
|
|
38
|
+
max_rounds = max(1, int(self.cfg.get('max_rounds', 12) or 12))
|
|
39
|
+
last_text = ''
|
|
40
|
+
|
|
41
|
+
for _ in range(max_rounds):
|
|
42
|
+
if self._should_stop():
|
|
43
|
+
return last_text or '(已取消)'
|
|
44
|
+
|
|
45
|
+
text_acc, calls = self._one_turn(messages, tool_specs)
|
|
46
|
+
last_text = text_acc
|
|
47
|
+
|
|
48
|
+
if not calls:
|
|
49
|
+
messages.append({'role': 'assistant', 'content': text_acc})
|
|
50
|
+
return text_acc or '(模型未返回内容)'
|
|
51
|
+
|
|
52
|
+
# 记录 assistant 的工具调用(OpenAI 兼容格式)
|
|
53
|
+
asst_calls = []
|
|
54
|
+
for i, c in enumerate(calls):
|
|
55
|
+
asst_calls.append({
|
|
56
|
+
'id': 'c%d' % i,
|
|
57
|
+
'type': 'function',
|
|
58
|
+
'function': {'name': c['name'], 'arguments': c.get('arguments', '')},
|
|
59
|
+
})
|
|
60
|
+
messages.append({'role': 'assistant', 'content': text_acc or None,
|
|
61
|
+
'tool_calls': asst_calls})
|
|
62
|
+
|
|
63
|
+
# 逐个执行工具并回灌
|
|
64
|
+
for i, c in enumerate(calls):
|
|
65
|
+
if self._should_stop():
|
|
66
|
+
return last_text or '(已取消)'
|
|
67
|
+
try:
|
|
68
|
+
args = json.loads(c.get('arguments') or '{}')
|
|
69
|
+
if not isinstance(args, dict):
|
|
70
|
+
args = {}
|
|
71
|
+
except Exception:
|
|
72
|
+
args = {}
|
|
73
|
+
self._emit('tool_start', {'name': c['name'], 'args': args})
|
|
74
|
+
try:
|
|
75
|
+
out = self.tools.call(c['name'], args)
|
|
76
|
+
ok = True
|
|
77
|
+
except Exception as e: # noqa: BLE001 —— 工具异常回灌给模型,不外抛
|
|
78
|
+
out = '错误: %s' % e
|
|
79
|
+
ok = False
|
|
80
|
+
self._emit('tool_end', {'name': c['name'], 'args': args,
|
|
81
|
+
'ok': ok, 'result': str(out)})
|
|
82
|
+
messages.append({
|
|
83
|
+
'role': 'tool',
|
|
84
|
+
'tool_call_id': 'c%d' % i,
|
|
85
|
+
'content': str(out)[:4000],
|
|
86
|
+
})
|
|
87
|
+
|
|
88
|
+
self._emit('error', {'message': '达到最大轮数(%d),已强制收口' % max_rounds})
|
|
89
|
+
return last_text or '(达到最大轮数,已强制收口)'
|
|
90
|
+
|
|
91
|
+
# ── 单轮:流式取回文本与工具调用 ────────────────────────────────────
|
|
92
|
+
def _one_turn(self, messages, tool_specs):
|
|
93
|
+
text_acc = ''
|
|
94
|
+
calls = []
|
|
95
|
+
try:
|
|
96
|
+
for kind, val in stream_chat(self.cfg, messages, tool_specs):
|
|
97
|
+
if kind == 'text':
|
|
98
|
+
text_acc += val
|
|
99
|
+
self._emit('text', val)
|
|
100
|
+
elif kind == 'reason':
|
|
101
|
+
self._emit('reason', val)
|
|
102
|
+
elif kind == 'tool':
|
|
103
|
+
calls.append(val)
|
|
104
|
+
except LLMError as e:
|
|
105
|
+
self._emit('error', {'message': str(e)})
|
|
106
|
+
raise
|
|
107
|
+
return text_acc, calls
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
"""OpenAI 兼容的流式 LLM 客户端(零三方依赖,仅用标准库)。
|
|
3
|
+
|
|
4
|
+
对应 dsh 的「模型提供商 / provider」一层:把对话历史换成模型回复。
|
|
5
|
+
这里刻意不依赖 llm_core,插件自带一份最小实现,开箱即连任意 OpenAI 兼容端点
|
|
6
|
+
(DeepSeek / Moonshot / 智谱 / vLLM / Ollama / One-API 等,判断标准只有一条:
|
|
7
|
+
能不能用 Bearer + {"messages": [...]} 说话)。
|
|
8
|
+
"""
|
|
9
|
+
import json
|
|
10
|
+
import urllib.error
|
|
11
|
+
import urllib.request
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class LLMError(Exception):
|
|
15
|
+
pass
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def _sse_stream(cfg, messages, tools):
|
|
19
|
+
"""向 chat/completions 发流式请求,逐事件 yield。
|
|
20
|
+
|
|
21
|
+
yield 形状:
|
|
22
|
+
("text", str) 文本增量
|
|
23
|
+
("reason", str) 深度思考 / 推理过程增量(reasoning_content 等)
|
|
24
|
+
("tool", {"name","arguments"}) 完整的一次工具调用(流结束后汇总)
|
|
25
|
+
("done", None) 流结束
|
|
26
|
+
"""
|
|
27
|
+
base = cfg["base_url"].rstrip("/")
|
|
28
|
+
url = base + "/chat/completions"
|
|
29
|
+
payload = {
|
|
30
|
+
"model": cfg["model"],
|
|
31
|
+
"messages": messages,
|
|
32
|
+
"temperature": cfg.get("temperature", 0.7),
|
|
33
|
+
"stream": True,
|
|
34
|
+
}
|
|
35
|
+
if tools:
|
|
36
|
+
payload["tools"] = [{"type": "function", "function": t} for t in tools]
|
|
37
|
+
payload["tool_choice"] = "auto"
|
|
38
|
+
|
|
39
|
+
# 深度思考开关:各家字段不统一,这里按需注入常见写法
|
|
40
|
+
if cfg.get("thinking"):
|
|
41
|
+
style = str(cfg.get("thinking_style", "auto") or "auto").lower()
|
|
42
|
+
if style in ("auto", "anthropic", "claude"):
|
|
43
|
+
payload["thinking"] = {"type": "enabled"}
|
|
44
|
+
if style in ("auto", "flag"):
|
|
45
|
+
payload["enable_thinking"] = True
|
|
46
|
+
if style in ("auto", "openai"):
|
|
47
|
+
payload["reasoning_effort"] = str(cfg.get("reasoning_effort", "medium"))
|
|
48
|
+
|
|
49
|
+
data = json.dumps(payload).encode("utf-8")
|
|
50
|
+
req = urllib.request.Request(
|
|
51
|
+
url, data=data, method="POST",
|
|
52
|
+
headers={
|
|
53
|
+
"Content-Type": "application/json",
|
|
54
|
+
"Authorization": "Bearer %s" % cfg["api_key"],
|
|
55
|
+
},
|
|
56
|
+
)
|
|
57
|
+
try:
|
|
58
|
+
resp = urllib.request.urlopen(req, timeout=cfg.get("timeout", 120))
|
|
59
|
+
except urllib.error.HTTPError as e:
|
|
60
|
+
body = e.read().decode("utf-8", "replace")[:400]
|
|
61
|
+
raise LLMError("HTTP %s: %s" % (e.code, body))
|
|
62
|
+
except Exception as e: # 网络层
|
|
63
|
+
raise LLMError("请求失败: %s" % e)
|
|
64
|
+
|
|
65
|
+
tool_acc = {} # index -> {name, arguments}
|
|
66
|
+
for raw in resp:
|
|
67
|
+
line = raw.decode("utf-8", "replace").strip()
|
|
68
|
+
if not line or not line.startswith("data:"):
|
|
69
|
+
continue
|
|
70
|
+
chunk = line[5:].strip()
|
|
71
|
+
if chunk == "[DONE]":
|
|
72
|
+
break
|
|
73
|
+
try:
|
|
74
|
+
obj = json.loads(chunk)
|
|
75
|
+
except Exception:
|
|
76
|
+
continue
|
|
77
|
+
if not obj.get("choices"):
|
|
78
|
+
continue
|
|
79
|
+
delta = obj["choices"][0].get("delta", {})
|
|
80
|
+
# 深度思考 / 推理:各家字段名不统一(DeepSeek=reasoning_content、
|
|
81
|
+
# OpenAI-o 系=reasoning、部分网关=thinking / reasoning_delta)
|
|
82
|
+
reason = (delta.get("reasoning_content")
|
|
83
|
+
or delta.get("reasoning")
|
|
84
|
+
or delta.get("thinking")
|
|
85
|
+
or (delta.get("reasoning_delta") or {}).get("content")
|
|
86
|
+
or "")
|
|
87
|
+
if reason:
|
|
88
|
+
yield ("reason", reason)
|
|
89
|
+
if delta.get("content"):
|
|
90
|
+
yield ("text", delta["content"])
|
|
91
|
+
for tc in delta.get("tool_calls", []) or []:
|
|
92
|
+
idx = tc.get("index", 0)
|
|
93
|
+
acc = tool_acc.setdefault(idx, {"name": "", "arguments": ""})
|
|
94
|
+
fn = tc.get("function", {}) or {}
|
|
95
|
+
if fn.get("name"):
|
|
96
|
+
acc["name"] += fn["name"]
|
|
97
|
+
if fn.get("arguments"):
|
|
98
|
+
acc["arguments"] += fn["arguments"]
|
|
99
|
+
for acc in tool_acc.values():
|
|
100
|
+
if acc["name"]:
|
|
101
|
+
yield ("tool", dict(acc))
|
|
102
|
+
yield ("done", None)
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
def stream_chat(cfg, messages, tools=None):
|
|
106
|
+
"""公开入口:包一层,便于调用方直接 for kind, val in stream_chat(...)。"""
|
|
107
|
+
return _sse_stream(cfg, messages, tools or [])
|