feat(vision): add Qwen3-VL vision model support with Dockerfile and tests; improve invoice OCR conversion and prompts; simplify extraction flow by removing consensus voting

This commit is contained in:
2026-01-18 03:35:05 +00:00
parent d237ad19f4
commit 3780105c6f
6 changed files with 435 additions and 70 deletions

View File

@@ -311,9 +311,8 @@ export async function ensureOllamaModel(modelName: string): Promise<boolean> {
if (response.ok) {
const data = await response.json();
const models = data.models || [];
const exists = models.some((m: { name: string }) =>
m.name === modelName || m.name.startsWith(modelName.split(':')[0])
);
// Exact match required - don't match on prefix
const exists = models.some((m: { name: string }) => m.name === modelName);
if (exists) {
console.log(`[Ollama] Model already available: ${modelName}`);
@@ -371,3 +370,16 @@ export async function ensureMinistral3(): Promise<boolean> {
// Then ensure the Ministral 3 8B model is pulled
return ensureOllamaModel('ministral-3:8b');
}
/**
* Ensure Qwen3-VL 8B model is available (vision-language model)
* Q4_K_M quantization (~5GB) - fits in 15GB VRAM with room to spare
*/
export async function ensureQwen3Vl(): Promise<boolean> {
// First ensure the Ollama service is running
const ollamaOk = await ensureMiniCpm();
if (!ollamaOk) return false;
// Then ensure Qwen3-VL 8B is pulled
return ensureOllamaModel('qwen3-vl:8b');
}