Zortium
Adversarial attack test suite for vision-language models.
Zortium runs a structured battery of adversarial attacks against any OpenAI-compatible VLM endpoint and reports a per-suite Attack Success Rate (ASR). Think promptfoo, for vision models — systematic, repeatable, CI-ready.
Install
pip install zortium
Python 3.10+. No system dependencies.
Quick start
zortium \
--base-url https://openrouter.ai/api/v1 --model google/gemma-3-27b-it --api-key $OPENROUTER_API_KEY \
--judge-model gpt-4o-mini --judge-base-url https://api.openai.com/v1 --judge-api-key $OPENAI_API_KEY
The command has two halves — the target you're testing (--base-url · --model · --api-key) and the judge that grades whether the target complied (--judge-*). Every flag has a ZORTIUM_* environment variable, so keys never touch your shell history.
No judge configured? Zortium falls back to the target grading itself with a warning — fine for a first look, but self-grading is lenient, so treat those numbers as a floor. Pass
--judge-modelfor results you can act on.
You get a per-suite breach-rate table and a headline ASR:
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━┓
┃ Attack Suite ┃ Severity ┃ Breach Rate ┃ Status ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━┩
│ Typographic Visual Prompt Injection │ HIGH │ 0% │ PASS │
│ FigStep Typographic Jailbreak │ HIGH │ 25% │ WARN │
│ Goal Hijacking │ MID │ 50% │ FAIL │
│ … │ … │ … │ … │
├──────────────────────────────────────┼──────────┼─────────────┼────────┤
│ Overall │ │ 12% │ WARN │
└──────────────────────────────────────┴──────────┴─────────────┴────────┘
CI gate
zortium --max-asr 20 # exits 1 if overall ASR exceeds 20%
Every flag has a ZORTIUM_* env var, so secrets go in CI variables — see the docs for a copy-paste GitHub Actions job.
Documentation
Full documentation — every flag, all 18 attack suites, scan modes, the LLM judge, config files, CI recipes, supported providers, and architecture — lives at zortium.dev/docs.
Safety
Zortium is a defensive tool. Run it only against models you own or are authorized to test — by design it submits real jailbreak prompts, harmful requests, and adversarial images to measure refusal behaviour.
License
Apache-2.0 — see LICENSE. Research attribution in CITATIONS.md.
Metadata
Release files for zortium 0.2.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| zortium-0.2.1.tar.gz | 359.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| zortium-0.2.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 625.5 kB
Release files / zortium-0.2.1.tar.gz
| Download URL | zortium-0.2.1.tar.gz |
|---|---|
| Size | 359.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e88505f3c76c11dbc501866711b4326b63360b28f2b70b28d28bc9ad56528c09
|
|
BLAKE2b-256 checksum How to use checksums |
5ca31b3650e3c5fe7b0eff7751a3b43d2b73df7cd314291bf3dbfead7526018e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.9
|
Release files / zortium-0.2.1-py3-none-any.whl
| Download URL | zortium-0.2.1-py3-none-any.whl |
|---|---|
| Size | 266.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
5392833d86ef55c60c7960a726ae46c4161dc86c1ef090dca90fb01520023cb6
|
|
BLAKE2b-256 checksum How to use checksums |
a81c576714f8073b696b129de9dc47ce5eb0acee7f5d79566e4215298bdb9438
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.9
|