Merge branch 'mealie-next' into mealie-next

This commit is contained in:
Tempest 2025-08-06 11:35:30 -05:00 committed by GitHub
commit 2587380898
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 113 additions and 109 deletions

View file

@ -1,5 +1,8 @@
# Installing with PostgreSQL # Installing with PostgreSQL
!!! Warning
When upgrading postgresql major versions, manual steps are required [Postgres#37](https://github.com/docker-library/postgres/issues/37).
PostgreSQL might be considered if you need to support many concurrent users. In addition, some features are only enabled on PostgreSQL, such as fuzzy search. PostgreSQL might be considered if you need to support many concurrent users. In addition, some features are only enabled on PostgreSQL, such as fuzzy search.
**For Environment Variable Configuration, see** [Backend Configuration](./backend-config.md) **For Environment Variable Configuration, see** [Backend Configuration](./backend-config.md)
@ -38,7 +41,7 @@ services:
postgres: postgres:
container_name: postgres container_name: postgres
image: postgres:15 image: postgres:17
restart: always restart: always
volumes: volumes:
- mealie-pgdata:/var/lib/postgresql/data - mealie-pgdata:/var/lib/postgresql/data
@ -46,6 +49,7 @@ services:
POSTGRES_PASSWORD: mealie POSTGRES_PASSWORD: mealie
POSTGRES_USER: mealie POSTGRES_USER: mealie
PGUSER: mealie PGUSER: mealie
POSTGRES_DB: mealie
healthcheck: healthcheck:
test: ["CMD", "pg_isready"] test: ["CMD", "pg_isready"]
interval: 30s interval: 30s

View file

@ -553,8 +553,8 @@
"boston lettuce": { "boston lettuce": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "boston lettuce", "name": "Laitue",
"plural_name": "boston lettuces" "plural_name": "Laitues"
}, },
"kohlrabi": { "kohlrabi": {
"aliases": [], "aliases": [],
@ -571,8 +571,8 @@
"delicata squash": { "delicata squash": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "delicata squash", "name": "Courge delicata",
"plural_name": "delicata squashes" "plural_name": "Courges delicata"
}, },
"frisee": { "frisee": {
"aliases": [], "aliases": [],
@ -583,8 +583,8 @@
"anaheim pepper": { "anaheim pepper": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "anaheim pepper", "name": "Piment d'Anaheim",
"plural_name": "anaheim peppers" "plural_name": "Piments d'Anaheim"
}, },
"cres": { "cres": {
"aliases": [], "aliases": [],
@ -601,8 +601,8 @@
"arbol chile pepper": { "arbol chile pepper": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "arbol chile pepper", "name": "Piment de árbol",
"plural_name": "arbol chile peppers" "plural_name": "Piments de árbol"
}, },
"golden beet": { "golden beet": {
"aliases": [], "aliases": [],
@ -613,8 +613,8 @@
"pea shoot": { "pea shoot": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "pea shoot", "name": "Micro-pousse de pois",
"plural_name": "pea shoots" "plural_name": "Micro-pousses de pois"
}, },
"alfalfa": { "alfalfa": {
"aliases": [], "aliases": [],
@ -701,8 +701,8 @@
"craisin": { "craisin": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "craisin", "name": "Canneberge séchée",
"plural_name": "craisins" "plural_name": "Canneberges séchées"
}, },
"pear": { "pear": {
"aliases": [], "aliases": [],
@ -797,8 +797,8 @@
"sultana": { "sultana": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "sultana", "name": "Raisin blanc",
"plural_name": "sultanas" "plural_name": "Raisins blancs"
}, },
"passion fruit": { "passion fruit": {
"aliases": [], "aliases": [],
@ -846,7 +846,7 @@
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "melon miel", "name": "melon miel",
"plural_name": "honeydew melons" "plural_name": "Melons miel"
}, },
"dried fruit": { "dried fruit": {
"aliases": [], "aliases": [],
@ -929,8 +929,8 @@
"mixed fruit": { "mixed fruit": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "mixed fruit", "name": "Mélange de fruits",
"plural_name": "mixed fruits" "plural_name": "Mélange de fruits"
}, },
"asian pear": { "asian pear": {
"aliases": [], "aliases": [],
@ -947,14 +947,14 @@
"young coconut": { "young coconut": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "young coconut", "name": "Noix de coco jeune",
"plural_name": "young coconuts" "plural_name": "Noix de coco jeunes"
}, },
"kaffir lime": { "kaffir lime": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "combava", "name": "combava",
"plural_name": "kaffir limes" "plural_name": "Combava"
}, },
"star fruit": { "star fruit": {
"aliases": [], "aliases": [],
@ -978,19 +978,19 @@
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "purée de châtaigne", "name": "purée de châtaigne",
"plural_name": "chestnut purees" "plural_name": "Purées de châtaigne"
}, },
"prickly pear": { "prickly pear": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "prickly pear", "name": "Figue de Barbarie",
"plural_name": "prickly pears" "plural_name": "Figues de Barbarie"
}, },
"calamansi": { "calamansi": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "calamansi", "name": "Citron des Philippines",
"plural_name": "calamansis" "plural_name": "Citrons des Philippines"
}, },
"yuzu": { "yuzu": {
"aliases": [], "aliases": [],
@ -1013,8 +1013,8 @@
"mixed peel": { "mixed peel": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "mixed peel", "name": "Écorces d'agrumes confits",
"plural_name": "mixed peels" "plural_name": "Écorces d'agrumes confits"
}, },
"kokum": { "kokum": {
"aliases": [], "aliases": [],
@ -1025,8 +1025,8 @@
"tangelo": { "tangelo": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "tangelo", "name": "Tangelo",
"plural_name": "tangeloes" "plural_name": "tangelos"
}, },
"dried lime": { "dried lime": {
"aliases": [], "aliases": [],
@ -7689,14 +7689,14 @@
"chocolate chip": { "chocolate chip": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "chocolate chip", "name": "pépite de chocolat",
"plural_name": "chocolate chips" "plural_name": "pépites de chocolat"
}, },
"dark chocolate chip": { "dark chocolate chip": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "dark chocolate chip", "name": "pépite de chocolat noir",
"plural_name": "dark chocolate chips" "plural_name": "pépites de chocolat noir"
}, },
"whole-wheat flour": { "whole-wheat flour": {
"aliases": [ "aliases": [
@ -7815,8 +7815,8 @@
"rice flour": { "rice flour": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "rice flour", "name": "farine de riz",
"plural_name": "rice flours" "plural_name": "farines de riz"
}, },
"desiccated coconut": { "desiccated coconut": {
"aliases": [], "aliases": [],
@ -8545,11 +8545,11 @@
}, },
"Rice Krispie Cereal": { "Rice Krispie Cereal": {
"aliases": [ "aliases": [
"Rice Krispie" "Rice Krispies"
], ],
"description": "", "description": "",
"name": "Rice Krispie Cereal", "name": "Céréale Rice Krispies",
"plural_name": "Rice Krispie Cereal" "plural_name": "Céréale Rice Krispies"
}, },
"quinoa": { "quinoa": {
"aliases": [], "aliases": [],
@ -8746,7 +8746,7 @@
"black rice": { "black rice": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "black rice", "name": "riz noir",
"plural_name": "black rices" "plural_name": "black rices"
}, },
"yellow rice": { "yellow rice": {
@ -13878,8 +13878,8 @@
"dark chocolate": { "dark chocolate": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "dark chocolate", "name": "chocolat noir",
"plural_name": "dark chocolates" "plural_name": "chocolats noirs"
}, },
"dark cocoa": { "dark cocoa": {
"aliases": [], "aliases": [],
@ -13890,8 +13890,8 @@
"chocolate": { "chocolate": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "chocolate", "name": "chocolat",
"plural_name": "chocolates" "plural_name": "chocolats"
}, },
"graham cracker": { "graham cracker": {
"aliases": [], "aliases": [],
@ -13908,14 +13908,14 @@
"marshmallow": { "marshmallow": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "marshmallow", "name": "chamallow",
"plural_name": "marshmallows" "plural_name": "chamallows"
}, },
"mini arshmallow": { "mini arshmallow": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "mini arshmallow", "name": "mini arshmallow",
"plural_name": "mini marshmallows" "plural_name": "mini chamallows"
}, },
"applesauce": { "applesauce": {
"aliases": [], "aliases": [],
@ -13926,8 +13926,8 @@
"white chocolate": { "white chocolate": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "white chocolate", "name": "chocolat blanc",
"plural_name": "white chocolates" "plural_name": "chocolats blancs"
}, },
"oreo": { "oreo": {
"aliases": [], "aliases": [],
@ -14319,8 +14319,8 @@
"chocolate powder": { "chocolate powder": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "chocolate powder", "name": "chocolat en poudre",
"plural_name": "chocolate powders" "plural_name": "chocolat en poudre"
}, },
"sponge cake": { "sponge cake": {
"aliases": [], "aliases": [],
@ -14343,8 +14343,8 @@
"licorice": { "licorice": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "licorice", "name": "réglisse",
"plural_name": "licorices" "plural_name": "réglisses"
}, },
"plum jam": { "plum jam": {
"aliases": [], "aliases": [],

View file

@ -246,8 +246,8 @@
"new potato": { "new potato": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "new potato", "name": "pataca nova",
"plural_name": "new potatoes" "plural_name": "patacas novas"
}, },
"summer squash": { "summer squash": {
"aliases": [ "aliases": [
@ -755,14 +755,14 @@
"plum": { "plum": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "plum", "name": "ameixa",
"plural_name": "plums" "plural_name": "ameixas"
}, },
"fig": { "fig": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "fig", "name": "figo",
"plural_name": "figs" "plural_name": "figos"
}, },
"apricot": { "apricot": {
"aliases": [], "aliases": [],
@ -773,8 +773,8 @@
"currant": { "currant": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "currant", "name": "grosella",
"plural_name": "currants" "plural_name": "grosellas"
}, },
"mandarin": { "mandarin": {
"aliases": [], "aliases": [],
@ -785,8 +785,8 @@
"prune": { "prune": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "prune", "name": "ameixa seca",
"plural_name": "prunes" "plural_name": "ameixas secas"
}, },
"cantaloupe": { "cantaloupe": {
"aliases": [], "aliases": [],
@ -815,26 +815,26 @@
"tamarind": { "tamarind": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "tamarind", "name": "tamarindo",
"plural_name": "tamarinds" "plural_name": "tamarindos"
}, },
"nectarine": { "nectarine": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "nectarine", "name": "nectarina",
"plural_name": "nectarines" "plural_name": "nectarinas"
}, },
"dried fig": { "dried fig": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "dried fig", "name": "figo seco",
"plural_name": "dried figs" "plural_name": "figos secos"
}, },
"chestnut": { "chestnut": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "chestnut", "name": "castaña",
"plural_name": "chestnuts" "plural_name": "castañas"
}, },
"meyer lemon": { "meyer lemon": {
"aliases": [], "aliases": [],
@ -857,20 +857,20 @@
"clementine": { "clementine": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "clementine", "name": "clementina",
"plural_name": "clementines" "plural_name": "clementinas"
}, },
"persimmon": { "persimmon": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "persimmon", "name": "caqui",
"plural_name": "persimmons" "plural_name": "caquis"
}, },
"melon": { "melon": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "melon", "name": "melón",
"plural_name": "melons" "plural_name": "melóns"
}, },
"tangerine": { "tangerine": {
"aliases": [], "aliases": [],
@ -887,8 +887,8 @@
"dried apple": { "dried apple": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "dried apple", "name": "mazá seca",
"plural_name": "dried apples" "plural_name": "mazás secas"
}, },
"quince": { "quince": {
"aliases": [], "aliases": [],
@ -899,8 +899,8 @@
"guava": { "guava": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "guava", "name": "goiaba",
"plural_name": "guavas" "plural_name": "goiabas"
}, },
"banana chip": { "banana chip": {
"aliases": [], "aliases": [],
@ -1043,8 +1043,8 @@
"sweet lime": { "sweet lime": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "sweet lime", "name": "lima doce",
"plural_name": "sweet limes" "plural_name": "limas doces"
}, },
"custard-apple": { "custard-apple": {
"aliases": [], "aliases": [],
@ -1157,8 +1157,8 @@
"loquat": { "loquat": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "loquat", "name": "néspera",
"plural_name": "loquats" "plural_name": "nésperas"
}, },
"crabapple": { "crabapple": {
"aliases": [], "aliases": [],
@ -1251,8 +1251,8 @@
"portobello mushroom": { "portobello mushroom": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "portobello mushroom", "name": "cogumelo portobello",
"plural_name": "portobello mushrooms" "plural_name": "cogumelos portobello"
}, },
"wild mushroom": { "wild mushroom": {
"aliases": [], "aliases": [],
@ -1453,8 +1453,8 @@
"strawberry": { "strawberry": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "strawberry", "name": "amorodo",
"plural_name": "strawberries" "plural_name": "amorodos"
}, },
"blueberry": { "blueberry": {
"aliases": [], "aliases": [],
@ -1727,8 +1727,8 @@
"almond": { "almond": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "almond", "name": "améndoa",
"plural_name": "almonds" "plural_name": "améndoas"
}, },
"sesame seed": { "sesame seed": {
"aliases": [], "aliases": [],
@ -1799,8 +1799,8 @@
"sunflower seed": { "sunflower seed": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "sunflower seed", "name": "semente de xirasol",
"plural_name": "sunflower seeds" "plural_name": "sementes de xirasol"
}, },
"macadamia": { "macadamia": {
"aliases": [], "aliases": [],
@ -2202,7 +2202,7 @@
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "manchego", "name": "manchego",
"plural_name": "manchegoes" "plural_name": "manchegos"
}, },
"italian cheese blend": { "italian cheese blend": {
"aliases": [], "aliases": [],
@ -2711,8 +2711,8 @@
"margarine": { "margarine": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "margarine", "name": "margarina",
"plural_name": "margarines" "plural_name": "margarinas"
}, },
"creme fraiche": { "creme fraiche": {
"aliases": [], "aliases": [],
@ -2753,8 +2753,8 @@
"dulce de leche": { "dulce de leche": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "dulce de leche", "name": "doce de leite",
"plural_name": "dulce de leche" "plural_name": "doces de leite"
}, },
"custard": { "custard": {
"aliases": [], "aliases": [],
@ -2777,14 +2777,14 @@
"sherbet": { "sherbet": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "sherbet", "name": "sorvete",
"plural_name": "sherbets" "plural_name": "sorvetes"
}, },
"chocolate milk": { "chocolate milk": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "chocolate milk", "name": "leite con chocolate",
"plural_name": "chocolate milks" "plural_name": "leites con chocolate"
}, },
"liquid egg substitute": { "liquid egg substitute": {
"aliases": [], "aliases": [],
@ -2873,8 +2873,8 @@
"cajeta": { "cajeta": {
"aliases": [], "aliases": [],
"description": "", "description": "",
"name": "cajeta", "name": "doce de leite de cabra",
"plural_name": "cajetas" "plural_name": "doces de leite de cabra"
}, },
"duck egg": { "duck egg": {
"aliases": [], "aliases": [],

View file

@ -45,7 +45,7 @@
"name": "millilitre", "name": "millilitre",
"plural_name": "millilitres", "plural_name": "millilitres",
"description": "", "description": "",
"abbreviation": "mL" "abbreviation": "ml"
}, },
"liter": { "liter": {
"name": "litre", "name": "litre",

View file

@ -70,7 +70,7 @@ class OpenAILocalImage(OpenAIImageBase):
) )
with open(image, "rb") as f: with open(image, "rb") as f:
b64content = base64.b64encode(f.read()).decode("utf-8") b64content = base64.b64encode(f.read()).decode("utf-8")
return f"data:image/jpg;base64,{b64content}" return f"data:image/jpeg;base64,{b64content}"
class OpenAIService(BaseService): class OpenAIService(BaseService):

6
poetry.lock generated
View file

@ -1849,14 +1849,14 @@ signedtoken = ["cryptography (>=3.0.0)", "pyjwt (>=2.0.0,<3)"]
[[package]] [[package]]
name = "openai" name = "openai"
version = "1.98.0" version = "1.99.1"
description = "The official Python library for the openai API" description = "The official Python library for the openai API"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
groups = ["main"] groups = ["main"]
files = [ files = [
{file = "openai-1.98.0-py3-none-any.whl", hash = "sha256:b99b794ef92196829120e2df37647722104772d2a74d08305df9ced5f26eae34"}, {file = "openai-1.99.1-py3-none-any.whl", hash = "sha256:8eeccc69e0ece1357b51ca0d9fb21324afee09b20c3e5b547d02445ca18a4e03"},
{file = "openai-1.98.0.tar.gz", hash = "sha256:3ee0fcc50ae95267fd22bd1ad095ba5402098f3df2162592e68109999f685427"}, {file = "openai-1.99.1.tar.gz", hash = "sha256:2c9d8e498c298f51bb94bcac724257a3a6cac6139ccdfc1186c6708f7a93120f"},
] ]
[package.dependencies] [package.dependencies]