1 Commits

Author SHA1 Message Date
Grail Finder
2687f38d00 Chore: remove unnecessary code 2026-03-05 00:28:47 +03:00
3 changed files with 13 additions and 47 deletions

View File

@@ -38,8 +38,3 @@ func RegisterA(toolNames []string, a AgenterA) {
func Get(toolName string) AgenterB { func Get(toolName string) AgenterB {
return RegistryB[toolName] return RegistryB[toolName]
} }
// Register is a convenience wrapper for RegisterB.
func Register(toolName string, a AgenterB) {
RegisterB(toolName, a)
}

View File

@@ -32,10 +32,10 @@ func detectAPI(api string) (isCompletion, isChat, isDeepSeek, isOpenRouter bool)
type AgentClient struct { type AgentClient struct {
cfg *config.Config cfg *config.Config
getToken func() string getToken func() string
log slog.Logger log *slog.Logger
} }
func NewAgentClient(cfg *config.Config, log slog.Logger, gt func() string) *AgentClient { func NewAgentClient(cfg *config.Config, log *slog.Logger, gt func() string) *AgentClient {
return &AgentClient{ return &AgentClient{
cfg: cfg, cfg: cfg,
getToken: gt, getToken: gt,
@@ -44,7 +44,7 @@ func NewAgentClient(cfg *config.Config, log slog.Logger, gt func() string) *Agen
} }
func (ag *AgentClient) Log() *slog.Logger { func (ag *AgentClient) Log() *slog.Logger {
return &ag.log return ag.log
} }
func (ag *AgentClient) FormMsg(sysprompt, msg string) (io.Reader, error) { func (ag *AgentClient) FormMsg(sysprompt, msg string) (io.Reader, error) {
@@ -63,11 +63,9 @@ func (ag *AgentClient) buildRequest(sysprompt, msg string) ([]byte, error) {
{Role: "system", Content: sysprompt}, {Role: "system", Content: sysprompt},
{Role: "user", Content: msg}, {Role: "user", Content: msg},
} }
// Determine API type // Determine API type
isCompletion, isChat, isDeepSeek, isOpenRouter := detectAPI(api) isCompletion, isChat, isDeepSeek, isOpenRouter := detectAPI(api)
ag.log.Debug("agent building request", "api", api, "isCompletion", isCompletion, "isChat", isChat, "isDeepSeek", isDeepSeek, "isOpenRouter", isOpenRouter) ag.log.Debug("agent building request", "api", api, "isCompletion", isCompletion, "isChat", isChat, "isDeepSeek", isDeepSeek, "isOpenRouter", isOpenRouter)
// Build prompt for completion endpoints // Build prompt for completion endpoints
if isCompletion { if isCompletion {
var sb strings.Builder var sb strings.Builder
@@ -76,7 +74,6 @@ func (ag *AgentClient) buildRequest(sysprompt, msg string) ([]byte, error) {
sb.WriteString("\n") sb.WriteString("\n")
} }
prompt := strings.TrimSpace(sb.String()) prompt := strings.TrimSpace(sb.String())
switch { switch {
case isDeepSeek: case isDeepSeek:
// DeepSeek completion // DeepSeek completion
@@ -95,7 +92,6 @@ func (ag *AgentClient) buildRequest(sysprompt, msg string) ([]byte, error) {
return json.Marshal(req) return json.Marshal(req)
} }
} }
// Chat completions endpoints // Chat completions endpoints
if isChat || !isCompletion { if isChat || !isCompletion {
chatBody := &models.ChatBody{ chatBody := &models.ChatBody{
@@ -103,7 +99,6 @@ func (ag *AgentClient) buildRequest(sysprompt, msg string) ([]byte, error) {
Stream: false, // Agents don't need streaming Stream: false, // Agents don't need streaming
Messages: messages, Messages: messages,
} }
switch { switch {
case isDeepSeek: case isDeepSeek:
// DeepSeek chat // DeepSeek chat
@@ -122,7 +117,6 @@ func (ag *AgentClient) buildRequest(sysprompt, msg string) ([]byte, error) {
return json.Marshal(req) return json.Marshal(req)
} }
} }
// Fallback (should not reach here) // Fallback (should not reach here)
ag.log.Warn("unknown API, using default chat completions format", "api", api) ag.log.Warn("unknown API, using default chat completions format", "api", api)
chatBody := &models.ChatBody{ chatBody := &models.ChatBody{
@@ -165,7 +159,6 @@ func (ag *AgentClient) LLMRequest(body io.Reader) ([]byte, error) {
ag.log.Error("agent LLM request failed", "status", resp.StatusCode, "response", string(responseBytes[:min(len(responseBytes), 1000)])) ag.log.Error("agent LLM request failed", "status", resp.StatusCode, "response", string(responseBytes[:min(len(responseBytes), 1000)]))
return responseBytes, fmt.Errorf("HTTP %d: %s", resp.StatusCode, string(responseBytes[:min(len(responseBytes), 200)])) return responseBytes, fmt.Errorf("HTTP %d: %s", resp.StatusCode, string(responseBytes[:min(len(responseBytes), 200)]))
} }
// Parse response and extract text content // Parse response and extract text content
text, err := extractTextFromResponse(responseBytes) text, err := extractTextFromResponse(responseBytes)
if err != nil { if err != nil {
@@ -179,17 +172,16 @@ func (ag *AgentClient) LLMRequest(body io.Reader) ([]byte, error) {
// extractTextFromResponse parses common LLM response formats and extracts the text content. // extractTextFromResponse parses common LLM response formats and extracts the text content.
func extractTextFromResponse(data []byte) (string, error) { func extractTextFromResponse(data []byte) (string, error) {
// Try to parse as generic JSON first // Try to parse as generic JSON first
var genericResp map[string]interface{} var genericResp map[string]any
if err := json.Unmarshal(data, &genericResp); err != nil { if err := json.Unmarshal(data, &genericResp); err != nil {
// Not JSON, return as string // Not JSON, return as string
return string(data), nil return string(data), nil
} }
// Check for OpenAI chat completion format // Check for OpenAI chat completion format
if choices, ok := genericResp["choices"].([]interface{}); ok && len(choices) > 0 { if choices, ok := genericResp["choices"].([]any); ok && len(choices) > 0 {
if firstChoice, ok := choices[0].(map[string]interface{}); ok { if firstChoice, ok := choices[0].(map[string]any); ok {
// Chat completion: choices[0].message.content // Chat completion: choices[0].message.content
if message, ok := firstChoice["message"].(map[string]interface{}); ok { if message, ok := firstChoice["message"].(map[string]any); ok {
if content, ok := message["content"].(string); ok { if content, ok := message["content"].(string); ok {
return content, nil return content, nil
} }
@@ -199,19 +191,17 @@ func extractTextFromResponse(data []byte) (string, error) {
return text, nil return text, nil
} }
// Delta format for streaming (should not happen with stream: false) // Delta format for streaming (should not happen with stream: false)
if delta, ok := firstChoice["delta"].(map[string]interface{}); ok { if delta, ok := firstChoice["delta"].(map[string]any); ok {
if content, ok := delta["content"].(string); ok { if content, ok := delta["content"].(string); ok {
return content, nil return content, nil
} }
} }
} }
} }
// Check for llama.cpp completion format // Check for llama.cpp completion format
if content, ok := genericResp["content"].(string); ok { if content, ok := genericResp["content"].(string); ok {
return content, nil return content, nil
} }
// Unknown format, return pretty-printed JSON // Unknown format, return pretty-printed JSON
prettyJSON, err := json.MarshalIndent(genericResp, "", " ") prettyJSON, err := json.MarshalIndent(genericResp, "", " ")
if err != nil { if err != nil {
@@ -219,10 +209,3 @@ func extractTextFromResponse(data []byte) (string, error) {
} }
return string(prettyJSON), nil return string(prettyJSON), nil
} }
func min(a, b int) int {
if a < b {
return a
}
return b
}

View File

@@ -278,25 +278,13 @@ func updateToolCapabilities() {
// getWebAgentClient returns a singleton AgentClient for web agents. // getWebAgentClient returns a singleton AgentClient for web agents.
func getWebAgentClient() *agent.AgentClient { func getWebAgentClient() *agent.AgentClient {
webAgentClientOnce.Do(func() { webAgentClientOnce.Do(func() {
if cfg == nil {
if logger != nil {
logger.Warn("web agent client unavailable: config not initialized")
}
return
}
if logger == nil {
if logger != nil {
logger.Warn("web agent client unavailable: logger not initialized")
}
return
}
getToken := func() string { getToken := func() string {
if chunkParser == nil { if chunkParser == nil {
return "" return ""
} }
return chunkParser.GetToken() return chunkParser.GetToken()
} }
webAgentClient = agent.NewAgentClient(cfg, *logger, getToken) webAgentClient = agent.NewAgentClient(cfg, logger, getToken)
}) })
return webAgentClient return webAgentClient
} }
@@ -306,13 +294,13 @@ func registerWebAgents() {
webAgentsOnce.Do(func() { webAgentsOnce.Do(func() {
client := getWebAgentClient() client := getWebAgentClient()
// Register rag_search agent // Register rag_search agent
agent.Register("rag_search", agent.NewWebAgentB(client, ragSearchSysPrompt)) agent.RegisterB("rag_search", agent.NewWebAgentB(client, ragSearchSysPrompt))
// Register websearch agent // Register websearch agent
agent.Register("websearch", agent.NewWebAgentB(client, webSearchSysPrompt)) agent.RegisterB("websearch", agent.NewWebAgentB(client, webSearchSysPrompt))
// Register read_url agent // Register read_url agent
agent.Register("read_url", agent.NewWebAgentB(client, readURLSysPrompt)) agent.RegisterB("read_url", agent.NewWebAgentB(client, readURLSysPrompt))
// Register summarize_chat agent // Register summarize_chat agent
agent.Register("summarize_chat", agent.NewWebAgentB(client, summarySysPrompt)) agent.RegisterB("summarize_chat", agent.NewWebAgentB(client, summarySysPrompt))
}) })
} }