quillbench 1.4.1__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 (48) hide show
  1. quillbench-1.4.1/LICENSE +26 -0
  2. quillbench-1.4.1/PKG-INFO +205 -0
  3. quillbench-1.4.1/README.md +149 -0
  4. quillbench-1.4.1/pyproject.toml +44 -0
  5. quillbench-1.4.1/quillbench/__init__.py +11 -0
  6. quillbench-1.4.1/quillbench/__main__.py +3 -0
  7. quillbench-1.4.1/quillbench/accounts.py +344 -0
  8. quillbench-1.4.1/quillbench/backup.py +48 -0
  9. quillbench-1.4.1/quillbench/builder.py +190 -0
  10. quillbench-1.4.1/quillbench/cli.py +297 -0
  11. quillbench-1.4.1/quillbench/client.py +65 -0
  12. quillbench-1.4.1/quillbench/config.py +588 -0
  13. quillbench-1.4.1/quillbench/export.py +112 -0
  14. quillbench-1.4.1/quillbench/graphdb.py +182 -0
  15. quillbench-1.4.1/quillbench/ldap_auth.py +59 -0
  16. quillbench-1.4.1/quillbench/paths.py +47 -0
  17. quillbench-1.4.1/quillbench/quality.py +196 -0
  18. quillbench-1.4.1/quillbench/registry.py +114 -0
  19. quillbench-1.4.1/quillbench/settings.py +64 -0
  20. quillbench-1.4.1/quillbench/shard_gold_cache.py +165 -0
  21. quillbench-1.4.1/quillbench/storage.py +385 -0
  22. quillbench-1.4.1/quillbench/tasks.py +346 -0
  23. quillbench-1.4.1/quillbench/ui/__init__.py +0 -0
  24. quillbench-1.4.1/quillbench/ui/admin.py +167 -0
  25. quillbench-1.4.1/quillbench/ui/app.py +293 -0
  26. quillbench-1.4.1/quillbench/ui/assets/icon.png +0 -0
  27. quillbench-1.4.1/quillbench/ui/assets/logo.svg +7 -0
  28. quillbench-1.4.1/quillbench/ui/builder.py +162 -0
  29. quillbench-1.4.1/quillbench/ui/components.py +192 -0
  30. quillbench-1.4.1/quillbench/ui/console.py +121 -0
  31. quillbench-1.4.1/quillbench/ui/dashboard.py +91 -0
  32. quillbench-1.4.1/quillbench/ui/embed.py +15 -0
  33. quillbench-1.4.1/quillbench/ui/generic.py +301 -0
  34. quillbench-1.4.1/quillbench/ui/query_review.py +578 -0
  35. quillbench-1.4.1/quillbench/ui/session.py +58 -0
  36. quillbench-1.4.1/quillbench/ui/shortcuts.py +53 -0
  37. quillbench-1.4.1/quillbench/ui/theme.py +473 -0
  38. quillbench-1.4.1/quillbench/validate.py +147 -0
  39. quillbench-1.4.1/quillbench.egg-info/PKG-INFO +205 -0
  40. quillbench-1.4.1/quillbench.egg-info/SOURCES.txt +46 -0
  41. quillbench-1.4.1/quillbench.egg-info/dependency_links.txt +1 -0
  42. quillbench-1.4.1/quillbench.egg-info/entry_points.txt +2 -0
  43. quillbench-1.4.1/quillbench.egg-info/requires.txt +10 -0
  44. quillbench-1.4.1/quillbench.egg-info/top_level.txt +1 -0
  45. quillbench-1.4.1/setup.cfg +4 -0
  46. quillbench-1.4.1/tests/test_app.py +198 -0
  47. quillbench-1.4.1/tests/test_core.py +270 -0
  48. quillbench-1.4.1/tests/test_login.py +118 -0
