Feat: websearch_raw

This commit is contained in:
Grail Finder
2026-01-05 12:40:25 +03:00
parent 7ed24ce403
commit 29f95a639b

106
tools.go
View File

@@ -53,12 +53,22 @@ Your current tools:
{
"name":"websearch",
"args": ["query", "limit"],
"when_to_use": "when asked to search the web for information; limit is optional (default 3)"
"when_to_use": "when asked to search the web for information; returns clean summary without html,css and other web elements; limit is optional (default 3)"
},
{
"name":"websearch_raw",
"args": ["query", "limit"],
"when_to_use": "when asked to search the web for information; returns raw data as is without processing; limit is optional (default 3)"
},
{
"name":"read_url",
"args": ["url"],
"when_to_use": "when asked to get content for spicific webpage or url"
"when_to_use": "when asked to get content for specific webpage or url; returns clean summary without html,css and other web elements"
},
{
"name":"read_url_raw",
"args": ["url"],
"when_to_use": "when asked to get content for specific webpage or url; returns raw data as is without processing"
},
{
"name":"file_create",
@@ -227,6 +237,35 @@ func websearch(args map[string]string) []byte {
return data
}
// web search raw (returns raw data without processing)
func websearchRaw(args map[string]string) []byte {
// make http request return bytes
query, ok := args["query"]
if !ok || query == "" {
msg := "query not provided to websearch_raw tool"
logger.Error(msg)
return []byte(msg)
}
limitS, ok := args["limit"]
if !ok || limitS == "" {
limitS = "3"
}
limit, err := strconv.Atoi(limitS)
if err != nil || limit == 0 {
logger.Warn("websearch_raw limit; passed bad value; setting to default (3)",
"limit_arg", limitS, "error", err)
limit = 3
}
resp, err := WebSearcher.Search(context.Background(), query, limit)
if err != nil {
msg := "search tool failed; error: " + err.Error()
logger.Error(msg)
return []byte(msg)
}
// Return raw response without any processing
return []byte(fmt.Sprintf("%+v", resp))
}
// retrieves url content (text)
func readURL(args map[string]string) []byte {
// make http request return bytes
@@ -251,6 +290,25 @@ func readURL(args map[string]string) []byte {
return data
}
// retrieves url content raw (returns raw content without processing)
func readURLRaw(args map[string]string) []byte {
// make http request return bytes
link, ok := args["url"]
if !ok || link == "" {
msg := "link not provided to read_url_raw tool"
logger.Error(msg)
return []byte(msg)
}
resp, err := WebSearcher.RetrieveFromLink(context.Background(), link)
if err != nil {
msg := "search tool failed; error: " + err.Error()
logger.Error(msg)
return []byte(msg)
}
// Return raw response without any processing
return []byte(fmt.Sprintf("%+v", resp))
}
/*
consider cases:
- append mode (treat it like a journal appendix)
@@ -891,7 +949,9 @@ var fnMap = map[string]fnSig{
"recall_topics": recallTopics,
"memorise": memorise,
"websearch": websearch,
"websearch_raw": websearchRaw,
"read_url": readURL,
"read_url_raw": readURLRaw,
"file_create": fileCreate,
"file_read": fileRead,
"file_write": fileWrite,
@@ -951,7 +1011,47 @@ var baseTools = []models.Tool{
Type: "function",
Function: models.ToolFunc{
Name: "read_url",
Description: "Retrieves text content of given link.",
Description: "Retrieves text content of given link, providing clean summary without html,css and other web elements.",
Parameters: models.ToolFuncParams{
Type: "object",
Required: []string{"url"},
Properties: map[string]models.ToolArgProps{
"url": models.ToolArgProps{
Type: "string",
Description: "link to the webpage to read text from",
},
},
},
},
},
// websearch_raw
models.Tool{
Type: "function",
Function: models.ToolFunc{
Name: "websearch_raw",
Description: "Search web given query, returning raw data as is without processing. Use when you need the raw response data instead of a clean summary.",
Parameters: models.ToolFuncParams{
Type: "object",
Required: []string{"query", "limit"},
Properties: map[string]models.ToolArgProps{
"query": models.ToolArgProps{
Type: "string",
Description: "search query",
},
"limit": models.ToolArgProps{
Type: "string",
Description: "limit of the website results",
},
},
},
},
},
// read_url_raw
models.Tool{
Type: "function",
Function: models.ToolFunc{
Name: "read_url_raw",
Description: "Retrieves raw content of given link without processing. Use when you need the raw response data instead of a clean summary.",
Parameters: models.ToolFuncParams{
Type: "object",
Required: []string{"url"},