consultenv / server /simulator /subtasks.py
aashish1904's picture
consultEnv v2.3
cc76915
Raw
History Blame Contribute Delete
2.47 kB
"""Sub-task registry for ConsultEnv module decomposition."""
SUB_TASKS = {
"secondary": ["research_scoping", "desk_research", "findings_synthesis"],
"benchmarking": ["peer_set_definition", "benchmark_data_collection", "gap_and_variance_analysis"],
"interviews": ["discussion_guide_and_mapping","interview_execution", "thematic_synthesis"],
"data_modelling": ["model_architecture", "base_case_build", "scenario_and_sensitivity"],
"insight_gen": ["issue_tree_mapping", "insight_sharpening", "recommendation_structuring"],
"presentation": ["storyline_development", "deck_build", "internal_review"],
"workshops": ["pre_read_and_agenda", "workshop_facilitation", "action_registry"],
}
# module -> sub_task_name where skip=True is legal
OPTIONAL_SUB_TASKS = {
"data_modelling": "scenario_and_sensitivity",
"presentation": "internal_review",
"workshops": "pre_read_and_agenda",
}
# Fraction of module's base_days consumed by each sub-task
DAYS_FRACS = {
"secondary": [0.20, 0.60, 0.20],
"benchmarking": [0.20, 0.60, 0.20],
"interviews": [0.20, 0.60, 0.20],
"data_modelling": [0.25, 0.50, 0.25],
"insight_gen": [0.25, 0.50, 0.25],
"presentation": [0.25, 0.50, 0.25],
"workshops": [0.15, 0.70, 0.15],
}
# Quality contribution weight per sub-task (sums to 1.0 per module)
QUALITY_WEIGHTS = {
"secondary": [0.20, 0.50, 0.30],
"benchmarking": [0.20, 0.50, 0.30],
"interviews": [0.15, 0.55, 0.30],
"data_modelling": [0.25, 0.45, 0.30],
"insight_gen": [0.25, 0.45, 0.30],
"presentation": [0.25, 0.45, 0.30],
"workshops": [0.20, 0.60, 0.20],
}
# Sub-task index at which qc=True has effect (per module)
QC_SUB_TASK = {
"secondary": 2,
"benchmarking": 2,
"interviews": 2,
"data_modelling": 1,
"insight_gen": 2,
"presentation": 1,
"workshops": 2,
}
def get_sub_task_name(module: str, progress: int) -> str:
return SUB_TASKS[module][progress]
def is_optional(module: str, progress: int) -> bool:
optional_name = OPTIONAL_SUB_TASKS.get(module)
if optional_name is None:
return False
return SUB_TASKS[module][progress] == optional_name
def module_complete(module: str, progress: int) -> bool:
return progress >= len(SUB_TASKS[module])