function attention(token, context_tokens):
   query = make_query(token)

   scores = []
   for source in context_tokens:
      scores.append(similarity(query, source.key))
   weights = normalize(scores)
   return weighted_sum(weights, [source.value for source in context_tokens])
