const fs = require('fs').promises;
const fetch = require('node-fetch');
const FormData = require('form-data');
const API_KEY = 'YOUR_API_KEY';
const BASE_URL = 'http://localhost:3000';
async function processBatch() {
// 1. Prepare requests
const requests = Array.from({ length: 50 }, (_, i) => ({
custom_id: `req-${i + 1}`,
method: 'POST',
url: '/v1/chat/completions',
body: {
model: 'gpt-3.5-turbo',
messages: [
{ role: 'user', content: `Generate a product description for item #${i + 1}` }
]
}
}));
// 2. Write JSONL file
const jsonlContent = requests.map(req => JSON.stringify(req)).join('\n');
await fs.writeFile('batch_requests.jsonl', jsonlContent);
// 3. Upload file
const formData = new FormData();
formData.append('purpose', 'batch');
formData.append('file', await fs.readFile('batch_requests.jsonl'), 'batch_requests.jsonl');
const uploadResponse = await fetch(`${BASE_URL}/v1/files`, {
method: 'POST',
headers: {
'Authorization': `Bearer ${API_KEY}`,
...formData.getHeaders()
},
body: formData
});
const { id: fileId } = await uploadResponse.json();
// 4. Create batch
const batchResponse = await fetch(`${BASE_URL}/v1/batches`, {
method: 'POST',
headers: {
'Authorization': `Bearer ${API_KEY}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
input_file_id: fileId,
endpoint: '/v1/chat/completions',
completion_window: '24h'
})
});
const { id: batchId } = await batchResponse.json();
// 5. Poll for completion
let batch;
do {
await new Promise(resolve => setTimeout(resolve, 30000)); // Wait 30 seconds
const statusResponse = await fetch(`${BASE_URL}/v1/batches/${batchId}`, {
headers: { 'Authorization': `Bearer ${API_KEY}` }
});
batch = await statusResponse.json();
console.log(`Status: ${batch.status}, Progress: ${batch.request_counts.completed}/${batch.request_counts.total}`);
} while (!['completed', 'failed', 'expired', 'cancelled'].includes(batch.status));
// 6. Process results
if (batch.status === 'completed') {
const resultsResponse = await fetch(
`${BASE_URL}/v1/files/${batch.output_file_id}/content`,
{ headers: { 'Authorization': `Bearer ${API_KEY}` } }
);
const results = await resultsResponse.text();
const lines = results.trim().split('\n');
for (const line of lines) {
const result = JSON.parse(line);
console.log(`${result.custom_id}: ${result.response ? 'Success' : 'Failed'}`);
}
}
}
processBatch().catch(console.error);