Skip to main content

Training for PraisonAI — LLM fine-tuning (Unsloth) and iterative agent training extracted from the praisonai wrapper.

Project description

PraisonAI Train

Training for PraisonAI — fine-tune LLMs and iteratively train agents, as a standalone package or as part of the full praisonai stack.

What it does

Command What happens Needs GPU/ML deps?
praisonai-train agents --input "What is Python?" Runs your agent, grades the answer with an LLM judge, feeds suggestions back, repeats No
praisonai-train agents --input "Explain AI" --human Same loop, but you give the feedback No
praisonai-train llm dataset.json Fine-tunes an open model (Llama, Qwen, …) on your dataset with Unsloth Yes
praisonai-train list / show / apply Browse training sessions and apply the best iteration to an agent No

Install

# Agent training only (lightweight)
pip install praisonai-train

# + LLM fine-tuning (heavy ML stack: torch, unsloth, trl, ...)
pip install "praisonai-train[llm]"

# Or as part of the full PraisonAI stack (same commands via `praisonai train ...`)
pip install "praisonai[train]"

GPU setups often prefer the conda installer, which pins CUDA-compatible versions:

setup-conda-env   # or: bash praisonai_train/setup/setup_conda_env.sh

Quickstart: train an agent in 2 minutes

export OPENAI_API_KEY=sk-...

# Up to three improvement iterations, LLM-as-judge
praisonai-train agents --input "Explain quantum entanglement to a 10-year-old" --iterations 3

# See what happened
praisonai-train list
praisonai-train show <session-id>

# Apply the best iteration and chat with the improved agent
praisonai-train apply <session-id> --run "And what about Germany?"

Note: --iterations sets the maximum number of training loops. In LLM-as-judge mode, training stops early when any iteration scores ≥ 9.5 (excellent), so easy prompts may finish in a single iteration. Pass --no-early-stop to force all iterations, or --verbose to see when it stops.

Python API:

from praisonaiagents import Agent
from praisonai_train import AgentTrainer, TrainingScenario

agent = Agent(instructions="You are a helpful assistant.")
trainer = AgentTrainer(agent=agent, iterations=3)
trainer.add_scenario(TrainingScenario(id="demo", input_text="What is Python?"))
report = trainer.run()
report.print_summary()

Quickstart: fine-tune an LLM

pip install "praisonai-train[llm]"

# dataset.json in ShareGPT or Alpaca format; config.yaml is generated if absent
praisonai-train llm dataset.json --model llama-3.1

Tuning knobs (LoRA rank, epochs, quantization, Ollama/HuggingFace export) live in config.yaml — see the template in praisonai_train/setup/config.yaml.

How it fits the PraisonAI stack

praisonaiagents  (core SDK)
   ├── praisonai-code   (terminal CLI)
   ├── praisonai-bot    (bots & gateway)
   └── praisonai-train  (this package)
        └── praisonai   (wrapper: installs everything)
  • Depends only on praisonaiagents — no circular deps, installs standalone.
  • With the full stack installed, the same commands are available as praisonai train ....
  • Old import paths (praisonai.train.agents, python -m praisonai.train.llm.trainer) keep working via wrapper shims.

Development

# From the monorepo root
cd src/praisonai-train
PYTHONPATH="../praisonai-agents:." python -m pytest tests/unit/train -q

# Import-direction gate (train must not import the wrapper)
bash ../../scripts/check_c10_train_imports.sh

Boundary details: src/praisonai/tests/PRAISONAI_TRAIN_MANIFEST.md.

Dataset tooling (generate + validate)

Build and quality-check instruction datasets — protocol-driven and YAML-configurable.

# Synthesize from a teacher LLM (recipe + diversity axes, JSON mode, dedup, resumable offsets)
praisonai-train generate --config generate.yaml
praisonai-train generate -r tamil -d gpt-4o -n 1000 -o data/tamil.jsonl

# Quality-check / filter (dedup, boilerplate & refusal, script purity, diversity metrics)
praisonai-train validate data/tamil.jsonl --out data/clean.jsonl

Add a language/domain by registering a Recipe, or a new QC rule by registering a RowCheck (see praisonai_train/data/), and they show up automatically.

Verify → export → train → re-verify (learn from real agent runs)

Beyond synthetic generation, you can fine-tune on the agent's own verified behaviour. Given a trials report (K scored attempts per case with captured trajectories), from-trials keeps the passing attempts and writes a trainer-ready dataset — closing the loop from verification to data generation.

# 1) export the passing attempts as a ShareGPT dataset (+ provenance sidecar)
praisonai-train data from-trials trials.json -o data/train.jsonl

# 2) fine-tune with the existing trainer, unchanged
praisonai-train llm --dataset data/train.jsonl

# 3) re-run the trials on the fine-tuned model and compare pass-rate to measure gain
from praisonai_train.data import export_trials

summary = export_trials(
    report, "data/train.jsonl",
    only_passed=True,     # rejection sampling on the verifier (default)
    frontier_only=True,   # skip saturated / zero-pass cases (default)
)
print(summary)  # written / skipped_failed / skipped_tool_runs / skipped_no_text / ...

Selection defaults: unscored attempts are never candidates; only_passed keeps verifier-passed attempts; frontier_only restricts to cases with 0 < pass_rate < 1 (saturated cases add near-duplicates of mastered behaviour, zero-pass cases have nothing to export); tool-using runs are excluded by default (--all, --include-saturated relax these). A {out}.jsonl.meta.json sidecar maps every line to its case id, attempt index and score, and emission order is deterministic → reproducible files. Add --qc to run rows through the same QC filter as validate, or --format alpaca for instruction/input/output.

Honest selection: only_passed is rejection sampling — it amplifies behaviour the agent already produces and inherits any bias in the scorer/judge that decided a run "passed". It cannot teach behaviour the agent never exhibited; treat it as reinforcing verified wins, not as an oracle.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

praisonai_train-0.0.14.tar.gz (98.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

praisonai_train-0.0.14-py3-none-any.whl (114.8 kB view details)

Uploaded Python 3

File details

Details for the file praisonai_train-0.0.14.tar.gz.

File metadata

  • Download URL: praisonai_train-0.0.14.tar.gz
  • Upload date:
  • Size: 98.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.12.1 {"installer":{"name":"uv","version":"0.12.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for praisonai_train-0.0.14.tar.gz
Algorithm Hash digest
SHA256 642ad9ab404abedc8e251bd6b5728baa73e69b4d79662fe5f0ddfb4e1dc3a4a4
MD5 20a75ffded2599414f519622d9321225
BLAKE2b-256 03f3989a9589c6632d004eb4ca13db213c3aa63f1cc9db3b677c6f5b1fc9a976

See more details on using hashes here.

File details

Details for the file praisonai_train-0.0.14-py3-none-any.whl.

File metadata

  • Download URL: praisonai_train-0.0.14-py3-none-any.whl
  • Upload date:
  • Size: 114.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.12.1 {"installer":{"name":"uv","version":"0.12.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for praisonai_train-0.0.14-py3-none-any.whl
Algorithm Hash digest
SHA256 0c3168352e17d99cae0721a0802a5ba837e84201e5b2542069220e1beb515e18
MD5 38408f0ac4ffbf0422999c0800be0f7a
BLAKE2b-256 f8e095759e16b71977ae6a8e9d23521be81dbc92c4a851f71fe3d05f5689ace5

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page