perf(tools): cache ToolRegistry.get_definitions() between mutations
get_definitions() sorts tools on every LLM iteration for prompt cache stability. Cache the sorted result and invalidate on register/unregister so the sort only runs when the tool set actually changes. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
committed by
Xubin Ren
co-authored by
Claude Opus 4.6
parent
7ce8f247a0
commit
1304ff78cc
@@ -71,3 +71,33 @@ def test_prepare_call_other_tools_keep_generic_object_validation() -> None:
|
||||
assert tool is not None
|
||||
assert params == ["TODO"]
|
||||
assert error == "Error: Invalid parameters for tool 'grep': parameters must be an object, got list"
|
||||
|
||||
|
||||
def test_get_definitions_returns_cached_result() -> None:
|
||||
registry = ToolRegistry()
|
||||
registry.register(_FakeTool("read_file"))
|
||||
first = registry.get_definitions()
|
||||
assert registry._cached_definitions is not None
|
||||
second = registry.get_definitions()
|
||||
assert first == second
|
||||
|
||||
|
||||
def test_register_invalidates_cache() -> None:
|
||||
registry = ToolRegistry()
|
||||
registry.register(_FakeTool("read_file"))
|
||||
first = registry.get_definitions()
|
||||
registry.register(_FakeTool("write_file"))
|
||||
second = registry.get_definitions()
|
||||
assert first is not second
|
||||
assert len(second) == 2
|
||||
|
||||
|
||||
def test_unregister_invalidates_cache() -> None:
|
||||
registry = ToolRegistry()
|
||||
registry.register(_FakeTool("read_file"))
|
||||
registry.register(_FakeTool("write_file"))
|
||||
first = registry.get_definitions()
|
||||
registry.unregister("write_file")
|
||||
second = registry.get_definitions()
|
||||
assert first is not second
|
||||
assert len(second) == 1
|
||||
|
||||
Reference in New Issue
Block a user