def run_full_turn()

in 01-agents/5_escalation.py [0:0]


def run_full_turn(system_message, tools, messages):
    """アシスタントとの対話を処理し、必要に応じてツールを呼び出します。"""

    # 現在のメッセージ数を記録
    num_init_messages = len(messages)
    messages = messages.copy()

    while True:

        # Python 関数をツールに変換し、逆引きマップを保存
        tool_schemas = [function_to_schema(tool) for tool in tools]
        tools_map = {tool.__name__: tool for tool in tools}

        # === 1. OpenAI のコンプリートを取得 ===
        response = client.chat.completions.create(
            model=model,
            messages=[{"role": "system", "content": system_message}] + 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:]