/**
* WIJZIGING IN P1B_WP3.html
* ─────────────────────────────────────────────────────────────────
* Zoek deze functie (rond regel 575):
*
* async function callClaude(prompt, onChunk, onDone) {
* try {
* const res = await fetch('https://api.anthropic.com/v1/messages', {
* method: 'POST',
* headers: { 'content-type': 'application/json' },
* body: JSON.stringify({
* model: 'claude-sonnet-4-20250514',
* max_tokens: 1200,
* system: buildSystemPrompt(),
* messages: [{ role: 'user', content: prompt }],
* stream: true,
* })
* });
*
* VERVANG door dit:
*/
async function callClaude(prompt, onChunk, onDone) {
try {
// ── GEWIJZIGD: via eigen proxy, geen API key in browser ──
const res = await fetch('/.netlify/functions/claude-proxy', {
method: 'POST',
headers: { 'content-type': 'application/json' },
body: JSON.stringify({
model: 'claude-sonnet-4-20250514',
max_tokens: 1200,
system: buildSystemPrompt(),
messages: [{ role: 'user', content: prompt }],
// stream: true ← verwijderd, proxy ondersteunt geen streaming
})
});
if (!res.ok) {
const err = await res.json().catch(() => ({}));
throw new Error(err.error?.message || `HTTP ${res.status}`);
}
// ── GEWIJZIGD: geen streaming reader, direct JSON lezen ──
const data = await res.json();
const fullText = data.content?.[0]?.text || '';
// Simuleer streaming output voor de terminal UI (karakter voor karakter)
for (let i = 0; i < fullText.length; i++) {
if (onChunk) onChunk(fullText[i]);
// Kleine delay voor terminal effect (optioneel — verwijder als te traag)
if (i % 20 === 0) await new Promise(r => setTimeout(r, 1));
}
if (onDone) onDone(fullText, data.usage?.input_tokens || 0, data.usage?.output_tokens || 0);
} catch (err) {
throw err; // Wordt afgevangen door bestaande handleError() functie
}
}