diff --git a/studio/backend/core/inference/safetensors_agentic.py b/studio/backend/core/inference/safetensors_agentic.py index 8a536a4bfd..24b598a2a6 100644 --- a/studio/backend/core/inference/safetensors_agentic.py +++ b/studio/backend/core/inference/safetensors_agentic.py @@ -317,7 +317,9 @@ def run_safetensors_tool_loop( ) tc_key = tool_name + str(arguments) - is_disabled = bool(allowed_tool_names) and tool_name not in allowed_tool_names + is_disabled = ( + bool(allowed_tool_names) and tool_name not in allowed_tool_names + ) already_ran_ok = any( k == tc_key and not err for k, err in tool_call_history ) @@ -326,7 +328,9 @@ def run_safetensors_tool_loop( # asking the user to approve it would be noise. Registering the # approval slot *before* tool_start closes the race where the # confirmation could arrive before the waiter exists. - needs_confirm = confirm_tool_calls and not is_disabled and not already_ran_ok + needs_confirm = ( + confirm_tool_calls and not is_disabled and not already_ran_ok + ) approval_id = new_approval_id() if needs_confirm else "" decision_slot = ( begin_tool_decision(session_id, approval_id) if needs_confirm else None diff --git a/studio/backend/state/tool_approvals.py b/studio/backend/state/tool_approvals.py index b3b9e212d6..1fc7981eb7 100644 --- a/studio/backend/state/tool_approvals.py +++ b/studio/backend/state/tool_approvals.py @@ -58,9 +58,7 @@ def begin_tool_decision(session_id, approval_id) -> dict: return slot -def wait_tool_decision( - slot, approval_id, cancel_event = None, timeout = _DECISION_TIMEOUT -): +def wait_tool_decision(slot, approval_id, cancel_event = None, timeout = _DECISION_TIMEOUT): """Block on a slot from ``begin_tool_decision`` until the user decides. Returns ``"allow"`` or ``"deny"``. Falls back to ``"deny"`` if the wait diff --git a/studio/backend/tests/test_tool_approvals.py b/studio/backend/tests/test_tool_approvals.py index 4855035435..10db93ea90 100644 --- a/studio/backend/tests/test_tool_approvals.py +++ b/studio/backend/tests/test_tool_approvals.py @@ -52,9 +52,7 @@ class _Waiter: kwargs = {"cancel_event": self.cancel_event} if self.timeout is not None: kwargs["timeout"] = self.timeout - self.result = request_tool_decision( - self.session_id, self.approval_id, **kwargs - ) + self.result = request_tool_decision(self.session_id, self.approval_id, **kwargs) def start(self): self._thread.start() @@ -209,7 +207,9 @@ def test_concurrent_distinct_calls_route_their_own_decisions(): for i in range(n): aid = new_approval_id() waiters[aid] = _Waiter(f"s{i}", aid).start() - expected = {aid: ("allow" if i % 2 == 0 else "deny") for i, aid in enumerate(waiters)} + expected = { + aid: ("allow" if i % 2 == 0 else "deny") for i, aid in enumerate(waiters) + } for aid, decision in expected.items(): assert resolve_tool_decision(aid, decision) is True for aid, w in waiters.items(): diff --git a/studio/backend/tests/test_tool_confirm_loop.py b/studio/backend/tests/test_tool_confirm_loop.py index f3a8d7194f..060d26cdef 100644 --- a/studio/backend/tests/test_tool_confirm_loop.py +++ b/studio/backend/tests/test_tool_confirm_loop.py @@ -36,7 +36,9 @@ class _FakeExecuteTool: def __init__(self): self.calls = [] - def __call__(self, name, arguments, *, cancel_event = None, timeout = None, session_id = None): + def __call__( + self, name, arguments, *, cancel_event = None, timeout = None, session_id = None + ): self.calls.append((name, arguments)) return f"RESULT[{name}]"