chore(deps): @google/generative-ai + vips-dev fuer Foto-Rezept-Magie

This commit is contained in:
hsiegeln
2026-04-21 10:37:12 +02:00
parent 783b782608
commit 9e3d6e8d01
5 changed files with 24 additions and 2 deletions

View File

@@ -15,3 +15,9 @@ BRAVE_API_KEY=
# SearXNG-Secret: beliebig lange Zufallskette. Für Prod mit # SearXNG-Secret: beliebig lange Zufallskette. Für Prod mit
# `openssl rand -hex 32` generieren und in der Pi-.env ablegen. # `openssl rand -hex 32` generieren und in der Pi-.env ablegen.
SEARXNG_SECRET=dev-secret-change-me SEARXNG_SECRET=dev-secret-change-me
# Gemini Vision (Foto-Rezept-Magie). Ohne Key ist die Funktion graceful
# deaktiviert — der Kamera-Button erscheint dann gar nicht erst.
GEMINI_API_KEY=
GEMINI_MODEL=gemini-2.5-flash
GEMINI_TIMEOUT_MS=20000

View File

@@ -3,8 +3,9 @@
FROM node:22-alpine AS builder FROM node:22-alpine AS builder
WORKDIR /app WORKDIR /app
# Alpine needs build tools for better-sqlite3 native module # Alpine needs build tools for better-sqlite3 native module.
RUN apk add --no-cache python3 make g++ libc6-compat # vips-dev provides libvips + libheif for sharp (incl. HEIC input from iOS).
RUN apk add --no-cache python3 make g++ libc6-compat vips-dev
COPY package*.json ./ COPY package*.json ./
RUN npm ci RUN npm ci

View File

@@ -13,6 +13,10 @@ services:
- NODE_ENV=production - NODE_ENV=production
# Im Header als kleine Versionsnummer unter dem Logo angezeigt. # Im Header als kleine Versionsnummer unter dem Logo angezeigt.
- KOCHWAS_TAG=${KOCHWAS_TAG:-dev} - KOCHWAS_TAG=${KOCHWAS_TAG:-dev}
# Gemini (Foto-Rezept-Magie). Leer = Feature deaktiviert.
- GEMINI_API_KEY=${GEMINI_API_KEY:-}
- GEMINI_MODEL=${GEMINI_MODEL:-gemini-2.5-flash}
- GEMINI_TIMEOUT_MS=${GEMINI_TIMEOUT_MS:-20000}
depends_on: depends_on:
- searxng - searxng
restart: unless-stopped restart: unless-stopped

10
package-lock.json generated
View File

@@ -8,6 +8,7 @@
"name": "kochwas", "name": "kochwas",
"version": "1.2.0", "version": "1.2.0",
"dependencies": { "dependencies": {
"@google/generative-ai": "^0.24.1",
"@types/archiver": "^7.0.0", "@types/archiver": "^7.0.0",
"@types/yauzl": "^2.10.3", "@types/yauzl": "^2.10.3",
"archiver": "^7.0.1", "archiver": "^7.0.1",
@@ -659,6 +660,15 @@
} }
} }
}, },
"node_modules/@google/generative-ai": {
"version": "0.24.1",
"resolved": "https://registry.npmjs.org/@google/generative-ai/-/generative-ai-0.24.1.tgz",
"integrity": "sha512-MqO+MLfM6kjxcKoy0p1wRzG3b4ZZXtPI+z2IE26UogS2Cm/XHO+7gGRBh6gcJsOiIVoH93UwKvW4HdgiOZCy9Q==",
"license": "Apache-2.0",
"engines": {
"node": ">=18.0.0"
}
},
"node_modules/@img/colour": { "node_modules/@img/colour": {
"version": "1.1.0", "version": "1.1.0",
"resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz", "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz",

View File

@@ -35,6 +35,7 @@
"vitest": "^2.1.4" "vitest": "^2.1.4"
}, },
"dependencies": { "dependencies": {
"@google/generative-ai": "^0.24.1",
"@types/archiver": "^7.0.0", "@types/archiver": "^7.0.0",
"@types/yauzl": "^2.10.3", "@types/yauzl": "^2.10.3",
"archiver": "^7.0.1", "archiver": "^7.0.1",