Skip to content

Release 0.2.1a1#8

Open
github-actions[bot] wants to merge 9 commits into
masterfrom
release-0.2.1a1
Open

Release 0.2.1a1#8
github-actions[bot] wants to merge 9 commits into
masterfrom
release-0.2.1a1

Conversation

@github-actions

Copy link
Copy Markdown

Human review requested!

JarbasAl and others added 9 commits June 10, 2026 22:56
* fix: make SkillMDLoader tests hermetic via auto-discovery mocks

Patch _discover_via_entry_points and _discover_via_package_data in
test_load_invalidated_when_mtime_changes and
test_invalidate_cache_forces_reparse so they do not pick up SKILL.md
files installed in the workspace environment, making the assertions
deterministic regardless of installed packages.

* docs: NLnet/NGI0 funding attribution
* feat: NativeToolCallEngine — provider-native tool-calling loop

Add an agent loop that uses the brain's native function-calling: it passes the
ToolBox objects to continue_chat(tools=...), reads structured AgentMessage.tool_calls
back, executes them via the existing ToolBox machinery, and feeds results back as
MessageRole.TOOL messages until the brain answers. Subclasses ReActLoopEngine and
falls back to the ReAct text loop when the brain lacks supports_tools, so it works
with any brain. Registered as opm.agents.chat entry point ovos-native-toolcall-loop.

Tests, docs (native-toolcall-loop.md + loop-architectures/index), and an example.
CI installs the ovos-plugin-manager tool-calling branch until it releases.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* test: real-stack native tool-call e2e + fix example toolbox init

Add test_native_toolcall_e2e: drives NativeToolCallEngine with a real
OpenAIChatEngine brain (HTTP mocked) and the real MathToolBox, asserting a full
tool round-trip where evaluate_expression actually computes 12*9=108 and the
result is serialized back as a TOOL message. Only the LLM HTTP is mocked. Adds
ovos-openai-plugin as a test brain (CI installs the opm-agents branch). Also fixes
the example: MathToolBox() takes no toolbox_id.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* fix(deps): pin released ovos-plugin-manager>=2.7.0a1; drop opm CI git-ref

The tool-calling contract NativeToolCallEngine relies on (ToolCall, tools=,
supports_tools) is published in ovos-plugin-manager 2.7.0a1, so pin the floor in
pyproject and drop the opm git-ref from build/coverage. The real-stack e2e brain
still installs ovos-openai-plugin@opm-agents via pre_install_pip until that
migration releases.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix(deps): pin released ovos-openai-plugin>=2.0.8a1; drop all CI git-refs

The opm-agents OpenAIChatEngine the real-stack e2e brain uses is published in
ovos-openai-plugin 2.0.8a1, so pin it in the test extra and remove the last
pre_install_pip git-ref from build-tests and coverage. Coverage now installs the
'test' extra so the brain comes from PyPI. CI is fully git-ref-free.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix(ci): use test_extras to install .[test] in coverage job

The coverage reusable workflow installs the package extra via test_extras (the
install_extras input is literal pip args). Set test_extras: test so the pinned
ovos-openai-plugin e2e brain is installed from PyPI.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
…cover (#7)

When a tool was found but its execution raised, _call_tool swallowed the error and
returned the misleading "tool 'X' not found", so the LLM got a wrong observation and
could not recover. Separate lookup failure (try the next toolbox) from execution
failure (return the real error as the observation, e.g. "Error: tool 'X' failed: ...").
Applies to ReActLoopEngine (and NativeToolCallEngine, which inherits _call_tool) and
PlanAndExecuteEngine; adds the LOG import to plan_execute.

Adds test/test_tool_error_observation.py (parametrized over all three engines): tool
succeeds, tool-found-but-raises surfaces the error (not 'not found'), genuine miss
reports 'not found', lookup error falls through, execution error does not fall through.

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant