Metadata-Version: 2.4
Name: arclm
Version: 0.6.1
Summary: A compact PyTorch toolkit for native language-model training and Hugging Face SFT.
Author: Ahmad Al Dibo
License-Expression: Apache-2.0
Project-URL: Homepage, https://github.com/ahmad-al-dibo/arclm
Project-URL: Documentation, https://github.com/ahmad-al-dibo/arclm#readme
Project-URL: Source, https://github.com/ahmad-al-dibo/arclm
Project-URL: Issues, https://github.com/ahmad-al-dibo/arclm/issues
Project-URL: Changelog, https://github.com/ahmad-al-dibo/arclm/blob/main/CHANGELOG.md
Keywords: arclm,sft,llm,language-model,causal-language-model,transformer,pytorch,training,fine-tuning,instruction-tuning,nlp,huggingface
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Education
Classifier: Intended Audience :: Science/Research
Classifier: Natural Language :: English
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: <3.13,>=3.9
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: torch<3,>=2.1
Requires-Dist: numpy<3,>=1.24
Requires-Dist: sentencepiece<0.3,>=0.2
Requires-Dist: transformers<6,>=4.51
Provides-Extra: cpu
Requires-Dist: torch<3,>=2.1; extra == "cpu"
Requires-Dist: torchvision<1,>=0.16; extra == "cpu"
Requires-Dist: torchaudio<3,>=2.1; extra == "cpu"
Provides-Extra: cuda
Requires-Dist: torch<3,>=2.1; extra == "cuda"
Requires-Dist: torchvision<1,>=0.16; extra == "cuda"
Requires-Dist: torchaudio<3,>=2.1; extra == "cuda"
Provides-Extra: cuda121
Requires-Dist: torch<3,>=2.1; extra == "cuda121"
Requires-Dist: torchvision<1,>=0.16; extra == "cuda121"
Requires-Dist: torchaudio<3,>=2.1; extra == "cuda121"
Provides-Extra: dev
Requires-Dist: pytest>=8; extra == "dev"
Requires-Dist: build<2,>=1.2; extra == "dev"
Requires-Dist: twine<7,>=5; extra == "dev"
Provides-Extra: web
Requires-Dist: flask<4,>=3; extra == "web"
Provides-Extra: preprocess
Requires-Dist: beautifulsoup4<5,>=4.12; extra == "preprocess"
Requires-Dist: PyYAML<7,>=6; extra == "preprocess"
Requires-Dist: tqdm<5,>=4.66; extra == "preprocess"
Provides-Extra: peft
Requires-Dist: peft<1,>=0.11; extra == "peft"
Provides-Extra: hf
Requires-Dist: accelerate<2,>=0.30; extra == "hf"
Requires-Dist: datasets<4,>=2.18; extra == "hf"
Requires-Dist: peft<1,>=0.11; extra == "hf"
Provides-Extra: examples
Requires-Dist: accelerate<2,>=0.30; extra == "examples"
Requires-Dist: datasets<4,>=2.18; extra == "examples"
Requires-Dist: peft<1,>=0.11; extra == "examples"
Requires-Dist: safetensors<1,>=0.4; extra == "examples"
Provides-Extra: all
Requires-Dist: torch<3,>=2.1; extra == "all"
Requires-Dist: torchvision<1,>=0.16; extra == "all"
Requires-Dist: torchaudio<3,>=2.1; extra == "all"
Requires-Dist: flask<4,>=3; extra == "all"
Requires-Dist: beautifulsoup4<5,>=4.12; extra == "all"
Requires-Dist: PyYAML<7,>=6; extra == "all"
Requires-Dist: tqdm<5,>=4.66; extra == "all"
Requires-Dist: accelerate<2,>=0.30; extra == "all"
Requires-Dist: datasets<4,>=2.18; extra == "all"
Requires-Dist: peft<1,>=0.11; extra == "all"
Requires-Dist: safetensors<1,>=0.4; extra == "all"
Provides-Extra: all-cpu
Requires-Dist: torch<3,>=2.1; extra == "all-cpu"
Requires-Dist: torchvision<1,>=0.16; extra == "all-cpu"
Requires-Dist: torchaudio<3,>=2.1; extra == "all-cpu"
Requires-Dist: flask<4,>=3; extra == "all-cpu"
Requires-Dist: beautifulsoup4<5,>=4.12; extra == "all-cpu"
Requires-Dist: PyYAML<7,>=6; extra == "all-cpu"
Requires-Dist: tqdm<5,>=4.66; extra == "all-cpu"
Requires-Dist: accelerate<2,>=0.30; extra == "all-cpu"
Requires-Dist: datasets<4,>=2.18; extra == "all-cpu"
Requires-Dist: peft<1,>=0.11; extra == "all-cpu"
Requires-Dist: safetensors<1,>=0.4; extra == "all-cpu"
Provides-Extra: all-cuda
Requires-Dist: torch<3,>=2.1; extra == "all-cuda"
Requires-Dist: torchvision<1,>=0.16; extra == "all-cuda"
Requires-Dist: torchaudio<3,>=2.1; extra == "all-cuda"
Requires-Dist: flask<4,>=3; extra == "all-cuda"
Requires-Dist: beautifulsoup4<5,>=4.12; extra == "all-cuda"
Requires-Dist: PyYAML<7,>=6; extra == "all-cuda"
Requires-Dist: tqdm<5,>=4.66; extra == "all-cuda"
Requires-Dist: accelerate<2,>=0.30; extra == "all-cuda"
Requires-Dist: datasets<4,>=2.18; extra == "all-cuda"
Requires-Dist: peft<1,>=0.11; extra == "all-cuda"
Requires-Dist: safetensors<1,>=0.4; extra == "all-cuda"
Provides-Extra: all-cuda121
Requires-Dist: torch<3,>=2.1; extra == "all-cuda121"
Requires-Dist: torchvision<1,>=0.16; extra == "all-cuda121"
Requires-Dist: torchaudio<3,>=2.1; extra == "all-cuda121"
Requires-Dist: flask<4,>=3; extra == "all-cuda121"
Requires-Dist: beautifulsoup4<5,>=4.12; extra == "all-cuda121"
Requires-Dist: PyYAML<7,>=6; extra == "all-cuda121"
Requires-Dist: tqdm<5,>=4.66; extra == "all-cuda121"
Requires-Dist: accelerate<2,>=0.30; extra == "all-cuda121"
Requires-Dist: datasets<4,>=2.18; extra == "all-cuda121"
Requires-Dist: peft<1,>=0.11; extra == "all-cuda121"
Requires-Dist: safetensors<1,>=0.4; extra == "all-cuda121"
Dynamic: license-file

