mirror of
https://github.com/mudler/LocalAGI.git
synced 2026-07-23 18:55:52 -04:00
16775f356a
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
92 lines
3.2 KiB
Go
92 lines
3.2 KiB
Go
package actions_test
|
|
|
|
import (
|
|
"context"
|
|
"os"
|
|
"path/filepath"
|
|
|
|
"github.com/mudler/LocalAGI/core/types"
|
|
"github.com/mudler/LocalAGI/services/actions"
|
|
. "github.com/onsi/ginkgo/v2"
|
|
. "github.com/onsi/gomega"
|
|
)
|
|
|
|
var _ = Describe("MemoryActions", func() {
|
|
var (
|
|
tmpDir string
|
|
indexPath string
|
|
aAdd *actions.AddToMemoryAction
|
|
aList *actions.ListMemoryAction
|
|
aRemove *actions.RemoveFromMemoryAction
|
|
aSearch *actions.SearchMemoryAction
|
|
)
|
|
|
|
BeforeEach(func() {
|
|
var err error
|
|
tmpDir, err = os.MkdirTemp("", "memory_test_*")
|
|
Expect(err).ToNot(HaveOccurred())
|
|
indexPath = filepath.Join(tmpDir, "memory.bleve")
|
|
aAdd, aList, aRemove, aSearch = actions.NewMemoryActions(indexPath, map[string]string{})
|
|
})
|
|
|
|
AfterEach(func() {
|
|
os.RemoveAll(tmpDir)
|
|
})
|
|
|
|
It("adds and lists entries by name", func() {
|
|
_, err := aAdd.Run(context.TODO(), nil, types.ActionParams{"name": "foo", "content": "bar"})
|
|
Expect(err).ToNot(HaveOccurred())
|
|
_, err = aAdd.Run(context.TODO(), nil, types.ActionParams{"name": "baz", "content": "qux"})
|
|
Expect(err).ToNot(HaveOccurred())
|
|
res, err := aList.Run(context.TODO(), nil, types.ActionParams{})
|
|
Expect(err).ToNot(HaveOccurred())
|
|
Expect(res.Metadata["names"]).To(ContainElements("foo", "baz"))
|
|
Expect(res.Metadata["count"]).To(Equal(2))
|
|
})
|
|
|
|
It("removes by id", func() {
|
|
addRes, _ := aAdd.Run(context.TODO(), nil, types.ActionParams{"name": "foo", "content": "bar"})
|
|
id, ok := addRes.Metadata["id"].(string)
|
|
Expect(ok).To(BeTrue())
|
|
_, _ = aAdd.Run(context.TODO(), nil, types.ActionParams{"name": "baz", "content": "qux"})
|
|
_, err := aRemove.Run(context.TODO(), nil, types.ActionParams{"id": id})
|
|
Expect(err).ToNot(HaveOccurred())
|
|
res, _ := aList.Run(context.TODO(), nil, types.ActionParams{})
|
|
Expect(res.Metadata["names"]).To(ConsistOf("baz"))
|
|
})
|
|
|
|
It("returns error for missing id on remove", func() {
|
|
_, _ = aAdd.Run(context.TODO(), nil, types.ActionParams{"name": "foo", "content": "bar"})
|
|
_, err := aRemove.Run(context.TODO(), nil, types.ActionParams{})
|
|
Expect(err).To(HaveOccurred())
|
|
})
|
|
|
|
It("returns error for unknown id on remove", func() {
|
|
_, err := aRemove.Run(context.TODO(), nil, types.ActionParams{"id": "nonexistent"})
|
|
Expect(err).To(HaveOccurred())
|
|
})
|
|
|
|
It("returns error for empty name and content on add", func() {
|
|
_, err := aAdd.Run(context.TODO(), nil, types.ActionParams{"name": "", "content": ""})
|
|
Expect(err).To(HaveOccurred())
|
|
})
|
|
|
|
It("search returns matching entries", func() {
|
|
_, _ = aAdd.Run(context.TODO(), nil, types.ActionParams{"name": "meeting", "content": "discussed project X"})
|
|
_, _ = aAdd.Run(context.TODO(), nil, types.ActionParams{"name": "lunch", "content": "ate pizza"})
|
|
res, err := aSearch.Run(context.TODO(), nil, types.ActionParams{"query": "project"})
|
|
Expect(err).ToNot(HaveOccurred())
|
|
Expect(res.Metadata["count"]).To(Equal(1))
|
|
results, ok := res.Metadata["results"].([]actions.MemoryEntry)
|
|
Expect(ok).To(BeTrue())
|
|
Expect(results).To(HaveLen(1))
|
|
Expect(results[0].Name).To(Equal("meeting"))
|
|
Expect(results[0].Content).To(Equal("discussed project X"))
|
|
})
|
|
|
|
It("search returns error for empty query", func() {
|
|
_, err := aSearch.Run(context.TODO(), nil, types.ActionParams{"query": ""})
|
|
Expect(err).To(HaveOccurred())
|
|
})
|
|
})
|