Skip to main content

Reproducible runs

By default every run draws a fresh choice-task design and generates a fresh latent-variable battery for its respondents. That is right for a one-off study. It is wrong when you want to compare two runs, because the noise between two identical runs is then larger than most effects you are looking for.

Five request fields make two runs comparable. All of them default to the non-comparable behaviour, so nothing changes unless you ask.

FieldComparable valueDefaultWhat it pins
llm_temperature0.00.0respondent sampling
resample_population + population_seedfalse + a fixed seedfalse, 100which respondents answer
design_seedany fixed integernull (fresh design)the choice tasks and their order
deterministic_stagestruefalsethe pre-survey stages (latent variables, persona bios, mood statements) run at llm_temperature instead of a fixed 0.7
latent_variables_from_runthe first run's namenullreuses the first run's latent-variable battery and scores, so respondent prompts repeat

Run 1

{
"why_prompt": "Which vaccine attributes drive uptake?",
"llm_temperature": 0.0,
"resample_population": false,
"population_seed": 100,
"design_seed": 42,
"deterministic_stages": true
}

Note the wandb_run_name in the response.

Every later run of the same definition

Add the first run's name:

{ "latent_variables_from_run": "echo-26-09-06-03-47-08-783" }

The run reuses the artifact experiment_latent_variables_<name> and skips generation. It requires the same population: a respondent-count mismatch is rejected, never silently partial.

How much noise remains

Measured on seven published conjoint studies, two identical runs with the full recipe agree at a median Pearson of 0.995 between their AMCE vectors (minimum 0.938). The same respondent, shown the same task with the same prompt, picks the same option about 80% of the time; that residue is the model's own sampling at temperature 0. Without the recipe the same comparison sat at 0.85 on the noisiest study.

Treat the per-study number as the band a prompt, model, or population change must exceed before it means anything.

What stays random

With no flags set, the design is a fresh draw every run and two runs share no choice tasks. The seeds only make a draw repeatable when you ask; they never remove the randomization inside a run.