89 lines
2.4 KiB
TypeScript
89 lines
2.4 KiB
TypeScript
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<string> {
|
|
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 'claude-3-opus': {
|
|
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 "";
|
|
}
|
|
}
|