Files
scan-receipts/scripts/find_vision_model.mjs
Timo 84b9987c49 Add full application: receipt scanning, auth, billing, and account deletion
Brings the working codebase (Next.js app, auth system, Stripe billing,
Docker/deploy config, tests, docs) into version control on top of the
placeholder initial commit, and adds account self-deletion (Danger Zone
in Settings, password + typed-email confirmation, cascading DB cleanup,
Stripe cancellation) per GDPR right-to-erasure.

Excludes local build caches, node_modules, and internal agent scratch
files; .gitignore hardened to keep those out going forward.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-19 20:59:04 +02:00

66 lines
2.1 KiB
JavaScript

import fs from "fs";
const envContent = fs.readFileSync(".env.local", "utf-8");
const apiKeyMatch = envContent.match(/OPENROUTER_API_KEY=([^\r\n]+)/);
const apiKey = apiKeyMatch ? apiKeyMatch[1].trim() : "";
const demoImgPath = "public/demo/01_aral_tankbeleg_muenchen.jpg";
const imgBase64 = fs.readFileSync(demoImgPath).toString("base64");
const dataUrl = `data:image/jpeg;base64,${imgBase64}`;
const candidateModels = [
"google/gemini-2.0-flash-001",
"openai/gpt-4o-mini",
"qwen/qwen-2.5-vl-72b-instruct:free",
"qwen/qwen-2.5-vl-72b-instruct",
"meta-llama/llama-3.2-11b-vision-instruct",
];
async function findWorkingVisionModel() {
for (const model of candidateModels) {
console.log(`\nTesting model: ${model}...`);
try {
const res = await fetch("https://openrouter.ai/api/v1/chat/completions", {
method: "POST",
headers: {
"Authorization": `Bearer ${apiKey}`,
"Content-Type": "application/json",
"HTTP-Referer": "http://localhost:3000",
"X-Title": "Receipt Scanner",
},
body: JSON.stringify({
model,
messages: [
{
role: "user",
content: [
{ type: "text", text: "Welcher Händler steht auf diesem Beleg und was ist die Gesamtsumme? Antworte kurz im JSON Format { merchant: string, total: number }" },
{
type: "image_url",
image_url: {
url: dataUrl
}
}
]
}
]
})
});
console.log(`Status: ${res.status} ${res.statusText}`);
const data = await res.json();
if (res.ok && data.choices && data.choices[0]) {
console.log(`✓ SUCCESS with ${model}!`);
console.log("Content:", data.choices[0].message.content);
return model;
} else {
console.log("Error response:", JSON.stringify(data));
}
} catch (e) {
console.log("Fetch error:", e.message);
}
}
}
findWorkingVisionModel().catch(console.error);