Spaces:
Running
Running
| """ | |
| Problem Generator - Generates diverse reasoning problems from concepts. | |
| Takes a concept text and generates 5-8 different reasoning problems across | |
| types: explain, compare, apply, critique, extend, analogize, decompose, synthesize. | |
| Each problem type has 10+ templates. | |
| """ | |
| import random | |
| import re | |
| class ProblemGenerator: | |
| """Generates multi-type reasoning problems from concept text.""" | |
| # Each problem type has 10+ templates with {concept} placeholder | |
| _problem_templates: dict[str, list[str]] = { | |
| "explain": [ | |
| "Explain the underlying mechanisms of {concept} as if teaching a graduate student who is brilliant but unfamiliar with this domain.", | |
| "Provide a first-principles explanation of {concept}, starting from the most fundamental assumptions and building up to the full picture.", | |
| "Explain why {concept} matters, tracing the chain of consequences from the immediate to the long-term.", | |
| "Explain {concept} by identifying the three most important things someone must understand and why each matters.", | |
| "Explain the causal structure of {concept}: what drives it, what it drives, and what mediates the relationship.", | |
| "Give an explanation of {concept} that a thoughtful 15-year-old would find both accessible and intellectually satisfying.", | |
| "Explain what makes {concept} difficult to understand and how that difficulty can be resolved.", | |
| "Explain {concept} by contrasting what most people think it means with what it actually means upon closer examination.", | |
| "Explain the boundary conditions of {concept}: under what circumstances does it hold, and when does it break down?", | |
| "Explain {concept} using only concrete examples and observable phenomena, avoiding abstract terminology.", | |
| "Explain how {concept} changes depending on the scale at which you examine it.", | |
| "Explain the history of how our understanding of {concept} has evolved and what drove each major shift.", | |
| ], | |
| "compare": [ | |
| "Compare {concept} with its closest alternative or rival, highlighting where they agree, where they diverge, and why the differences matter.", | |
| "Compare how {concept} would be understood by an engineer versus a philosopher, and explain what each perspective captures that the other misses.", | |
| "Compare the short-term and long-term implications of {concept}, noting where they align and where they conflict.", | |
| "Compare {concept} as it appears in theory versus how it manifests in practice, explaining the gap.", | |
| "Compare the strongest argument for {concept} with the strongest argument against it, steelmanning both sides.", | |
| "Compare how {concept} is understood in two different cultural or disciplinary contexts.", | |
| "Compare the naive understanding of {concept} with the expert understanding, identifying exactly where they diverge.", | |
| "Compare {concept} with a superficially similar but fundamentally different concept, explaining the crucial distinction.", | |
| "Compare the risks of overestimating versus underestimating the importance of {concept}.", | |
| "Compare how {concept} would be analyzed using quantitative methods versus qualitative methods, and what each approach reveals.", | |
| "Compare the state of {concept} ten years ago with its current state, identifying the key drivers of change.", | |
| ], | |
| "apply": [ | |
| "Apply the principles underlying {concept} to solve a concrete real-world problem that you specify.", | |
| "Describe how you would apply {concept} in a professional context, including specific steps and expected outcomes.", | |
| "Apply {concept} to a domain where it is not typically used and explain what new insights emerge.", | |
| "Design an experiment or test that would apply {concept} to generate actionable data.", | |
| "Apply {concept} to evaluate a current real-world controversy or decision, showing how it clarifies the issues.", | |
| "Show how {concept} could be applied to improve an existing system or process, specifying the mechanism of improvement.", | |
| "Apply {concept} to predict what will happen in a specified scenario and explain your reasoning.", | |
| "Demonstrate how {concept} applies to everyday decision-making by walking through a common choice people face.", | |
| "Apply {concept} to diagnose why a particular system or approach is failing and propose a remedy.", | |
| "Show how {concept} could be applied at three different scales (individual, organizational, societal) with different implications at each.", | |
| "Apply {concept} to a field where it has been underutilized and argue for its relevance.", | |
| ], | |
| "critique": [ | |
| "Identify the three most significant weaknesses or limitations of {concept} and assess how seriously they undermine it.", | |
| "Construct the strongest possible objection to {concept} and then evaluate whether the objection succeeds.", | |
| "Critique the hidden assumptions underlying {concept}, assessing which are well-founded and which are questionable.", | |
| "Evaluate whether {concept} confuses correlation with causation, and if so, what the actual causal story might be.", | |
| "Critique the evidence base for {concept}: is it sufficient, and what kinds of evidence are missing?", | |
| "Identify who benefits from the current framing of {concept} and whether that framing may be self-serving.", | |
| "Assess whether {concept} commits any logical fallacies and, if so, whether the core insight survives the correction.", | |
| "Critique the scalability of {concept}: does it work at small scale but fail at large scale, or vice versa?", | |
| "Evaluate whether {concept} is genuinely novel or whether it is a repackaging of older ideas under new terminology.", | |
| "Critique the precision of {concept}: is it defined clearly enough to be testable, or is it vague enough to be unfalsifiable?", | |
| "Assess whether {concept} adequately accounts for the perspectives and experiences of marginalized groups.", | |
| ], | |
| "extend": [ | |
| "Extend {concept} to its logical conclusion: if we take it seriously and follow it consistently, where does it lead?", | |
| "Propose a novel extension of {concept} that addresses one of its current limitations.", | |
| "Extend {concept} into the future: how might it evolve over the next decade given current trends?", | |
| "Identify a domain where {concept} has not yet been applied and develop the extension, including what modifications would be needed.", | |
| "Extend {concept} by combining it with an insight from a different field, creating something neither field has alone.", | |
| "Propose how {concept} could be extended to address a problem it was not originally designed for.", | |
| "Extend {concept} by asking what happens at its extreme: what if it were applied maximally or universally?", | |
| "Develop an extension of {concept} that makes it more robust against its known failure modes.", | |
| "Extend {concept} by integrating quantitative measurement where it currently relies on qualitative judgment.", | |
| "Propose a version of {concept} adapted for a context where resources are extremely limited.", | |
| "Extend {concept} by identifying the next logical question it raises and sketching how to answer it.", | |
| ], | |
| "analogize": [ | |
| "Construct an analogy between {concept} and a biological system, mapping each component to its biological counterpart.", | |
| "Create an analogy between {concept} and a well-known everyday experience that makes the abstract concrete.", | |
| "Develop an analogy between {concept} and a historical event or period, drawing specific parallels.", | |
| "Build an analogy between {concept} and a mechanical or engineering system, identifying the load-bearing correspondences.", | |
| "Construct an analogy between {concept} and a game or sport, mapping rules, strategies, and winning conditions.", | |
| "Create an analogy between {concept} and a musical composition, identifying rhythm, harmony, dissonance, and resolution.", | |
| "Develop an analogy between {concept} and an ecosystem, mapping the roles of producers, consumers, decomposers, and energy flow.", | |
| "Build an analogy between {concept} and the process of cooking a complex meal, mapping ingredients, techniques, and timing.", | |
| "Construct an analogy between {concept} and a journey, identifying the starting point, obstacles, milestones, and destination.", | |
| "Create an analogy between {concept} and a language, mapping grammar, vocabulary, syntax, and meaning.", | |
| "After constructing your best analogy for {concept}, identify exactly where the analogy breaks down and what the breakdown reveals.", | |
| ], | |
| "decompose": [ | |
| "Decompose {concept} into its fundamental components and explain how each contributes to the whole.", | |
| "Break {concept} into its necessary and sufficient conditions: what must be present for it to hold?", | |
| "Decompose {concept} into layers of abstraction, from the most concrete to the most abstract.", | |
| "Identify the independent variables within {concept} and explain how each can be varied independently.", | |
| "Decompose {concept} into its temporal phases: what happens first, second, third, and how do the phases connect?", | |
| "Break {concept} into its stakeholder dimensions: how does each affected party experience it differently?", | |
| "Decompose {concept} into its inputs, processes, and outputs, tracing the transformation at each stage.", | |
| "Identify the key tensions or trade-offs within {concept} and explain how they create its characteristic behavior.", | |
| "Decompose {concept} into what is known with confidence, what is suspected but unconfirmed, and what remains entirely unknown.", | |
| "Break {concept} into its structural elements (what it is) and its dynamic elements (how it changes).", | |
| "Decompose the causal graph of {concept}: which factors cause which, and which are merely correlated?", | |
| ], | |
| "synthesize": [ | |
| "Synthesize a unified understanding of {concept} that integrates scientific, philosophical, and practical perspectives.", | |
| "Synthesize the arguments for and against {concept} into a balanced position that acknowledges the valid points on both sides.", | |
| "Create a synthesis that resolves the apparent contradiction between two competing interpretations of {concept}.", | |
| "Synthesize insights about {concept} from at least three different disciplines into a coherent framework.", | |
| "Synthesize a practical guide for engaging with {concept} that draws on both theoretical understanding and real-world experience.", | |
| "Synthesize the historical evolution and current state of {concept} into a narrative that explains both where we are and how we got here.", | |
| "Create a synthesis of {concept} that a diverse audience (technical and non-technical, young and old) would find valuable.", | |
| "Synthesize the local and global dimensions of {concept} into an understanding that operates at both scales.", | |
| "Synthesize the quantitative and qualitative aspects of {concept} into an integrated assessment.", | |
| "Create a synthesis of {concept} that explicitly addresses and resolves the top three objections to it.", | |
| "Synthesize a forward-looking vision of {concept} that builds on current understanding to anticipate future development.", | |
| ], | |
| } | |
| def generate_problems( | |
| self, concept: str, count: int | None = None | |
| ) -> list[tuple[str, str]]: | |
| """Generate reasoning problems from a concept. | |
| Args: | |
| concept: The concept text to generate problems for. | |
| count: Number of problems to generate (5-8 if None). | |
| Returns: | |
| List of (problem_type, problem_text) tuples. | |
| """ | |
| if count is None: | |
| count = random.randint(5, 8) | |
| count = max(1, min(count, len(self._problem_templates))) | |
| # Select problem types -- always include explain and synthesize, | |
| # then fill remaining slots randomly from other types | |
| all_types = list(self._problem_templates.keys()) | |
| required = ["explain", "synthesize"] | |
| optional = [t for t in all_types if t not in required] | |
| random.shuffle(optional) | |
| selected_types = required + optional[: max(0, count - len(required))] | |
| random.shuffle(selected_types) | |
| problems = [] | |
| for ptype in selected_types: | |
| templates = self._problem_templates[ptype] | |
| # Score templates by keyword relevance to concept | |
| template = self._select_relevant_template(concept, templates) | |
| problem_text = template.replace("{concept}", concept) | |
| problems.append((ptype, problem_text)) | |
| return problems | |
| def generate_all_types(self, concept: str) -> list[tuple[str, str]]: | |
| """Generate one problem of each type for a concept. | |
| Args: | |
| concept: The concept text. | |
| Returns: | |
| List of (problem_type, problem_text) tuples, one per type. | |
| """ | |
| problems = [] | |
| for ptype, templates in self._problem_templates.items(): | |
| template = self._select_relevant_template(concept, templates) | |
| problem_text = template.replace("{concept}", concept) | |
| problems.append((ptype, problem_text)) | |
| return problems | |
| def _select_relevant_template( | |
| self, concept: str, templates: list[str] | |
| ) -> str: | |
| """Select the template most relevant to the concept keywords. | |
| Falls back to random selection if no strong match. | |
| """ | |
| concept_words = set(re.findall(r'\b[a-z]{4,}\b', concept.lower())) | |
| if not concept_words: | |
| return random.choice(templates) | |
| scored = [] | |
| for template in templates: | |
| template_lower = template.lower() | |
| score = sum(1 for w in concept_words if w in template_lower) | |
| scored.append((score, template)) | |
| max_score = max(s for s, _ in scored) | |
| if max_score > 0: | |
| best = [t for s, t in scored if s == max_score] | |
| return random.choice(best) | |
| return random.choice(templates) | |