nutrition: fix embedding file paths for production and copy to dist
All checks were successful
CI / update (push) Successful in 4m42s

resolve() uses CWD which in production (adapter-node) is dist/, not the
project root. Detect the correct data directory at startup and add a
postbuild step to copy the embedding JSON files into dist/data/.
This commit is contained in:
2026-04-02 21:08:53 +02:00
parent 61336823b3
commit 433477e2c6
3 changed files with 8 additions and 38 deletions

View File

@@ -7,6 +7,7 @@
"dev": "vite dev", "dev": "vite dev",
"prebuild": "bash scripts/subset-emoji-font.sh && pnpm exec vite-node scripts/generate-mystery-verses.ts && pnpm exec vite-node scripts/download-models.ts", "prebuild": "bash scripts/subset-emoji-font.sh && pnpm exec vite-node scripts/generate-mystery-verses.ts && pnpm exec vite-node scripts/download-models.ts",
"build": "vite build", "build": "vite build",
"postbuild": "mkdir -p dist/data && cp src/lib/data/nutritionEmbeddings.json src/lib/data/blsEmbeddings.json dist/data/",
"preview": "vite preview", "preview": "vite preview",
"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
"check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",

View File

@@ -1,35 +0,0 @@
#!/bin/bash
# Update all files importing from the legacy $lib/db/db to use $utils/db instead
files=(
"/home/alex/.local/src/homepage/src/routes/mario-kart/[id]/+page.server.ts"
"/home/alex/.local/src/homepage/src/routes/mario-kart/+page.server.ts"
"/home/alex/.local/src/homepage/src/routes/api/fitness/sessions/[id]/+server.ts"
"/home/alex/.local/src/homepage/src/routes/api/fitness/sessions/+server.ts"
"/home/alex/.local/src/homepage/src/routes/api/fitness/templates/[id]/+server.ts"
"/home/alex/.local/src/homepage/src/routes/api/fitness/templates/+server.ts"
"/home/alex/.local/src/homepage/src/routes/api/fitness/exercises/[id]/+server.ts"
"/home/alex/.local/src/homepage/src/routes/api/fitness/exercises/+server.ts"
"/home/alex/.local/src/homepage/src/routes/api/fitness/exercises/filters/+server.ts"
"/home/alex/.local/src/homepage/src/routes/api/fitness/seed-example/+server.ts"
"/home/alex/.local/src/homepage/src/routes/api/mario-kart/tournaments/[id]/groups/[groupId]/scores/+server.ts"
"/home/alex/.local/src/homepage/src/routes/api/mario-kart/tournaments/[id]/groups/+server.ts"
"/home/alex/.local/src/homepage/src/routes/api/mario-kart/tournaments/[id]/contestants/[contestantId]/dnf/+server.ts"
"/home/alex/.local/src/homepage/src/routes/api/mario-kart/tournaments/[id]/contestants/+server.ts"
"/home/alex/.local/src/homepage/src/routes/api/mario-kart/tournaments/[id]/+server.ts"
"/home/alex/.local/src/homepage/src/routes/api/mario-kart/tournaments/[id]/bracket/+server.ts"
"/home/alex/.local/src/homepage/src/routes/api/mario-kart/tournaments/[id]/bracket/matches/[matchId]/scores/+server.ts"
"/home/alex/.local/src/homepage/src/routes/api/mario-kart/tournaments/+server.ts"
)
for file in "${files[@]}"; do
if [ -f "$file" ]; then
echo "Updating $file"
sed -i "s/from '\$lib\/db\/db'/from '\$utils\/db'/g" "$file"
else
echo "File not found: $file"
fi
done
echo "All files updated!"

View File

@@ -6,7 +6,7 @@
* USDA uses all-MiniLM-L6-v2 for English ingredient names. * USDA uses all-MiniLM-L6-v2 for English ingredient names.
*/ */
import { pipeline, type FeatureExtractionPipeline } from '@huggingface/transformers'; import { pipeline, type FeatureExtractionPipeline } from '@huggingface/transformers';
import { readFileSync } from 'fs'; import { readFileSync, existsSync } from 'fs';
import { resolve } from 'path'; import { resolve } from 'path';
import { NUTRITION_DB, type NutritionEntry } from '$lib/data/nutritionDb'; import { NUTRITION_DB, type NutritionEntry } from '$lib/data/nutritionDb';
import { BLS_DB, type BlsEntry } from '$lib/data/blsDb'; import { BLS_DB, type BlsEntry } from '$lib/data/blsDb';
@@ -18,8 +18,12 @@ import { NutritionOverwrite } from '$models/NutritionOverwrite';
const USDA_MODEL = 'Xenova/all-MiniLM-L6-v2'; const USDA_MODEL = 'Xenova/all-MiniLM-L6-v2';
const BLS_MODEL = 'Xenova/multilingual-e5-small'; const BLS_MODEL = 'Xenova/multilingual-e5-small';
const USDA_EMBEDDINGS_PATH = resolve('src/lib/data/nutritionEmbeddings.json'); // In dev CWD is project root; in production (adapter-node) CWD is dist/
const BLS_EMBEDDINGS_PATH = resolve('src/lib/data/blsEmbeddings.json'); const DATA_DIR = existsSync(resolve('src/lib/data/nutritionEmbeddings.json'))
? resolve('src/lib/data')
: resolve('data');
const USDA_EMBEDDINGS_PATH = `${DATA_DIR}/nutritionEmbeddings.json`;
const BLS_EMBEDDINGS_PATH = `${DATA_DIR}/blsEmbeddings.json`;
const CONFIDENCE_THRESHOLD = 0.45; const CONFIDENCE_THRESHOLD = 0.45;
// Lazy-loaded singletons — USDA // Lazy-loaded singletons — USDA