Metadata-Version: 2.4
Name: saucier
Version: 0.1.0
Summary: Structured procedure extraction from culinary sources.
Keywords: cooking,recipes,parsing
Author: Alberto-Codes
Author-email: Alberto-Codes <alberto.codes.dev@gmail.com>
License-Expression: MIT
License-File: LICENSE
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Requires-Dist: mkdocs>=1.6,<2 ; extra == 'docs'
Requires-Dist: mkdocs-material>=9.7,<10 ; extra == 'docs'
Requires-Dist: mkdocs-gen-files>=0.6,<1 ; extra == 'docs'
Requires-Dist: mkdocs-literate-nav>=0.6,<1 ; extra == 'docs'
Requires-Dist: mkdocs-section-index>=0.3,<1 ; extra == 'docs'
Requires-Dist: mkdocstrings[python]>=1.0,<2 ; extra == 'docs'
Requires-Python: >=3.12
Project-URL: Homepage, https://alberto.codes
Project-URL: Source, https://github.com/Alberto-Codes/saucier
Provides-Extra: docs
Description-Content-Type: text/markdown

# saucier

Structured procedure extraction from culinary sources.

Reads a cookbook and returns a catalogue. Each preparation carries its names,
the language of each name, the mother it derives from, and the source line the
claim came from. No model runs. Every output is traceable to the text.

## Try it

No GPU, no API key, no database, no network. The source text is committed.

```console
$ git clone https://github.com/Alberto-Codes/saucier
$ cd saucier && uv sync
$ uv run saucier parse
source      escoffier-1907
mothers     bechamel, espagnole, hollandaise, tomato, veloute
sauces      124
derived     29 linked to a mother
unresolved  95 state no base in their prose
```

The five mothers were not supplied. Escoffier names them in his own text, and
the parser reads them out of it.

```console
$ uv run saucier tree espagnole
BROWN SAUCE OR ESPAGNOLE  [espagnole]
├── LENTEN ESPAGNOLE  (fr)
├── GENEVOISE SAUCE  (en)
├── ORDINARY POIVRADE SAUCE  (en)
└── POIVRADE SAUCE FOR VENISON  (en)
```

## The interesting number is 95

Three quarters of these preparations never state what they are built on.
Escoffier wrote for a reader who already knew, so he did not write it down.
That gap is the point: it is the measured bar that anything cleverer has to
beat. See [why there is no model in this yet](docs/explanation/why-no-model-yet.md).

The catalogue holds 124 entries, not every sauce in the book. An entry gets
in when its own heading says "sauce", or when it names a mother inside a
chapter Escoffier titles as sauces. Both tests read the source. Neither
guesses.

## Documentation

- [Tutorial](docs/tutorial/first-run.md) — clone it and print a family tree
- [How-to](docs/how-to/add-a-source.md) — point it at a different book
- [Reference](docs/reference/cli.md) — commands and data model
- [Explanation](docs/explanation/why-no-model-yet.md) — why a parser comes first

## Licence

MIT for the code. `corpus/escoffier-1907.txt` is Project Gutenberg ebook
#71395, public domain, redistributed with its licence wrapper intact. No
third-party corpus is shipped in the published package.
