Files
gf-lt/agent/agent.go
2025-12-19 11:06:22 +03:00

36 lines
1.1 KiB
Go

package agent
// I see two types of agents possible:
// ones who do their own tools calls
// ones that works only with the output
// A: main chat -> agent (handles everything: tool + processing)
// B: main chat -> tool -> agent (process tool output)
// AgenterA gets a task "find out weather in london"
// proceeds to make tool calls on its own
type AgenterA interface {
ProcessTask(task string) []byte
}
// AgenterB defines an interface for processing tool outputs
type AgenterB interface {
// Process takes the original tool arguments and the raw output from the tool,
// and returns a cleaned/summarized version suitable for the main LLM context
Process(args map[string]string, rawOutput []byte) []byte
}
// registry holds mapping from tool names to agents
var RegistryB = make(map[string]AgenterB)
var RegistryA = make(map[AgenterA][]string)
// Register adds an agent for a specific tool name
// If an agent already exists for the tool, it will be replaced
func RegisterB(toolName string, a AgenterB) {
RegistryB[toolName] = a
}
func RegisterA(toolNames []string, a AgenterA) {
RegistryA[a] = toolNames
}