Skip to content
Back to skills

Hypogenic

ASecurity

Automated LLM-driven hypothesis generation and testing for tabular datasets; use when you need systematic exploration of empirical patterns (e.g., fraud detection, content analysis) and want to combine literature insights with data-driven hypothesis evaluation.

  • 1,793 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added September 6, 2026
datapythonbashtestinggitapiperformance

Works with

  • cli
  • api

Security analysis

A96/100
  • mediumInstalls packages at runtime which could introduce malicious dependencies

Pro scans all 3 files and shows the line behind each finding

Scanned September 6, 2026

npx -y skills add aipoch/medical-research-skills --skill hypogenic --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Hypogenic?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Hypogenic
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/aipoch-hypogenic/badge)](https://www.skillsdirectory.com/skills/aipoch-hypogenic)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: hypogenic
description: Automated LLM-driven hypothesis generation and testing for tabular datasets; use when you need systematic exploration of empirical patterns (e.g., fraud detection, content analysis) and want to combine literature insights with data-driven hypothesis evaluation.
license: MIT
author: AIPOCH
---
> **Source**: [https://github.com/aipoch/medical-research-skills](https://github.com/aipoch/medical-research-skills)

## When to Use

- **Exploratory analysis on a new dataset** where you want the model to propose multiple *testable* hypotheses from observed patterns (e.g., AI-generated text detection).
- **Benchmarking competing explanations** by generating a hypothesis bank and evaluating them consistently on validation/test splits.
- **Literature-informed research** where you want to extract claims from papers and refine them against real data (e.g., deception cues in reviews).
- **High-coverage hypothesis discovery** when you need both theory-driven and data-driven hypotheses, then merge/deduplicate them (Union workflows).
- **Hypothesis-driven classification/regression pipelines** for domains like fraud detection, content moderation, mental health indicators, or other empirical studies using tabular/JSON datasets.

## Key Features

- **Automated hypothesis generation (HypoGeniC)**: iteratively proposes and improves hypotheses using dataset feedback.
- **Literature + data integration (HypoRefine)**: extracts literature insights from PDFs and refines hypotheses jointly with empirical signals.
- **Union method**: mechanically merges literature-only hypotheses with HypoGeniC/HypoRefine outputs to maximize coverage and reduce redundancy.
- **Config-driven prompting**: YAML templates with variable injection (e.g., `${text_features_1}`, `${num_hypotheses}`) for generation and inference.
- **Scalable experimentation**: optional Redis caching, parallelism, and adaptive selection focusing on hard examples.

## Dependencies

- `hypogenic` (install via PyPI; version depends on your environment)
- Optional (recommended for cost/performance):
  - `redis` (server; used for caching repeated LLM calls)
- Optional (required for literature/PDF workflows such as HypoRefine):
  - `GROBID` (service; used for PDF preprocessing)
  - `s2orc-doc2json` (PDF-to-structured conversion used in literature pipelines)

Install:
```bash
uv pip install hypogenic
```

## Example Usage

The following example is a minimal end-to-end workflow (dataset + config + CLI + Python). Adjust paths and prompts for your task.

### 1) Prepare a dataset (HuggingFace-style JSON)

Create three files:

- `./data/my_task_train.json`
- `./data/my_task_val.json`
- `./data/my_task_test.json`

Example schema (feature keys can be renamed, but must match your config placeholders):
```json
{
  "text_features_1": ["Text A1", "Text A2"],
  "text_features_2": ["Text B1", "Text B2"],
  "label": ["Class1", "Class2"]
}
```

### 2) Create `./data/my_task/config.yaml`

```yaml
task_name: my_task

train_data_path: ./data/my_task_train.json
val_data_path: ./data/my_task_val.json
test_data_path: ./data/my_task_test.json

prompt_templates:
  observations: |
    Feature 1: ${text_features_1}
    Feature 2: ${text_features_2}
    Label: ${label}

  batched_generation:
    system: |
      You are a scientific assistant. Propose testable, falsifiable hypotheses that map features to labels.
    user: |
      Given examples and labels, generate ${num_hypotheses} distinct hypotheses.
      Return a JSON list of hypotheses, each with a short name and a testable statement.

  inference:
    system: |
      You are a careful classifier. Use the provided hypothesis to predict the label.
    user: |
      Hypothesis: ${hypothesis}
      Feature 1: ${text_features_1}
      Feature 2: ${text_features_2}
      Output the final answer as: "final answer: <LABEL>"
```

### 3) Run generation + inference (CLI)

```bash
# Generate hypotheses (HypoGeniC)
hypogenic_generation \
  --config ./data/my_task/config.yaml \
  --method hypogenic \
  --num_hypotheses 20

# Evaluate generated hypotheses
hypogenic_inference \
  --config ./data/my_task/config.yaml \
  --hypotheses ./output/hypotheses.json
```

### 4) Run the same workflow (Python API)

```python
from hypogenic import BaseTask
import re

def extract_label(llm_output: str) -> str:
    m = re.search(r"final answer:\s*(.*)", llm_output, re.IGNORECASE)
    return m.group(1).strip() if m else llm_output.strip()

task = BaseTask(
    config_path="./data/my_task/config.yaml",
    extract_label=extract_label,
)

task.generate_hypotheses(
    method="hypogenic",
    num_hypotheses=20,
    output_path="./output/hypotheses.json",
)

results = task.inference(
    hypothesis_bank="./output/hypotheses.json",
    test_data="./data/my_task_test.json",
)

print(results)
```

## Implementation Details

### Methods

- **HypoGeniC (data-driven)**
  - Initializes hypotheses from a subset of training data.
  - Iteratively evaluates hypotheses on validation data and replaces underperforming ones.
  - Often uses *hard/challenging samples* to prompt improved hypotheses.

- **HypoRefine (literature + data)**
  - Preprocesses PDFs into structured text (commonly via GROBID + conversion tooling).
  - Generates a literature-derived hypothesis bank and a data-derived hypothesis bank.
  - Refines both banks iteratively using performance feedback and relevance checks.

- **Union**
  - Produces combined banks such as:
    - `Literature ∪ HypoGeniC`
    - `Literature ∪ HypoRefine`
  - Focuses on coverage and deduplication rather than deeper joint optimization.

### Configuration and Prompt Parameters

- **Variable injection**: prompt templates can reference dataset fields and runtime parameters:
  - `${text_features_1}`, `${text_features_2}`, … (from dataset JSON)
  - `${label}` (ground truth label, typically used in observation templates)
  - `${num_hypotheses}` (generation-time control)
  - `${hypothesis}` (inference-time hypothesis text)
- **Label parsing (`extract_label`)**:
  - Accuracy depends on extracting a label string that *exactly matches* the dataset’s `label` values.
  - Default patterns often look for `final answer: ...`; customize for your output format.

### Performance/Cost Controls (Optional)

- **Redis caching**: reduces repeated LLM calls during iterative generation and evaluation.
- **Parallelism**: speeds up hypothesis testing on large datasets.
- **Adaptive selection**: prioritizes difficult examples to improve hypothesis quality over iterations.

Files in this skill

  • SKILL.md6.4 KB
  • hypogenic_audit_result_v1.json11.9 KB
  • references/config_template.yaml4.2 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…