def METHOD_NAME(initial: str, phrases: List[str], exit_on_exhaust: bool = False) -> Callable:
    """
    Return an unused or a least used response from a list of options
    """
    def unused_handler(ctx: Context, actor: Actor) -> str:
        used = ctx.misc.get("used_phrases", [])
        confidences = [1] * len(phrases)
        for idx, phrase in enumerate(phrases):
            times: int = used.count(id(phrase))
            if times == 0:
                used.append(id(phrase))
                ctx.misc["used_phrases"] = used
                return initial + phrase
            confidences[idx] *= 0.4**times
        if exit_on_exhaust:
            label = ctx.last_label
            actor.plot[label[0]][label[1]].transitions = {("global_flow", "fallback", 2): cnd.true()}
            return initial
        target_idx = confidences.index(max(confidences))
        target_phrase = phrases[target_idx]
        used.append(id(target_phrase))
        ctx.misc["used_phrases"] = used
        return initial + target_phrase
    return unused_handler