Hey there, fellow JavaScript wizards! Ready to dive into the world of OpenAI API integration? Let's get our hands dirty with some code and explore how to seamlessly sync data for user-facing integrations. Buckle up!
First things first, let's get that API set up. It's a breeze, trust me. Install the package and configure your environment:
npm install openai
Now, let's manage that API key like a pro:
import { Configuration, OpenAIApi } from "openai"; const configuration = new Configuration({ apiKey: process.env.OPENAI_API_KEY, }); const openai = new OpenAIApi(configuration);
Time to fetch some data! Here's how you make a GET request:
async function fetchCompletion(prompt) { try { const response = await openai.createCompletion({ model: "text-davinci-002", prompt: prompt, }); return response.data.choices[0].text; } catch (error) { console.error("Oops! Something went wrong:", error); } }
Now, let's send some data back to OpenAI. Here's a POST request in action:
async function createFineTune(trainingFile) { try { const response = await openai.createFineTune({ training_file: trainingFile, model: "davinci", }); return response.data; } catch (error) { console.error("Uh-oh! Couldn't create fine-tune:", error); } }
Real-time sync? You got it! Let's set up a WebSocket connection:
import WebSocket from 'ws'; const ws = new WebSocket('wss://api.openai.com/v1/engines/davinci/completions'); ws.on('message', (data) => { const message = JSON.parse(data); // Handle incoming updates here console.log('Received:', message); });
Keep things snappy with some caching:
const cache = new Map(); function getCachedOrFetch(key, fetchFn) { if (cache.has(key)) { return cache.get(key); } const data = fetchFn(); cache.set(key, data); return data; }
Let's implement some slick exponential backoff:
async function retryWithBackoff(fn, maxRetries = 5) { for (let i = 0; i < maxRetries; i++) { try { return await fn(); } catch (error) { if (i === maxRetries - 1) throw error; await new Promise(res => setTimeout(res, 2 ** i * 1000)); } } }
Always encrypt sensitive data before sending it over the wire:
import crypto from 'crypto'; function encryptData(data, key) { const iv = crypto.randomBytes(16); const cipher = crypto.createCipheriv('aes-256-cbc', key, iv); let encrypted = cipher.update(data, 'utf8', 'hex'); encrypted += cipher.final('hex'); return { iv: iv.toString('hex'), encryptedData: encrypted }; }
Unit testing is your friend. Here's a quick example using Jest:
jest.mock('openai'); test('fetchCompletion returns expected text', async () => { const mockResponse = { data: { choices: [{ text: 'Hello, World!' }] } }; OpenAIApi.prototype.createCompletion.mockResolvedValue(mockResponse); const result = await fetchCompletion('Say hello'); expect(result).toBe('Hello, World!'); });
And there you have it! You're now armed with the knowledge to read and write data like a champ using the OpenAI API. Remember, the API is constantly evolving, so keep an eye out for updates and new features. Happy coding, and may your integrations be ever smooth and your data always in sync!