(
*,
task_id: str,
template: TaskTemplateSpec,
draft: TaskDraftSpec,
)
| 69 | |
| 70 | |
| 71 | def compile_task_draft( |
| 72 | *, |
| 73 | task_id: str, |
| 74 | template: TaskTemplateSpec, |
| 75 | draft: TaskDraftSpec, |
| 76 | ) -> CompiledTaskAuthoringBundle: |
| 77 | _validate_template(template) |
| 78 | _validate_draft(template, draft) |
| 79 | |
| 80 | instance_ids_by_slot: dict[str, list[str]] = {} |
| 81 | object_universe = { |
| 82 | "container": [], |
| 83 | "goal_objects": [], |
| 84 | "fail_objects": [], |
| 85 | "decor_objects": [], |
| 86 | } |
| 87 | set_goal_objects: list[str] = [] |
| 88 | set_fail_objects: list[str] = [] |
| 89 | set_decor_objects: list[str] = [] |
| 90 | |
| 91 | slot_occurrence_index: dict[str, int] = {} |
| 92 | container_instance_id: str | None = None |
| 93 | |
| 94 | for draft_object in draft.objects: |
| 95 | slot_occurrence_index[draft_object.slot_name] = slot_occurrence_index.get(draft_object.slot_name, 0) + 1 |
| 96 | occurrence = slot_occurrence_index[draft_object.slot_name] |
| 97 | instance_id = _build_instance_id( |
| 98 | semantic_name=draft_object.semantic_name, |
| 99 | occurrence=occurrence, |
| 100 | salt=f"{task_id}:{draft_object.slot_name}:{draft_object.semantic_name}:{occurrence}", |
| 101 | ) |
| 102 | instance_ids_by_slot.setdefault(draft_object.slot_name, []).append(instance_id) |
| 103 | |
| 104 | entry = { |
| 105 | "instance_id": instance_id, |
| 106 | "semantic_name": _normalize_token(draft_object.semantic_name), |
| 107 | "description": draft_object.description, |
| 108 | "retrieval_query": draft_object.retrieval_query, |
| 109 | "mass_range": [float(draft_object.mass_range[0]), float(draft_object.mass_range[1])], |
| 110 | "target_size_range": [float(draft_object.target_size_range[0]), float(draft_object.target_size_range[1])], |
| 111 | "target_mass": _range_midpoint(draft_object.mass_range), |
| 112 | "target_size": _range_midpoint(draft_object.target_size_range), |
| 113 | "tags": list(draft_object.tags), |
| 114 | } |
| 115 | |
| 116 | if draft_object.group_hint == "container": |
| 117 | entry["role"] = "container" |
| 118 | object_universe["container"].append(entry) |
| 119 | if draft.container_slot == draft_object.slot_name and container_instance_id is None: |
| 120 | container_instance_id = instance_id |
| 121 | elif draft_object.group_hint == "target": |
| 122 | object_universe["goal_objects"].append(entry) |
| 123 | set_goal_objects.append(instance_id) |
| 124 | elif draft_object.group_hint == "distractor": |
| 125 | object_universe["fail_objects"].append(entry) |
| 126 | set_fail_objects.append(instance_id) |
| 127 | elif draft_object.group_hint == "decor": |
| 128 | object_universe["decor_objects"].append(entry) |
no test coverage detected