#!/usr/bin/env python3 """Code interpreter with an auto container, then inspect and delete the container through /v1/containers. STATUS: LIVE_VERIFIED 2026-09-18 (gpt-5.4-nano; code 'print(2+2)', outputs [{type:logs,logs:'4\\n'}]; GET/DELETE container 200). Cost: $0.03 per container session (1g) + tokens. Run: .venv/bin/python examples/openai/tools/code-interpreter/code_interpreter.py """ import sys from pathlib import Path ROOT = Path(__file__).resolve().parents[4]; sys.path.insert(0, str(ROOT)) from scripts.live import load_env, log_request; load_env() from openai import OpenAI client = OpenAI(); MODEL = "gpt-5.4-nano" r = client.responses.create(model=MODEL, input="Run print(2+2) in python and reply with just the number.", tools=[{"type": "code_interpreter", "container": {"type": "auto"}}], tool_choice={"type": "code_interpreter"}, # otherwise the model may answer "4" without running code include=["code_interpreter_call.outputs"], max_output_tokens=400, reasoning={"effort": "low"}) log_request("openai", "POST", "/v1/responses", 200, 0.03, "code_interpreter.py auto container") ci = next(i for i in r.output if i.type == "code_interpreter_call") print("code:", ci.code); print("outputs:", [o.model_dump() for o in (ci.outputs or [])]); print("answer:", r.output_text) c = client.containers.retrieve(ci.container_id); log_request("openai", "GET", "/v1/containers/{id}", 200, 0, "code_interpreter.py retrieve") print("container:", c.id, c.status, c.memory_limit, c.expires_after) files = client.containers.files.list(ci.container_id); log_request("openai", "GET", "/v1/containers/{id}/files", 200, 0, "code_interpreter.py files") print("files:", [x.path for x in files.data]) client.containers.delete(ci.container_id); log_request("openai", "DELETE", "/v1/containers/{id}", 200, 0, "code_interpreter.py delete") print("deleted")