text: Became the Next Fitness Craze        Detailed topic:    What is driving people to embrace "competitive sitting" as the newest fitness trend despite the immense benefits of regular physical exercise?    Define the speaker selection functionâ€‹Lastly we will define a speaker selection function select_next_speaker that takes each agent's bid and selects the agent with the highest bid (with ties broken randomly).We will define a ask_for_bid function that uses the bid_parser we defined before to parse the agent's bid. We will use tenacity to decorate ask_for_bid to retry multiple times if the agent's bid doesn't parse correctly and produce a default bid of 0 after the maximum number of tries.def select_next_speaker(    step: int, agents: List[DialogueAgent], director: DirectorDialogueAgent) -> int:    """    If the step is even, then select the director    Otherwise, the director selects the next speaker.    """    # the director speaks on odd steps    if step % 2 == 1:        idx = 0    else:        # here the director chooses the next speaker        idx = director.select_next_speaker() + 1  # +1 because we excluded the director    return idxMain Loopâ€‹director = DirectorDialogueAgent(    name=director_name,    system_message=agent_system_messages[0],    model=ChatOpenAI(temperature=0.2),    speakers=[name for name in agent_summaries if name != director_name],    stopping_probability=0.2,)agents = [director]for name, system_message in zip(    list(agent_summaries.keys())[1:], agent_system_messages[1:]):