Metadata-Version: 2.4
Name: anzar-assessment
Version: 2.6.2
Summary: LLM-assisted grading of Canvas quiz and assignment submissions with human review before upload
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: pywebview>=4.4
Requires-Dist: canvasapi>=3.0
Requires-Dist: anthropic>=0.18
Requires-Dist: openai>=1.0
Requires-Dist: httpx>=0.24
Requires-Dist: requests>=2.28
Requires-Dist: PyPDF2>=3.0
Requires-Dist: pdfplumber>=0.10
Requires-Dist: PyMuPDF>=1.23
Requires-Dist: pymupdf4llm<2,>=1.24
Requires-Dist: python-docx>=1.0
Requires-Dist: pandas>=2.0
Requires-Dist: numpy>=1.24
Requires-Dist: jinja2>=3.1
Provides-Extra: dev
Requires-Dist: pytest>=7.0; extra == "dev"
Requires-Dist: black>=23.0; extra == "dev"
Requires-Dist: mypy>=1.0; extra == "dev"
Requires-Dist: pyflakes>=3.0; extra == "dev"
Requires-Dist: pip-tools>=7.0; extra == "dev"
Dynamic: license-file

AnZar is a desktop application that grades Canvas quiz and assignment
submissions with a language model. It connects to a Canvas instance with an API
token the user supplies, downloads the submissions, sends the answer text to any
OpenAI-compatible LLM endpoint the user configures, and returns points and
feedback. Every grade is presented on a review page first: nothing is written
back to Canvas until the user approves it there.

The released build is on PyPI as **`anzar-assessment`**: `pip install
anzar-assessment` then `anzar`, on 64-bit Python 3.10–3.13. The wheels
carry the modules compiled to native code and are uploaded straight
from the release workflow by PyPI trusted publishing (no API token in
play); the same files stay as GitHub release assets for the record.
`docs/pip-packaging.md` covers building them, the release flow, and
where each mode keeps its config, logs and data.

From a checkout, install the pinned dependencies (`pip install -r
requirements.txt`) and run `python -m anzar` from inside the `src/`
directory (the direct-file form `python src/anzar/app.py` fails on a
clean checkout with `ModuleNotFoundError: No module named 'anzar'`,
because the package's own name is not on the module search path then;
`--gui` is still accepted by both entry points). Connection settings
(Canvas URL and token, LLM endpoint and key) are managed on the Profiles
page and stored in `profiles.json` in the config directory;
`profiles.json.example` is the template to start from. See `SECURITY.md`
for the exact data flow and how credentials are handled, and `docs/` for
the architecture notes.
