Load the lead's scrollback 50 turns at a time
This commit is contained in:
@@ -1297,6 +1297,33 @@ func (s *Store) LeadEvents(ctx context.Context, owner string, after int64, limit
|
||||
return scanEvents(rows)
|
||||
}
|
||||
|
||||
func (s *Store) LeadEventsPage(ctx context.Context, owner string, before int64, turns int) (api.EventPage, error) {
|
||||
from := int64(0)
|
||||
more := true
|
||||
err := s.db.QueryRowContext(ctx, `
|
||||
SELECT seq FROM events WHERE owner = ? AND agent_session_id IS NOT NULL AND kind = 'turn.ended' AND seq < ?
|
||||
ORDER BY seq DESC LIMIT 1 OFFSET ?
|
||||
`, owner, before, turns).Scan(&from)
|
||||
if errors.Is(err, sql.ErrNoRows) {
|
||||
more = false
|
||||
} else if err != nil {
|
||||
return api.EventPage{}, err
|
||||
}
|
||||
|
||||
rows, err := s.db.QueryContext(ctx, `
|
||||
SELECT `+eventColumns+`
|
||||
FROM events WHERE owner = ? AND agent_session_id IS NOT NULL AND seq > ? AND seq < ? ORDER BY seq
|
||||
`, owner, from, before)
|
||||
if err != nil {
|
||||
return api.EventPage{}, err
|
||||
}
|
||||
events, err := scanEvents(rows)
|
||||
if err != nil {
|
||||
return api.EventPage{}, err
|
||||
}
|
||||
return api.EventPage{Events: events, More: more}, nil
|
||||
}
|
||||
|
||||
func scanEvents(rows *sql.Rows) ([]api.Event, error) {
|
||||
defer rows.Close()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user