adjudicate
A small library for one pattern: a detector proposes a span in a document and a short list of candidate replacements; a local language model picks one of them, or KEEP, from the surrounding sentence and a rule of thumb; the applier splices the choice in with case preserved. Every change is a bounded, logged, reasoned edit. The model never rewrites prose.
It is the toolkit behind stylefix (US/UK spelling and style) and proofix (typos, punctuation, commas). It is published because they depend on it; the API may change between 0.x releases.
pip install adjudicate
Modules: llm (OpenAI-compatible client and endpoint resolution), core
(Item, Decision, Cache, adjudicate), apply (Edit, apply_edits),
context (sentence context, Markdown prose regions), dictionary
(Hunspell lookups over the bundled en_US and en_GB dictionaries), setup
(run_setup and check_endpoint, behind the tools' --setup and
--check-endpoint).
Choosing the model endpoint
resolve_endpoint(app, preset="auto", url=None, model=None, key=None, think=False, timeout=None) merges settings from, highest first:
- its arguments (the calling tool's
--url,--model,--timeout) <APP>_LLM_URL,<APP>_LLM_MODEL,<APP>_LLM_KEY, e.g.STYLEFIX_LLM_URL~/.config/<app>/config.tomlADJUDICATE_LLM_URL,ADJUDICATE_LLM_MODEL,ADJUDICATE_LLM_KEY~/.config/adjudicate/config.toml, shared by every tool
($XDG_CONFIG_HOME replaces ~/.config when set.) Layers merge field by
field, except that a layer naming a url drops the model, key and
thinking_switch of the layers below it, since those described another
server. With no url anywhere, a local Ollama is used if it is running with
a model pulled; otherwise there is no model and callers fall back to
listing items for review.
[llm]
url = "https://api.example.com/v1" # any OpenAI-compatible base URL
model = "some-model" # optional: the server's first listed model
api_key_env = "EXAMPLE_API_KEY" # or api_key = "..."; not both
timeout = 120 # seconds per request
thinking_switch = false # true for vLLM/LiteLLM serving a reasoning model
thinking_switch = true sends chat_template_kwargs: {enable_thinking: false}, which vLLM honours and strict APIs reject; if a server answers 400
or 422 to it, it is dropped for the rest of the run. Unknown keys, wrong
types, empty strings, a timeout that is not positive, and an
api_key_env naming an unset variable are errors (ConfigError), so a typo
is never silently ignored. An api_key_env is read only if it survives the
merge: a higher layer's url or key discards it first.
License
The code is MIT (see LICENSE). The dictionaries in adjudicate/dict/
keep their own licenses: en_US under the SCOWL notice in
LICENSE-en_US.txt, en_GB under the LGPL as stated in LICENSE-en_GB.txt.
Metadata
Release files for adjudicate 0.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| adjudicate-0.3.0.tar.gz | 627.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| adjudicate-0.3.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 1.3 MB
Release files / adjudicate-0.3.0.tar.gz
| Download URL | adjudicate-0.3.0.tar.gz |
|---|---|
| Size | 627.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
458b2d3b88e3f1b870b3d6374483ed003458300155203f42360d33d0538455dd
|
|
BLAKE2b-256 checksum How to use checksums |
aea1e0674a48daae81288e7fe2bd1fde14fe0462b4c356aeb597838270571fd9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.8.4
|
Release files / adjudicate-0.3.0-py3-none-any.whl
| Download URL | adjudicate-0.3.0-py3-none-any.whl |
|---|---|
| Size | 631.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
9fe3fa1f6917c54833c478fec02db224f4a9c8b4379b19c44490ad576a1fcae8
|
|
BLAKE2b-256 checksum How to use checksums |
1901e761f9a734669bea74ebcce55f9c94f1db384a8c098b4ef65f51843a6e2a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.8.4
|