2024-04-16 18:03:48 -03:00
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 ) {
2024-04-17 10:39:29 -07:00
case 'claude-3-opus' : {
2024-04-16 18:03:48 -03:00
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 "" ;
}
}