def run_full_turn()

in 01-agents/6_agents.py [0:0]


def run_full_turn(agent, messages):
    """1回のやり取りを処理する関数"""

    # 初期メッセージ数を記録
    num_init_messages = len(messages)
    messages = messages.copy()

    while True:

        # ツールをスキーマに変換してマッピングを保存
        tool_schemas = [function_to_schema(tool) for tool in agent.tools]
        tools_map = {tool.__name__: tool for tool in agent.tools}

        # === 1. OpenAI の応答を取得 ===
        response = client.chat.completions.create(
            model=agent.model,
            messages=[{"role": "system", "content": agent.instructions}] + messages,
            tools=tool_schemas or None,
        )
        message = response.choices[0].message
        messages.append(message)

        if message.content:  # アシスタントの応答を表示
            print(color("Assistant:", "yellow"), message.content)

        if not message.tool_calls:  # ツール呼び出しがない場合は終了
            break

        # === 2. ツール呼び出しを処理 ===

        for tool_call in message.tool_calls:
            result = execute_tool_call(tool_call, tools_map)

            result_message = {
                "role": "tool",
                "tool_call_id": tool_call.id,
                "content": result,
            }
            messages.append(result_message)

    # ==== 3. 新しいメッセージを返す =====
    return messages[num_init_messages:]