paperhawk / schemas /__init__.py
Nándorfi Vince
Initial paperhawk push to HF Space (LFS for binaries)
7ff7119
raw
history blame
2.15 kB
"""Schema-rendszer: JSON schema betöltés + Pydantic mirror választás.
Használat:
from schemas import load_schema, pydantic_for
json_schema = load_schema("szamla") # dict
pydantic_cls = pydantic_for("szamla") # InvoiceModel
A 6 doc_type:
* szamla → invoice.json + InvoiceModel
* szallitolevle → delivery_note.json + DeliveryNoteModel
* megrendeles → purchase_order.json + PurchaseOrderModel
* szerzodes → contract.json + ContractModel
* penzugyi_kimutatas → financial_report.json + FinancialReportModel
* egyeb → universal.json + UniversalModel
"""
from __future__ import annotations
import json
from functools import lru_cache
from pathlib import Path
from schemas.flatten_universal import flatten_universal
from schemas.pydantic_models import (
ContractModel,
DeliveryNoteModel,
FinancialReportModel,
InvoiceModel,
PurchaseOrderModel,
UniversalModel,
pydantic_for,
)
SCHEMA_DIR = Path(__file__).parent
# doc_type → JSON fájlnév (relatív a schemas/ mappához)
SCHEMA_FILES = {
"szamla": "invoice.json",
"szallitolevle": "delivery_note.json",
"megrendeles": "purchase_order.json",
"szerzodes": "contract.json",
"penzugyi_kimutatas": "financial_report.json",
"egyeb": "universal.json",
}
@lru_cache(maxsize=8)
def load_schema(doc_type: str) -> dict:
"""A doc_type-hoz tartozó JSON schema-t adja vissza dict formában.
Lru_cache: ugyanazt a dict-et adja vissza ismételten (a Pydantic mirror-rel
együtt használjuk runtime validációhoz; a JSON schema az LLM-nek megy
`with_structured_output(method="json_schema")`-en át).
Ismeretlen doc_type → universal.json fallback.
"""
fname = SCHEMA_FILES.get(doc_type, SCHEMA_FILES["egyeb"])
path = SCHEMA_DIR / fname
return json.loads(path.read_text(encoding="utf-8"))
__all__ = [
"load_schema",
"pydantic_for",
"flatten_universal",
"InvoiceModel",
"ContractModel",
"DeliveryNoteModel",
"PurchaseOrderModel",
"FinancialReportModel",
"UniversalModel",
]