Skip to content

Release Notes - v0.3.7

Choose a tag to compare

@zhixiangxue zhixiangxue released this 28 May 02:50
· 10 commits to main since this release

Bug Fixes

ToolManager: per-skill state isolation under parallel activation

ToolManager tracked the active skill in a single slot (_active_skill) and
a flat _selected_methods list. When the LLM activated two SkillBase
skills in the same parallel tool_calls batch, the concurrent coroutines
overwrote each other's state and the next round failed Stage-3 dispatch with
Tool not found: <method>.

Fix: replace the single slot with per-skill dicts keyed by skill name plus a
reverse index for O(1) Stage-3 dispatch.

  • _active_skills: Dict[str, SkillObjectTool]
  • _selected_methods: Dict[str, List[str]]
  • _method_to_skill: Dict[str, SkillObjectTool]

All four tool types — NativeFunctionTool, NativeObjectTool,
SkillObjectTool, ClaudeSkill — now run safely in any parallel mix.

Examples

  • examples/tool_calling_parallel_skills.py — end-to-end demo activating
    SkillBase + 2× ClaudeSkill in one parallel batch. Each skill
    leaves a visible marker in the final answer (numeric result, string
    transform, BEGIN/END frame, audit signature line).

Upgrade

pip install -U chakpy==0.3.7