Skip to content

terminus-io/blades-sqlite

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

blades-sqlite

SQLite-backed memory.MemoryStore for github.com/go-kratos/blades.

The store is designed for local agent runtimes and Agent Layouts:

  • persists Blades memories to a single SQLite database file
  • persists session history with SaveSession
  • uses SQLite FTS5 for text search when available
  • falls back to case-insensitive LIKE search when FTS5 is disabled or unavailable
  • uses the cgo-free modernc.org/sqlite driver
  • implements memory.MemoryStore

Install

go get github.com/terminus-io/blades-sqlite

Usage

package main

import (
	"context"

	sqlitememory "github.com/terminus-io/blades-sqlite"
	"github.com/go-kratos/blades"
	"github.com/go-kratos/blades/memory"
)

func main() {
	ctx := context.Background()

	store, err := sqlitememory.Open("agent-memory.db")
	if err != nil {
		panic(err)
	}
	defer store.Close()

	if err := store.AddMemory(ctx, &memory.Memory{
		Content: blades.UserMessage("The user prefers concise Chinese answers."),
		Metadata: map[string]any{
			"memory_type": "preference",
		},
	}); err != nil {
		panic(err)
	}

	results, err := store.SearchMemory(ctx, "Chinese answers")
	if err != nil {
		panic(err)
	}
	_ = results

	session := blades.NewSession()
	_ = session.Append(ctx, blades.UserMessage("Remember this session message."))
	if err := store.SaveSession(ctx, session); err != nil {
		panic(err)
	}
}

To expose memory search as a Blades tool:

memoryTool, err := memory.NewMemoryTool(store)
if err != nil {
	panic(err)
}

Options

store, err := sqlitememory.Open(
	"agent-memory.db",
	sqlitememory.WithLimit(5),
	sqlitememory.WithFTS(true),
)

WithFTS(true) is the default. If SQLite FTS5 initialization fails, the store continues with LIKE search.

Stored Data

The current Blades memory API stores:

type MemoryStore interface {
	AddMemory(context.Context, *memory.Memory) error
	SaveSession(context.Context, blades.Session) error
	SearchMemory(context.Context, string) ([]*memory.Memory, error)
}

Blades messages contain interface-typed parts, so this store persists the searchable text from Content.Text() plus message role, author, status, message metadata, and memory metadata. Search results reconstruct a text message with those fields.

SaveSession stores each non-empty text message from session.History(ctx) as a memory with metadata:

session_id
message_index
memory_type=session_message

Saving the same session repeatedly updates existing rows for the same session_id and message id instead of duplicating them.

Test

go test ./...

About

sqlite memory store for kratos-io/blades

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors

Languages