57 lines
1.5 KiB
Go
57 lines
1.5 KiB
Go
// memory/agent.go – Memory-Agent: wraps brain.RunIngest und brain.IngestChatMessage
|
||
package memory
|
||
|
||
import (
|
||
"fmt"
|
||
"strings"
|
||
|
||
"my-brain-importer/internal/agents"
|
||
"my-brain-importer/internal/brain"
|
||
"my-brain-importer/internal/config"
|
||
)
|
||
|
||
// Agent verwaltet das Einspeichern von Wissen.
|
||
type Agent struct{}
|
||
|
||
func New() *Agent { return &Agent{} }
|
||
|
||
// Handle unterstützt zwei Aktionen:
|
||
// - "store": Speichert Text als Chat-Nachricht
|
||
// - "ingest": Startet den Markdown-Ingest aus brain_root
|
||
func (a *Agent) Handle(req agents.Request) agents.Response {
|
||
switch req.Action {
|
||
case agents.ActionStore:
|
||
return a.store(req)
|
||
case agents.ActionIngest:
|
||
return a.ingest(req)
|
||
default:
|
||
return agents.Response{Text: "❌ Unbekannte Memory-Aktion. Verfügbar: store, ingest"}
|
||
}
|
||
}
|
||
|
||
func (a *Agent) store(req agents.Request) agents.Response {
|
||
if len(req.Args) == 0 {
|
||
return agents.Response{Text: "❌ Kein Text zum Speichern angegeben."}
|
||
}
|
||
text := strings.Join(req.Args, " ")
|
||
author := req.Author
|
||
if author == "" {
|
||
author = "unknown"
|
||
}
|
||
source := req.Source
|
||
if source == "" {
|
||
source = "agent"
|
||
}
|
||
|
||
err := brain.IngestChatMessage(text, author, source)
|
||
if err != nil {
|
||
return agents.Response{Error: err, Text: fmt.Sprintf("❌ Fehler beim Speichern: %v", err)}
|
||
}
|
||
return agents.Response{Text: fmt.Sprintf("✅ Gespeichert: _%s_", text)}
|
||
}
|
||
|
||
func (a *Agent) ingest(_ agents.Request) agents.Response {
|
||
brain.RunIngest(config.Cfg.BrainRoot)
|
||
return agents.Response{Text: fmt.Sprintf("✅ Ingest abgeschlossen! Quelle: `%s`", config.Cfg.BrainRoot)}
|
||
}
|