# Sync the teacher once — it never trains again.
teacher_sampler = client.run_operation(teacher_run_id, "save_weights_for_sampler", {})
teacher_sampler_id = result_sampler_id(teacher_sampler)
for cycle in range(cycles):
student_sampler = client.run_operation(student_run_id, "save_weights_for_sampler", {})
student_sampler_id = result_sampler_id(student_sampler)
student_sample = client.sampler_operation(student_run_id, student_sampler_id, "sample", sample_request)
# ctx bundles both runs' handles: ctx.teacher_run_id, ctx.teacher_sampler_id,
# ctx.student_run_id, ctx.student_sampler_id, ctx.client.
loss_payload = build_loss(student_sample, cycle, sample_request, ctx)
client.run_operation(student_run_id, "forward_backward", loss_payload)
client.run_operation(student_run_id, "optim_step", {"optimizer": adamw_optimizer(learning_rate=1e-6)})
client.run_operation(student_run_id, "save_state", {})
client.run_operation(student_run_id, "export_lora", {})
client.finish(student_run_id)
client.close_session(student_session_id)
client.finish(teacher_run_id)
client.close_session(teacher_session_id)