# ArcLM Simple Interface

[![PyPI](https://img.shields.io/pypi/v/arclm.svg)](https://pypi.org/project/arclm/)
[![Python](https://img.shields.io/pypi/pyversions/arclm.svg)](https://pypi.org/project/arclm/)
[![License](https://img.shields.io/pypi/l/arclm.svg)](LICENSE)
[![Status](https://img.shields.io/badge/release-0.6.0-blue.svg)](docs/VERSIONING.md)

ArcLM now includes a packaged web inference interface that can be started from the library, used from Python code, and used to save loaded models locally.

## Install Web Support

```bash
pip install "arclm[web]"
```

## Install Everything

CPU install with the official PyTorch CPU index:

```bash
pip install "arclm[all-cpu]" --index-url https://download.pytorch.org/whl/cpu --extra-index-url https://pypi.org/simple
```

CUDA 12.1 install with the official PyTorch CUDA index:

```bash
pip install "arclm[all-cuda121]" --index-url https://download.pytorch.org/whl/cu121 --extra-index-url https://pypi.org/simple
```

The `--index-url` part is passed to pip at install time. It cannot be stored inside `pyproject.toml` extras.

## Run From The CLI

Start the simple interface with:

```bash
python -m arclm --run simple-interface
```

Optional server settings:

```bash
python -m arclm --run simple-interface --host 127.0.0.1 --port 5000 --no-debug
```

## Run From Python

```python
from arclm import run_simple_interface

run_simple_interface()
```

You can also create the Flask app directly:

```python
from arclm import create_simple_interface_app

app = create_simple_interface_app()
```

## Save Models Locally

The interface includes:

- `Model source`
- `Load`
- `Save path`
- `Save mode`
- `Overwrite`
- `Save local`

Default save path:

```text
models/saved
```

Override it with:

```bash
MODEL_SAVE_PATH=models/local python -m arclm --run simple-interface
```

or:

```bash
SAVE_PATH=models/local python -m arclm --run simple-interface
```

When `Save local` succeeds, the interface updates `Model source` to the saved local path so the model can be loaded from disk next time.

## Save API

```http
POST /model/save
```

Example payload:

```json
{
  "model_source": "Qwen/Qwen3-0.6B",
  "save_path": "models/saved",
  "save_mode": "auto",
  "overwrite": false
}
```

`save_mode: "auto"` uses ArcLM's existing save logic for native ArcLM checkpoints, Hugging Face full models, and LoRA adapters.
