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
}
for level, index := range t.levels {
err = errors.Join(err, index.Close())
+
delete(t.levels, level)
}
}
var node Node
+
err = json.Unmarshal(line, &node)
if err != nil {
return Node{}, false, fmt.Errorf("decode node (%d, %d): %w", level, index, err)
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
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)