diff --git a/.env.example b/.env.example index 9481f6a..2f9cbc2 100644 --- a/.env.example +++ b/.env.example @@ -33,3 +33,6 @@ DEEPL_API_URL="https://api-free.deepl.com/v2/translate" # Use https://api.deepl # AI Vision Service (Ollama for Alt Text Generation) OLLAMA_URL="http://localhost:11434" # Local Ollama server URL + +# HuggingFace Transformers Model Cache (for nutrition embedding models) +TRANSFORMERS_CACHE="/var/cache/transformers" # Must be writable by build and runtime user diff --git a/package.json b/package.json index 89dc636..4af2ea8 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "type": "module", "scripts": { "dev": "vite dev", - "prebuild": "bash scripts/subset-emoji-font.sh && pnpm exec vite-node scripts/generate-mystery-verses.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", "preview": "vite preview", "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", diff --git a/scripts/download-models.ts b/scripts/download-models.ts new file mode 100644 index 0000000..cc1589c --- /dev/null +++ b/scripts/download-models.ts @@ -0,0 +1,17 @@ +/** + * Pre-downloads HuggingFace transformer models so they're cached for runtime. + * Run with: pnpm exec vite-node scripts/download-models.ts + */ +import { pipeline } from '@huggingface/transformers'; + +const MODELS = [ + 'Xenova/all-MiniLM-L6-v2', + 'Xenova/multilingual-e5-small', +]; + +for (const name of MODELS) { + console.log(`Downloading ${name}...`); + const p = await pipeline('feature-extraction', name, { dtype: 'q8' }); + await p.dispose(); + console.log(` done`); +}