Initial commit
This commit is contained in:
115
templates/basic-chat.ts
Normal file
115
templates/basic-chat.ts
Normal file
@@ -0,0 +1,115 @@
|
||||
import Anthropic from '@anthropic-ai/sdk';
|
||||
|
||||
// Initialize the client
|
||||
const anthropic = new Anthropic({
|
||||
apiKey: process.env.ANTHROPIC_API_KEY || '',
|
||||
});
|
||||
|
||||
async function basicChat() {
|
||||
try {
|
||||
const message = await anthropic.messages.create({
|
||||
model: 'claude-sonnet-4-5-20250929',
|
||||
max_tokens: 1024,
|
||||
messages: [
|
||||
{
|
||||
role: 'user',
|
||||
content: 'Hello, Claude! Tell me a fun fact about TypeScript.',
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
// Extract text from response
|
||||
const textContent = message.content.find(block => block.type === 'text');
|
||||
if (textContent && textContent.type === 'text') {
|
||||
console.log('Claude:', textContent.text);
|
||||
}
|
||||
|
||||
// Log usage information
|
||||
console.log('\nUsage:');
|
||||
console.log('- Input tokens:', message.usage.input_tokens);
|
||||
console.log('- Output tokens:', message.usage.output_tokens);
|
||||
} catch (error) {
|
||||
if (error instanceof Anthropic.APIError) {
|
||||
console.error(`API Error [${error.status}]:`, error.message);
|
||||
} else {
|
||||
console.error('Unexpected error:', error);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Multi-turn conversation example
|
||||
async function multiTurnChat() {
|
||||
const messages: Array<{ role: 'user' | 'assistant'; content: string }> = [];
|
||||
|
||||
// First turn
|
||||
messages.push({
|
||||
role: 'user',
|
||||
content: 'What is the capital of France?',
|
||||
});
|
||||
|
||||
const response1 = await anthropic.messages.create({
|
||||
model: 'claude-sonnet-4-5-20250929',
|
||||
max_tokens: 1024,
|
||||
messages,
|
||||
});
|
||||
|
||||
const text1 = response1.content.find(b => b.type === 'text');
|
||||
if (text1 && text1.type === 'text') {
|
||||
messages.push({ role: 'assistant', content: text1.text });
|
||||
console.log('Claude:', text1.text);
|
||||
}
|
||||
|
||||
// Second turn
|
||||
messages.push({
|
||||
role: 'user',
|
||||
content: 'What is its population?',
|
||||
});
|
||||
|
||||
const response2 = await anthropic.messages.create({
|
||||
model: 'claude-sonnet-4-5-20250929',
|
||||
max_tokens: 1024,
|
||||
messages,
|
||||
});
|
||||
|
||||
const text2 = response2.content.find(b => b.type === 'text');
|
||||
if (text2 && text2.type === 'text') {
|
||||
console.log('Claude:', text2.text);
|
||||
}
|
||||
}
|
||||
|
||||
// System prompt example
|
||||
async function chatWithSystemPrompt() {
|
||||
const message = await anthropic.messages.create({
|
||||
model: 'claude-sonnet-4-5-20250929',
|
||||
max_tokens: 1024,
|
||||
system: 'You are a helpful Python coding assistant. Always provide type hints and docstrings.',
|
||||
messages: [
|
||||
{
|
||||
role: 'user',
|
||||
content: 'Write a function to calculate the factorial of a number.',
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
const textContent = message.content.find(block => block.type === 'text');
|
||||
if (textContent && textContent.type === 'text') {
|
||||
console.log(textContent.text);
|
||||
}
|
||||
}
|
||||
|
||||
// Run examples
|
||||
if (require.main === module) {
|
||||
console.log('=== Basic Chat ===\n');
|
||||
basicChat()
|
||||
.then(() => {
|
||||
console.log('\n=== Multi-turn Chat ===\n');
|
||||
return multiTurnChat();
|
||||
})
|
||||
.then(() => {
|
||||
console.log('\n=== Chat with System Prompt ===\n');
|
||||
return chatWithSystemPrompt();
|
||||
})
|
||||
.catch(console.error);
|
||||
}
|
||||
|
||||
export { basicChat, multiTurnChat, chatWithSystemPrompt };
|
||||
Reference in New Issue
Block a user