Small vision models (qwen3-vl-4b) sometimes loop the OCR array, running the response into the token ceiling (finish_reason: length) and failing to parse. Layered guardrails: - Prompts: explicit "transcribe each element once, never repeat/loop, at most N, STOP when done" in the OCR, grounding and combined prompts. - Schema: hard maxItems on ocr_results/tagging_results/content_type and maxLength on text/scene — LM Studio's grammar enforces these, so a loop is grammar-bounded rather than relying on max_tokens. - Sampling: a configurable frequency_penalty (ANALYSIS_FREQUENCY_PENALTY, default 0.3) sent with each request — the decode-time lever that actually breaks loops. - Code: sanitize() collapses runaway consecutive duplicates (same normalized text + kind) so a loop that slips through still can't flood the row. Tests: schema caps present, frequency_penalty included only when nonzero, sanitize collapses consecutive repeats; config default. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
33 lines
862 B
JSON
33 lines
862 B
JSON
{
|
|
"name": "mangalord-frontend",
|
|
"version": "0.79.1",
|
|
"private": true,
|
|
"type": "module",
|
|
"scripts": {
|
|
"dev": "vite dev",
|
|
"build": "vite build",
|
|
"preview": "vite preview",
|
|
"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
|
|
"test": "vitest run",
|
|
"test:watch": "vitest",
|
|
"test:e2e": "playwright test"
|
|
},
|
|
"devDependencies": {
|
|
"@lucide/svelte": "^1.16.0",
|
|
"@playwright/test": "^1.48.0",
|
|
"@sveltejs/adapter-node": "^5.2.0",
|
|
"@sveltejs/kit": "^2.7.0",
|
|
"@sveltejs/vite-plugin-svelte": "^4.0.0",
|
|
"@testing-library/jest-dom": "^6.6.0",
|
|
"@testing-library/svelte": "^5.2.0",
|
|
"@types/node": "^22.7.0",
|
|
"jsdom": "^25.0.0",
|
|
"svelte": "^5.0.0",
|
|
"svelte-check": "^4.0.0",
|
|
"tslib": "^2.7.0",
|
|
"typescript": "^5.6.0",
|
|
"vite": "^5.4.0",
|
|
"vitest": "^2.1.0"
|
|
}
|
|
}
|