export default async function handler(req, res) { res.setHeader('Access-Control-Allow-Origin', '*'); res.setHeader('Access-Control-Allow-Methods', 'POST, OPTIONS'); res.setHeader('Access-Control-Allow-Headers', 'Content-Type'); if (req.method === 'OPTIONS') return res.status(200).end(); if (req.method !== 'POST') return res.status(405).json({ error: 'Method not allowed' }); const { prompt, messages } = req.body; if (!prompt && !messages) { return res.status(400).json({ error: 'No prompt provided' }); } const apiKey = process.env.CLAUDE_API_KEY; if (!apiKey) { console.error('CLAUDE_API_KEY is not set'); return res.status(500).json({ error: 'API key not configured' }); } try { const msgArray = messages || [{ role: 'user', content: prompt }]; const response = await fetch('https://api.anthropic.com/v1/messages', { method: 'POST', headers: { 'Content-Type': 'application/json', 'x-api-key': apiKey, 'anthropic-version': '2023-06-01' }, body: JSON.stringify({ model: 'claude-haiku-4-5-20251001', max_tokens: 4096, messages: msgArray }) }); const data = await response.json(); if (!response.ok) { console.error('Claude API error:', JSON.stringify(data)); return res.status(500).json({ error: data.error?.message || 'Claude API error' }); } const result = data.content[0].text; return res.status(200).json({ result }); } catch (error) { console.error('Server error:', error.message); return res.status(500).json({ error: 'Server error: ' + error.message }); } }