v0.24.0-beta
Summary
Hi my name is Jev. Norish can now use Typesafes Jev to assist LLMS. Jev is a decision making model specifically trained for this task. Thus making it cheap and fast.
On chromium based browsers having a URL in your clipboard is now auto detected. Norish will ask to import it when you open the app with an URL in your clipboard. Permissions required
Basic pantry functionallity to filter groceries based on what is in your house already.
The job log under the admin section is significantly more detailed.
Features
Decision Model
TypeSafe AI's Jev can be configured under: Settings => Admin => AI & Processing => Decision Model.
For now Jev roughly does the following:
- Auto-categorization asks four questions instead of asking a language model to write the words.
- Auto-tagging asks one question per predefined tag under Predefined tags only.
- Allergy detection asks one question per household allergen.
- Recipe Provenance settles the country, and under Only existing cuisines the Cuisines, by Decision and has the AI provider write the region and the note.
- Import triage Not changeable always on with a Decision Model. Asks whether a page is a recipe before an AI extraction is attempted, whether an Instagram or Facebook caption holds a recipe before transcribing and whether a structured parse is complete enough to keep.
- Grocery linking ranks the products a shop offered for a grocery and links its pick when that is likelier than every alternative together. Prices.
Everything surrounding Jev is optional and you can configure it how you want it in the settings.
Pantry
The pantry stores what you have in your house, these products will stay off the grocery list.
- Open Pantry from the menu on the Groceries page and type what is in the cupboard: olive oil, salt, flour. The list is shared with your household.
- When you add a recipe to your groceries, the ingredients you have are shown apart under In your pantry. Unticket by default.
- A name matches only when it is a pantry name; nothing is guessed from words, no fuzzy matching etc.
See Pantry.
Import from a copied link
Copy a recipe's address anywhere, come back to Norish, and whichever page you are on asks whether to import it.
The ask needs a browser that hands the clipboard over without a paste, which Chrome, Edge and the other Chromium browsers do once you have allowed Norish to read it; on Safari and Firefox a copied link keeps turning up in the URL dialog's prefilled field instead.
Fixes and Improvements
- Missed events arrive after a reconnect.
- A server restart is faster Before it had a 30-second timeout
- A grocery change that failed validation tells only the person who made it
- Toast messages no longer appear behind the status bar or the Dynamic Island when the app is installed to the home screen.
- The startup banner prints the WebSocket path the server actually serves.
- Ollama can draw. See AI provider.
- The job monitor names the model. A job's details list every model the job asked, the Decision Model or your AI provider, with the model id that answered.
- Planned recipes show their picture again. See (#581)
- A check-off made on a shaky connection no longer comes undone. When a grocery change failed to reach the server without the app ever counting the backend as offline, it was held for replay but nothing replayed it, and the next routine refresh erased it from the list. See (#565)
- A recipe planned from the dashboard reaches the calendar See (#583)
- Recipe videos can be watched full screen on a phone. See(#563)
- A grocery with a measure and one without are no longer added up. See (#562)
Upgrade notes
- WebSocket connections now check their origin. An upgrade request whose
Originis notAUTH_URL, an entry ofTRUSTED_ORIGINSor the request's own host is refused with403. Most setups need nothing; if Norish is reached through a reverse proxy that rewritesHostorOrigin, or from more than one public address, list every public origin inTRUSTED_ORIGINS(see Server runtime). The new WebSocket & realtime page has the proxy snippets for nginx, Caddy and Traefik, and the idle timeout the proxy must exceed. - The Obscura browser moves to
norishapp/obscura:0.2.2-norish.1(was0.2.0-norish.1). It is upstream Obscura 0.2.2, still the render+stealth build, and fixes the module-evaluation panic that could take down URL imports (#589). The tag is pinned, sodocker compose pulldoes not pick it up on its own: change theimage:line of theobscuraservice in your compose file tonorishapp/obscura:0.2.2-norish.1, thendocker compose pullanddocker compose up -d. Nothing else in the service changes. - The default AI model is now
gpt-6-luna(wasgpt-5-mini). It only applies to a new installation that leavesAI_MODELunset; an existing installation keeps the model it has stored.
Contributors
- Mike van Es
- Matthew Kemp