58 lines
1.8 KiB
JavaScript
58 lines
1.8 KiB
JavaScript
require('dotenv').config();
|
|
const axios = require('axios');
|
|
|
|
async function testOpenAI() {
|
|
const API_KEY = process.env.OPENAI_API_KEY;
|
|
const MODEL = process.env.OPENAI_MODEL || 'gpt-4o-mini';
|
|
|
|
console.log('=== OpenAI API Access Test ===');
|
|
console.log(`Model : ${MODEL}`);
|
|
console.log(`API Key : ${API_KEY ? API_KEY.slice(0, 7) + '...' + API_KEY.slice(-4) : '(not set)'}`);
|
|
console.log('');
|
|
|
|
if (!API_KEY) {
|
|
console.log('❌ OPENAI_API_KEY not set in .env');
|
|
process.exit(1);
|
|
}
|
|
|
|
try {
|
|
const res = await axios.post(
|
|
'https://api.openai.com/v1/chat/completions',
|
|
{
|
|
model: MODEL,
|
|
max_tokens: 16,
|
|
messages: [{ role: 'user', content: 'Reply with: OK' }],
|
|
},
|
|
{
|
|
headers: {
|
|
Authorization: `Bearer ${API_KEY}`,
|
|
'Content-Type': 'application/json',
|
|
},
|
|
timeout: 15000,
|
|
}
|
|
);
|
|
|
|
const reply = res.data.choices?.[0]?.message?.content?.trim();
|
|
const usage = res.data.usage;
|
|
const model = res.data.model;
|
|
|
|
console.log(`✅ Connected`);
|
|
console.log(` Model : ${model}`);
|
|
console.log(` Response : ${reply}`);
|
|
console.log(` Tokens used : ${usage?.total_tokens} (prompt ${usage?.prompt_tokens} + completion ${usage?.completion_tokens})`);
|
|
console.log(` Est. cost : $${((usage?.prompt_tokens / 1_000_000) * 0.15 + (usage?.completion_tokens / 1_000_000) * 0.60).toFixed(6)}`);
|
|
|
|
} catch (err) {
|
|
const status = err.response?.status;
|
|
const msg = err.response?.data?.error?.message || err.message;
|
|
const code = err.response?.data?.error?.code || '';
|
|
console.log(`❌ FAILED — HTTP ${status} ${code}: ${msg}`);
|
|
}
|
|
|
|
console.log('\n=== Done ===');
|
|
}
|
|
|
|
testOpenAI().catch(err => {
|
|
console.error('Fatal:', err.message);
|
|
process.exit(1);
|
|
}); |