Integrations
Parallelogram runs wherever your data does: inside your coding agent, in CI, and right before your trainer.
Coding Agents
Parallelogram runs as an MCP server, so your agent checks and fixes data itself.
-
Claude Code
Writes
.mcp.jsonfor this project.parallelogram integrate claude-codeOr:
claude mcp add parallelogram -- parallelogram mcp -
Codex
Codex keeps MCP servers in your user config; this adds it there.
codex mcp add parallelogram \ -- parallelogram mcpparallelogram integrate codexprints the TOML instead. -
Cursor
Writes
.cursor/mcp.jsonfor this project.parallelogram integrate cursor -
VS Code + Copilot
Agent mode. Writes
.vscode/mcp.json.parallelogram integrate vscode -
Gemini CLI
Writes
.gemini/settings.jsonfor this project.parallelogram integrate gemini -
Windsurf
Prints the entry for Windsurf's MCP config.
parallelogram integrate windsurf -
Cline
Prints the entry for Cline's MCP settings.
parallelogram integrate cline -
Zed
Prints the context server for Zed's settings.
parallelogram integrate zed -
Any MCP client
A stdio server: command
parallelogram, args["mcp"].parallelogram mcpTools:
check_dataset,fix_dataset,list_rules.
CI and Hooks
Bad data fails the build, the same way broken code does.
-
GitHub Actions
Fails a pull request on errors and writes a report to the job summary.
- uses: Thatayotlhe04/Parallelogram@v1 with: path: data/train.jsonl -
pre-commit
Checks every staged
.jsonlbefore it's committed.- repo: https://github.com/Thatayotlhe04/Parallelogram rev: cli-v1.6.0 hooks: - id: parallelogram -
Any CI
Exit 0 clean, 1 warnings, 2 errors, 3 operational failure.
parallelogram check data/train.jsonl \ --json --limit 50
Training Frameworks
The formats each trainer reads, checked before the GPU clock starts.
-
Hugging Face TRL
SFT
messagesand DPOprompt/chosen/rejected. Exact counts with the model's tokenizer.parallelogram check train.jsonl \ --tokenizer Qwen/Qwen2.5-7B -
Axolotl
Chat-template, ShareGPT and Alpaca datasets. Catches records over
sequence_len.parallelogram check train.jsonl \ --max-seq-len 4096 -
Unsloth
ShareGPT and chat data, checked against your
max_seq_lengthbefore the SFT run starts.parallelogram check train.jsonl \ --max-seq-len 2048 -
LLaMA-Factory
Alpaca and ShareGPT, including
function_callandobservationturns.parallelogram check data/train.jsonl -
OpenAI chat format
messageswithtoolsandtool_calls: the shape most trainers accept, OpenAI's fine-tuning API included.parallelogram check train.jsonl \ --format openai-chat -
Python
The same checks inside your own pipeline.
from parallelogram import check result = check("train.jsonl") if result.exit_code >= 2: raise SystemExit(result.exit_code)