End-to-end ML pipeline: PDF→JSON datasets, synthetic data, fine-tuning, evaluation, and edge deployment with Gradio GUI
Project description
SAARA
SAARA is a Python package for building local LLM workflows around data creation, fine-tuning, evaluation, export, and visualization.
It is aimed at a practical teacher-student workflow:
- extract text from PDFs or raw text
- generate synthetic supervision with a stronger local model
- fine-tune a smaller model
- evaluate quality, speed, memory, and optional teacher agreement
- export and quantize for deployment
- inspect the workflow through CLI or Gradio
Features
- PDF to text extraction with
PyMuPDFandpdfplumber - synthetic dataset generation for factual, reasoning, conversational, instruction, code, and creative tasks
- local provider abstraction for
Ollama,vLLM, andllama.cpp - fine-tuning helpers for LoRA and QLoRA workflows
- evaluation helpers for custom datasets, benchmarks, and teacher-student comparison
- export helpers for
safetensors,GGUF,AWQ,GPTQ,ONNX,TensorRT, and PyTorch formats - Gradio dashboard and CLI entrypoints
Install
From PyPI:
pip install saara-ai
Common installs:
pip install "saara-ai[training]"
pip install "saara-ai[export]"
pip install "saara-ai[providers,training,evaluation,export]"
From source:
git clone https://github.com/nikhil49023/saara-ai.git
cd saara-ai
python3 -m venv .venv
source .venv/bin/activate
pip install -e .
Optional extras:
pip install -e ".[dev]"
pip install -e ".[edge]"
pip install -e ".[providers,training,evaluation,export]"
Base saara-ai intentionally keeps the install lighter. Heavy native stacks such as auto-gptq, autoawq, llama-cpp-python, vllm, and training toolchains are opt-in extras.
Note: a virtual environment is strongly recommended.
Quick Start
1. Start a local model provider
For Ollama:
ollama pull mistral
ollama serve
2. Build a dataset from a PDF
from saara import DatasetBuilder
from saara.dataset.types import DataType
from saara.providers.ollama_provider import OllamaProvider, ProviderConfig
provider = OllamaProvider(
ProviderConfig(model="mistral", base_url="http://localhost:11434")
)
builder = DatasetBuilder(provider)
samples = builder.from_pdf(
"document.pdf",
data_types=[DataType.INSTRUCTION, DataType.FACTUAL],
pairs_per_type=5,
min_quality=0.65,
)
builder.save(samples, "dataset.jsonl")
3. Launch the GUI
saara gui
Core Workflow
Dataset creation
from saara import DatasetBuilder
from saara.dataset.types import DataType
builder = DatasetBuilder(provider)
samples = builder.from_text(
"Transformers use attention mechanisms for sequence modeling.",
data_types=[DataType.FACTUAL, DataType.INSTRUCTION],
pairs_per_type=3,
)
Fine-tuning
from saara import FineTuner
from saara.training.config import TrainingConfig
config = TrainingConfig(
model_name="mistralai/Mistral-7B-v0.1",
num_train_epochs=3,
use_lora=True,
)
finetuner = FineTuner(config)
finetuner.train("dataset.jsonl")
finetuner.save("./output/models/my-finetune")
Evaluation
from saara import ModelEvaluator
from saara.providers.ollama_provider import OllamaProvider, ProviderConfig
student = OllamaProvider(ProviderConfig(model="mistral-7b-finetuned"))
teacher = OllamaProvider(ProviderConfig(model="llama-3-70b"))
evaluator = ModelEvaluator(student, teacher)
metrics = evaluator.evaluate(
"test.jsonl",
run_benchmarks=True,
benchmark_names=["mmlu", "gsm8k"],
)
print(metrics.summary())
Export and quantization
from saara import ModelExporter
from saara.export.formats import ExportFormat
from saara.export.quantization import QuantizationConfig
exporter = ModelExporter(
model="./output/models/my-finetune",
config=QuantizationConfig(bits=4),
)
results = exporter.export(
"./output/exports",
formats=[ExportFormat.GGUF, ExportFormat.AWQ, ExportFormat.ONNX],
quantize=True,
)
CLI
saara dataset from-pdf document.pdf -o ./output --data-types instruction factual
saara train finetune dataset.jsonl --model mistralai/Mistral-7B-v0.1 --epochs 3
saara eval model test.jsonl --model mistral --teacher llama-3-70b --benchmarks mmlu gsm8k
saara export model ./models/final --formats gguf awq --quantize --bits 4
saara gui --port 7860
Documentation
- User guide: USER_GUIDE.md
- Package structure: PACKAGE_STRUCTURE.md
- Examples:
examples/
Examples
examples/01_pdf_to_dataset.pyexamples/02_synthetic_data.pyexamples/03_finetune.pyexamples/04_evaluate.pyexamples/05_export.pyexamples/06_complete_pipeline.pyexamples/07_gui.pyexamples/08_saara_demo_notebook.ipynbexamples/09_edge_ai_solutions_gemma_vllm.ipynbexamples/10_finetune_workflow_notebook.ipynbexamples/11_evaluation_workflow_notebook.ipynbexamples/12_export_workflow_notebook.ipynbexamples/13_gui_workflow_notebook.ipynb
Compatibility imports for older notebooks are also supported:
from saara.core import DatasetBuilder, ProviderConfig
from saara.enums import DataType, DatasetFormat
from saara.providers import VLLMProvider, DemoProvider
Recommended Starting Point
If you're trying SAARA for the first time, start with:
OllamaProvider- one small PDF or a short text file
- LoRA or QLoRA fine-tuning
GGUFandsafetensorsexport first
Development
pytest tests/
black saara/
ruff check saara/
mypy saara/
PyPI
https://pypi.org/project/saara-ai/
License
MIT. See LICENSE.
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 saara_ai-1.6.8.tar.gz.
File metadata
- Download URL: saara_ai-1.6.8.tar.gz
- Upload date:
- Size: 51.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f61cc033d337f78f2e35627c49ca7e27d69065985852310d664419f012d972f5
|
|
| MD5 |
6af1a4d7c774c23851f1a073901caf71
|
|
| BLAKE2b-256 |
1f50411fa9ca4ec647318224b336dfb6274ce110b214919ae11b410223f88f0e
|
File details
Details for the file saara_ai-1.6.8-py3-none-any.whl.
File metadata
- Download URL: saara_ai-1.6.8-py3-none-any.whl
- Upload date:
- Size: 47.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
21f248d0af8ba83085f13362c94db2ba4ed3fc0c534560f8ca95b96a8079b444
|
|
| MD5 |
28847331c28cfbc123f67feb3813cd37
|
|
| BLAKE2b-256 |
71bf8834c5a144c910ded0277fe55a5bcbe1cb817eaf8f1ccb5c1de80747c6c9
|