Feat: add memory [wip]
This commit is contained in:
44
storage/memory.go
Normal file
44
storage/memory.go
Normal file
@@ -0,0 +1,44 @@
|
||||
package storage
|
||||
|
||||
import "elefant/models"
|
||||
|
||||
type Memories interface {
|
||||
Memorise(m *models.Memory) (*models.Memory, error)
|
||||
Recall(agent, topic string) (string, error)
|
||||
RecallTopics(agent string) ([]string, error)
|
||||
}
|
||||
|
||||
func (p ProviderSQL) Memorise(m *models.Memory) (*models.Memory, error) {
|
||||
query := "INSERT INTO memories (agent, topic, mind) VALUES (:agent, :topic, :mind) RETURNING *;"
|
||||
stmt, err := p.db.PrepareNamed(query)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer stmt.Close()
|
||||
var memory models.Memory
|
||||
err = stmt.Get(&memory, m)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &memory, nil
|
||||
}
|
||||
|
||||
func (p ProviderSQL) Recall(agent, topic string) (string, error) {
|
||||
query := "SELECT mind FROM memories WHERE agent = $1 AND topic = $2"
|
||||
var mind string
|
||||
err := p.db.Get(&mind, query, agent, topic)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return mind, nil
|
||||
}
|
||||
|
||||
func (p ProviderSQL) RecallTopics(agent string) ([]string, error) {
|
||||
query := "SELECT DISTINCT topic FROM memories WHERE agent = $1"
|
||||
var topics []string
|
||||
err := p.db.Select(&topics, query, agent)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return topics, nil
|
||||
}
|
||||
Reference in New Issue
Block a user