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
