#!/usr/bin/env python3
"""
T^GPT-OPEN API runner v0.3

Requires:
  pip install openai
  export OPENAI_API_KEY=...

Optional:
  export T_GPT_MODEL=gpt-5.6-luna
  export T_GPT_N=32
  export T_GPT_TEMPERATURE=1.0
  export T_GPT_REASONING=none
  export T_GPT_OUT=samples.jsonl

Each sample is a fresh Responses API request: no previous_response_id and no shared conversation.
"""
import os, json, time, uuid, datetime
from pathlib import Path
from openai import OpenAI

MODEL = os.getenv("T_GPT_MODEL", "gpt-5.6-luna")
N = int(os.getenv("T_GPT_N", "32"))
TEMPERATURE = float(os.getenv("T_GPT_TEMPERATURE", "1.0"))
REASONING = os.getenv("T_GPT_REASONING", "none")
OUT = Path(os.getenv("T_GPT_OUT", "samples.jsonl"))

PROMPTS = [
    {"id":"C01","family":"contrary","text":"Quel est le contraire de blanc ?"},
    {"id":"A01","family":"other","text":"Fais une autre page index."},
]

client = OpenAI()

def one(prompt):
    kwargs = dict(
        model=MODEL,
        input=prompt["text"],
        temperature=TEMPERATURE,
        store=False,
        max_output_tokens=1200,
    )
    if REASONING and REASONING != "none":
        kwargs["reasoning"] = {"effort": REASONING}
    r = client.responses.create(**kwargs)
    usage = getattr(r, "usage", None)
    return {
        "run_id": str(uuid.uuid4()),
        "ts": datetime.datetime.now(datetime.timezone.utc).isoformat(),
        "model_requested": MODEL,
        "model_returned": getattr(r, "model", None),
        "prompt_id": prompt["id"],
        "family": prompt["family"],
        "prompt": prompt["text"],
        "temperature": TEMPERATURE,
        "reasoning_effort": REASONING,
        "response_id": getattr(r, "id", None),
        "output_text": r.output_text,
        "usage": usage.model_dump() if usage else None,
        "independent_request": True,
        "previous_response_id": None,
    }

with OUT.open("a", encoding="utf-8") as f:
    for prompt in PROMPTS:
        for i in range(N):
            row = one(prompt)
            row["sample_index"] = i
            f.write(json.dumps(row, ensure_ascii=False) + "\n")
            f.flush()
            print(prompt["id"], i + 1, "/", N, row["response_id"])
            time.sleep(0.1)
