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. litesearch 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
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file varga-0.0.1.tar.gz.
File metadata
- Download URL: varga-0.0.1.tar.gz
- Upload date:
- Size: 17.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c8d388c9c1520b135f3e8be2c5325a2756e41d6a82c8586a49cac57ba498757e
|
|
| MD5 |
93ad0e3be0a432dca583d60e9cb7ef1c
|
|
| BLAKE2b-256 |
26c528e0ef9201fdfbb8c90e611deb180ecf268c33935d415d2bb0a10ae44462
|
File details
Details for the file varga-0.0.1-py3-none-any.whl.
File metadata
- Download URL: varga-0.0.1-py3-none-any.whl
- Upload date:
- Size: 17.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b906ca48d174a3726911c68d80001b005a68babfa99cc3aeb6d9d79c2b5cfa6f
|
|
| MD5 |
ac67fffa1d07ddf6316b0692419b3c16
|
|
| BLAKE2b-256 |
06da303b0a42853657e6a74daad7c945889360fb6af44716438f197e548586d7
|