Skip to main content

Per-grammar-role loss decomposition for fine-tuned structured JSON output

Project description

slotloss

Per-grammar-role loss analysis for structured JSON output from language models.

Fine-tuning your LLM for JSON? Your aggregate metrics might be hiding per-field regressions.

pip install slotloss

What it does

slotloss is the observability layer for structured JSON output. It meets you wherever you are:

You have Command Needs model?
Messy text with JSON slotloss --extract --data output.txt No
JSON + schema slotloss --validate --schema s.json --data output.jsonl No
Broken JSON + schema slotloss --fix --schema s.json --data output.jsonl No
JSON + schema slotloss --anatomy --schema s.json --data output.jsonl No
Two output sets slotloss --diff --schema s.json --data a.jsonl --data2 b.jsonl No
Model + checkpoint slotloss --checkpoint lora/ --schema s.json --data test.jsonl Yes

The problem

Standard fine-tuning + grammar-constrained decoding produces valid JSON. Aggregate loss improves. But:

STRUCTURAL         5.33 -> 0.00     -100%   OK
KEY                0.47 -> 0.00     -100%   OK
BOOLEAN            0.46 -> 1.05     +130%   !! REGRESSION
TOTAL              0.55 -> 0.17      -69%

Aggregate loss improved 69%. Boolean prediction got 130% worse. slotloss catches this.

Quick start

See QUICK_START.md for a hands-on walkthrough from messy output to full analysis.

Python API

from slotloss import analyze

report = analyze(
    model_name="Qwen/Qwen2.5-0.5B-Instruct",
    checkpoint="my_lora/",
    schema="schema.json",
    data="test.jsonl",
)
print(report)

if report.regressions:
    print(f"REGRESSIONS: {[r.role for r in report.regressions]}")

Exit code is 1 if regressions are detected. Use in CI/CD.

Grammar Roles

Role Description Examples
STRUCTURAL JSON syntax { } [ ] : ,
QUOTE String delimiters "
KEY Object key characters city, cuisine
ENUM_VALUE Categorical values Italian, Economy
BOOLEAN Boolean strings True, False
NUMBER Numeric characters 42, 3.14
FREE_TEXT Non-categorical content names, addresses
WHITESPACE Formatting spaces, newlines

Links

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

slotloss-0.3.0.tar.gz (29.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

slotloss-0.3.0-py3-none-any.whl (35.7 kB view details)

Uploaded Python 3

File details

Details for the file slotloss-0.3.0.tar.gz.

File metadata

  • Download URL: slotloss-0.3.0.tar.gz
  • Upload date:
  • Size: 29.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.2

File hashes

Hashes for slotloss-0.3.0.tar.gz
Algorithm Hash digest
SHA256 0d256cbe47de08f1df549d8a354385240b886f960e40a22cfb3ee5223b1bd57b
MD5 511abaab645721911c202ebb36954a77
BLAKE2b-256 6d912f386e163071b681b1e4fc0eb80938ca38ffbbdfb1cea229e81ec1713bc1

See more details on using hashes here.

File details

Details for the file slotloss-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: slotloss-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 35.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.2

File hashes

Hashes for slotloss-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 9be1bcf0f6efef9f5e9b981b9ffedfe499f324ba11988b8b5a438d27a9320810
MD5 0d34177c5953b356bab058ed8389ec27
BLAKE2b-256 a2b1487ce62585aa306027a9c94eedcc3d859b3b69e144cd9cb15e190ffc370f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page