image-token-meter
Version:
Calculate token consumption for images in OpenAI Vision models (GPT-4o, GPT-4 Vision, etc.)
2 lines • 4.17 kB
JavaScript
var m={"gpt-4o":{id:"gpt-4o",name:"GPT-4o",baseTokens:85,tokensPerTile:170,tileSize:512,maxDimension:2048,shortSideTarget:768,lowDetailTokens:85,defaultCostPer1kTokens:5,supportsVision:!0,notes:"Latest multimodal model with vision capabilities"},"gpt-4o-2024-05-13":{id:"gpt-4o-2024-05-13",name:"GPT-4o (2024-05-13)",baseTokens:85,tokensPerTile:170,tileSize:512,maxDimension:2048,shortSideTarget:768,lowDetailTokens:85,defaultCostPer1kTokens:5,supportsVision:!0,notes:"Specific version of GPT-4o"},"gpt-4o-mini":{id:"gpt-4o-mini",name:"GPT-4o Mini",baseTokens:85,tokensPerTile:170,tileSize:512,maxDimension:2048,shortSideTarget:768,lowDetailTokens:85,defaultCostPer1kTokens:.15,supportsVision:!0,notes:"Smaller, more affordable version of GPT-4o"},"gpt-4-vision-preview":{id:"gpt-4-vision-preview",name:"GPT-4 Vision Preview",baseTokens:85,tokensPerTile:170,tileSize:512,maxDimension:2048,shortSideTarget:768,lowDetailTokens:85,defaultCostPer1kTokens:10,supportsVision:!0,notes:"Original GPT-4 with vision capabilities"},"gpt-4-turbo":{id:"gpt-4-turbo",name:"GPT-4 Turbo",baseTokens:85,tokensPerTile:170,tileSize:512,maxDimension:2048,shortSideTarget:768,lowDetailTokens:85,defaultCostPer1kTokens:10,supportsVision:!0,notes:"GPT-4 Turbo with vision support"},"gpt-4-turbo-2024-04-09":{id:"gpt-4-turbo-2024-04-09",name:"GPT-4 Turbo (2024-04-09)",baseTokens:85,tokensPerTile:170,tileSize:512,maxDimension:2048,shortSideTarget:768,lowDetailTokens:85,defaultCostPer1kTokens:10,supportsVision:!0,notes:"Specific version of GPT-4 Turbo with vision"},"gpt-4-1106-vision-preview":{id:"gpt-4-1106-vision-preview",name:"GPT-4 Vision (1106)",baseTokens:85,tokensPerTile:170,tileSize:512,maxDimension:2048,shortSideTarget:768,lowDetailTokens:85,defaultCostPer1kTokens:10,supportsVision:!0,notes:"November 2023 version of GPT-4 Vision"}};function l(i){return m[i]}function D(){return Object.keys(m)}function x(){return Object.values(m).filter(i=>i.supportsVision)}var u="gpt-4o";function g(i,r){let{width:o,height:n,detail:s="high",model:t=u}=i;if(o<=0||n<=0)throw new Error("Image dimensions must be positive numbers");let e=l(t);if(!e)throw new Error(`Unknown model: ${t}. Available models: ${Object.keys(l).join(", ")}`);if(!e.supportsVision)throw new Error(`Model ${t} does not support vision`);let a=r?.costPer1kTokens??e.defaultCostPer1kTokens;if(s==="low"){let T=e.lowDetailTokens,S=T/1e3*a;return{tokens:T,cost:S,model:e.id,modelName:e.name,details:{originalSize:{width:o,height:n},resizedSize:{width:512,height:512},tiles:{width:1,height:1,total:1},baseTokens:T,tokensPerTile:0,detailLevel:"low"}}}let{resizedWidth:c,resizedHeight:d}=M(o,n,e),k=Math.ceil(c/e.tileSize),p=Math.ceil(d/e.tileSize),h=k*p,f=e.baseTokens+e.tokensPerTile*h,w=f/1e3*a;return{tokens:f,cost:w,model:e.id,modelName:e.name,details:{originalSize:{width:o,height:n},resizedSize:{width:c,height:d},tiles:{width:k,height:p,total:h},baseTokens:e.baseTokens,tokensPerTile:e.tokensPerTile,detailLevel:s==="auto"?"high":s}}}function M(i,r,o){let n=i,s=r;if(n>o.maxDimension||s>o.maxDimension){let t=n/s;t>1?(n=o.maxDimension,s=Math.floor(o.maxDimension/t)):(s=o.maxDimension,n=Math.floor(o.maxDimension*t))}if(n>o.shortSideTarget&&s>o.shortSideTarget){let t=n/s;t>1?(s=o.shortSideTarget,n=Math.floor(o.shortSideTarget*t)):(n=o.shortSideTarget,s=Math.floor(o.shortSideTarget/t))}return{resizedWidth:n,resizedHeight:s}}function v(i,r){let o=i.map(e=>g(e,r)),n=o.reduce((e,a)=>e+a.tokens,0),s=o.reduce((e,a)=>e+a.cost,0),t={};return o.forEach(e=>{t[e.model]||(t[e.model]={count:0,tokens:0,cost:0}),t[e.model].count++,t[e.model].tokens+=e.tokens,t[e.model].cost+=e.cost}),{results:o,summary:{totalImages:i.length,totalTokens:n,totalCost:s,byModel:t}}}function z(i=u){let r=l(i);if(!r)throw new Error(`Unknown model: ${i}`);return{costPer1kTokens:r.defaultCostPer1kTokens}}function I(i){if(i<=0)throw new Error("Cost per 1k tokens must be positive");return{costPer1kTokens:i}}export{u as DEFAULT_MODEL,m as MODELS,v as calculateBatchImageTokens,g as calculateImageTokens,I as createPricing,g as default,D as getAvailableModels,l as getModel,z as getPricing,x as getVisionModels};
//# sourceMappingURL=index.mjs.map