MCPcopy
hub / github.com/google/ax / NewControllerFromConfig

Function NewControllerFromConfig

internal/cliutil/cliutil.go:30–98  ·  view source on GitHub ↗

NewControllerFromConfig creates a new Controller instance based on the provided configuration.

(ctx context.Context, cfg *config.Config)

Source from the content-addressed store, hash-verified

28
29// NewControllerFromConfig creates a new Controller instance based on the provided configuration.
30func NewControllerFromConfig(ctx context.Context, cfg *config.Config) (*controller.Controller, error) {
31 // Validate planner type early
32 switch cfg.Planner.Type {
33 case "gemini":
34 // valid
35 default:
36 return nil, fmt.Errorf("unknown planner type: %s", cfg.Planner.Type)
37 }
38
39 // Create event log builder
40 eventLogBuilder := func() (executor.EventLog, error) {
41 return executor.OpenSQLiteEventLog(cfg.EventLog.SQLiteConfig.Filename)
42 }
43
44 // Create planner builder
45 plannerBuilder := func(ctx context.Context, r *controller.Registry) (agent.Agent, error) {
46 switch cfg.Planner.Type {
47 case "gemini":
48 timeout, err := time.ParseDuration(cfg.Planner.Gemini.Timeout)
49 if err != nil {
50 return nil, fmt.Errorf("failed to parse duration: %v", err)
51 }
52 return gemini.NewGeminiPlannerAgent(ctx, r, gemini.GeminiPlannerConfig{
53 GeminiConfig: &config.GeminiConfig{
54 Model: cfg.Planner.Gemini.Model,
55 MaxTokens: cfg.Planner.Gemini.MaxTokens,
56 Temperature: cfg.Planner.Gemini.Temperature,
57 Timeout: timeout,
58 SystemPrompt: cfg.Planner.Gemini.SystemPrompt,
59 },
60 SkillsDir: cfg.Planner.Gemini.SkillsDir,
61 })
62 default:
63 return nil, fmt.Errorf("unknown planner type: %s", cfg.Planner.Type)
64 }
65 }
66
67 // Build controller config
68 controllerConfig := controller.Config{
69 EventLogBuilder: eventLogBuilder,
70 PlannerBuilder: plannerBuilder,
71 }
72
73 // Create controller
74 c, err := controller.New(ctx, controllerConfig)
75 if err != nil {
76 return nil, err
77 }
78
79 for _, agentCfg := range cfg.Registry.RemoteAgents {
80 if err := c.Registry().RegisterRemote(ctx, agentCfg); err != nil {
81 return nil, fmt.Errorf("failed to register remote agent %s: %w", agentCfg.ID, err)
82 }
83 }
84
85 for _, agentCfg := range cfg.Registry.ColabAgents {
86 if err := c.Registry().RegisterColab(agentCfg); err != nil {
87 return nil, fmt.Errorf("failed to register colab agent %s: %w", agentCfg.ID, err)

Callers 4

runExecFunction · 0.92
runServeFunction · 0.92
runForkFunction · 0.92

Calls 7

OpenSQLiteEventLogFunction · 0.92
NewGeminiPlannerAgentFunction · 0.92
NewFunction · 0.92
RegisterRemoteMethod · 0.80
RegistryMethod · 0.80
RegisterColabMethod · 0.80
RegisterATEMethod · 0.45