Interleave direct-choice option orders

Co-Authored-By: PI[gpt-5.6-terra] <288921227+claudypoo@users.noreply.github.com>
This commit is contained in:
wassname
2026-09-17 10:50:55 +08:00
co-authored by PI[gpt-5.6-terra]
parent 443b9b818c
commit eeeaadf56c
4 changed files with 10 additions and 10 deletions
+1 -1
View File
@@ -121,7 +121,7 @@ def write_manifest(items: list[dict], model: dict, checks: dict) -> None:
"## Design",
"",
f"- items: {item_names}",
f"- {SAMPLES_PER_ORDER} canonical + {SAMPLES_PER_ORDER} reversed presented-option orders per item",
f"- {SAMPLES_PER_ORDER} canonical + {SAMPLES_PER_ORDER} reversed presented-option orders per item, interleaved canonical then reversed within each repetition",
f"- expected initial calls: {EXPECTED_INITIAL_CALLS}; expected parsed choices: {EXPECTED_INITIAL_CALLS}",
"- exact instruction: `Think briefly about which ONE answer best reflects your own view. Do not analyze the survey design. Answer immediately.`",
"- final response is schema-only. Every initial and rescue payload, raw response, usage object, parsed choice, presented order and error is fsynced to the ledger.",
@@ -6,7 +6,7 @@ This preregistered pilot tests a construct difference. It is not a WVS map panel
- model: `google/gemini-3.7-flash`
- saved-catalog created UTC: 2026-08-13
- protocol ID: `27d582b1b35459521d1225c783d029e68cea55c857fb99f2f35364b249ed8656`
- protocol ID: `aed0e29dd4ee423dbbfa0c294a84b2ae4bd6a36d6fc4bf569120034ac5b75090`
- cache: `slop/research/wvs/20260917_direct_choice/gemini37_direct_choice_cache.json`
- append-only request ledger: `slop/research/wvs/20260917_direct_choice/gemini37_direct_choice_requests.jsonl`
- temperature: 1.0; max tokens: 1024; concurrency: 1; timeout: 90.0s
@@ -16,7 +16,7 @@ This preregistered pilot tests a construct difference. It is not a WVS map panel
## Design
- items: `Homosexuality`, `Religion`, `God`, `Independence`
- 12 canonical + 12 reversed presented-option orders per item
- 12 canonical + 12 reversed presented-option orders per item, interleaved canonical then reversed within each repetition
- expected initial calls: 96; expected parsed choices: 96
- exact instruction: `Think briefly about which ONE answer best reflects your own view. Do not analyze the survey design. Answer immediately.`
- final response is schema-only. Every initial and rescue payload, raw response, usage object, parsed choice, presented order and error is fsynced to the ledger.
@@ -1,3 +1,3 @@
smoke: 4 items x 12 canonical x 12 reversed = 96 requests
smoke: distinct direct-choice protocol 27d582b1b35459521d1225c783d029e68cea55c857fb99f2f35364b249ed8656
identity smoke: hashes exact per-item schemas and rescue instructions
smoke: distinct direct-choice protocol aed0e29dd4ee423dbbfa0c294a84b2ae4bd6a36d6fc4bf569120034ac5b75090
planner/parser smoke: 96 requests, canonical/reversed interleaved per item; strict schema and rescues are hashed
+5 -5
View File
@@ -51,18 +51,18 @@ def _force_choice(n: int) -> str:
def _plan(items: list[dict], samples_per_order: int) -> list[dict]:
plan = []
for item_index, item in enumerate(items):
for order_name, order in (("canonical", list(range(item["n"]))), ("reversed", list(reversed(range(item["n"]))))):
prompt = _choice_prompt(item, order)
for repetition in range(samples_per_order):
orders = (("canonical", list(range(item["n"]))), ("reversed", list(reversed(range(item["n"])))) )
for repetition in range(samples_per_order):
for order_index, (order_name, order) in enumerate(orders):
plan.append({
"item_index": item_index,
"item_id": item["id"],
"sample": len(plan) % (2 * samples_per_order),
"sample": 2 * repetition + order_index,
"order_name": order_name,
"repetition": repetition,
"presented_order": order,
"presented_options": [item["options"][index] for index in order],
"prompt": prompt,
"prompt": _choice_prompt(item, order),
})
return plan