refactor(cognition): one registry builder for daemon, harness and sandboxes
The cognitive registry was assembled by hand in three places. Ablation experiments need the daemon, the test harness and replay sandboxes to name the same processes and hooks, so they now share cognition.NewRegistry; hooks are added only when their store exists, which keeps the harness's previous behaviour.
This commit is contained in:
+2
-4
@@ -174,10 +174,8 @@ func run() error {
|
|||||||
deps.Consolidation = &consolidation.Service{DB: db, Memory: deps.Memory, Beliefs: deps.Beliefs, Events: deps.Events, LLM: deps.LLM, Prompts: deps.Prompts, Minds: deps.Minds, Log: log}
|
deps.Consolidation = &consolidation.Service{DB: db, Memory: deps.Memory, Beliefs: deps.Beliefs, Events: deps.Events, LLM: deps.LLM, Prompts: deps.Prompts, Minds: deps.Minds, Log: log}
|
||||||
deps.Dreaming = &dreaming.Service{DB: db, Memory: deps.Memory, Beliefs: deps.Beliefs, Events: deps.Events, LLM: deps.LLM, Prompts: deps.Prompts, Log: log}
|
deps.Dreaming = &dreaming.Service{DB: db, Memory: deps.Memory, Beliefs: deps.Beliefs, Events: deps.Events, LLM: deps.LLM, Prompts: deps.Prompts, Log: log}
|
||||||
deps.Reflection = &reflection.Service{DB: db, Events: deps.Events, Beliefs: deps.Beliefs, Goals: deps.Goals, Memory: deps.Memory, Predictions: deps.Predictions, LLM: deps.LLM, Prompts: deps.Prompts, Log: log}
|
deps.Reflection = &reflection.Service{DB: db, Events: deps.Events, Beliefs: deps.Beliefs, Goals: deps.Goals, Memory: deps.Memory, Predictions: deps.Predictions, LLM: deps.LLM, Prompts: deps.Prompts, Log: log}
|
||||||
registry := brain.NewRegistry().AddProcess(cognition.Attend{}).AddProcess(cognition.Retrieve{}).AddProcess(cognition.Associate{}).AddProcess(cognition.Perceive{}).
|
registry := cognition.NewRegistry(cognition.Stores{Memory: deps.Memory, Beliefs: deps.Beliefs, Conversations: deps.Conversations, Graph: deps.Graph, Assertions: deps.Assertions,
|
||||||
AddProcess(cognition.GoalMonitor{}).AddProcess(cognition.Curiosity{}).AddProcess(cognition.Metacognition{}).AddProcess(cognition.Act{}).
|
Motivation: deps.Motivation, Narrative: deps.Narrative, Notifications: deps.Notifications})
|
||||||
AddHook(cognition.MotivationHook{Store: deps.Motivation}).AddHook(cognition.NarrativeHook{Store: deps.Narrative}).AddHook(cognition.NotifyHook{Store: deps.Notifications})
|
|
||||||
cognition.Handlers{Memory: deps.Memory, Beliefs: deps.Beliefs, Conversations: deps.Conversations, Graph: deps.Graph, Assertions: deps.Assertions}.Register(registry)
|
|
||||||
brainCfg := brain.Config{DB: db, Events: deps.Events, Minds: deps.Minds, Registry: registry, Pool: scheduler.NewPool(cfg.MaxWorkers),
|
brainCfg := brain.Config{DB: db, Events: deps.Events, Minds: deps.Minds, Registry: registry, Pool: scheduler.NewPool(cfg.MaxWorkers),
|
||||||
Log: log, Metrics: metrics, Services: brain.Services{Events: deps.Events, Memory: deps.Memory, Beliefs: deps.Beliefs, LLM: deps.LLM, Prompts: deps.Prompts,
|
Log: log, Metrics: metrics, Services: brain.Services{Events: deps.Events, Memory: deps.Memory, Beliefs: deps.Beliefs, LLM: deps.LLM, Prompts: deps.Prompts,
|
||||||
Goals: deps.Goals, Motivation: deps.Motivation, Predictions: deps.Predictions, Capabilities: deps.Capabilities}}
|
Goals: deps.Goals, Motivation: deps.Motivation, Predictions: deps.Predictions, Capabilities: deps.Capabilities}}
|
||||||
|
|||||||
@@ -0,0 +1,45 @@
|
|||||||
|
package cognition
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/andydixon/noema/internal/beliefs"
|
||||||
|
"github.com/andydixon/noema/internal/brain"
|
||||||
|
"github.com/andydixon/noema/internal/conversation"
|
||||||
|
"github.com/andydixon/noema/internal/epistemics"
|
||||||
|
"github.com/andydixon/noema/internal/graph"
|
||||||
|
"github.com/andydixon/noema/internal/memory"
|
||||||
|
"github.com/andydixon/noema/internal/motivation"
|
||||||
|
"github.com/andydixon/noema/internal/narrative"
|
||||||
|
"github.com/andydixon/noema/internal/notifications"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Stores bundles what the default processes, handlers and hooks write to.
|
||||||
|
// A nil store disables the parts that depend on it.
|
||||||
|
type Stores struct {
|
||||||
|
Memory *memory.Store
|
||||||
|
Beliefs *beliefs.Store
|
||||||
|
Conversations *conversation.Store
|
||||||
|
Graph *graph.Store
|
||||||
|
Assertions *epistemics.Store
|
||||||
|
Motivation *motivation.Store
|
||||||
|
Narrative *narrative.Store
|
||||||
|
Notifications *notifications.Store
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewRegistry assembles the cognitive registry. The daemon, the test harness
|
||||||
|
// and sandbox runtimes all call it, so they run the same cognition and an
|
||||||
|
// ablation names the same components everywhere.
|
||||||
|
func NewRegistry(s Stores) *brain.Registry {
|
||||||
|
r := brain.NewRegistry().AddProcess(Attend{}).AddProcess(Retrieve{}).AddProcess(Associate{}).AddProcess(Perceive{}).
|
||||||
|
AddProcess(GoalMonitor{}).AddProcess(Curiosity{}).AddProcess(Metacognition{}).AddProcess(Act{})
|
||||||
|
if s.Motivation != nil {
|
||||||
|
r.AddHook(MotivationHook{Store: s.Motivation})
|
||||||
|
}
|
||||||
|
if s.Narrative != nil {
|
||||||
|
r.AddHook(NarrativeHook{Store: s.Narrative})
|
||||||
|
}
|
||||||
|
if s.Notifications != nil {
|
||||||
|
r.AddHook(NotifyHook{Store: s.Notifications})
|
||||||
|
}
|
||||||
|
Handlers{Memory: s.Memory, Beliefs: s.Beliefs, Conversations: s.Conversations, Graph: s.Graph, Assertions: s.Assertions}.Register(r)
|
||||||
|
return r
|
||||||
|
}
|
||||||
@@ -54,9 +54,7 @@ func NewHarness(t *testing.T) *Harness {
|
|||||||
for _, c := range capabilities.Builtins() {
|
for _, c := range capabilities.Builtins() {
|
||||||
caps.Registry.Add(c)
|
caps.Registry.Add(c)
|
||||||
}
|
}
|
||||||
reg := brain.NewRegistry().AddProcess(cognition.Attend{}).AddProcess(cognition.Retrieve{}).AddProcess(cognition.Associate{}).AddProcess(cognition.Perceive{}).
|
reg := cognition.NewRegistry(cognition.Stores{Memory: mem, Beliefs: bs, Conversations: conversation.NewStore(pool), Graph: graph.NewStore(pool), Assertions: epistemics.NewStore(pool)})
|
||||||
AddProcess(cognition.GoalMonitor{}).AddProcess(cognition.Curiosity{}).AddProcess(cognition.Metacognition{}).AddProcess(cognition.Act{})
|
|
||||||
cognition.Handlers{Memory: mem, Beliefs: bs, Conversations: conversation.NewStore(pool), Graph: graph.NewStore(pool), Assertions: epistemics.NewStore(pool)}.Register(reg)
|
|
||||||
cfg := brain.Config{DB: pool, Events: es, Minds: ms, Registry: reg, Pool: scheduler.NewPool(2), Log: log, Metrics: observability.NewMetrics(),
|
cfg := brain.Config{DB: pool, Events: es, Minds: ms, Registry: reg, Pool: scheduler.NewPool(2), Log: log, Metrics: observability.NewMetrics(),
|
||||||
Services: brain.Services{Events: es, Memory: mem, Beliefs: bs, Goals: goals.NewStore(pool), Motivation: motivation.NewStore(pool), Predictions: predictions.NewStore(pool), Capabilities: caps}}
|
Services: brain.Services{Events: es, Memory: mem, Beliefs: bs, Goals: goals.NewStore(pool), Motivation: motivation.NewStore(pool), Predictions: predictions.NewStore(pool), Capabilities: caps}}
|
||||||
ident := &identity.Capturer{DB: pool, Minds: ms}
|
ident := &identity.Capturer{DB: pool, Minds: ms}
|
||||||
|
|||||||
@@ -100,9 +100,7 @@ func Start(t *testing.T) *Harness {
|
|||||||
}
|
}
|
||||||
group := scheduler.NewGroup(ctx, log)
|
group := scheduler.NewGroup(ctx, log)
|
||||||
t.Cleanup(func() { group.Stop() })
|
t.Cleanup(func() { group.Stop() })
|
||||||
registry := brain.NewRegistry().AddProcess(cognition.Attend{}).AddProcess(cognition.Retrieve{}).AddProcess(cognition.Associate{}).AddProcess(cognition.Perceive{}).
|
registry := cognition.NewRegistry(cognition.Stores{Memory: deps.Memory, Beliefs: deps.Beliefs, Conversations: deps.Conversations, Graph: deps.Graph, Assertions: deps.Assertions})
|
||||||
AddProcess(cognition.GoalMonitor{}).AddProcess(cognition.Curiosity{}).AddProcess(cognition.Metacognition{}).AddProcess(cognition.Act{})
|
|
||||||
cognition.Handlers{Memory: deps.Memory, Beliefs: deps.Beliefs, Conversations: deps.Conversations, Graph: deps.Graph, Assertions: deps.Assertions}.Register(registry)
|
|
||||||
deps.Brain = brain.NewManager(brain.Config{DB: pool, Events: deps.Events, Minds: deps.Minds, Registry: registry, Pool: scheduler.NewPool(2), Log: log, Metrics: deps.Metrics,
|
deps.Brain = brain.NewManager(brain.Config{DB: pool, Events: deps.Events, Minds: deps.Minds, Registry: registry, Pool: scheduler.NewPool(2), Log: log, Metrics: deps.Metrics,
|
||||||
Services: brain.Services{Events: deps.Events, Memory: deps.Memory, Beliefs: deps.Beliefs, LLM: deps.LLM, Prompts: deps.Prompts, Goals: deps.Goals, Motivation: deps.Motivation, Predictions: deps.Predictions, Capabilities: deps.Capabilities}}, group)
|
Services: brain.Services{Events: deps.Events, Memory: deps.Memory, Beliefs: deps.Beliefs, LLM: deps.LLM, Prompts: deps.Prompts, Goals: deps.Goals, Motivation: deps.Motivation, Predictions: deps.Predictions, Capabilities: deps.Capabilities}}, group)
|
||||||
if err := deps.Brain.Start(ctx); err != nil {
|
if err := deps.Brain.Start(ctx); err != nil {
|
||||||
|
|||||||
Reference in New Issue
Block a user