X-Git-Url: https://git.giacomolli.uk/onechat/blobdiff_plain/d9fddc0f506eb4ead7049f5638674b2b8773fcaa..6915dbdfeb246551bf1132823d820beb321fd58c:/tree.go diff --git a/tree.go b/tree.go index 83ecda3..079969c 100644 --- a/tree.go +++ b/tree.go @@ -55,11 +55,11 @@ func leafSource(message Message) string { return message.Kind + ": " + message.Text } -// freeLeaf returns the leaf of message when its source fits in a node. Such a -// leaf holds the source word for word and needs no model call. +// freeLeaf returns a text-only leaf when its source fits in a node. Images need +// a model description even when their text fits. func freeLeaf(message Message) (Node, bool) { text := leafSource(message) - if len(text) > nodeBytes { + if len(text) > nodeBytes || len(imageFiles(message.Text)) > 0 { return Node{}, false } @@ -124,6 +124,7 @@ func (t *Tree) Close() error { for level, index := range t.levels { err = errors.Join(err, index.Close()) + delete(t.levels, level) } @@ -178,6 +179,7 @@ func (t *Tree) Node(level, index int) (Node, bool, error) { } var node Node + err = json.Unmarshal(line, &node) if err != nil { return Node{}, false, fmt.Errorf("decode node (%d, %d): %w", level, index, err) @@ -212,6 +214,7 @@ func (t *Tree) Keys() ([]NodeKey, error) { func (t *Tree) open(ctx context.Context, total int) error { var err error + t.order, err = openRecords(filepath.Join(t.dir, "tree.idx"), treeRecordBytes) if err != nil { return err @@ -245,6 +248,7 @@ func (t *Tree) open(ctx context.Context, total int) error { return t.journal.Scan(ctx, start, func(line []byte, place Position) error { var node Node + err := json.Unmarshal(line, &node) if err != nil { return fmt.Errorf("decode tree node: %w", err)