bluememo

Recall

Answers a question from the store without a model call.

func (store *Store) Recall(ctx context.Context, query string, limit int) (RecallResult, error)
func (store *Store) Profile(ctx context.Context) ([]Memory, error)

Three lanes are ranked and fused by reciprocal rank: cosine similarity over memory vectors, character-bigram overlap over the text, and cosine similarity over trigger phrases. Character bigrams let a two-character word count, which matters in Korean, where many nouns are two syllables long. The leading hit brings the rest of its origin with it. Age plays no part in ranking, because a question about last year wants last year's memory; the store keeps what is current by superseding what is not.

Every memory returned is reinforced by 1 − retrievability, so a memory recalled just before it would have faded gains the most, and one recalled a minute after it was written gains nothing. Without an embedder, or when embedding fails, recall answers from the text lane and says why in DegradedReason.

Profile returns the live static memories, most useful first.