image-token-meter
Version:
Calculate token consumption for images in OpenAI Vision models (GPT-4o, GPT-4 Vision, etc.)
2 lines • 4.79 kB
JavaScript
;var c=Object.defineProperty;var I=Object.getOwnPropertyDescriptor;var C=Object.getOwnPropertyNames;var V=Object.prototype.hasOwnProperty;var E=(t,s)=>{for(var o in s)c(t,o,{get:s[o],enumerable:!0})},G=(t,s,o,n)=>{if(s&&typeof s=="object"||typeof s=="function")for(let i of C(s))!V.call(t,i)&&i!==o&&c(t,i,{get:()=>s[i],enumerable:!(n=I(s,i))||n.enumerable});return t};var L=t=>G(c({},"__esModule",{value:!0}),t);var O={};E(O,{DEFAULT_MODEL:()=>u,MODELS:()=>m,calculateBatchImageTokens:()=>D,calculateImageTokens:()=>T,createPricing:()=>M,default:()=>T,getAvailableModels:()=>w,getModel:()=>l,getPricing:()=>x,getVisionModels:()=>S});module.exports=L(O);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(t){return m[t]}function w(){return Object.keys(m)}function S(){return Object.values(m).filter(t=>t.supportsVision)}var u="gpt-4o";function T(t,s){let{width:o,height:n,detail:i="high",model:r=u}=t;if(o<=0||n<=0)throw new Error("Image dimensions must be positive numbers");let e=l(r);if(!e)throw new Error(`Unknown model: ${r}. Available models: ${Object.keys(l).join(", ")}`);if(!e.supportsVision)throw new Error(`Model ${r} does not support vision`);let a=s?.costPer1kTokens??e.defaultCostPer1kTokens;if(i==="low"){let g=e.lowDetailTokens,z=g/1e3*a;return{tokens:g,cost:z,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:g,tokensPerTile:0,detailLevel:"low"}}}let{resizedWidth:d,resizedHeight:k}=R(o,n,e),p=Math.ceil(d/e.tileSize),h=Math.ceil(k/e.tileSize),f=p*h,b=e.baseTokens+e.tokensPerTile*f,v=b/1e3*a;return{tokens:b,cost:v,model:e.id,modelName:e.name,details:{originalSize:{width:o,height:n},resizedSize:{width:d,height:k},tiles:{width:p,height:h,total:f},baseTokens:e.baseTokens,tokensPerTile:e.tokensPerTile,detailLevel:i==="auto"?"high":i}}}function R(t,s,o){let n=t,i=s;if(n>o.maxDimension||i>o.maxDimension){let r=n/i;r>1?(n=o.maxDimension,i=Math.floor(o.maxDimension/r)):(i=o.maxDimension,n=Math.floor(o.maxDimension*r))}if(n>o.shortSideTarget&&i>o.shortSideTarget){let r=n/i;r>1?(i=o.shortSideTarget,n=Math.floor(o.shortSideTarget*r)):(n=o.shortSideTarget,i=Math.floor(o.shortSideTarget/r))}return{resizedWidth:n,resizedHeight:i}}function D(t,s){let o=t.map(e=>T(e,s)),n=o.reduce((e,a)=>e+a.tokens,0),i=o.reduce((e,a)=>e+a.cost,0),r={};return o.forEach(e=>{r[e.model]||(r[e.model]={count:0,tokens:0,cost:0}),r[e.model].count++,r[e.model].tokens+=e.tokens,r[e.model].cost+=e.cost}),{results:o,summary:{totalImages:t.length,totalTokens:n,totalCost:i,byModel:r}}}function x(t=u){let s=l(t);if(!s)throw new Error(`Unknown model: ${t}`);return{costPer1kTokens:s.defaultCostPer1kTokens}}function M(t){if(t<=0)throw new Error("Cost per 1k tokens must be positive");return{costPer1kTokens:t}}0&&(module.exports={DEFAULT_MODEL,MODELS,calculateBatchImageTokens,calculateImageTokens,createPricing,getAvailableModels,getModel,getPricing,getVisionModels});
//# sourceMappingURL=index.js.map