echotools 2.3.89__tar.gz → 2.3.90__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.
- {echotools-2.3.89 → echotools-2.3.90}/PKG-INFO +1 -1
- {echotools-2.3.89 → echotools-2.3.90}/pyproject.toml +1 -1
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/fncall/prompt/templates.py +16 -6
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/fncall/protocols/entml.py +4 -3
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools.egg-info/PKG-INFO +1 -1
- {echotools-2.3.89 → echotools-2.3.90}/src/tests/test_entml_protocol.py +4 -4
- {echotools-2.3.89 → echotools-2.3.90}/src/tests/test_entml_tool_pipeline.py +3 -3
- {echotools-2.3.89 → echotools-2.3.90}/README.md +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/setup.cfg +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/__init__.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/base/cache/__init__.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/base/cache/list_cache.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/base/cache/memory_cache.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/base/config/__init__.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/base/config/base.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/base/config/center.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/base/config/center_notify.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/base/config/center_template.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/base/config/loader.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/base/config/merge.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/base/errors/__init__.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/base/errors/base.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/base/errors/classify.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/base/errors/common.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/base/errors/http.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/base/ids/__init__.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/base/ids/generator.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/base/io/__init__.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/base/io/io_utils.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/base/io/printstream.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/base/logger/__init__.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/base/logger/manager.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/base/retry/__init__.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/base/retry/retry.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/compat.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/dispatch/__init__.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/dispatch/candidate.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/dispatch/dispatcher.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/dispatch/proxy_selector.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/dispatch/race.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/dispatch/selector.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/dispatch/usage.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/fncall/__init__.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/fncall/parsers/__init__.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/fncall/parsers/stream.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/fncall/parsers/stream_delta.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/fncall/parsers/stream_feed.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/fncall/parsers/stream_final.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/fncall/parsers/xml_params.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/fncall/parsers/xml_parser.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/fncall/prompt/__init__.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/fncall/prompt/history.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/fncall/prompt/history_format.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/fncall/prompt/inject.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/fncall/prompt/prompt_helpers.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/fncall/protocols/__init__.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/fncall/protocols/entml_invoke.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/fncall/protocols/entml_patterns.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/fncall/protocols/entml_schema.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/fncall/protocols/entml_stream/__init__.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/fncall/protocols/entml_stream/body.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/fncall/protocols/entml_stream/snap.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/fncall/protocols/entml_think/__init__.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/fncall/protocols/entml_think/blocks.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/fncall/protocols/entml_think/core.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/fncall/protocols/entml_think/filter.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/fncall/protocols/entml_think/hist.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/fncall/protocols/entml_think/hold.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/fncall/protocols/entml_think/parse.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/fncall/registry.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/fncall/shared/__init__.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/fncall/shared/coercion.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/fncall/shared/history_markup.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/fncall/shared/loop_detect.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/fncall/shared/normalization.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/fncall/shared/schema_render.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/fncall/shared/xml_helpers.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/keys.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/lifecycle/__init__.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/lifecycle/manager.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/lifecycle/updater.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/lifecycle/updater_pull.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/process/__init__.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/process/port.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/protocol/__init__.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/protocol/base.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/terminal/__init__.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/terminal/conpty.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/terminal/local/__init__.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/terminal/local/core.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/terminal/local/proc.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/terminal/local/unix.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/terminal/local/win.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/terminal/sanitize.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/terminal/session/__init__.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/terminal/session/base.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/terminal/session/client.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/terminal/ssh.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/terminal/tmux.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/console/__init__.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/console/charmap.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/console/spinner.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/console/ui.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/console/uicore/mixins/__init__.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/console/uicore/mixins/uibase.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/console/uicore/mixins/uicmds.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/console/uicore/mixins/uiinteract.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/console/uicore/mixins/uioutput.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/console/uicore/mixins/uistream.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/console/uicore/ui_console.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/console/uicore/ui_io.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/console/uicore/ui_log.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/console/uicore/ui_platform.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/console/uicore/ui_text.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/console/uicore/ui_types.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/console/uilayout/ui_countdown.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/console/uilayout/ui_layout.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/console/uilayout/ui_misc.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/console/uilayout/ui_panel.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/console/uilayout/ui_table.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/console/uilayout/ui_tree.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/console/uiwidgets/ui_box.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/console/uiwidgets/ui_editor.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/console/uiwidgets/ui_progress.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/console/uiwidgets/ui_select.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/console/uiwidgets/ui_stream.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/events/__init__.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/events/bus.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/events/event.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/spinner/__init__.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/spinner/spinner.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/spinner/spinner_color.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/tracing/__init__.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/tracing/context.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/tracing/span.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/tracing/tracer.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/translate.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/watcher/__init__.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/watcher/file_watcher.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/web/__init__.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/web/application.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/web/broker.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/web/input_box/app.js +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/web/input_box/components/filezone.js +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/web/input_box/components/motionkit.js +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/web/input_box/components/sendbutton.js +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/web/input_box/components/sortablelist.css +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/web/input_box/components/sortablelist.js +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/web/input_box/components/textinput.js +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/web/input_box/components/voiceinput.js +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/web/input_box/fonts/inter-500.woff2 +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/web/input_box/fonts/inter-600.woff2 +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/web/input_box/fonts/inter400.woff2 +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/web/input_box/inputbox.css +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/web/input_box/inputbox.js +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/web/input_box/style.css +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/web/input_box/voicegif.js +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/web/middleware.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/web/stats.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/web/utils.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/plat/files/__init__.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/plat/files/file_util.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/plat/network/__init__.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/plat/network/http_utils.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/plat/plugin/__init__.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/plat/plugin/base.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/plat/plugin/discovery.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/plat/plugin/registry.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/plat/plugin/registry_ops.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/plat/proxy/__init__.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/plat/proxy/manager.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/plat/runtime/__init__.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/plat/runtime/collector.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/plat/scheduler/__init__.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/plat/scheduler/scheduler.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/plat/sdk/__init__.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/plat/sdk/facade.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools/version.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools.egg-info/SOURCES.txt +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools.egg-info/dependency_links.txt +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools.egg-info/requires.txt +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/echotools.egg-info/top_level.txt +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/tests/bench_import.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/tests/conftest.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/tests/fixtures/__init__.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/tests/fixtures/simulated_fake_history_markup_responses.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/tests/fixtures/simulated_fault_thinking_responses.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/tests/fixtures/simulated_llm_tool_responses.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/tests/test_adversarial_stream_splits.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/tests/test_cache_retry.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/tests/test_completion.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/tests/test_config.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/tests/test_config_extended.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/tests/test_console.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/tests/test_coverage_core.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/tests/test_dispatch.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/tests/test_dispatch_extended.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/tests/test_dispatch_race.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/tests/test_entml_agent_output_formats.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/tests/test_entml_bare_invoke_format.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/tests/test_entml_batch_stream_comprehensive.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/tests/test_entml_invoke_known_tool_gate.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/tests/test_entml_parser_comprehensive.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/tests/test_entml_stream_json.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/tests/test_entml_stream_json_exhaustive.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/tests/test_entml_thinking_history.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/tests/test_entml_thinking_parse.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/tests/test_entml_tool_parse_leak.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/tests/test_entml_tools.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/tests/test_errors.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/tests/test_errors_common.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/tests/test_events.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/tests/test_events_event.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/tests/test_facade.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/tests/test_fake_history_markup_batch.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/tests/test_fake_history_markup_invoke_preserve.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/tests/test_fake_history_markup_reply_protect.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/tests/test_fake_history_markup_stream.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/tests/test_fault_thinking_close_batch.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/tests/test_fault_thinking_close_stream.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/tests/test_fncall.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/tests/test_fncall_stream_thinking.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/tests/test_history_markup_filter.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/tests/test_ids.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/tests/test_imports.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/tests/test_io.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/tests/test_keys.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/tests/test_lifecycle.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/tests/test_logger.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/tests/test_merge.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/tests/test_model_branch_matrix.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/tests/test_plugin.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/tests/test_printstream.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/tests/test_protocols.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/tests/test_proxy.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/tests/test_proxy_selector.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/tests/test_runtime.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/tests/test_scheduler.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/tests/test_simulated_llm_tool_parse.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/tests/test_stream_partial_json_parity.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/tests/test_stream_realtime_parse.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/tests/test_tracing.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/tests/test_usage.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/tests/test_web.py +0 -0
- {echotools-2.3.89 → echotools-2.3.90}/src/tests/test_web_broker.py +0 -0
|
@@ -118,14 +118,24 @@ _HISTORY_CLARIFY_EN = (
|
|
|
118
118
|
"The user's latest message follows below."
|
|
119
119
|
)
|
|
120
120
|
|
|
121
|
-
|
|
122
|
-
"IMPORTANT
|
|
123
|
-
"
|
|
124
|
-
"
|
|
125
|
-
"
|
|
126
|
-
"
|
|
121
|
+
_TOOL_INVOKE_REMINDER_EN = (
|
|
122
|
+
"IMPORTANT — Tool invocation format for THIS reply (mandatory):\n"
|
|
123
|
+
"1. To execute a tool, output a literal `<entml:invoke name=\"TOOL_NAME\">` block "
|
|
124
|
+
"exactly as shown at the top of this prompt. The opening tag MUST close with `>`; "
|
|
125
|
+
"`TOOL_NAME` MUST be one of the available functions listed above (not a placeholder "
|
|
126
|
+
"or invented name).\n"
|
|
127
|
+
"2. Each argument goes in "
|
|
128
|
+
"`<entml:parameter name=\"PARAMETER_NAME\">VALUE</entml:parameter>` inside the invoke; "
|
|
129
|
+
"close with `</entml:invoke>`. String/scalar values as-is; lists and objects as JSON.\n"
|
|
130
|
+
"3. Do NOT copy `<tool>` blocks or `{ToolName: ...}` lines from conversation history — "
|
|
131
|
+
"those turns are already executed. History is context only; never re-invoke completed tools.\n"
|
|
132
|
+
"4. When mentioning `<entml:invoke>` in prose without executing, use backticks or otherwise "
|
|
133
|
+
"avoid a closed tag with a real tool name."
|
|
127
134
|
)
|
|
128
135
|
|
|
136
|
+
# Back-compat alias
|
|
137
|
+
_HISTORY_TOOL_INVOKE_REMINDER_EN = _TOOL_INVOKE_REMINDER_EN
|
|
138
|
+
|
|
129
139
|
_HISTORY_CLARIFY_ZH = (
|
|
130
140
|
"以下是已完成的交互记录。"
|
|
131
141
|
"此处展示的所有工具调用及其结果均已执行完毕,请勿重复调用。"
|
|
@@ -13,7 +13,7 @@ from typing import Any, Dict, List, Optional, Tuple
|
|
|
13
13
|
|
|
14
14
|
from echotools.exec.fncall.prompt.templates import (
|
|
15
15
|
_HISTORY_CLARIFY_EN,
|
|
16
|
-
|
|
16
|
+
_TOOL_INVOKE_REMINDER_EN,
|
|
17
17
|
)
|
|
18
18
|
from echotools.exec.fncall.protocols.entml_invoke import (
|
|
19
19
|
parse_entml_tool_calls,
|
|
@@ -194,8 +194,6 @@ class EntmlProtocol(ToolProtocol):
|
|
|
194
194
|
sections.append(
|
|
195
195
|
format_entml_conversation_history(history_text, _HISTORY_CLARIFY_EN)
|
|
196
196
|
)
|
|
197
|
-
if tool_descs and history_has_tool_calls:
|
|
198
|
-
sections.append(_HISTORY_TOOL_INVOKE_REMINDER_EN)
|
|
199
197
|
|
|
200
198
|
if loop_warning:
|
|
201
199
|
sections.append(f"<loop_warning>\n{loop_warning}\n</loop_warning>")
|
|
@@ -208,6 +206,9 @@ class EntmlProtocol(ToolProtocol):
|
|
|
208
206
|
if current_user_message is not None:
|
|
209
207
|
sections.append(format_entml_current_user_message(current_user_message))
|
|
210
208
|
|
|
209
|
+
if tool_descs:
|
|
210
|
+
sections.append(_TOOL_INVOKE_REMINDER_EN)
|
|
211
|
+
|
|
211
212
|
# thinking 放在最后,超限截断时优先保留在 send_text 尾部
|
|
212
213
|
thinking_section = build_entml_thinking_section(
|
|
213
214
|
protocol_options, has_tools=bool(tool_descs), history_text=history_text
|
|
@@ -510,12 +510,12 @@ def test_entml_history_tool_invoke_reminder_when_tools_in_history() -> None:
|
|
|
510
510
|
assert "{search: docs}" in content or '"query": "docs"' in content
|
|
511
511
|
assert "<tool>" in content
|
|
512
512
|
assert "found 3" in content
|
|
513
|
-
assert "IMPORTANT
|
|
514
|
-
assert "`<entml:invoke
|
|
513
|
+
assert "IMPORTANT — Tool invocation format for THIS reply" in content
|
|
514
|
+
assert "`<entml:invoke name=\"TOOL_NAME\">`" in content
|
|
515
515
|
hist_idx = content.index("<entml:conversation_history>")
|
|
516
|
-
reminder_idx = content.index("IMPORTANT
|
|
516
|
+
reminder_idx = content.index("IMPORTANT — Tool invocation format")
|
|
517
517
|
user_idx = content.index("<current_user_message>")
|
|
518
|
-
assert hist_idx <
|
|
518
|
+
assert hist_idx < user_idx < reminder_idx
|
|
519
519
|
|
|
520
520
|
|
|
521
521
|
def test_strip_entml_from_user_content() -> None:
|
|
@@ -756,11 +756,11 @@ class TestBuildMechanisms:
|
|
|
756
756
|
idx_tools = prompt.index("### search")
|
|
757
757
|
idx_sys = prompt.index("<user_system_prompt>")
|
|
758
758
|
idx_hist = prompt.index("<entml:conversation_history>")
|
|
759
|
-
idx_remind = prompt.index("IMPORTANT:")
|
|
760
759
|
idx_loop = prompt.index("<loop_warning>")
|
|
761
760
|
idx_user = prompt.index("<current_user_message>")
|
|
761
|
+
idx_remind = prompt.index("IMPORTANT — Tool invocation format")
|
|
762
762
|
idx_think = prompt.index("<entml:thinking_mode>")
|
|
763
|
-
assert idx_tools < idx_sys < idx_hist <
|
|
763
|
+
assert idx_tools < idx_sys < idx_hist < idx_loop < idx_user < idx_remind < idx_think
|
|
764
764
|
|
|
765
765
|
def test_inject_builds_history_tool_blocks(self) -> None:
|
|
766
766
|
proto = _proto()
|
|
@@ -788,7 +788,7 @@ class TestBuildMechanisms:
|
|
|
788
788
|
assert "{search: q}" in content
|
|
789
789
|
assert "found" in content
|
|
790
790
|
assert "<current_user_message>\nnext\n</current_user_message>" in content
|
|
791
|
-
assert "IMPORTANT
|
|
791
|
+
assert "IMPORTANT — Tool invocation format" in content
|
|
792
792
|
|
|
793
793
|
def test_build_then_parse_multi_tool_roundtrip(self) -> None:
|
|
794
794
|
rendered = format_entml_tool_calls(
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/fncall/protocols/entml_stream/__init__.py
RENAMED
|
File without changes
|
{echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/fncall/protocols/entml_stream/body.py
RENAMED
|
File without changes
|
{echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/fncall/protocols/entml_stream/snap.py
RENAMED
|
File without changes
|
{echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/fncall/protocols/entml_think/__init__.py
RENAMED
|
File without changes
|
{echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/fncall/protocols/entml_think/blocks.py
RENAMED
|
File without changes
|
{echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/fncall/protocols/entml_think/core.py
RENAMED
|
File without changes
|
{echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/fncall/protocols/entml_think/filter.py
RENAMED
|
File without changes
|
{echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/fncall/protocols/entml_think/hist.py
RENAMED
|
File without changes
|
{echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/fncall/protocols/entml_think/hold.py
RENAMED
|
File without changes
|
{echotools-2.3.89 → echotools-2.3.90}/src/echotools/exec/fncall/protocols/entml_think/parse.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/console/uicore/mixins/uiinteract.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/web/input_box/components/filezone.js
RENAMED
|
File without changes
|
{echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/web/input_box/components/motionkit.js
RENAMED
|
File without changes
|
{echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/web/input_box/components/sendbutton.js
RENAMED
|
File without changes
|
{echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/web/input_box/components/sortablelist.css
RENAMED
|
File without changes
|
{echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/web/input_box/components/sortablelist.js
RENAMED
|
File without changes
|
{echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/web/input_box/components/textinput.js
RENAMED
|
File without changes
|
{echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/web/input_box/components/voiceinput.js
RENAMED
|
File without changes
|
{echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/web/input_box/fonts/inter-500.woff2
RENAMED
|
File without changes
|
{echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/web/input_box/fonts/inter-600.woff2
RENAMED
|
File without changes
|
{echotools-2.3.89 → echotools-2.3.90}/src/echotools/media/web/input_box/fonts/inter400.woff2
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{echotools-2.3.89 → echotools-2.3.90}/src/tests/fixtures/simulated_fake_history_markup_responses.py
RENAMED
|
File without changes
|
{echotools-2.3.89 → echotools-2.3.90}/src/tests/fixtures/simulated_fault_thinking_responses.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|