praisonai-train 0.0.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. praisonai_train-0.0.2/PKG-INFO +132 -0
  2. praisonai_train-0.0.2/README.md +98 -0
  3. praisonai_train-0.0.2/praisonai_train/__init__.py +39 -0
  4. praisonai_train-0.0.2/praisonai_train/__main__.py +18 -0
  5. praisonai_train-0.0.2/praisonai_train/_bootstrap.py +37 -0
  6. praisonai_train-0.0.2/praisonai_train/_code_bridge.py +28 -0
  7. praisonai_train-0.0.2/praisonai_train/_version.py +1 -0
  8. praisonai_train-0.0.2/praisonai_train/_wrapper_bridge.py +31 -0
  9. praisonai_train-0.0.2/praisonai_train/cli/__init__.py +1 -0
  10. praisonai_train-0.0.2/praisonai_train/cli/app.py +15 -0
  11. praisonai_train-0.0.2/praisonai_train/cli/commands/__init__.py +1 -0
  12. praisonai_train-0.0.2/praisonai_train/cli/commands/train.py +626 -0
  13. praisonai_train-0.0.2/praisonai_train/cli/output/__init__.py +18 -0
  14. praisonai_train-0.0.2/praisonai_train/cli/output/console.py +149 -0
  15. praisonai_train-0.0.2/praisonai_train/setup/__init__.py +1 -0
  16. praisonai_train-0.0.2/praisonai_train/setup/config.yaml +60 -0
  17. praisonai_train-0.0.2/praisonai_train/setup/setup_conda_env.py +25 -0
  18. praisonai_train-0.0.2/praisonai_train/setup/setup_conda_env.sh +105 -0
  19. praisonai_train-0.0.2/praisonai_train/train/__init__.py +77 -0
  20. praisonai_train-0.0.2/praisonai_train/train/_ollama.py +97 -0
  21. praisonai_train-0.0.2/praisonai_train/train/agents/__init__.py +94 -0
  22. praisonai_train-0.0.2/praisonai_train/train/agents/grader.py +63 -0
  23. praisonai_train-0.0.2/praisonai_train/train/agents/hook.py +320 -0
  24. praisonai_train-0.0.2/praisonai_train/train/agents/models.py +328 -0
  25. praisonai_train-0.0.2/praisonai_train/train/agents/orchestrator.py +394 -0
  26. praisonai_train-0.0.2/praisonai_train/train/agents/storage.py +282 -0
  27. praisonai_train-0.0.2/praisonai_train/train/llm/__init__.py +23 -0
  28. praisonai_train-0.0.2/praisonai_train/train/llm/trainer.py +587 -0
  29. praisonai_train-0.0.2/praisonai_train/train_vision.py +333 -0
  30. praisonai_train-0.0.2/praisonai_train/upload_vision.py +141 -0
  31. praisonai_train-0.0.2/praisonai_train.egg-info/PKG-INFO +132 -0
  32. praisonai_train-0.0.2/praisonai_train.egg-info/SOURCES.txt +36 -0
  33. praisonai_train-0.0.2/praisonai_train.egg-info/dependency_links.txt +1 -0
  34. praisonai_train-0.0.2/praisonai_train.egg-info/entry_points.txt +3 -0
  35. praisonai_train-0.0.2/praisonai_train.egg-info/requires.txt +26 -0
  36. praisonai_train-0.0.2/praisonai_train.egg-info/top_level.txt +1 -0
  37. praisonai_train-0.0.2/pyproject.toml +67 -0
  38. praisonai_train-0.0.2/setup.cfg +4 -0
