ui: add browser get_info tool (#27251)

* ui: add browser get_info tool

* format

* nits

* Update tools/ui/src/lib/stores/tools.svelte.ts

Co-authored-by: Aleksander Grygier <aleksander.grygier@gmail.com>

---------

Co-authored-by: Aleksander Grygier <aleksander.grygier@gmail.com>
This commit is contained in:
Xuan-Son Nguyen
2026-08-17 13:14:33 +02:00
committed by GitHub
co-authored by Aleksander Grygier
parent d83f72d463
commit 7077abbe14
7 changed files with 112 additions and 19 deletions
+39
View File
@@ -0,0 +1,39 @@
/**
* Browser fallback for the server's `get_info` tool, offered only when the
* server does not serve one (llama-server without --agent). It tells the model
* which OS the browser runs on and that there is no local file or shell access,
* so it does not plan around tools that are not there.
*
* @see server_tool_get_info in tools/server/server-tools.cpp - the served variant
* @see buildBrowserInfoToolDefinition in constants/browser-info.ts - tool schema sent to the LLM
*/
import { browser } from '$app/environment';
import {
BROWSER_INFO_NOTE,
BROWSER_INFO_OS_UA_PATTERNS,
BROWSER_INFO_OS_UNKNOWN
} from '$lib/constants';
import type { ToolExecutionResult } from '$lib/types';
function detectOs(userAgent: string): string {
for (const [pattern, os] of BROWSER_INFO_OS_UA_PATTERNS) {
if (pattern.test(userAgent)) return os;
}
return BROWSER_INFO_OS_UNKNOWN;
}
/**
* Result shape mirrors the server tool's JSON so the `get_info` renderer reads
* `os` the same way, minus `cwd` - there is no working directory to report.
*/
export function executeBrowserInfoTool(): ToolExecutionResult {
return {
content: JSON.stringify({
note: BROWSER_INFO_NOTE,
os: browser ? detectOs(navigator.userAgent) : BROWSER_INFO_OS_UNKNOWN
}),
isError: false
};
}