ollama-classifier-gui 0.2.0__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.
@@ -0,0 +1,75 @@
1
+ # This workflow will upload a Python Package to PyPI when a release is created
2
+ # For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python#publishing-to-package-registries
3
+
4
+ # This workflow uses actions that are not certified by GitHub.
5
+ # They are provided by a third-party and are governed by
6
+ # separate terms of service, privacy policy, and support
7
+ # documentation.
8
+
9
+ name: Upload Python Package
10
+
11
+ on:
12
+ release:
13
+ types: [published]
14
+
15
+ permissions:
16
+ contents: read
17
+
18
+ jobs:
19
+ release-build:
20
+ runs-on: ubuntu-latest
21
+
22
+ steps:
23
+ - uses: actions/checkout@v4
24
+
25
+ - name: Install uv
26
+ uses: astral-sh/setup-uv@v7
27
+
28
+ - name: Set up Python
29
+ run: uv python install
30
+
31
+ - name: Install the project
32
+ run: uv sync --locked --all-extras --dev
33
+
34
+ - name: Run tests
35
+ run: uv run pytest tests
36
+
37
+ - name: Build
38
+ run: uv build
39
+
40
+ - name: Upload distributions
41
+ uses: actions/upload-artifact@v4
42
+ with:
43
+ name: release-dists
44
+ path: dist/
45
+
46
+ pypi-publish:
47
+ runs-on: ubuntu-latest
48
+ needs:
49
+ - release-build
50
+ permissions:
51
+ # IMPORTANT: this permission is mandatory for trusted publishing
52
+ id-token: write
53
+
54
+ # Dedicated environments with protections for publishing are strongly recommended.
55
+ # For more information, see: https://docs.github.com/en/actions/deployment/targeting-different-environments/using-environments-for-deployment#deployment-protection-rules
56
+ environment:
57
+ name: pypi
58
+ # OPTIONAL: uncomment and update to include your PyPI project URL in the deployment status:
59
+ # url: https://pypi.org/p/YOURPROJECT
60
+ #
61
+ # ALTERNATIVE: if your GitHub Release name is the PyPI project version string
62
+ # ALTERNATIVE: exactly, uncomment the following line instead:
63
+ # url: https://pypi.org/project/YOURPROJECT/${{ github.event.release.name }}
64
+
65
+ steps:
66
+ - name: Retrieve release distributions
67
+ uses: actions/download-artifact@v4
68
+ with:
69
+ name: release-dists
70
+ path: dist/
71
+
72
+ - name: Publish release distributions to PyPI
73
+ uses: pypa/gh-action-pypi-publish@release/v1
74
+ with:
75
+ packages-dir: dist/
@@ -0,0 +1,18 @@
1
+ name: Publish to ReadTheDocs
2
+
3
+ on:
4
+ release:
5
+ types: [published]
6
+
7
+ jobs:
8
+ trigger-rtd-build:
9
+ runs-on: ubuntu-latest
10
+
11
+ steps:
12
+ - name: Trigger ReadTheDocs build
13
+ run: |
14
+ VERSION=${{ github.event.release.tag_name }}
15
+ curl -X POST \
16
+ -H "Authorization: Token ${{ secrets.RTD_TOKEN }}" \
17
+ -H "Content-Type: application/json" \
18
+ https://readthedocs.org/api/v3/projects/ollama-classifier-gui/versions/$VERSION/builds/
@@ -0,0 +1,29 @@
1
+ name: Test
2
+
3
+ on:
4
+ push:
5
+ branches: [ main, master ]
6
+ pull_request:
7
+ branches: [ main, master ]
8
+
9
+ jobs:
10
+ test:
11
+ runs-on: ubuntu-latest
12
+ strategy:
13
+ matrix:
14
+ python-version: ["3.11", "3.12"]
15
+
16
+ steps:
17
+ - uses: actions/checkout@v4
18
+
19
+ - name: Install uv
20
+ uses: astral-sh/setup-uv@v7
21
+
22
+ - name: Set up Python ${{ matrix.python-version }}
23
+ run: uv python install ${{ matrix.python-version }}
24
+
25
+ - name: Install the project
26
+ run: uv sync --locked --all-extras --dev
27
+
28
+ - name: Run tests
29
+ run: uv run pytest tests
@@ -0,0 +1,25 @@
1
+ # Python
2
+ __pycache__/
3
+ *.py[cod]
4
+ *.egg-info/
5
+ dist/
6
+ build/
7
+
8
+ # Virtual environments
9
+ .venv/
10
+
11
+ # IDE
12
+ .idea/
13
+ .vscode/
14
+ *.swp
15
+ *.swo
16
+
17
+ # OS
18
+ .DS_Store
19
+ Thumbs.db
20
+
21
+ # Environment
22
+ .env
23
+ PLAN.md
24
+ .claude/*
25
+ .kilo/*
@@ -0,0 +1 @@
1
+ 3.11
@@ -0,0 +1,23 @@
1
+ # Read the Docs configuration file
2
+ # See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
3
+
4
+ # Required
5
+ version: 2
6
+
7
+ # Set the OS, Python version, and other tools you might need
8
+ build:
9
+ os: ubuntu-24.04
10
+ tools:
11
+ python: "3.13"
12
+
13
+ # Build documentation with Mkdocs
14
+ mkdocs:
15
+ configuration: mkdocs.yml
16
+
17
+ # Optionally, but recommended,
18
+ # declare the Python requirements required to build your documentation
19
+ # See https://docs.readthedocs.io/en/stable/guides/reproducible-builds.html
20
+ # python:
21
+ # install:
22
+ # - requirements: docs/requirements.txt
23
+
@@ -0,0 +1,158 @@
1
+ Metadata-Version: 2.4
2
+ Name: ollama-classifier-gui
3
+ Version: 0.2.0
4
+ Summary: A desktop GUI application for text classification using LLMs (Ollama, vLLM, SGLang, llama.cpp)
5
+ Project-URL: Homepage, https://github.com/paluigi/ollama-classifier-gui
6
+ Project-URL: Repository, https://github.com/paluigi/ollama-classifier-gui
7
+ Project-URL: Issues, https://github.com/paluigi/ollama-classifier-gui/issues
8
+ Author: Luigi Palumbo, Mengting Yu
9
+ License-Expression: MIT
10
+ Keywords: classifier,flet,gui,llama-cpp,llm,ollama,sglang,text-classification,vllm
11
+ Classifier: Development Status :: 3 - Alpha
12
+ Classifier: Intended Audience :: End Users/Desktop
13
+ Classifier: License :: OSI Approved :: MIT License
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Programming Language :: Python :: 3.11
16
+ Classifier: Programming Language :: Python :: 3.12
17
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
18
+ Classifier: Topic :: Text Processing :: Linguistic
19
+ Requires-Python: >=3.11
20
+ Requires-Dist: flet-secure-storage>=0.84.0
21
+ Requires-Dist: flet>=0.84.0
22
+ Requires-Dist: ollama-classifier[backends]>=0.3.0
23
+ Requires-Dist: openpyxl>=3.1.5
24
+ Requires-Dist: polars>=1.40.0
25
+ Requires-Dist: pyshortcuts>=1.9.7
26
+ Requires-Dist: xlsxwriter>=3.2.0
27
+ Description-Content-Type: text/markdown
28
+
29
+ # LLM Classifier GUI
30
+
31
+ A desktop GUI application for text classification using LLMs. Supports **multiple inference backends**: Ollama, vLLM, SGLang, and llama.cpp.
32
+
33
+ ![Python](https://img.shields.io/badge/Python-3.11+-blue)
34
+ ![License](https://img.shields.io/badge/License-MIT-green)
35
+
36
+ Built with [Flet](https://flet.dev/) and powered by [ollama-classifier](https://github.com/paluigi/ollama-classifier).
37
+
38
+ ## Features
39
+
40
+ - **Multiple backends**: Ollama, vLLM, SGLang, llama.cpp (local or remote)
41
+ - **Load data** from CSV or Excel files
42
+ - **Flexible classification schema**: define labels manually or load from a CSV/Excel file
43
+ - **Two classification methods**:
44
+ - *Classify*: single-call prediction with confidence score
45
+ - *Score*: multi-call evaluation with softmax probabilities for all labels
46
+ - **Output format options**:
47
+ - *Top label only*: prediction + confidence
48
+ - *All labels*: each label becomes a column with its probability
49
+ - **Batch size control**: process multiple texts concurrently for speed
50
+ - **Save results** to Excel (merged with original data)
51
+ - **Dark/Light mode** toggle
52
+ - **Secure storage** for API keys
53
+
54
+ ## Prerequisites
55
+
56
+ 1. **Python 3.11+**
57
+ 2. At least one inference backend:
58
+ - [Ollama](https://ollama.com/download) (local)
59
+ - [vLLM](https://docs.vllm.ai/) server
60
+ - [SGLang](https://sglang.ai/) server
61
+ - [llama.cpp server](https://github.com/ggerganov/llama.cpp/tree/master/examples/server)
62
+
63
+ ### Linux system dependencies
64
+
65
+ | Dependency | Purpose | Install (Debian/Ubuntu) |
66
+ |---|---|---|
67
+ | `zenity` | File picker dialogs | `sudo apt install zenity` |
68
+ | `libsecret-1-0` | Secure storage backend | `sudo apt install libsecret-1-0` |
69
+ | `gnome-keyring` or `kwalletmanager` or `secret-service` | Keyring service | `sudo apt install gnome-keyring` |
70
+
71
+ ## Installation
72
+
73
+ ```bash
74
+ # Via uvx (recommended — no installation needed)
75
+ uvx ollama-classifier-gui
76
+
77
+ # Or via pip
78
+ pip install ollama-classifier-gui
79
+ ollama-classifier-gui
80
+ ```
81
+
82
+ ### Run from source
83
+
84
+ ```bash
85
+ uv sync
86
+ uv run python -m ollama_classifier_gui.main
87
+ ```
88
+
89
+ ## Usage
90
+
91
+ ### 1. Settings tab
92
+ Configure your inference backend:
93
+ - Select the **backend type** (Ollama, vLLM, SGLang, llama.cpp)
94
+ - Set the **endpoint URL** (auto-fills with defaults)
95
+ - Enter the **model name** (or use "Test Connection" to auto-detect available models)
96
+ - Optionally set an **API key** for authenticated remote servers
97
+ - Toggle **dark/light mode**
98
+ - Click **Save Settings**
99
+
100
+ ### 2. Data Input tab
101
+ - Click **Select File** to load a CSV or Excel file
102
+ - For Excel files, select the **sheet** from the dropdown
103
+ - Select the **text column** that contains the text to classify
104
+
105
+ ### 3. Schema tab
106
+ Define your classification labels:
107
+ - **Manual Labels**: click "Add Label" to add labels with optional descriptions
108
+ - **Load from File**: select a CSV/Excel file containing labels (and optionally descriptions)
109
+
110
+ Then choose:
111
+ - **Classification Method**: Classify (fast) or Score (accurate probabilities)
112
+ - **Output Format**: Top label only or All labels (each as a column)
113
+ - Optionally override the **system prompt**
114
+
115
+ ### 4. Results tab
116
+ - Click **Run Classification** to start
117
+ - Monitor progress in real-time
118
+ - Click **Save Results** to export to Excel (original data + classification columns)
119
+
120
+ ### 5. Info tab
121
+ - Shows the **application version** and a link to the **GitHub repository** (both read from the package metadata defined in `pyproject.toml`)
122
+ - Click "Open in Browser" to open the repository in your default browser
123
+
124
+ ## Configuration
125
+
126
+ Settings are stored in a JSON config file:
127
+
128
+ | OS | Path |
129
+ |---|---|
130
+ | Linux | `$XDG_CONFIG_HOME/ollama-classifier-gui/config.json` (fallback `~/.config`) |
131
+ | macOS | `~/Library/Application Support/ollama-classifier-gui/config.json` |
132
+ | Windows | `%APPDATA%\ollama-classifier-gui\config.json` |
133
+
134
+ API keys are stored separately using the OS native secure storage (Keychain, Credential Manager, libsecret).
135
+
136
+ ## Default Endpoints
137
+
138
+ | Backend | Default URL |
139
+ |---|---|
140
+ | Ollama | `http://localhost:11434` |
141
+ | vLLM | `http://localhost:8000/v1` |
142
+ | SGLang | `http://localhost:30000/v1` |
143
+ | llama.cpp | `http://localhost:8080/v1` |
144
+
145
+ ## License
146
+
147
+ MIT
148
+
149
+ ## Change Log
150
+
151
+ - **0.2.1** — Fix launch & runtime bugs
152
+ - Fix the Schema tab "Classification Labels" card that failed to render (Tabs/TabBarView now have bounded height; tab switching wired via `on_change`)
153
+ - Fix "Save Results" Excel export: remove invalid `engine` argument and add `xlsxwriter` (the polars 1.40 writer backend)
154
+ - Rename entry module `app.py` → `main.py` (run directly with `python -m ollama_classifier_gui.main`)
155
+ - Resolve all Flet deprecation warnings (`ElevatedButton`→`Button`, `border.all`→`Border.all`, `margin.only`→`Margin.only`) to prepare for Flet 1.0
156
+ - Add `tests/` smoke tests; fix CI Python matrix (3.11/3.12)
157
+ - **0.2.2** — Add Info section
158
+ - New "Info" navigation tab showing the application version and GitHub repository link (sourced from `pyproject.toml` via `importlib.metadata`)
@@ -0,0 +1,130 @@
1
+ # LLM Classifier GUI
2
+
3
+ A desktop GUI application for text classification using LLMs. Supports **multiple inference backends**: Ollama, vLLM, SGLang, and llama.cpp.
4
+
5
+ ![Python](https://img.shields.io/badge/Python-3.11+-blue)
6
+ ![License](https://img.shields.io/badge/License-MIT-green)
7
+
8
+ Built with [Flet](https://flet.dev/) and powered by [ollama-classifier](https://github.com/paluigi/ollama-classifier).
9
+
10
+ ## Features
11
+
12
+ - **Multiple backends**: Ollama, vLLM, SGLang, llama.cpp (local or remote)
13
+ - **Load data** from CSV or Excel files
14
+ - **Flexible classification schema**: define labels manually or load from a CSV/Excel file
15
+ - **Two classification methods**:
16
+ - *Classify*: single-call prediction with confidence score
17
+ - *Score*: multi-call evaluation with softmax probabilities for all labels
18
+ - **Output format options**:
19
+ - *Top label only*: prediction + confidence
20
+ - *All labels*: each label becomes a column with its probability
21
+ - **Batch size control**: process multiple texts concurrently for speed
22
+ - **Save results** to Excel (merged with original data)
23
+ - **Dark/Light mode** toggle
24
+ - **Secure storage** for API keys
25
+
26
+ ## Prerequisites
27
+
28
+ 1. **Python 3.11+**
29
+ 2. At least one inference backend:
30
+ - [Ollama](https://ollama.com/download) (local)
31
+ - [vLLM](https://docs.vllm.ai/) server
32
+ - [SGLang](https://sglang.ai/) server
33
+ - [llama.cpp server](https://github.com/ggerganov/llama.cpp/tree/master/examples/server)
34
+
35
+ ### Linux system dependencies
36
+
37
+ | Dependency | Purpose | Install (Debian/Ubuntu) |
38
+ |---|---|---|
39
+ | `zenity` | File picker dialogs | `sudo apt install zenity` |
40
+ | `libsecret-1-0` | Secure storage backend | `sudo apt install libsecret-1-0` |
41
+ | `gnome-keyring` or `kwalletmanager` or `secret-service` | Keyring service | `sudo apt install gnome-keyring` |
42
+
43
+ ## Installation
44
+
45
+ ```bash
46
+ # Via uvx (recommended — no installation needed)
47
+ uvx ollama-classifier-gui
48
+
49
+ # Or via pip
50
+ pip install ollama-classifier-gui
51
+ ollama-classifier-gui
52
+ ```
53
+
54
+ ### Run from source
55
+
56
+ ```bash
57
+ uv sync
58
+ uv run python -m ollama_classifier_gui.main
59
+ ```
60
+
61
+ ## Usage
62
+
63
+ ### 1. Settings tab
64
+ Configure your inference backend:
65
+ - Select the **backend type** (Ollama, vLLM, SGLang, llama.cpp)
66
+ - Set the **endpoint URL** (auto-fills with defaults)
67
+ - Enter the **model name** (or use "Test Connection" to auto-detect available models)
68
+ - Optionally set an **API key** for authenticated remote servers
69
+ - Toggle **dark/light mode**
70
+ - Click **Save Settings**
71
+
72
+ ### 2. Data Input tab
73
+ - Click **Select File** to load a CSV or Excel file
74
+ - For Excel files, select the **sheet** from the dropdown
75
+ - Select the **text column** that contains the text to classify
76
+
77
+ ### 3. Schema tab
78
+ Define your classification labels:
79
+ - **Manual Labels**: click "Add Label" to add labels with optional descriptions
80
+ - **Load from File**: select a CSV/Excel file containing labels (and optionally descriptions)
81
+
82
+ Then choose:
83
+ - **Classification Method**: Classify (fast) or Score (accurate probabilities)
84
+ - **Output Format**: Top label only or All labels (each as a column)
85
+ - Optionally override the **system prompt**
86
+
87
+ ### 4. Results tab
88
+ - Click **Run Classification** to start
89
+ - Monitor progress in real-time
90
+ - Click **Save Results** to export to Excel (original data + classification columns)
91
+
92
+ ### 5. Info tab
93
+ - Shows the **application version** and a link to the **GitHub repository** (both read from the package metadata defined in `pyproject.toml`)
94
+ - Click "Open in Browser" to open the repository in your default browser
95
+
96
+ ## Configuration
97
+
98
+ Settings are stored in a JSON config file:
99
+
100
+ | OS | Path |
101
+ |---|---|
102
+ | Linux | `$XDG_CONFIG_HOME/ollama-classifier-gui/config.json` (fallback `~/.config`) |
103
+ | macOS | `~/Library/Application Support/ollama-classifier-gui/config.json` |
104
+ | Windows | `%APPDATA%\ollama-classifier-gui\config.json` |
105
+
106
+ API keys are stored separately using the OS native secure storage (Keychain, Credential Manager, libsecret).
107
+
108
+ ## Default Endpoints
109
+
110
+ | Backend | Default URL |
111
+ |---|---|
112
+ | Ollama | `http://localhost:11434` |
113
+ | vLLM | `http://localhost:8000/v1` |
114
+ | SGLang | `http://localhost:30000/v1` |
115
+ | llama.cpp | `http://localhost:8080/v1` |
116
+
117
+ ## License
118
+
119
+ MIT
120
+
121
+ ## Change Log
122
+
123
+ - **0.2.1** — Fix launch & runtime bugs
124
+ - Fix the Schema tab "Classification Labels" card that failed to render (Tabs/TabBarView now have bounded height; tab switching wired via `on_change`)
125
+ - Fix "Save Results" Excel export: remove invalid `engine` argument and add `xlsxwriter` (the polars 1.40 writer backend)
126
+ - Rename entry module `app.py` → `main.py` (run directly with `python -m ollama_classifier_gui.main`)
127
+ - Resolve all Flet deprecation warnings (`ElevatedButton`→`Button`, `border.all`→`Border.all`, `margin.only`→`Margin.only`) to prepare for Flet 1.0
128
+ - Add `tests/` smoke tests; fix CI Python matrix (3.11/3.12)
129
+ - **0.2.2** — Add Info section
130
+ - New "Info" navigation tab showing the application version and GitHub repository link (sourced from `pyproject.toml` via `importlib.metadata`)
@@ -0,0 +1,69 @@
1
+ [build-system]
2
+ requires = ["hatchling"]
3
+ build-backend = "hatchling.build"
4
+
5
+ [project]
6
+ name = "ollama-classifier-gui"
7
+ version = "0.2.0"
8
+ description = "A desktop GUI application for text classification using LLMs (Ollama, vLLM, SGLang, llama.cpp)"
9
+ readme = "README.md"
10
+ license = "MIT"
11
+ requires-python = ">=3.11"
12
+ authors = [
13
+ { name = "Luigi Palumbo"},
14
+ { name = "Mengting Yu"}
15
+ ]
16
+ keywords = ["ollama", "classifier", "text-classification", "llm", "flet", "gui", "vllm", "sglang", "llama-cpp"]
17
+ classifiers = [
18
+ "Development Status :: 3 - Alpha",
19
+ "Intended Audience :: End Users/Desktop",
20
+ "License :: OSI Approved :: MIT License",
21
+ "Programming Language :: Python :: 3",
22
+ "Programming Language :: Python :: 3.11",
23
+ "Programming Language :: Python :: 3.12",
24
+ "Topic :: Scientific/Engineering :: Artificial Intelligence",
25
+ "Topic :: Text Processing :: Linguistic",
26
+ ]
27
+ dependencies = [
28
+ "flet>=0.84.0",
29
+ "flet-secure-storage>=0.84.0",
30
+ "ollama-classifier[backends]>=0.3.0",
31
+ "polars>=1.40.0",
32
+ "openpyxl>=3.1.5",
33
+ "xlsxwriter>=3.2.0",
34
+ "pyshortcuts>=1.9.7",
35
+ ]
36
+
37
+ [project.scripts]
38
+ ollama-classifier-gui = "ollama_classifier_gui.main:main"
39
+
40
+ [project.urls]
41
+ Homepage = "https://github.com/paluigi/ollama-classifier-gui"
42
+ Repository = "https://github.com/paluigi/ollama-classifier-gui"
43
+ Issues = "https://github.com/paluigi/ollama-classifier-gui/issues"
44
+
45
+ [tool.hatch.build.targets.wheel]
46
+ packages = ["src/ollama_classifier_gui"]
47
+
48
+ [dependency-groups]
49
+ dev = [
50
+ "pytest>=8.0.0",
51
+ "ruff>=0.6.0",
52
+ "black>=24.0.0",
53
+ ]
54
+
55
+ [tool.pytest.ini_options]
56
+ testpaths = ["tests"]
57
+ addopts = "-q"
58
+
59
+ [tool.black]
60
+ line-length = 88
61
+ target-version = ["py311"]
62
+
63
+ [tool.ruff]
64
+ line-length = 88
65
+ target-version = "py311"
66
+
67
+ [tool.ruff.lint]
68
+ select = ["E", "F", "I", "W", "UP"]
69
+ ignore = ["E501"]
@@ -0,0 +1,6 @@
1
+ """Ollama Classifier GUI - A desktop application for text classification using LLMs.
2
+
3
+ Supports multiple inference backends: Ollama, vLLM, SGLang, and llama.cpp.
4
+ """
5
+
6
+ __version__ = "0.2.0"