@@ -0,0 +1,132 @@
1
+ Metadata-Version: 2.4
2
+ Name: praisonai-train
3
+ Version: 0.0.2
4
+ Summary: Training for PraisonAI — LLM fine-tuning (Unsloth) and iterative agent training extracted from the praisonai wrapper.
5
+ Author: Mervin Praison
6
+ License: MIT
7
+ Project-URL: Homepage, https://docs.praison.ai
8
+ Project-URL: Repository, https://github.com/mervinpraison/PraisonAI
9
+ Requires-Python: <3.15,>=3.10
10
+ Description-Content-Type: text/markdown
11
+ Requires-Dist: praisonaiagents>=1.6.126
12
+ Requires-Dist: rich>=13.7
13
+ Requires-Dist: typer>=0.12.0
14
+ Requires-Dist: click>=8.4.2
15
+ Requires-Dist: PyYAML>=6.0
16
+ Provides-Extra: llm
17
+ Requires-Dist: praisonai-code>=0.0.1; extra == "llm"
18
+ Requires-Dist: torch>=2.3.0; extra == "llm"
19
+ Requires-Dist: transformers>=4.40.0; extra == "llm"
20
+ Requires-Dist: unsloth>=2024.8; extra == "llm"
21
+ Requires-Dist: trl<0.9.0; extra == "llm"
22
+ Requires-Dist: peft>=0.10.0; extra == "llm"
23
+ Requires-Dist: accelerate>=0.30.0; extra == "llm"
24
+ Requires-Dist: bitsandbytes>=0.43.0; extra == "llm"
25
+ Requires-Dist: datasets>=2.19.0; extra == "llm"
26
+ Requires-Dist: sentencepiece>=0.2.0; extra == "llm"
27
+ Requires-Dist: protobuf; extra == "llm"
28
+ Requires-Dist: huggingface_hub>=0.23.0; extra == "llm"
29
+ Requires-Dist: hf_transfer; extra == "llm"
30
+ Provides-Extra: vision
31
+ Requires-Dist: praisonai-train[llm]; extra == "vision"
32
+ Provides-Extra: all
33
+ Requires-Dist: praisonai-train[llm]; extra == "all"
34
+
35
+ # PraisonAI Train
36
+
37
+ Training for [PraisonAI](https://github.com/mervinpraison/PraisonAI) — fine-tune LLMs and iteratively train agents, as a standalone package or as part of the full `praisonai` stack.
38
+
39
+ ## What it does
40
+
41
+ | Command | What happens | Needs GPU/ML deps? |
42
+ |---------|--------------|--------------------|
43
+ | `praisonai-train agents --input "What is Python?"` | Runs your agent, grades the answer with an LLM judge, feeds suggestions back, repeats | No |
44
+ | `praisonai-train agents --input "Explain AI" --human` | Same loop, but **you** give the feedback | No |
45
+ | `praisonai-train llm dataset.json` | Fine-tunes an open model (Llama, Qwen, …) on your dataset with [Unsloth](https://github.com/unslothai/unsloth) | Yes |
46
+ | `praisonai-train list` / `show` / `apply` | Browse training sessions and apply the best iteration to an agent | No |
47
+
48
+ ## Install
49
+
50
+ ```bash
51
+ # Agent training only (lightweight)
52
+ pip install praisonai-train
53
+
54
+ # + LLM fine-tuning (heavy ML stack: torch, unsloth, trl, ...)
55
+ pip install "praisonai-train[llm]"
56
+
57
+ # Or as part of the full PraisonAI stack (same commands via `praisonai train ...`)
58
+ pip install "praisonai[train]"
59
+ ```
60
+
61
+ GPU setups often prefer the conda installer, which pins CUDA-compatible versions:
62
+
63
+ ```bash
64
+ setup-conda-env # or: bash praisonai_train/setup/setup_conda_env.sh
65
+ ```
66
+
67
+ ## Quickstart: train an agent in 2 minutes
68
+
69
+ ```bash
70
+ export OPENAI_API_KEY=sk-...
71
+
72
+ # One input, three improvement iterations, LLM-as-judge
73
+ praisonai-train agents --input "What is the capital of France?" --iterations 3
74
+
75
+ # See what happened
76
+ praisonai-train list
77
+ praisonai-train show <session-id>
78
+
79
+ # Apply the best iteration and chat with the improved agent
80
+ praisonai-train apply <session-id> --run "And what about Germany?"
81
+ ```
82
+
83
+ Python API:
84
+
85
+ ```python
86
+ from praisonaiagents import Agent
87
+ from praisonai_train import AgentTrainer, TrainingScenario
88
+
89
+ agent = Agent(instructions="You are a helpful assistant.")
90
+ trainer = AgentTrainer(agent=agent, iterations=3)
91
+ trainer.add_scenario(TrainingScenario(id="demo", input_text="What is Python?"))
92
+ report = trainer.run()
93
+ report.print_summary()
94
+ ```
95
+
96
+ ## Quickstart: fine-tune an LLM
97
+
98
+ ```bash
99
+ pip install "praisonai-train[llm]"
100
+
101
+ # dataset.json in ShareGPT or Alpaca format; config.yaml is generated if absent
102
+ praisonai-train llm dataset.json --model llama-3.1
103
+ ```
104
+
105
+ Tuning knobs (LoRA rank, epochs, quantization, Ollama/HuggingFace export) live in `config.yaml` — see the template in `praisonai_train/setup/config.yaml`.
106
+
107
+ ## How it fits the PraisonAI stack
108
+
109
+ ```
110
+ praisonaiagents (core SDK)
111
+ ├── praisonai-code (terminal CLI)
112
+ ├── praisonai-bot (bots & gateway)
113
+ └── praisonai-train (this package)
114
+ └── praisonai (wrapper: installs everything)
115
+ ```
116
+
117
+ - Depends only on `praisonaiagents` — no circular deps, installs standalone.
118
+ - With the full stack installed, the same commands are available as `praisonai train ...`.
119
+ - Old import paths (`praisonai.train.agents`, `python -m praisonai.train.llm.trainer`) keep working via wrapper shims.
120
+
121
+ ## Development
122
+
123
+ ```bash
124
+ # From the monorepo root
125
+ cd src/praisonai-train
126
+ PYTHONPATH="../praisonai-agents:." python -m pytest tests/unit/train -q
127
+
128
+ # Import-direction gate (train must not import the wrapper)
129
+ bash ../../scripts/check_c10_train_imports.sh
130
+ ```
131
+
132
+ Boundary details: `src/praisonai/tests/PRAISONAI_TRAIN_MANIFEST.md`.
@@ -0,0 +1,98 @@
1
+ # PraisonAI Train
2
+
3
+ Training for [PraisonAI](https://github.com/mervinpraison/PraisonAI) — fine-tune LLMs and iteratively train agents, as a standalone package or as part of the full `praisonai` stack.
4
+
5
+ ## What it does
6
+
7
+ | Command | What happens | Needs GPU/ML deps? |
8
+ |---------|--------------|--------------------|
9
+ | `praisonai-train agents --input "What is Python?"` | Runs your agent, grades the answer with an LLM judge, feeds suggestions back, repeats | No |
10
+ | `praisonai-train agents --input "Explain AI" --human` | Same loop, but **you** give the feedback | No |
11
+ | `praisonai-train llm dataset.json` | Fine-tunes an open model (Llama, Qwen, …) on your dataset with [Unsloth](https://github.com/unslothai/unsloth) | Yes |
12
+ | `praisonai-train list` / `show` / `apply` | Browse training sessions and apply the best iteration to an agent | No |
13
+
14
+ ## Install
15
+
16
+ ```bash
17
+ # Agent training only (lightweight)
18
+ pip install praisonai-train
19
+
20
+ # + LLM fine-tuning (heavy ML stack: torch, unsloth, trl, ...)
21
+ pip install "praisonai-train[llm]"
22
+
23
+ # Or as part of the full PraisonAI stack (same commands via `praisonai train ...`)
24
+ pip install "praisonai[train]"
25
+ ```
26
+
27
+ GPU setups often prefer the conda installer, which pins CUDA-compatible versions:
28
+
29
+ ```bash
30
+ setup-conda-env # or: bash praisonai_train/setup/setup_conda_env.sh
31
+ ```
32
+
33
+ ## Quickstart: train an agent in 2 minutes
34
+
35
+ ```bash
36
+ export OPENAI_API_KEY=sk-...
37
+
38
+ # One input, three improvement iterations, LLM-as-judge
39
+ praisonai-train agents --input "What is the capital of France?" --iterations 3
40
+
41
+ # See what happened
42
+ praisonai-train list
43
+ praisonai-train show <session-id>
44
+
45
+ # Apply the best iteration and chat with the improved agent
46
+ praisonai-train apply <session-id> --run "And what about Germany?"
47
+ ```
48
+
49
+ Python API:
50
+
51
+ ```python
52
+ from praisonaiagents import Agent
53
+ from praisonai_train import AgentTrainer, TrainingScenario
54
+
55
+ agent = Agent(instructions="You are a helpful assistant.")
56
+ trainer = AgentTrainer(agent=agent, iterations=3)
57
+ trainer.add_scenario(TrainingScenario(id="demo", input_text="What is Python?"))
58
+ report = trainer.run()
59
+ report.print_summary()
60
+ ```
61
+
62
+ ## Quickstart: fine-tune an LLM
63
+
64
+ ```bash
65
+ pip install "praisonai-train[llm]"
66
+
67
+ # dataset.json in ShareGPT or Alpaca format; config.yaml is generated if absent
68
+ praisonai-train llm dataset.json --model llama-3.1
69
+ ```
70
+
71
+ Tuning knobs (LoRA rank, epochs, quantization, Ollama/HuggingFace export) live in `config.yaml` — see the template in `praisonai_train/setup/config.yaml`.
72
+
73
+ ## How it fits the PraisonAI stack
74
+
75
+ ```
76
+ praisonaiagents (core SDK)
77
+ ├── praisonai-code (terminal CLI)
78
+ ├── praisonai-bot (bots & gateway)
79
+ └── praisonai-train (this package)
80
+ └── praisonai (wrapper: installs everything)
81
+ ```
82
+
83
+ - Depends only on `praisonaiagents` — no circular deps, installs standalone.
84
+ - With the full stack installed, the same commands are available as `praisonai train ...`.
85
+ - Old import paths (`praisonai.train.agents`, `python -m praisonai.train.llm.trainer`) keep working via wrapper shims.
86
+
87
+ ## Development
88
+
89
+ ```bash
90
+ # From the monorepo root
91
+ cd src/praisonai-train
92
+ PYTHONPATH="../praisonai-agents:." python -m pytest tests/unit/train -q
93
+
94
+ # Import-direction gate (train must not import the wrapper)
95
+ bash ../../scripts/check_c10_train_imports.sh
96
+ ```
97
+
98
+ Boundary details: `src/praisonai/tests/PRAISONAI_TRAIN_MANIFEST.md`.
@@ -0,0 +1,39 @@
1
+ """PraisonAI Train — LLM fine-tuning and agent training (Tier 2c).
2
+
3
+ Extracted from the ``praisonai`` wrapper (C10). Two training modes:
4
+
5
+ - **LLM fine-tuning** (``praisonai-train llm``): Unsloth-based fine-tuning of
6
+ open models, driven by a ``config.yaml``. Heavy ML deps are lazy — install
7
+ with ``pip install "praisonai-train[llm]"`` or the conda script in
8
+ ``praisonai_train/setup/``.
9
+ - **Agent training** (``praisonai-train agents``): iterative LLM-as-judge or
10
+ human-in-the-loop feedback loops. Needs only ``praisonaiagents``.
11
+
12
+ Old wrapper import paths (``praisonai.train.*``) keep working via shims.
13
+ """
14
+
15
+ from __future__ import annotations
16
+
17
+ from praisonai_train._version import __version__
18
+
19
+ __all__ = [
20
+ "__version__",
21
+ "AgentTrainer",
22
+ "TrainingScenario",
23
+ "TrainModel",
24
+ "apply_training",
25
+ "get_training_profile",
26
+ ]
27
+
28
+
29
+ def __getattr__(name: str):
30
+ """Lazy top-level exports — never import ML deps at package import time."""
31
+ if name in ("AgentTrainer", "TrainingScenario", "apply_training", "get_training_profile"):
32
+ from praisonai_train.train import agents as _agents
33
+
34
+ return getattr(_agents, name)
35
+ if name == "TrainModel":
36
+ from praisonai_train.train.llm import trainer as _trainer
37
+
38
+ return _trainer.TrainModel
39
+ raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
@@ -0,0 +1,18 @@
1
+ """Console entry: ``praisonai-train``."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import sys
6
+
7
+
8
+ def main(argv: list[str] | None = None) -> None:
9
+ from praisonai_train.cli.app import app
10
+
11
+ args = argv if argv is not None else sys.argv[1:]
12
+ if not args:
13
+ args = ["--help"]
14
+ app(args=args, prog_name="praisonai-train")
15
+
16
+
17
+ if __name__ == "__main__":
18
+ main()
@@ -0,0 +1,37 @@
1
+ """Monorepo bootstrap for ``praisonai_train`` and optional ``praisonai_code``."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import sys
6
+ from pathlib import Path
7
+
8
+
9
+ def ensure_praisonai_train() -> None:
10
+ """Ensure ``praisonai_train`` is importable in monorepo dev layouts."""
11
+ try:
12
+ import praisonai_train # noqa: F401
13
+ return
14
+ except ImportError:
15
+ pass
16
+
17
+ here = Path(__file__).resolve().parents[1] # .../src/praisonai-train
18
+ if (here / "praisonai_train").is_dir():
19
+ root = str(here)
20
+ if root not in sys.path:
21
+ sys.path.insert(0, root)
22
+
23
+
24
+ def ensure_praisonai_code() -> None:
25
+ """Optional code-tier imports (YAML agent loading, legacy dispatch) when co-installed."""
26
+ try:
27
+ import praisonai_code # noqa: F401
28
+ return
29
+ except ImportError:
30
+ pass
31
+
32
+ train_src = Path(__file__).resolve().parents[1]
33
+ code_src = train_src.parent / "praisonai-code"
34
+ if (code_src / "praisonai_code").is_dir():
35
+ root = str(code_src)
36
+ if root not in sys.path:
37
+ sys.path.insert(0, root)
@@ -0,0 +1,28 @@
1
+ """Lazy access from praisonai-train to optional praisonai-code modules."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import importlib
6
+ from typing import Any
7
+
8
+ from praisonai_train._bootstrap import ensure_praisonai_code
9
+
10
+
11
+ def code_available() -> bool:
12
+ ensure_praisonai_code()
13
+ try:
14
+ import praisonai_code # noqa: F401
15
+ return True
16
+ except ImportError:
17
+ return False
18
+
19
+
20
+ def import_code_module(name: str) -> Any:
21
+ ensure_praisonai_code()
22
+ try:
23
+ return importlib.import_module(name)
24
+ except ImportError as exc:
25
+ raise ImportError(
26
+ f"Optional code module {name!r} requires praisonai-code. "
27
+ "Install with: pip install praisonai-code"
28
+ ) from exc
@@ -0,0 +1 @@
1
+ __version__ = "0.0.2"
@@ -0,0 +1,31 @@
1
+ """Lazy access from praisonai-train to optional praisonai wrapper modules."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import importlib
6
+ from typing import Any
7
+
8
+
9
+ def wrapper_available() -> bool:
10
+ try:
11
+ import praisonai # noqa: F401
12
+ return True
13
+ except ImportError:
14
+ return False
15
+
16
+
17
+ def import_wrapper_module(name: str) -> Any:
18
+ if not wrapper_available():
19
+ raise ImportError(
20
+ f"Optional wrapper module {name!r} requires the praisonai package. "
21
+ "Install with: pip install praisonai"
22
+ )
23
+ return importlib.import_module(name)
24
+
25
+
26
+ def optional_wrapper_attr(module: str, attr: str, default: Any = None) -> Any:
27
+ try:
28
+ mod = import_wrapper_module(module)
29
+ return getattr(mod, attr)
30
+ except ImportError:
31
+ return default
@@ -0,0 +1 @@
1
+ """CLI for standalone ``praisonai-train``."""
@@ -0,0 +1,15 @@
1
+ """Typer CLI for standalone ``praisonai-train``.
2
+
3
+ The train command group (``llm``, ``agents``, ``list``, ``show``, ``apply``)
4
+ is a single Typer app, so the standalone console script exposes it directly:
5
+ ``praisonai-train llm dataset.json``, ``praisonai-train agents --input ...``.
6
+
7
+ Inside the full stack the same app is mounted as ``praisonai train`` via the
8
+ ``_TRAIN_RESIDENT_COMMANDS`` routing in ``praisonai_code.cli.app``.
9
+ """
10
+
11
+ from __future__ import annotations
12
+
13
+ from praisonai_train.cli.commands.train import app
14
+
15
+ __all__ = ["app"]
@@ -0,0 +1 @@
1
+ """Typer command modules for praisonai-train."""