{"record":{"id":"92a240b48c8bfa96","repo":"sgl-project/sglang","slug":"unknown-browser-action-recipient-92a240","errorCode":null,"errorMessage":"Unknown browser action: {recipient}","messagePattern":"Unknown browser action: (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"python/sglang/srt/entrypoints/tool.py","lineNumber":87,"sourceCode":"        if recipient == \"browser.search\":\n            query = args.get(\"query\")\n            if not query:\n                raise ValueError(\"browser.search requires a query\")\n            data = await self.exa_client.search(query)\n            return self._format_search_results(context, query, data)\n\n        if recipient == \"browser.open\":\n            url = self._resolve_url(context, args)\n            data = await self.exa_client.contents([url])\n            return self._format_page_contents(context, url, data)\n\n        if recipient == \"browser.find\":\n            pattern = args.get(\"pattern\")\n            if not pattern:\n                raise ValueError(\"browser.find requires a pattern\")\n            return await self._find_pattern(context, args, pattern)\n\n        raise ValueError(f\"Unknown browser action: {recipient}\")\n\n    def _browser_state(self, context: \"ConversationContext\") -> dict[str, Any]:\n        state = getattr(context, \"_sglang_exa_browser_state\", None)\n        if state is None:\n            state = {\"pages\": {}, \"page_text\": {}}\n            setattr(context, \"_sglang_exa_browser_state\", state)\n        return state\n\n    def _format_search_results(\n        self, context: \"ConversationContext\", query: str, data: dict[str, Any]\n    ) -> str:\n        state = self._browser_state(context)\n        state[\"pages\"] = {}\n        state[\"page_text\"] = {}\n\n        results = data.get(\"results\") or []\n        request_id = data.get(\"requestId\")\n        if request_id:","sourceCodeStart":69,"sourceCodeEnd":105,"githubUrl":"https://github.com/sgl-project/sglang/blob/0132848349585cfe6aae51c4941cbae872505f8a/python/sglang/srt/entrypoints/tool.py#L69-L105","documentation":"SGLang's browser tool dispatcher received a recipient starting with 'browser.' that is not one of the supported actions (browser.search, browser.open, browser.find). This indicates an unrecognized or misspelled browser action name.","triggerScenarios":"Dispatching e.g. 'browser.navigate', 'browser.click', or 'browser.Search' (wrong case) through get_result or run_tool_flow.","commonSituations":"Model hallucinating an unlisted browser action, a typo in a manually crafted tool call, or newer model tool schemas advertising actions this SGLang version does not implement (version mismatch after upgrade).","solutions":["Check the exact recipient string against the supported set: browser.search/browser.open/browser.find","Upgrade SGLang if a newer browser action is required and supported in a later release","Re-prompt the model to use one of the supported actions"],"exampleFix":"# before\nrecipient = \"browser.navigate\"\n# after\nrecipient = \"browser.open\"  # with {\"url\": \"...\"}","handlingStrategy":"fallback","validationCode":"SUPPORTED = {\"browser.search\", \"browser.open\", \"browser.find\"}\nrecipient = last_msg.recipient\nassert recipient in SUPPORTED, f\"unsupported browser action: {recipient}\"","typeGuard":"def is_supported_browser_action(recipient: str) -> bool:\n    return recipient in {\"browser.search\", \"browser.open\", \"browser.find\"}","tryCatchPattern":"try:\n    out = await tool._dispatch_browser_call(context, recipient, args)\nexcept ValueError as e:\n    if str(e).startswith(\"Unknown browser action\"):\n        out = await tool._dispatch_browser_call(context, \"browser.search\", {\"query\": str(args)})","preventionTips":["Keep the model-visible tool list in sync with the dispatcher's supported actions","Log unknown recipients to detect schema drift early"],"tags":["browser","unknown-action","tool-calling","dispatch"],"backgroundTag":"unknown-tool-action","analyzedSha":"0132848349585cfe6aae51c4941cbae872505f8a","analyzedAt":"2026-08-28T05:10:05.995Z","schemaVersion":2},"datasetVersion":"2026-08-28T11:17:15.048Z"}