import Anthropic from '@anthropic-ai/sdk'; import axios from 'axios'; export async function getImageDescription( imageUrl: string, backText: string, frontText: string, model: string = "gpt-4-turbo" ): Promise { try { const prompt = "What's in the image? You need to answer with the content for the alt tag of the image. To help you with the context, the image is in the following text: " + backText + " and the following text: " + frontText + ". Be super concise." switch (model) { case 'anthropic': { if (!process.env.ANTHROPIC_API_KEY) { throw new Error("No Anthropic API key provided"); } const imageRequest = await axios.get(imageUrl, { responseType: 'arraybuffer' }); const imageMediaType = 'image/png'; const imageData = Buffer.from(imageRequest.data, 'binary').toString('base64'); const anthropic = new Anthropic(); const response = await anthropic.messages.create({ model: "claude-3-opus-20240229", max_tokens: 1024, messages: [ { role: "user", content: [ { type: "image", source: { type: "base64", media_type: imageMediaType, data: imageData, }, }, { type: "text", text: prompt } ], } ] }); return response.content[0].text; } default: { if (!process.env.OPENAI_API_KEY) { throw new Error("No OpenAI API key provided"); } const { OpenAI } = require("openai"); const openai = new OpenAI(); const response = await openai.chat.completions.create({ model: "gpt-4-turbo", messages: [ { role: "user", content: [ { type: "text", text: prompt, }, { type: "image_url", image_url: { url: imageUrl, }, }, ], }, ], }); return response.choices[0].message.content; } } } catch (error) { console.error("Error generating image alt text:", error?.message); return ""; } }