varga
Two questions about one document. guess_type answers the first from cue phrases and
countable evidence, with no model unless two kinds tie. as_schema and structured answer the
second against a shape you name or invent.
Install
uv add varga # doctypes; no model, no network
uv add 'varga[llm]' # ...and `structured`, which asks one
What is it
INVOICE = '''# INVOICE
Invoice No: ACM-2024-0117
Date: 2024-03-01
Bill to: Contoso GmbH, Berlin
From: Acme Supplies Ltd
Total due: 1,240.00 EUR
Payment terms: net 30
'''
r = guess_type(INVOICE)
r.doctype, r.decisive, round(r.margin, 2)
('invoice', True, 0.4)
decisive is the whole point: it says whether the cues settled it. When two kinds tie,
margin is 0 and a caller knows to spend a model call. Nothing else here costs one.
signals(INVOICE).counts
{'money': 1, 'date': 1, 'ref': 1, 'heading': 1, 'org': 2}
What is in it
from dataclasses import fields
[f.name for f in fields(as_schema('invoice'))]
['number',
'date',
'due_date',
'vendor',
'vendor_tax_id',
'bill_to',
'ship_to',
'currency',
'subtotal',
'tax',
'total',
'payment_terms',
'items']
Ten shapes are built in: invoice, purchase_order, quote, receipt, catalogue,
contract, resume, paper, meeting_notes, other. Or write one on the spot:
[(f.name, f.type.__name__) for f in fields(as_schema('vendor:str, total:float, items:list'))]
[('vendor', 'str'), ('total', 'float'), ('items', 'list')]
structured(chat, prompt, schema) fills it. It prefers the model’s constrained mode and
falls back to a JSON reply when that raises, so a model without tool calling still answers.
The doctypes
len(DOCTYPES), sorted(DOCTYPES)
Ten of them are work-product labels: proposal, presentation, requirements_spec,
technical_design, regulatory_guidance, procedure, qa_artifact, roadmap, claim,
clinical_record, and each is decisive on its own text without a model. Prose that merely
borrows the vocabulary scores under 0.2 against every one of them.
What it depends on
fastcore and rahasya, for the honorific-anchored
name regex the entity leg shares with the privacy gate. One definition of what a name is.
rishi is needed only by structured. vruksha adds keyphrases to signals().ents and is
display only: no doctype score reads them, and signals works without it.
Development
The notebooks in nbs/ are the source; the modules are generated.
pip install -e .
nbdev_prepare
Metadata
Release files for varga 0.0.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| varga-0.0.5.tar.gz | 19.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| varga-0.0.5-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 40.7 kB
Release files / varga-0.0.5.tar.gz
| Download URL | varga-0.0.5.tar.gz |
|---|---|
| Size | 19.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
6aebe5190e870154de15e69b158bb099e99b67aabadbbc840a1fa93c62d4f74e
|
|
BLAKE2b-256 checksum How to use checksums |
a641a1ac2d8bdc9fd23f4289ee3e3b39c186cfcbc5e8a8d9b5dbaa049b103a31
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.6
|
Release files / varga-0.0.5-py3-none-any.whl
| Download URL | varga-0.0.5-py3-none-any.whl |
|---|---|
| Size | 20.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b6d85abf40ba371fd65c826f09e9303b020955ad5d45b72e68401708c43274ac
|
|
BLAKE2b-256 checksum How to use checksums |
b77e30abb1aa98b5aea5c560977cfabbd66d0680c1a1fae59064f9bf235be1aa
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.6
|