From 4f6000a43ad2ee019a799c5b5154af9f853e2b83 Mon Sep 17 00:00:00 2001 From: Grail Finder Date: Mon, 2 Mar 2026 11:25:20 +0300 Subject: Enha: check if model has vision before giving it vision tools --- tools.go | 41 ++++++++++++++++++++++++++++++++++------- 1 file changed, 34 insertions(+), 7 deletions(-) (limited to 'tools.go') diff --git a/tools.go b/tools.go index 494711e..fc76933 100644 --- a/tools.go +++ b/tools.go @@ -202,6 +202,7 @@ var ( windowToolsAvailable bool xdotoolPath string maimPath string + modelHasVision bool ) func init() { @@ -233,6 +234,29 @@ func checkWindowTools() { } } +func UpdateToolCapabilities() { + if !cfg.ToolUse { + return + } + modelHasVision = false + if cfg == nil || cfg.CurrentAPI == "" { + logger.Warn("cannot determine model capabilities: cfg or CurrentAPI is nil") + registerWindowTools() + return + } + prevHasVision := modelHasVision + modelHasVision = ModelHasVision(cfg.CurrentAPI, cfg.CurrentModel) + if modelHasVision { + logger.Info("model has vision support", "model", cfg.CurrentModel, "api", cfg.CurrentAPI) + } else { + logger.Info("model does not have vision support", "model", cfg.CurrentModel, "api", cfg.CurrentAPI) + if windowToolsAvailable && !prevHasVision && modelHasVision == false { + notifyUser("window tools", "Window capture-and-view unavailable: model lacks vision support") + } + } + registerWindowTools() +} + // getWebAgentClient returns a singleton AgentClient for web agents. func getWebAgentClient() *agent.AgentClient { webAgentClientOnce.Do(func() { @@ -1344,9 +1368,8 @@ func registerWindowTools() { if windowToolsAvailable { fnMap["list_windows"] = listWindows fnMap["capture_window"] = captureWindow - fnMap["capture_window_and_view"] = captureWindowAndView - baseTools = append(baseTools, - models.Tool{ + windowTools := []models.Tool{ + { Type: "function", Function: models.ToolFunc{ Name: "list_windows", @@ -1358,7 +1381,7 @@ func registerWindowTools() { }, }, }, - models.Tool{ + { Type: "function", Function: models.ToolFunc{ Name: "capture_window", @@ -1375,7 +1398,10 @@ func registerWindowTools() { }, }, }, - models.Tool{ + } + if modelHasVision { + fnMap["capture_window_and_view"] = captureWindowAndView + windowTools = append(windowTools, models.Tool{ Type: "function", Function: models.ToolFunc{ Name: "capture_window_and_view", @@ -1391,8 +1417,9 @@ func registerWindowTools() { }, }, }, - }, - ) + }) + } + baseTools = append(baseTools, windowTools...) toolSysMsg += windowToolSysMsg } } -- cgit v1.2.3