Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 40s
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
43 lines
1.2 KiB
Plaintext
43 lines
1.2 KiB
Plaintext
; feed/trending — what's hot right now: objects (or actors) ranked by activity
|
|
; count within a recency window. Deterministic: count descending, ties broken by
|
|
; key ascending (entries are pre-sorted by key, then stable grade-down by count).
|
|
;
|
|
; Requires: lib/feed/stream.sx, lib/feed/aggregate.sx (object/actor-counts),
|
|
; lib/feed/rank.sx (feed/-desc-by).
|
|
|
|
; activities within (now-window, now]
|
|
(define
|
|
feed/-recent
|
|
(fn
|
|
(stream now window)
|
|
(feed/filter
|
|
stream
|
|
(fn (a) (and (<= (get a :at) now) (> (get a :at) (- now window)))))))
|
|
|
|
; counts dict -> top-N entries {label key, :count n}, count desc, key asc
|
|
(define
|
|
feed/-top-counts
|
|
(fn
|
|
(counts label n)
|
|
(let
|
|
((entries (map (fn (k) (assoc {:count (get counts k)} label k)) (sort (keys counts)))))
|
|
(take (feed/-desc-by entries (fn (e) (get e :count))) n))))
|
|
|
|
; top-N trending objects in the window
|
|
(define
|
|
feed/trending
|
|
(fn
|
|
(stream now window n)
|
|
(feed/-top-counts
|
|
(feed/object-counts (feed/-recent stream now window))
|
|
:object n)))
|
|
|
|
; top-N most active actors in the window
|
|
(define
|
|
feed/trending-actors
|
|
(fn
|
|
(stream now window n)
|
|
(feed/-top-counts
|
|
(feed/actor-counts (feed/-recent stream now window))
|
|
:actor n)))
|