From e4b4220be3c20bd93453fabdd6f5d8d6d8d446ca Mon Sep 17 00:00:00 2001 From: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com> Date: Wed, 8 Apr 2026 15:24:24 -0500 Subject: [PATCH] Dispatch find_similar_objects in chat tool executor --- frigate/api/chat.py | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/frigate/api/chat.py b/frigate/api/chat.py index a549bf70f..219d4d6f0 100644 --- a/frigate/api/chat.py +++ b/frigate/api/chat.py @@ -177,9 +177,7 @@ def _build_similar_candidates_query( clauses.append(Event.sub_label.in_(sub_labels)) if zones: # Mirror the pattern used by frigate/api/event.py for JSON-array zone match. - zone_clauses = [ - Event.zones.cast("text") % f'*"{zone}"*' for zone in zones - ] + zone_clauses = [Event.zones.cast("text") % f'*"{zone}"*' for zone in zones] clauses.append(reduce(operator.or_, zone_clauses)) query = ( @@ -809,6 +807,13 @@ async def execute_tool( if tool_name == "search_objects": return await _execute_search_objects(arguments, allowed_cameras) + if tool_name == "find_similar_objects": + result = await _execute_find_similar_objects( + request, arguments, allowed_cameras + ) + status_code = 200 if "error" not in result else 400 + return JSONResponse(content=result, status_code=status_code) + if tool_name == "set_camera_state": result = await _execute_set_camera_state(request, arguments) return JSONResponse( @@ -992,6 +997,8 @@ async def _execute_tool_internal( except (json.JSONDecodeError, AttributeError) as e: logger.warning(f"Failed to extract tool result: {e}") return {"error": "Failed to parse tool result"} + elif tool_name == "find_similar_objects": + return await _execute_find_similar_objects(request, arguments, allowed_cameras) elif tool_name == "set_camera_state": return await _execute_set_camera_state(request, arguments) elif tool_name == "get_live_context": @@ -1014,8 +1021,9 @@ async def _execute_tool_internal( return _execute_get_recap(arguments, allowed_cameras) else: logger.error( - "Tool call failed: unknown tool %r. Expected one of: search_objects, get_live_context, " - "start_camera_watch, stop_camera_watch, get_profile_status, get_recap. Arguments received: %s", + "Tool call failed: unknown tool %r. Expected one of: search_objects, find_similar_objects, " + "get_live_context, start_camera_watch, stop_camera_watch, get_profile_status, get_recap. " + "Arguments received: %s", tool_name, json.dumps(arguments), )