Enha: agent request builder

This commit is contained in:
Grail Finder
2025-12-19 15:39:55 +03:00
parent a875abcf19
commit f779f03974
5 changed files with 431 additions and 31 deletions

View File

@@ -13,6 +13,7 @@ import (
"regexp"
"strconv"
"strings"
"sync"
"time"
)
@@ -126,7 +127,9 @@ under the topic: Adam's number is stored:
</example_response>
After that you are free to respond to the user.
`
basicCard = &models.CharCard{
webSearchSysPrompt = `Summarize the web search results, extracting key information and presenting a concise answer. Provide sources and URLs where relevant.`
readURLSysPrompt = `Extract and summarize the content from the webpage. Provide key information, main points, and any relevant details.`
basicCard = &models.CharCard{
SysPrompt: basicSysMsg,
FirstMsg: defaultFirstMsg,
Role: "",
@@ -141,8 +144,43 @@ After that you are free to respond to the user.
// sysMap = map[string]string{"basic_sys": basicSysMsg, "tool_sys": toolSysMsg}
sysMap = map[string]*models.CharCard{"basic_sys": basicCard}
sysLabels = []string{"basic_sys"}
webAgentClient *agent.AgentClient
webAgentClientOnce sync.Once
webAgentsOnce sync.Once
)
// getWebAgentClient returns a singleton AgentClient for web agents.
func getWebAgentClient() *agent.AgentClient {
webAgentClientOnce.Do(func() {
if cfg == nil {
panic("cfg not initialized")
}
if logger == nil {
panic("logger not initialized")
}
getToken := func() string {
if chunkParser == nil {
return ""
}
return chunkParser.GetToken()
}
webAgentClient = agent.NewAgentClient(cfg, *logger, getToken)
})
return webAgentClient
}
// registerWebAgents registers WebAgentB instances for websearch and read_url tools.
func registerWebAgents() {
webAgentsOnce.Do(func() {
client := getWebAgentClient()
// Register websearch agent
agent.Register("websearch", agent.NewWebAgentB(client, webSearchSysPrompt))
// Register read_url agent
agent.Register("read_url", agent.NewWebAgentB(client, readURLSysPrompt))
})
}
// web search (depends on extra server)
func websearch(args map[string]string) []byte {
// make http request return bytes
@@ -597,7 +635,6 @@ var globalTodoList = TodoList{
Items: []TodoItem{},
}
// Todo Management Tools
func todoCreate(args map[string]string) []byte {
task, ok := args["task"]
@@ -851,6 +888,7 @@ var fnMap = map[string]fnSig{
// callToolWithAgent calls the tool and applies any registered agent.
func callToolWithAgent(name string, args map[string]string) []byte {
registerWebAgents()
f, ok := fnMap[name]
if !ok {
return []byte(fmt.Sprintf("tool %s not found", name))
@@ -862,16 +900,6 @@ func callToolWithAgent(name string, args map[string]string) []byte {
return raw
}
// registerDefaultAgents registers default agents for formatting.
func registerDefaultAgents() {
agent.Register("websearch", agent.DefaultFormatter("websearch"))
agent.Register("read_url", agent.DefaultFormatter("read_url"))
}
func init() {
registerDefaultAgents()
}
// openai style def
var baseTools = []models.Tool{
// websearch