]> git.giacomolli.uk - onechat/blobdiff - memory.go
Order model and chat declarations
[onechat] / memory.go
index 1b734c07acea51268dcbe02de56641399d30039b..df99a9524ccc9f6e81725582946582781f1545c7 100644 (file)
--- a/memory.go
+++ b/memory.go
@@ -22,6 +22,64 @@ var (
        errMemoryUnsettled = errors.New("a summary of the view failed, and it is tried again at the next message")
 )
 
+// Summarizer builds the text of one node with a model.
+type Summarizer interface {
+       Summarize(ctx context.Context, task Task) (string, error)
+}
+
+// Memory is the memory of one chat: the message log, the summary tree, the chat
+// view, the compaction view, and the queue of the builds. The compaction view
+// is the chat view merged further, at the limits of 16 to 32 KB. It takes the
+// same new lines, and it merges again in one batch when it is too large or when
+// the chat view merges. So the compactions share its prefix in the prompt
+// cache. It saves the views to view.json after each change and loads them at
+// start. It never builds the views again from the log, because a new view
+// differs from the live one and so loses the prompt cache.
+//
+// Each write goes to the operating system at once, and a syncer makes the
+// writes durable by group commit in the background. Flush waits until the
+// writes so far are durable.
+//
+// The summarizer builds the nodes in the queue in the background. The start
+// reads the indexes once to fill the queue again. After that, only a new
+// message or a new node adds work. Memory keeps the nodes of the views and the
+// tasks of the running builds. It reads all other messages and nodes from their
+// day files through the indexes.
+type Memory struct {
+       mutex      sync.Mutex
+       root       string
+       log        *Log
+       syncer     *Syncer
+       tree       *Tree
+       chat       *View
+       cview      *View
+       queue      *BuildQueue
+       summarizer Summarizer
+       logger     *slog.Logger
+       ctx        context.Context
+       cancel     context.CancelFunc
+       workers    sync.WaitGroup
+       changed    chan struct{}
+}
+
+// Task is the build of the node (Level, Index). Context is the compaction view
+// for the build. Input holds the source "kind: text" of a leaf, or the two
+// child lines of a merge with their newlines as spaces. Images holds the leaf
+// image filenames and is empty for merges.
+type Task struct {
+       Level   int
+       Index   int
+       Context string
+       Input   []string
+       Images  []string
+}
+
+// MemoryViewFile is the content of view.json.
+type MemoryViewFile struct {
+       Chat       ViewState `json:"chat"`
+       Compaction ViewState `json:"compaction"`
+}
+
 // openMemory opens the chat in root and starts the builds that are ready. The
 // clock gives the dates of new messages and the days of new nodes. logger gets
 // one line for each failed build. The builds stop when ctx ends or at Close.
@@ -75,46 +133,6 @@ func openMemory(ctx context.Context, root string, clock func() time.Time, summar
        return m, nil
 }
 
-// Summarizer builds the text of one node with a model.
-type Summarizer interface {
-       Summarize(ctx context.Context, task Task) (string, error)
-}
-
-// Memory is the memory of one chat: the message log, the summary tree, the chat
-// view, the compaction view, and the queue of the builds. The compaction view
-// is the chat view merged further, at the limits of 16 to 32 KB. It takes the
-// same new lines, and it merges again in one batch when it is too large or when
-// the chat view merges. So the compactions share its prefix in the prompt
-// cache. It saves the views to view.json after each change and loads them at
-// start. It never builds the views again from the log, because a new view
-// differs from the live one and so loses the prompt cache.
-//
-// Each write goes to the operating system at once, and a syncer makes the
-// writes durable by group commit in the background. Flush waits until the
-// writes so far are durable.
-//
-// The summarizer builds the nodes in the queue in the background. The start
-// reads the indexes once to fill the queue again. After that, only a new
-// message or a new node adds work. Memory keeps the nodes of the views and the
-// tasks of the running builds. It reads all other messages and nodes from their
-// day files through the indexes.
-type Memory struct {
-       mutex      sync.Mutex
-       root       string
-       log        *Log
-       syncer     *Syncer
-       tree       *Tree
-       chat       *View
-       cview      *View
-       queue      *BuildQueue
-       summarizer Summarizer
-       logger     *slog.Logger
-       ctx        context.Context
-       cancel     context.CancelFunc
-       workers    sync.WaitGroup
-       changed    chan struct{}
-}
-
 // Close stops the builds, waits for them, makes the writes durable, closes the
 // files of the chat, and releases its lock.
 func (m *Memory) Close() error {
@@ -779,21 +797,3 @@ func (m *Memory) buildBuiltByModel(key NodeKey) (bool, error) {
 
        return !free, nil
 }
-
-// Task is the build of the node (Level, Index). Context is the compaction view
-// for the build. Input holds the source "kind: text" of a leaf, or the two
-// child lines of a merge with their newlines as spaces. Images holds the leaf
-// image filenames and is empty for merges.
-type Task struct {
-       Level   int
-       Index   int
-       Context string
-       Input   []string
-       Images  []string
-}
-
-// MemoryViewFile is the content of view.json.
-type MemoryViewFile struct {
-       Chat       ViewState `json:"chat"`
-       Compaction ViewState `json:"compaction"`
-}