function generate_candidates(user, index, limit=500):
   interests = user.recent_interactions

   candidates = set()
   for interest in interests:
      candidates.update(index.similar_items(interest)) # cheap, broad retriev
 al
   return list(candidates)[:limit] # narrowed later by a more expensive ranke
 r
