Files
gh-jezweb-claude-skills-ski…/templates/chat-completion-nodejs.ts
2025-11-30 08:25:12 +08:00

74 lines
2.1 KiB
TypeScript

// Complete Chat Completion Example (Node.js SDK)
// Shows multi-turn conversation, GPT-5 parameters, and error handling
import OpenAI from 'openai';
const openai = new OpenAI({
apiKey: process.env.OPENAI_API_KEY,
});
async function chatWithGPT5() {
try {
// Multi-turn conversation
const messages: OpenAI.Chat.ChatCompletionMessageParam[] = [
{
role: 'system',
content: 'You are a helpful assistant that explains complex topics simply.'
},
{
role: 'user',
content: 'Explain quantum computing to a 10-year-old'
}
];
// First turn with GPT-5 specific parameters
const completion1 = await openai.chat.completions.create({
model: 'gpt-5',
messages: messages,
reasoning_effort: 'medium', // GPT-5 parameter
verbosity: 'high', // GPT-5 parameter
max_tokens: 500,
});
const assistantMessage = completion1.choices[0].message;
console.log('Assistant:', assistantMessage.content);
// Add assistant response to conversation
messages.push(assistantMessage);
// Follow-up question
messages.push({
role: 'user',
content: 'Can you give me an example?'
});
// Second turn
const completion2 = await openai.chat.completions.create({
model: 'gpt-5',
messages: messages,
reasoning_effort: 'medium',
verbosity: 'medium',
max_tokens: 300,
});
console.log('Assistant:', completion2.choices[0].message.content);
// Token usage
console.log('\nToken usage:');
console.log('- Prompt tokens:', completion2.usage?.prompt_tokens);
console.log('- Completion tokens:', completion2.usage?.completion_tokens);
console.log('- Total tokens:', completion2.usage?.total_tokens);
} catch (error: any) {
if (error.status === 401) {
console.error('Invalid API key. Check OPENAI_API_KEY environment variable.');
} else if (error.status === 429) {
console.error('Rate limit exceeded. Please wait and try again.');
} else {
console.error('Error:', error.message);
}
}
}
chatWithGPT5();