Metadata-Version: 2.4
Name: ollama-classifier-gui
Version: 0.2.0
Summary: A desktop GUI application for text classification using LLMs (Ollama, vLLM, SGLang, llama.cpp)
Project-URL: Homepage, https://github.com/paluigi/ollama-classifier-gui
Project-URL: Repository, https://github.com/paluigi/ollama-classifier-gui
Project-URL: Issues, https://github.com/paluigi/ollama-classifier-gui/issues
Author: Luigi Palumbo, Mengting Yu
License-Expression: MIT
Keywords: classifier,flet,gui,llama-cpp,llm,ollama,sglang,text-classification,vllm
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: End Users/Desktop
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Classifier: Topic :: Text Processing :: Linguistic
Requires-Python: >=3.11
Requires-Dist: flet-secure-storage>=0.84.0
Requires-Dist: flet>=0.84.0
Requires-Dist: ollama-classifier[backends]>=0.3.0
Requires-Dist: openpyxl>=3.1.5
Requires-Dist: polars>=1.40.0
Requires-Dist: pyshortcuts>=1.9.7
Requires-Dist: xlsxwriter>=3.2.0
Description-Content-Type: text/markdown

# LLM Classifier GUI

A desktop GUI application for text classification using LLMs. Supports **multiple inference backends**: Ollama, vLLM, SGLang, and llama.cpp.

![Python](https://img.shields.io/badge/Python-3.11+-blue)
![License](https://img.shields.io/badge/License-MIT-green)

Built with [Flet](https://flet.dev/) and powered by [ollama-classifier](https://github.com/paluigi/ollama-classifier).

## Features

- **Multiple backends**: Ollama, vLLM, SGLang, llama.cpp (local or remote)
- **Load data** from CSV or Excel files
- **Flexible classification schema**: define labels manually or load from a CSV/Excel file
- **Two classification methods**:
  - *Classify*: single-call prediction with confidence score
  - *Score*: multi-call evaluation with softmax probabilities for all labels
- **Output format options**:
  - *Top label only*: prediction + confidence
  - *All labels*: each label becomes a column with its probability
- **Batch size control**: process multiple texts concurrently for speed
- **Save results** to Excel (merged with original data)
- **Dark/Light mode** toggle
- **Secure storage** for API keys

## Prerequisites

1. **Python 3.11+**
2. At least one inference backend:
   - [Ollama](https://ollama.com/download) (local)
   - [vLLM](https://docs.vllm.ai/) server
   - [SGLang](https://sglang.ai/) server
   - [llama.cpp server](https://github.com/ggerganov/llama.cpp/tree/master/examples/server)

### Linux system dependencies

| Dependency | Purpose | Install (Debian/Ubuntu) |
|---|---|---|
| `zenity` | File picker dialogs | `sudo apt install zenity` |
| `libsecret-1-0` | Secure storage backend | `sudo apt install libsecret-1-0` |
| `gnome-keyring` or `kwalletmanager` or `secret-service` | Keyring service | `sudo apt install gnome-keyring` |

## Installation

```bash
# Via uvx (recommended — no installation needed)
uvx ollama-classifier-gui

# Or via pip
pip install ollama-classifier-gui
ollama-classifier-gui
```

### Run from source

```bash
uv sync
uv run python -m ollama_classifier_gui.main
```

## Usage

### 1. Settings tab
Configure your inference backend:
- Select the **backend type** (Ollama, vLLM, SGLang, llama.cpp)
- Set the **endpoint URL** (auto-fills with defaults)
- Enter the **model name** (or use "Test Connection" to auto-detect available models)
- Optionally set an **API key** for authenticated remote servers
- Toggle **dark/light mode**
- Click **Save Settings**

### 2. Data Input tab
- Click **Select File** to load a CSV or Excel file
- For Excel files, select the **sheet** from the dropdown
- Select the **text column** that contains the text to classify

### 3. Schema tab
Define your classification labels:
- **Manual Labels**: click "Add Label" to add labels with optional descriptions
- **Load from File**: select a CSV/Excel file containing labels (and optionally descriptions)

Then choose:
- **Classification Method**: Classify (fast) or Score (accurate probabilities)
- **Output Format**: Top label only or All labels (each as a column)
- Optionally override the **system prompt**

### 4. Results tab
- Click **Run Classification** to start
- Monitor progress in real-time
- Click **Save Results** to export to Excel (original data + classification columns)

### 5. Info tab
- Shows the **application version** and a link to the **GitHub repository** (both read from the package metadata defined in `pyproject.toml`)
- Click "Open in Browser" to open the repository in your default browser

## Configuration

Settings are stored in a JSON config file:

| OS | Path |
|---|---|
| Linux | `$XDG_CONFIG_HOME/ollama-classifier-gui/config.json` (fallback `~/.config`) |
| macOS | `~/Library/Application Support/ollama-classifier-gui/config.json` |
| Windows | `%APPDATA%\ollama-classifier-gui\config.json` |

API keys are stored separately using the OS native secure storage (Keychain, Credential Manager, libsecret).

## Default Endpoints

| Backend | Default URL |
|---|---|
| Ollama | `http://localhost:11434` |
| vLLM | `http://localhost:8000/v1` |
| SGLang | `http://localhost:30000/v1` |
| llama.cpp | `http://localhost:8080/v1` |

## License

MIT

## Change Log

- **0.2.1** — Fix launch & runtime bugs
  - Fix the Schema tab "Classification Labels" card that failed to render (Tabs/TabBarView now have bounded height; tab switching wired via `on_change`)
  - Fix "Save Results" Excel export: remove invalid `engine` argument and add `xlsxwriter` (the polars 1.40 writer backend)
  - Rename entry module `app.py` → `main.py` (run directly with `python -m ollama_classifier_gui.main`)
  - Resolve all Flet deprecation warnings (`ElevatedButton`→`Button`, `border.all`→`Border.all`, `margin.only`→`Margin.only`) to prepare for Flet 1.0
  - Add `tests/` smoke tests; fix CI Python matrix (3.11/3.12)
- **0.2.2** — Add Info section
  - New "Info" navigation tab showing the application version and GitHub repository link (sourced from `pyproject.toml` via `importlib.metadata`)
