Large Scale Topic based Synthetic Data Generation for LLM Fine-Tuning & Training
Project description
DeepFabric
Training Model Behavior in Agentic Systems
|
🚀 Active Development
🏃♂️ We are moving fast, things may break! |
DeepFabric is a specialised dataset generation and model fine-tuning framework designed for training small language models (SLMs) to become capable agents. By combining reasoning traces with tool calling patterns, and enforcement of type based structured outputs - DeepFabric enables you to fine-tune models that make intelligent decisions, select appropriate tools, and execute multi-step workflows efficiently and with accuracy.
Built by engineers behind production-grade open source projects used by NVIDIA, Google, GitHub, and more.
DeepFabric plans to streamline the entire agent training pipeline and drag AI/ML development into the modern age: By allow the quick production of training ready structured reasoning templates to multi architecture model-ready formats across all major training frameworks. Whether you're building MCP-compatible agents, distilling capabilities into smaller models, or creating specialized tool-calling systems, DeepFabric provides the high-quality, diverse training data you need at scale.
Deepfabric development is moving at a fast pace 🏃♂️, for a great way to follow the project and to be instantly notified of new releases, Star the repo.
Generation to Training
DeepFabric datasets are ready for immediate training, multi-format capable with no conversion scripts needed, no preprocessing pipelines, just generate and train:
Supervised Fine-Tuning (SFT): Drop DeepFabric datasets directly into HuggingFace TRL's SFTTrainer for tool-calling and conversational agent training. The builtin://trl_sft_tools formatter outputs the exact structure TRL expects, including function schemas and multi-turn tool interactions.
from trl import SFTTrainer
from datasets import load_dataset
# Load your DeepFabric dataset
dataset = load_dataset("json", data_files="your_deepfabric_dataset.jsonl")
# Train directly with TRL - no preprocessing needed
trainer = SFTTrainer(
model=model,
train_dataset=dataset["train"],
# ... your training config
)
trainer.train()
Or if your dataset is already in a different template style, simply re-format on the fly direct within your training notebook.
from trl import SFTTrainer
from datasets import load_dataset
!deepfabric format --repo "org/deepfabric-dataset" -f trl_sft_tools -o dataset.jsonl
dataset = load_dataset("json", data_files="dataset.jsonl", split="train")
# Train directly with TRL - no preprocessing needed
trainer = SFTTrainer(
model=model,
train_dataset=dataset["train"],
# ... your training config
)
trainer.train()
Reinforcement Learning from Process Supervision (GRPO): Train models to generate step-by-step reasoning with the builtin://grpo formatter. Ideal for mathematical reasoning, complex problem-solving, and transparent decision-making where each reasoning step can be verified and reinforced.
# GRPO-formatted dataset with explicit reasoning traces
dataset = load_dataset("json", data_files="math_reasoning_grpo.jsonl")
# Each example contains structured reasoning steps for RL optimization
# Perfect for training models that show their work
Multi-Framework Support: The same dataset generation can target Unsloth, Axolotl, or custom frameworks through DeepFabric's formatter system—generate once, experiment with multiple training approaches without regenerating data.
Key Features
Core Capabilities
- Hierarchical Topic Generation: Tree and graph-based architectures for comprehensive domain coverage
- Multi-Format Export: Direct export to popular training formats (no conversion scripts needed)
- Conversation Templates: Support for various dialogue patterns and reasoning styles
- Tool Calling Support: Generate function-calling and agent interaction datasets
- Structured Output: Pydantic & Outlines enforced schemas for consistent, high-quality data
- Multi-Provider Support: Works with OpenAI, Anthropic, Google, Ollama, OpenRouter and more
- HuggingFace Integration: Direct dataset upload with auto-generated cards
Why Train SLMs for Agents?
Training smaller, specialized models for agentic tasks offers distinct advantages over relying on large API-based models:
- Cost Efficiency: Deploy fine-tuned agents locally instead of paying per API call, dramatically reducing operational costs
- Privacy & Control: Keep sensitive data and agent reasoning entirely within your infrastructure
- Specialized Behavior: Train models to follow your exact tool-calling patterns, reasoning styles, and domain expertise
- Format Flexibility: Generate once, train everywhere—DeepFabric's formatters support TRL, Unsloth, Axolotl, and custom training frameworks
- MCP Ecosystem Ready: Create training datasets optimized for Model Context Protocol servers and standardized tool interfaces
DeepFabric's structured approach ensures your training data teaches not just what tools to call, but why they're selected and how to construct parameters—the reasoning traces that transform models into reliable agents.
Supported Output Formats
| Format | Template | Use Case | Framework Compatibility |
|---|---|---|---|
| TRL SFT Tools | builtin://trl_sft_tools |
Tool calling fine-tuning | HuggingFace TRL SFTTrainer |
| XLAM v2 | builtin://xlam_v2 |
Multi-turn tool calling | Salesforce xLAM models |
| Tool Calling | builtin://tool_calling.py |
Function calling | Agent training |
| Single Tool Call | builtin://single_tool_call.py |
Individual tool calls | Single function execution |
| GRPO | builtin://grpo.py |
Mathematical reasoning | GRPO training |
| Harmony | builtin://harmony.py |
Reasoning with tags | OpenAI gpt-oss |
| Conversations | builtin://conversations.py |
Generic conversations format | Unsloth, Axolotl, HF TRL |
| ChatML | builtin://chatml.py |
Multi-turn conversations | Most chat models |
| Alpaca | builtin://alpaca.py |
Instruction-following | Stanford Alpaca, LLaMA |
| Custom | file://your_format.py |
Your requirements | Any framework |
Custom Format
You can create your own custom output format by implementing a simple Python class with a format method using the deepfabric library and BaseFormatter class. See the Custom Format Guide for details.
Conversation Templates
DeepFabric's conversation templates determine how your training data structures reasoning and tool interaction. For agent training, combining reasoning templates (CoT variants) with tool calling creates datasets that teach both decision-making and execution—the foundation of capable agents.
| Template Type | Description | Agent Training Value |
|---|---|---|
| Tool Calling | Function invocations with reasoning | Teaches tool selection, parameter construction, and execution patterns |
| Chain of Thought (CoT) | Step-by-step reasoning | Enables transparent decision-making for complex multi-step tasks |
| Structured CoT | Explicit reasoning traces | Provides clear reasoning paths ideal for agent auditing and debugging |
| Hybrid CoT | Mixed reasoning styles | Combines intuitive and analytical thinking for adaptive agents |
| Multi-Turn | Extended dialogues | Enables context retention and multi-step planning |
| System-Prompted | With system instructions | Defines agent personas, constraints, and behavioral guidelines |
| Single-Turn | Question → Answer | Direct task completion and classification tasks |
Template Missing?
If there's a format or feature you'd like to see, please open an issue.
DeepFabric Pipeline
DeepFabric is designed to work within a modular MLOps pipeline, allowing you to customize each stage of the dataset generation process. The main components are:
- Topic Generation: Create a structured topic tree or graph based on a high-level prompt.
- Data Generation: Generate training examples for each topic using LLMs.
- Format Engine: Convert raw outputs into your desired dataset format.
graph LR
A[Topic Prompt] --> B[Topic Tree/Graph]
B --> C[Data Generator]
C --> D[Format Engine]
D --> E[Export/Upload]
By decoupling these components, you can easily swap out models, prompts, and formats to suit your specific needs, along with version controlling your configurations for reproducibility.
Quickstart
1. Install DeepFabric
pip install deepfabric
2. Generate Your First Dataset
# Set your API key (or use Ollama for local generation)
export OPENAI_API_KEY="your-api-key"
# Generate a dataset with a single command
deepfabric generate \
--mode tree \
--provider openai \
--model gpt-4o \
--depth 3 \
--degree 3 \
--num-steps 27 \
--batch-size 1 \
--topic-prompt "This history Quantum physics" \
--generation-system-prompt "You are an expert on academic history, with a specialism in the sciences" \
--dataset-save-as dataset.jsonl
Deepfabric will automatically:
- Generate a hierarchical topic tree (3 levels deep, 3 branches per level)
- Create 27 diverse Q&A pairs across the generated topics
- Save your dataset to
dataset.jsonl
[!NOTE]
Want to generate faster? Increase batch size! For example, if you set--batch-size 3and--num-steps 9deepfabric will generate 3 entries at a time, while ensuring rate limits of OpenAI are monitored (we use backoff, jitter etc).
3. Use Your Dataset
Your dataset is ready in the OpenAI standard instruct format (JSONL):
{
"messages": [
{
"role": "user",
"content": "Can you explain Albert Einstein's contribution to quantum theory?"
},
{
"role": "assistant",
"content": "Albert Einstein made significant contributions to quantum theory, particularly through his explanation of the photoelectric effect, for which he won the Nobel Prize in 1921. He proposed that light could be thought of as discrete packets of energy called quanta or photons, which could explain how electrons are emitted from metals when exposed to light. This idea was instrumental in the development of quantum mechanics. He later became famous for his skepticism about quantum mechanics probabilistic interpretation, leading to his quote \"God does not play dice with the universe.\""
}
]
}
4. Use local models.
Generate larger datasets with different models:
# With a depth of 4 and degree of 4^5 = 1,024
deepfabric generate \
--provider ollama \
--model qwen3:32b \
--depth 4 \
--degree 5 \
--num-steps 100 \
--batch-size 5 \
--topic-prompt "Machine Learning Fundamentals"
--generation-system-prompt "You are an expert on Machine Learning and its application in modern technologies" \
--dataset-save-as dataset.jsonl
There are lots more examples to get you going.
Topic Generation Modes
| Mode | Structure | Use Case | Max Topics |
|---|---|---|---|
| Tree | Hierarchical branching | Well-organized domains | depth^degree |
| Graph | DAG with cross-connections | Interconnected concepts | Flexible |
| Linear | Sequential topics | Simple lists | User-defined |
| Custom | User-provided structure | Specific requirements | Unlimited |
Provider Support Matrix
| Provider | Models | Best For | Local/Cloud |
|---|---|---|---|
| OpenAI | GPT-4, GPT-4o, GPT-3.5 | High quality, complex tasks | Cloud |
| Anthropic | Claude 3.5 Sonnet, Haiku | Nuanced reasoning | Cloud |
| Gemini 2.0, 1.5 | Cost-effective at scale | Cloud | |
| Ollama | Llama, Mistral, Qwen, etc. | Privacy, unlimited generation | Local |
| Together | Open models | Fast inference | Cloud |
| OpenRouter | Many Models! | Flexible model choice | Cloud |
Configuration System
DeepFabric uses a flexible YAML-based configuration with extensive CLI overrides:
# Main system prompt - used as fallback throughout the pipeline
dataset_system_prompt: "You are a helpful AI assistant providing clear, educational responses."
# Topic Tree Configuration
# Generates a hierarchical topic structure using tree generation
topic_tree:
topic_prompt: "Python programming fundamentals and best practices"
# LLM Settings
provider: "ollama" # Options: openai, anthropic, gemini, ollama
model: "qwen3:0.6b" # Change to your preferred model
temperature: 0.7 # 0.0 = deterministic, 1.0 = creative
# Tree Structure
degree: 2 # Number of subtopics per node (1-10)
depth: 2 # Depth of the tree (1-5)
# Topic generation prompt (optional - uses dataset_system_prompt if not specified)
topic_system_prompt: "You are a curriculum designer creating comprehensive programming learning paths. Focus on practical concepts that beginners need to master."
# Output
save_as: "python_topics_tree.jsonl" # Where to save the generated topic tree
# Data Engine Configuration
# Generates the actual training examples
data_engine:
instructions: "Create clear programming tutorials with working code examples and explanations"
# LLM Settings (can override main provider/model)
provider: "ollama"
model: "qwen3:0.6b"
temperature: 0.3 # Lower temperature for more consistent code
max_retries: 3 # Number of retries for failed generations
# Content generation prompt
generation_system_prompt: "You are a Python programming instructor creating educational content. Provide working code examples, clear explanations, and practical applications."
# Dataset Assembly Configuration
# Controls how the final dataset is created and formatted
dataset:
creation:
num_steps: 4 # Number of training examples to generate
batch_size: 1 # Process 3 examples at a time
sys_msg: true # Include system messages in output format
# Output
save_as: "python_programming_dataset.jsonl"
# Optional Hugging Face Hub configuration
huggingface:
# Repository in format "username/dataset-name"
repository: "your-username/your-dataset-name"
# Token can also be provided via HF_TOKEN environment variable or --hf-token CLI option
token: "your-hf-token"
# Additional tags for the dataset (optional)
# "deepfabric" and "synthetic" tags are added automatically
tags:
- "deepfabric-generated-dataset"
- "geography"
Run using the CLI:
deepfabric generate config.yaml
The CLI supports various options to override configuration values:
deepfabric generate config.yaml \
--save-tree output_tree.jsonl \
--dataset-save-as output_dataset.jsonl \
--model-name ollama/qwen3:8b \
--temperature 0.8 \
--degree 4 \
--depth 3 \
--num-steps 10 \
--batch-size 2 \
--sys-msg true \ # Control system message inclusion (default: true)
--hf-repo username/dataset-name \
--hf-token your-token \
--hf-tags tag1 --hf-tags tag2
Advanced Features
Chain of Thought (CoT) Generation
| CoT Style | Template Pattern | Best For |
|---|---|---|
| Free-text | Natural language steps | Mathematical problems (GSM8K-style) |
| Structured | Explicit reasoning traces | Educational content, tutoring |
| Hybrid | Mixed reasoning | Complex multi-step problems |
# Example: Structured CoT configuration
data_engine:
conversation_template: "cot_structured"
cot_style: "mathematical"
include_reasoning_tags: true
Quality Control Features
- Deduplication: Automatic removal of similar samples
- Validation: Schema enforcement for all outputs
- Rate Limiting: Provider-aware retry with exponential backoff and jitter (docs)
- Progress Monitoring: Real-time generation statistics
📖 Documentation & Resources
| Resource | Description | Link |
|---|---|---|
| Documentation | Complete API reference & guides | docs |
| Examples | Ready-to-use configurations | examples/ |
| Discord | Community support | Join Discord |
| Issues | Bug reports & features | GitHub Issues |
Contributing
We welcome contributions! Check out our good first issues to get started.
Development Setup
git clone https://github.com/lukehinds/deepfabric
cd deepfabric
uv sync --all-extras # Install with dev dependencies
make test # Run tests
make format # Format code
Community & Support
- Discord: Join our community for real-time help
- Issues: Report bugs or request features
- Discussions: Share your use cases and datasets
Who's Using DeepFabric?
If you're using DeepFabric in production or research, we'd love to hear from you! Share your experience in our Discord or open a discussion.
Tips for Best Results
- Start Small: Test with
depth=2, degree=3before scaling up - Mix Models: Use stronger models for topics, faster ones for generation
- Combine Templates: Mix CoT reasoning with tool calling to teach both decision-making and execution
- Validate Tool Patterns: Ensure tool calls include reasoning about why tools are selected and how parameters are constructed
- Iterate: Generate small batches and refine prompts based on results
- Test Agent Behavior: Run small-scale training experiments to validate dataset quality before generating at scale
- Version Control: Save configurations for reproducibility and systematic improvement
Analytics
We use privacy-respecting analytics to help us improve application performance and stability. We never send Personal identifiable information and we do not capture prompts, generated content, API keys, file names etc.
What We Collect
- Anonymous User ID: A stable, one-way hash based on your machine characteristics (hostname + MAC address). This helps us understand unique user counts without identifying you. Its impossible to reverse this hash to get your actual machine details and one-way only.
- Usage Metrics: Model names, numeric parameters (temperature, depth, degree, batch_size), timing and success/failure rates
- Developer Flag: If you set
DEEPFABRIC_DEVELOPER=True, events are marked to help us filter developer testing from real usage
Privacy Guarantees
- No usernames, emails, IP addresses, or personal information
- User ID is cryptographically hashed and cannot be reversed and contains no Personal Identifiable Information
- No prompts, generated datasets, or sensitive data is collected
- All data is used solely for application improvement in regards to performance, stability, and feature usage
Control Your Participation
# Disable all analytics
export ANONYMIZED_TELEMETRY=False
# Mark yourself as a developer (for filtering)
export DEEPFABRIC_DEVELOPER=True
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file deepfabric-3.9.0.tar.gz.
File metadata
- Download URL: deepfabric-3.9.0.tar.gz
- Upload date:
- Size: 5.6 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
664d71b780d851867c53ace5e5272a5ecc02e5b31a62930ab0b08e7f25ea4538
|
|
| MD5 |
560896821877f98d50445983ddb2593c
|
|
| BLAKE2b-256 |
e834832e4b640a0e83cea70a92a7375da1a9085b0f182d94f2325aac1602918a
|
Provenance
The following attestation bundles were made for deepfabric-3.9.0.tar.gz:
Publisher:
publish.yml on lukehinds/deepfabric
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
deepfabric-3.9.0.tar.gz -
Subject digest:
664d71b780d851867c53ace5e5272a5ecc02e5b31a62930ab0b08e7f25ea4538 - Sigstore transparency entry: 725045681
- Sigstore integration time:
-
Permalink:
lukehinds/deepfabric@bfb0667931cd46dc226e18b9b59a957831405151 -
Branch / Tag:
refs/tags/v3.9.0 - Owner: https://github.com/lukehinds
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@bfb0667931cd46dc226e18b9b59a957831405151 -
Trigger Event:
release
-
Statement type:
File details
Details for the file deepfabric-3.9.0-py3-none-any.whl.
File metadata
- Download URL: deepfabric-3.9.0-py3-none-any.whl
- Upload date:
- Size: 215.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d1e00987276469ea27f1004e7beea9a31ba5bf23cc27add0bbd44dba6e5365f5
|
|
| MD5 |
83d8f1ba40a80b7ef7cfe082145ca22f
|
|
| BLAKE2b-256 |
60acfafbdd32a41d236338eba28bb704ada321c914aea0b21bc021c89d028de7
|
Provenance
The following attestation bundles were made for deepfabric-3.9.0-py3-none-any.whl:
Publisher:
publish.yml on lukehinds/deepfabric
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
deepfabric-3.9.0-py3-none-any.whl -
Subject digest:
d1e00987276469ea27f1004e7beea9a31ba5bf23cc27add0bbd44dba6e5365f5 - Sigstore transparency entry: 725045683
- Sigstore integration time:
-
Permalink:
lukehinds/deepfabric@bfb0667931cd46dc226e18b9b59a957831405151 -
Branch / Tag:
refs/tags/v3.9.0 - Owner: https://github.com/lukehinds
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@bfb0667931cd46dc226e18b9b59a957831405151 -
Trigger Event:
release
-
Statement type: