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>
48 lines
1.4 KiB
JavaScript
48 lines
1.4 KiB
JavaScript
import fs from "fs";
|
|
import path from "path";
|
|
|
|
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}`;
|
|
|
|
async function testVision() {
|
|
console.log("Testing image input with deepseek/deepseek-v4-flash on OpenRouter...");
|
|
|
|
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: "deepseek/deepseek-v4-flash",
|
|
messages: [
|
|
{
|
|
role: "user",
|
|
content: [
|
|
{ type: "text", text: "Welcher Händler steht auf diesem Beleg und wie lautet der Gesamtbetrag?" },
|
|
{
|
|
type: "image_url",
|
|
image_url: {
|
|
url: dataUrl
|
|
}
|
|
}
|
|
]
|
|
}
|
|
]
|
|
})
|
|
});
|
|
|
|
console.log("Status:", res.status, res.statusText);
|
|
const data = await res.json();
|
|
console.log("Response:", JSON.stringify(data, null, 2));
|
|
}
|
|
|
|
testVision().catch(console.error);
|