@@ -0,0 +1,26 @@
1
+ QuillBench Academic Non-Commercial License
2
+
3
+ Copyright (c) 2026 A.C. Pogaku. All rights reserved.
4
+
5
+ The copyright in this software and its documentation (the "Software") belongs
6
+ solely to A.C. Pogaku. All rights not expressly granted here are reserved.
7
+
8
+ Permission is granted, free of charge, to students, teachers, researchers and
9
+ academic or other non-profit research institutions to use, copy and modify the
10
+ Software, and to share copies or modified versions with others, for academic
11
+ teaching, study and research only, on these conditions:
12
+
13
+ 1. No commercial use. You may not sell the Software, offer it as a paid
14
+ service, or use it in or for any commercial product, service or activity,
15
+ or for the benefit of a commercial organisation. No commercial license is
16
+ offered under these terms.
17
+ 2. Keep this notice. Every copy or modified version must include this license
18
+ and the copyright notice above, and must carry these same terms.
19
+ 3. Mark your changes. Modified versions must state that they were changed.
20
+
21
+ Results and data you produce with the Software belong to you. Publishing
22
+ academic work that used the Software is permitted.
23
+
24
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
25
+ IMPLIED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM,
26
+ DAMAGES OR OTHER LIABILITY ARISING FROM THE SOFTWARE OR ITS USE.
@@ -0,0 +1,205 @@
1
+ Metadata-Version: 2.4
2
+ Name: quillbench
3
+ Version: 1.4.1
4
+ Summary: Build benchmark datasets with human annotators: a config-driven annotation platform for research.
5
+ Author: A.C. Pogaku
6
+ License: QuillBench Academic Non-Commercial License
7
+
8
+ Copyright (c) 2026 A.C. Pogaku. All rights reserved.
9
+
10
+ The copyright in this software and its documentation (the "Software") belongs
11
+ solely to A.C. Pogaku. All rights not expressly granted here are reserved.
12
+
13
+ Permission is granted, free of charge, to students, teachers, researchers and
14
+ academic or other non-profit research institutions to use, copy and modify the
15
+ Software, and to share copies or modified versions with others, for academic
16
+ teaching, study and research only, on these conditions:
17
+
18
+ 1. No commercial use. You may not sell the Software, offer it as a paid
19
+ service, or use it in or for any commercial product, service or activity,
20
+ or for the benefit of a commercial organisation. No commercial license is
21
+ offered under these terms.
22
+ 2. Keep this notice. Every copy or modified version must include this license
23
+ and the copyright notice above, and must carry these same terms.
24
+ 3. Mark your changes. Modified versions must state that they were changed.
25
+
26
+ Results and data you produce with the Software belong to you. Publishing
27
+ academic work that used the Software is permitted.
28
+
29
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
30
+ IMPLIED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM,
31
+ DAMAGES OR OTHER LIABILITY ARISING FROM THE SOFTWARE OR ITS USE.
32
+
33
+ Project-URL: Homepage, https://github.com/quillbench/quillbench
34
+ Project-URL: Source, https://github.com/quillbench/quillbench
35
+ Project-URL: Changelog, https://github.com/quillbench/quillbench/blob/main/CHANGELOG.md
36
+ Keywords: annotation,labeling,benchmark,dataset,human evaluation,streamlit,research
37
+ Classifier: Development Status :: 4 - Beta
38
+ Classifier: Intended Audience :: Education
39
+ Classifier: Intended Audience :: Science/Research
40
+ Classifier: License :: Other/Proprietary License
41
+ Classifier: Operating System :: OS Independent
42
+ Classifier: Programming Language :: Python :: 3
43
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
44
+ Requires-Python: >=3.10
45
+ Description-Content-Type: text/markdown
46
+ License-File: LICENSE
47
+ Requires-Dist: streamlit<2.0,>=1.50
48
+ Requires-Dist: pandas<3.0,>=2.0
49
+ Requires-Dist: PyYAML<7.0,>=6.0
50
+ Requires-Dist: neo4j<7.0,>=5.0
51
+ Provides-Extra: test
52
+ Requires-Dist: pytest>=7; extra == "test"
53
+ Provides-Extra: ldap
54
+ Requires-Dist: ldap3<3,>=2.9; extra == "ldap"
55
+ Dynamic: license-file
56
+
57
+ <p align="center"><img src="https://raw.githubusercontent.com/quillbench/quillbench/main/docs/logo.svg" width="120" alt="QuillBench logo"></p>
58
+
59
+ # QuillBench
60
+
61
+ Build benchmark datasets with human annotators. A config-driven annotation platform for research, by **A.C. Pogaku**.
62
+
63
+ Each paper keeps its own annotation data in its own
64
+ folder, a **workspace**, described by one `quillbench_workspace.yaml` file. The studio reads
65
+ that file and writes answers straight into the paper's folders, so there is nothing to
66
+ copy and the two are always in step.
67
+
68
+ ```
69
+ ~/.config/quillbench/ private studio state: registry, accounts (hashed), settings
70
+ <paper>/quillbench_workspace.yaml one paper's projects
71
+ <paper>/batches/*.csv|*.jsonl items to annotate, one file per batch
72
+ <paper>/progress/<user>__<batch>.csv answers, written by the studio
73
+ <paper>/quillbench_assignments.json who works on which batch (no secrets)
74
+ <paper>/quillbench_exports/<time>/ exports: answers.csv/.jsonl, agreement.csv, DATASHEET.md
75
+ ```
76
+
77
+ ## Install
78
+
79
+ ```
80
+ pip install quillbench
81
+ quillbench serve # this computer only: http://localhost:8560/quillbench/
82
+ quillbench serve --address 0.0.0.0 # let others on the network reach it
83
+ ```
84
+
85
+ Python 3.10 or newer. Answers and settings stay on the machine that runs `quillbench serve`.
86
+ Free for academic, non-commercial use only; see [LICENSE](https://github.com/quillbench/quillbench/blob/main/LICENSE).
87
+
88
+ ## Getting started in the browser
89
+
90
+ Run `quillbench serve` and open the page. The first person to sign up becomes the admin, so do
91
+ this yourself before sharing the address. Then, with no files to edit, the admin can use
92
+ **Admin → Projects** to create a project, upload CSVs at any time, set label buttons or a slider, split
93
+ the items into batches and assign them. Add people under **Admin → People**, and follow the
94
+ work in the **Progress** tab.
95
+
96
+ ## Task types
97
+
98
+ | task | what the annotator does |
99
+ |---|---|
100
+ | `rating` | moves a slider on a scale (e.g. 0–1 or 1–5), optional "can't judge" |
101
+ | `choice` | picks one of the labels the manifest lists |
102
+ | `text` | writes a short answer |
103
+ | `verdict`, `gate_review`, `gate_calibration`, `item_question`, `item_query`, `item_disposition` | reviews a question + reference query + precomputed results |
104
+ | `adjudication` | judges a predicted query against a reference (results withheld) |
105
+ | `pair_semantics` | blinded A/B comparison of two queries |
106
+
107
+ Per project the manifest can set `instructions`, `note_label`, `note_placeholder`,
108
+ `note_required_for`, `display` (which item columns to show and how), `checks`
109
+ (hidden attention-check items with expected answers) and `also_accept` (labels
110
+ from an earlier version of the task that still count as answers).
111
+
112
+ ## Everyday commands
113
+
114
+ ```bash
115
+ quillbench init-workspace ~/my_paper/annotation # start a new paper from a template
116
+ quillbench workspace add ~/my_paper/annotation # register it
117
+ quillbench validate # check every workspace
118
+ quillbench user add alice # asks for a password
119
+ quillbench assign alice my_paper rate_01 rate_02
120
+ quillbench status my_paper # progress per person and batch
121
+ quillbench quality my_paper # Krippendorff's alpha, Cohen's kappa, checks, time
122
+ quillbench export my_paper # anonymised answers + datasheet
123
+ quillbench backup # also runs nightly
124
+ quillbench serve # http://127.0.0.1:8560/quillbench/
125
+ ```
126
+
127
+ (`python -m quillbench …` works the same without installing; `pip install -e .` adds the `quillbench` command.)
128
+
129
+ In the app: **1–9** answer, **S** skip, **J/→** next, **K/←** previous, **Enter** saves a rating.
130
+
131
+ Useful manifest options for rating studies:
132
+
133
+ ```yaml
134
+ scale: {min: 0, max: 1, step: 0.05, unsure_label: "Can't judge",
135
+ marks: {0: false, 0.5: half true, 1: true}} # words along the slider
136
+ display:
137
+ - {field: statement, label: Statement} # the first text field is shown large
138
+ - {field: hourly, as: chart, chart: {kind: bar, x_label: hour, lines: [15.5, 35.5]}}
139
+ practice: true # show each item's 'expected' and 'explanation' columns after answering
140
+ ```
141
+
142
+ ## For annotators: connect to a server
143
+
144
+ If someone runs QuillBench for your group, you only need the address they give you:
145
+
146
+ ```
147
+ pip install quillbench
148
+ quillbench connect annotate.example.edu/quillbench
149
+ ```
150
+
151
+ This checks the server, remembers it and opens the sign-in page. Next time, run
152
+ `quillbench open`. Sign in with the login you were given (or your university login, if the
153
+ server uses LDAP). Your answers are saved on the server, not on your computer.
154
+
155
+ ## Signing in with university (LDAP) accounts
156
+
157
+ QuillBench has its own accounts. A server can also accept the logins people already have,
158
+ from LDAP or Active Directory. Install the extra package and add an `ldap` block to
159
+ `settings.yaml` in the studio home:
160
+
161
+ ```
162
+ pip install "quillbench[ldap]"
163
+ ```
164
+
165
+ ```yaml
166
+ ldap:
167
+ url: ldaps://ldap.example.edu # or ldap:// with start_tls: true
168
+ user_dn: "uid={user},ou=people,dc=example,dc=edu" # Active Directory: "{user}@example.edu"
169
+ auto_create: true # first sign-in makes an annotator account; false = admins add people first
170
+ ```
171
+
172
+ Passwords are checked by the LDAP server and never stored by QuillBench. Accounts with their
173
+ own QuillBench password keep using it. Admins still assign batches and can disable anyone in
174
+ Admin → People. Use `ldaps://` or `start_tls`, so passwords are not sent in plain text.
175
+
176
+ ## Running as a service
177
+
178
+ ```bash
179
+ cp deploy/quillbench.service deploy/quillbench-backup.service deploy/quillbench-backup.timer ~/.config/systemd/user/
180
+ systemctl --user daemon-reload
181
+ systemctl --user enable --now quillbench quillbench-backup.timer
182
+ sudo loginctl enable-linger $USER # keep it running after logout
183
+ ```
184
+
185
+ nginx: add `deploy/nginx-quillbench.conf` to the server block.
186
+
187
+ ## Quality measures
188
+
189
+ * **Krippendorff's alpha** (nominal for labels; interval or ordinal for ratings) over all
190
+ items answered by two or more people; skips and "can't judge" left out. Verified against
191
+ the worked example in Krippendorff (2011): 0.743 / 0.815 / 0.849.
192
+ * **Cohen's kappa** per pair of annotators (labels), or mean absolute difference and
193
+ Pearson r (ratings).
194
+ * **Check items** passed per annotator, and **median seconds per item** (QuillBench records
195
+ `updated_at` and `seconds` for every answer).
196
+
197
+ ## Security
198
+
199
+ Passwords are stored as salted PBKDF2-SHA256 hashes in the studio home (mode 600).
200
+ Sessions use an HMAC-signed cookie. Exports replace annotator ids with codes
201
+ (A01, …); the code book stays in the studio home.
202
+
203
+ ## Origin
204
+
205
+ © 2026 A.C. Pogaku. Free for academic, non-commercial use; commercial use is not permitted. See [LICENSE](LICENSE).
@@ -0,0 +1,149 @@
1
+ <p align="center"><img src="https://raw.githubusercontent.com/quillbench/quillbench/main/docs/logo.svg" width="120" alt="QuillBench logo"></p>
2
+
3
+ # QuillBench
4
+
5
+ Build benchmark datasets with human annotators. A config-driven annotation platform for research, by **A.C. Pogaku**.
6
+
7
+ Each paper keeps its own annotation data in its own
8
+ folder, a **workspace**, described by one `quillbench_workspace.yaml` file. The studio reads
9
+ that file and writes answers straight into the paper's folders, so there is nothing to
10
+ copy and the two are always in step.
11
+
12
+ ```
13
+ ~/.config/quillbench/ private studio state: registry, accounts (hashed), settings
14
+ <paper>/quillbench_workspace.yaml one paper's projects
15
+ <paper>/batches/*.csv|*.jsonl items to annotate, one file per batch
16
+ <paper>/progress/<user>__<batch>.csv answers, written by the studio
17
+ <paper>/quillbench_assignments.json who works on which batch (no secrets)
18
+ <paper>/quillbench_exports/<time>/ exports: answers.csv/.jsonl, agreement.csv, DATASHEET.md
19
+ ```
20
+
21
+ ## Install
22
+
23
+ ```
24
+ pip install quillbench
25
+ quillbench serve # this computer only: http://localhost:8560/quillbench/
26
+ quillbench serve --address 0.0.0.0 # let others on the network reach it
27
+ ```
28
+
29
+ Python 3.10 or newer. Answers and settings stay on the machine that runs `quillbench serve`.
30
+ Free for academic, non-commercial use only; see [LICENSE](https://github.com/quillbench/quillbench/blob/main/LICENSE).
31
+
32
+ ## Getting started in the browser
33
+
34
+ Run `quillbench serve` and open the page. The first person to sign up becomes the admin, so do
35
+ this yourself before sharing the address. Then, with no files to edit, the admin can use
36
+ **Admin → Projects** to create a project, upload CSVs at any time, set label buttons or a slider, split
37
+ the items into batches and assign them. Add people under **Admin → People**, and follow the
38
+ work in the **Progress** tab.
39
+
40
+ ## Task types
41
+
42
+ | task | what the annotator does |
43
+ |---|---|
44
+ | `rating` | moves a slider on a scale (e.g. 0–1 or 1–5), optional "can't judge" |
45
+ | `choice` | picks one of the labels the manifest lists |
46
+ | `text` | writes a short answer |
47
+ | `verdict`, `gate_review`, `gate_calibration`, `item_question`, `item_query`, `item_disposition` | reviews a question + reference query + precomputed results |
48
+ | `adjudication` | judges a predicted query against a reference (results withheld) |
49
+ | `pair_semantics` | blinded A/B comparison of two queries |
50
+
51
+ Per project the manifest can set `instructions`, `note_label`, `note_placeholder`,
52
+ `note_required_for`, `display` (which item columns to show and how), `checks`
53
+ (hidden attention-check items with expected answers) and `also_accept` (labels
54
+ from an earlier version of the task that still count as answers).
55
+
56
+ ## Everyday commands
57
+
58
+ ```bash
59
+ quillbench init-workspace ~/my_paper/annotation # start a new paper from a template
60
+ quillbench workspace add ~/my_paper/annotation # register it
61
+ quillbench validate # check every workspace
62
+ quillbench user add alice # asks for a password
63
+ quillbench assign alice my_paper rate_01 rate_02
64
+ quillbench status my_paper # progress per person and batch
65
+ quillbench quality my_paper # Krippendorff's alpha, Cohen's kappa, checks, time
66
+ quillbench export my_paper # anonymised answers + datasheet
67
+ quillbench backup # also runs nightly
68
+ quillbench serve # http://127.0.0.1:8560/quillbench/
69
+ ```
70
+
71
+ (`python -m quillbench …` works the same without installing; `pip install -e .` adds the `quillbench` command.)
72
+
73
+ In the app: **1–9** answer, **S** skip, **J/→** next, **K/←** previous, **Enter** saves a rating.
74
+
75
+ Useful manifest options for rating studies:
76
+
77
+ ```yaml
78
+ scale: {min: 0, max: 1, step: 0.05, unsure_label: "Can't judge",
79
+ marks: {0: false, 0.5: half true, 1: true}} # words along the slider
80
+ display:
81
+ - {field: statement, label: Statement} # the first text field is shown large
82
+ - {field: hourly, as: chart, chart: {kind: bar, x_label: hour, lines: [15.5, 35.5]}}
83
+ practice: true # show each item's 'expected' and 'explanation' columns after answering
84
+ ```
85
+
86
+ ## For annotators: connect to a server
87
+
88
+ If someone runs QuillBench for your group, you only need the address they give you:
89
+
90
+ ```
91
+ pip install quillbench
92
+ quillbench connect annotate.example.edu/quillbench
93
+ ```
94
+
95
+ This checks the server, remembers it and opens the sign-in page. Next time, run
96
+ `quillbench open`. Sign in with the login you were given (or your university login, if the
97
+ server uses LDAP). Your answers are saved on the server, not on your computer.
98
+
99
+ ## Signing in with university (LDAP) accounts
100
+
101
+ QuillBench has its own accounts. A server can also accept the logins people already have,
102
+ from LDAP or Active Directory. Install the extra package and add an `ldap` block to
103
+ `settings.yaml` in the studio home:
104
+
105
+ ```
106
+ pip install "quillbench[ldap]"
107
+ ```
108
+
109
+ ```yaml
110
+ ldap:
111
+ url: ldaps://ldap.example.edu # or ldap:// with start_tls: true
112
+ user_dn: "uid={user},ou=people,dc=example,dc=edu" # Active Directory: "{user}@example.edu"
113
+ auto_create: true # first sign-in makes an annotator account; false = admins add people first
114
+ ```
115
+
116
+ Passwords are checked by the LDAP server and never stored by QuillBench. Accounts with their
117
+ own QuillBench password keep using it. Admins still assign batches and can disable anyone in
118
+ Admin → People. Use `ldaps://` or `start_tls`, so passwords are not sent in plain text.
119
+
120
+ ## Running as a service
121
+
122
+ ```bash
123
+ cp deploy/quillbench.service deploy/quillbench-backup.service deploy/quillbench-backup.timer ~/.config/systemd/user/
124
+ systemctl --user daemon-reload
125
+ systemctl --user enable --now quillbench quillbench-backup.timer
126
+ sudo loginctl enable-linger $USER # keep it running after logout
127
+ ```
128
+
129
+ nginx: add `deploy/nginx-quillbench.conf` to the server block.
130
+
131
+ ## Quality measures
132
+
133
+ * **Krippendorff's alpha** (nominal for labels; interval or ordinal for ratings) over all
134
+ items answered by two or more people; skips and "can't judge" left out. Verified against
135
+ the worked example in Krippendorff (2011): 0.743 / 0.815 / 0.849.
136
+ * **Cohen's kappa** per pair of annotators (labels), or mean absolute difference and
137
+ Pearson r (ratings).
138
+ * **Check items** passed per annotator, and **median seconds per item** (QuillBench records
139
+ `updated_at` and `seconds` for every answer).
140
+
141
+ ## Security
142
+
143
+ Passwords are stored as salted PBKDF2-SHA256 hashes in the studio home (mode 600).
144
+ Sessions use an HMAC-signed cookie. Exports replace annotator ids with codes
145
+ (A01, …); the code book stays in the studio home.
146
+
147
+ ## Origin
148
+
149
+ © 2026 A.C. Pogaku. Free for academic, non-commercial use; commercial use is not permitted. See [LICENSE](LICENSE).
@@ -0,0 +1,44 @@
1
+ [build-system]
2
+ requires = ["setuptools>=68"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "quillbench"
7
+ version = "1.4.1"
8
+ description = "Build benchmark datasets with human annotators: a config-driven annotation platform for research."
9
+ readme = "README.md"
10
+ keywords = ["annotation", "labeling", "benchmark", "dataset", "human evaluation", "streamlit", "research"]
11
+ classifiers = [
12
+ "Development Status :: 4 - Beta",
13
+ "Intended Audience :: Education",
14
+ "Intended Audience :: Science/Research",
15
+ "License :: Other/Proprietary License",
16
+ "Operating System :: OS Independent",
17
+ "Programming Language :: Python :: 3",
18
+ "Topic :: Scientific/Engineering :: Artificial Intelligence",
19
+ ]
20
+ authors = [{ name = "A.C. Pogaku" }]
21
+ license = { file = "LICENSE" }
22
+ requires-python = ">=3.10"
23
+ dependencies = ["streamlit>=1.50,<2.0", "pandas>=2.0,<3.0", "PyYAML>=6.0,<7.0", "neo4j>=5.0,<7.0"]
24
+
25
+ [project.urls]
26
+ Homepage = "https://github.com/quillbench/quillbench"
27
+ Source = "https://github.com/quillbench/quillbench"
28
+ Changelog = "https://github.com/quillbench/quillbench/blob/main/CHANGELOG.md"
29
+
30
+ [project.optional-dependencies]
31
+ test = ["pytest>=7"]
32
+ ldap = ["ldap3>=2.9,<3"]
33
+
34
+ [project.scripts]
35
+ quillbench = "quillbench.cli:main"
36
+
37
+ [tool.setuptools.packages.find]
38
+ include = ["quillbench*"]
39
+
40
+ [tool.setuptools.package-data]
41
+ "quillbench.ui" = ["assets/*"]
42
+
43
+ [tool.pytest.ini_options]
44
+ testpaths = ["tests"]
@@ -0,0 +1,11 @@
1
+ """QuillBench.
2
+
3
+ A config-driven human-annotation platform for research datasets. The software lives
4
+ in its own folder; every paper keeps its annotation data in its own folder (a
5
+ *workspace*), described by a ``quillbench_workspace.yaml`` manifest that the studio reads.
6
+ """
7
+
8
+ __version__ = "1.4.1"
9
+ NAME = "QuillBench"
10
+ SHORT_NAME = "QuillBench"
11
+ AUTHOR = "A.C. Pogaku"
@@ -0,0 +1,3 @@
1
+ from .cli import main
2
+
3
+ main()