{"_id":"@diabolicallabs/llm-pricing","_rev":"14-e47d62022112c7fa10696c861e3c0100","name":"@diabolicallabs/llm-pricing","dist-tags":{"latest":"1.6.0"},"versions":{"0.1.0":{"name":"@diabolicallabs/llm-pricing","version":"0.1.0","author":{"url":"https://deeismail.com","name":"Diana Ismail","email":"diana@deeismail.com"},"license":"MIT","_id":"@diabolicallabs/llm-pricing@0.1.0","maintainers":[{"name":"shackled78","email":"shackled78@gmail.com"}],"homepage":"https://github.com/mannism/dlabs-toolkit#readme","bugs":{"url":"https://github.com/mannism/dlabs-toolkit/issues"},"dist":{"shasum":"43beeed3bad65baaf05376948f721da6aa2d9fd8","tarball":"https://registry.npmjs.org/@diabolicallabs/llm-pricing/-/llm-pricing-0.1.0.tgz","fileCount":6,"integrity":"sha512-ZHAmxYe+UkhjPlV7cI3cvL09lL2KKWFV4B+tWRZ87WoZjlF5fByKpT1YVP6xw3vFZig9uALCeutSuJVObknaWg==","signatures":[{"sig":"MEUCIG89cnAK0yDhMq4Yw7KT+1lj7xcURJ1749XazDauquFvAiEAkcq/GNq18TzoiCqNJkU5Fl1PODL0A7F7zDaBBxxy+IE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":49175},"main":"./dist/index.js","type":"module","_from":"file:diabolicallabs-llm-pricing-0.1.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"lint":"biome check ./src && eslint ./src","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","pricing:verify":"tsx scripts/verify-pricing.ts"},"_npmUser":{"name":"shackled78","email":"shackled78@gmail.com"},"_resolved":"/tmp/8205041c8bfdf2baa3f18b680dba9ffc/diabolicallabs-llm-pricing-0.1.0.tgz","publisher":"Diabolical Labs","_integrity":"sha512-ZHAmxYe+UkhjPlV7cI3cvL09lL2KKWFV4B+tWRZ87WoZjlF5fByKpT1YVP6xw3vFZig9uALCeutSuJVObknaWg==","repository":{"url":"git+https://github.com/mannism/dlabs-toolkit.git","type":"git","directory":"packages/llm-pricing"},"_npmVersion":"10.8.2","description":"Pricing table + cost computation for @diabolicallabs/llm-client. © Diabolical Labs","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.4","tsup":"^8.3.5","vitest":"^4.1.5","@types/node":"^25.6.2","@vitest/coverage-v8":"^4.1.5"},"_npmOperationalInternal":{"tmp":"tmp/llm-pricing_0.1.0_1778675962240_0.04558551950914391","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@diabolicallabs/llm-pricing","version":"0.2.0","author":{"url":"https://deeismail.com","name":"Diana Ismail","email":"diana@deeismail.com"},"license":"MIT","_id":"@diabolicallabs/llm-pricing@0.2.0","maintainers":[{"name":"shackled78","email":"shackled78@gmail.com"}],"homepage":"https://github.com/mannism/dlabs-toolkit#readme","bugs":{"url":"https://github.com/mannism/dlabs-toolkit/issues"},"dist":{"shasum":"e6ed24c771c8cb50de5af2bbc85ff22c217dfe14","tarball":"https://registry.npmjs.org/@diabolicallabs/llm-pricing/-/llm-pricing-0.2.0.tgz","fileCount":6,"integrity":"sha512-WoTdCfzvLdPcVITb1HrW9pxAb81cBsBoYVYraNYTO5lbRtNymg0zK7vqjzillM6L4dWpdS+RjlSaCyEaeBCmpQ==","signatures":[{"sig":"MEUCIQD7+tFN4SaJuYcyJAjZtHPFbmr5vLiID0x8kewt5Nd4xwIgbA3cqmgJWu9nK5YPnHlovfkGIipGLhuCWpozy6e8NjE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":68036},"main":"./dist/index.js","type":"module","_from":"file:diabolicallabs-llm-pricing-0.2.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"lint":"biome check ./src && eslint ./src","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","pricing:verify":"tsx scripts/verify-pricing.ts"},"_npmUser":{"name":"shackled78","email":"shackled78@gmail.com"},"_resolved":"/tmp/9d2273fceb81ef7003529cf9f5e598e8/diabolicallabs-llm-pricing-0.2.0.tgz","publisher":"Diabolical Labs","_integrity":"sha512-WoTdCfzvLdPcVITb1HrW9pxAb81cBsBoYVYraNYTO5lbRtNymg0zK7vqjzillM6L4dWpdS+RjlSaCyEaeBCmpQ==","repository":{"url":"git+https://github.com/mannism/dlabs-toolkit.git","type":"git","directory":"packages/llm-pricing"},"_npmVersion":"10.8.2","description":"Pricing table + cost computation for @diabolicallabs/llm-client. © Diabolical Labs","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.4","tsup":"^8.3.5","vitest":"^4.1.5","@types/node":"^25.6.2","@vitest/coverage-v8":"^4.1.5"},"_npmOperationalInternal":{"tmp":"tmp/llm-pricing_0.2.0_1778749877974_0.39855828461855736","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@diabolicallabs/llm-pricing","version":"0.3.0","author":{"url":"https://deeismail.com","name":"Diana Ismail","email":"diana@deeismail.com"},"license":"MIT","_id":"@diabolicallabs/llm-pricing@0.3.0","maintainers":[{"name":"shackled78","email":"shackled78@gmail.com"}],"homepage":"https://github.com/mannism/dlabs-toolkit#readme","bugs":{"url":"https://github.com/mannism/dlabs-toolkit/issues"},"dist":{"shasum":"e093f55630e76906f7442c38152ee68a129f747a","tarball":"https://registry.npmjs.org/@diabolicallabs/llm-pricing/-/llm-pricing-0.3.0.tgz","fileCount":6,"integrity":"sha512-KIq3s33q/bGOLIAfQudKchjF6JDsQOnfLq6VdLJtD6PZjtafMncBzzqo6lV3oD4Fj0E4vS8o+uQi4YqooSEo8w==","signatures":[{"sig":"MEQCIDeMWxXZZyOURL0+NlIKSnknUSxTLTFQ1ICB6WYIF9ypAiB2IoRxqWxUQ8vIYdXDneVoQndKTgBTcsIGAXAzYaULFw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":82678},"main":"./dist/index.js","type":"module","_from":"file:diabolicallabs-llm-pricing-0.3.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"lint":"biome check ./src && eslint ./src","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","pricing:verify":"tsx scripts/verify-pricing.ts"},"_npmUser":{"name":"shackled78","email":"shackled78@gmail.com"},"_resolved":"/tmp/e9a16061b180e610fbf51aa49a1ab231/diabolicallabs-llm-pricing-0.3.0.tgz","publisher":"Diabolical Labs","_integrity":"sha512-KIq3s33q/bGOLIAfQudKchjF6JDsQOnfLq6VdLJtD6PZjtafMncBzzqo6lV3oD4Fj0E4vS8o+uQi4YqooSEo8w==","repository":{"url":"git+https://github.com/mannism/dlabs-toolkit.git","type":"git","directory":"packages/llm-pricing"},"_npmVersion":"10.8.2","description":"Pricing table + cost computation for @diabolicallabs/llm-client. © Diabolical Labs","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.4","tsup":"^8.3.5","vitest":"^4.1.5","@types/node":"^25.6.2","@vitest/coverage-v8":"^4.1.5"},"_npmOperationalInternal":{"tmp":"tmp/llm-pricing_0.3.0_1779037443856_0.44445879427940493","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@diabolicallabs/llm-pricing","version":"0.4.0","author":{"url":"https://deeismail.com","name":"Diana Ismail","email":"diana@deeismail.com"},"license":"MIT","_id":"@diabolicallabs/llm-pricing@0.4.0","maintainers":[{"name":"shackled78","email":"shackled78@gmail.com"}],"homepage":"https://github.com/mannism/dlabs-toolkit#readme","bugs":{"url":"https://github.com/mannism/dlabs-toolkit/issues"},"dist":{"shasum":"769bac144e4658a078a467d8f0d13ae2d3da2779","tarball":"https://registry.npmjs.org/@diabolicallabs/llm-pricing/-/llm-pricing-0.4.0.tgz","fileCount":6,"integrity":"sha512-yUs94SrK+QQw2xIIIlKo8w8YgRr7dzDleenaqPwII07aqliyAx34IpjDxoeQ8GK0QEZIjjFpPdBQlFXnt3iefQ==","signatures":[{"sig":"MEYCIQCP3mVbJugAPfoUVN28KRSlSPTkK9dYbvads20PygVQuwIhAJ6sZxxtjaLV026CHh9ujxXwQCQ9hq95QymlHxm4CTcf","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":86111},"main":"./dist/index.js","type":"module","_from":"file:diabolicallabs-llm-pricing-0.4.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"lint":"biome check ./src && eslint ./src","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","pricing:verify":"tsx scripts/verify-pricing.ts"},"_npmUser":{"name":"shackled78","email":"shackled78@gmail.com"},"_resolved":"/tmp/439a6cc0e0f5257c6aeba4d489702963/diabolicallabs-llm-pricing-0.4.0.tgz","publisher":"Diabolical Labs","_integrity":"sha512-yUs94SrK+QQw2xIIIlKo8w8YgRr7dzDleenaqPwII07aqliyAx34IpjDxoeQ8GK0QEZIjjFpPdBQlFXnt3iefQ==","repository":{"url":"git+https://github.com/mannism/dlabs-toolkit.git","type":"git","directory":"packages/llm-pricing"},"_npmVersion":"10.8.2","description":"Pricing table + cost computation for @diabolicallabs/llm-client. © Diabolical Labs","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.4","tsup":"^8.3.5","vitest":"^4.1.5","@types/node":"^25.6.2","@vitest/coverage-v8":"^4.1.5"},"_npmOperationalInternal":{"tmp":"tmp/llm-pricing_0.4.0_1779111737919_0.871058632461829","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@diabolicallabs/llm-pricing","version":"1.0.0","author":{"url":"https://deeismail.com","name":"Diana Ismail","email":"diana@deeismail.com"},"license":"MIT","_id":"@diabolicallabs/llm-pricing@1.0.0","maintainers":[{"name":"shackled78","email":"shackled78@gmail.com"}],"homepage":"https://github.com/mannism/dlabs-toolkit#readme","bugs":{"url":"https://github.com/mannism/dlabs-toolkit/issues"},"dist":{"shasum":"6e654a9c528aff01bb87f0034664b8dad13ab159","tarball":"https://registry.npmjs.org/@diabolicallabs/llm-pricing/-/llm-pricing-1.0.0.tgz","fileCount":6,"integrity":"sha512-bjZKF53uNaafKvNvwro7D9uFcEPzH0QC6YCvfFQxBtDy9A5anuiTl9nP73kcYWpA9YRYof57uXPPqZxMCl/0zA==","signatures":[{"sig":"MEQCIFx0YwkV4gNuhzAWLSqnLlvyEhI9wGGVvkeGKJAsp9oFAiBRYGQW1NLIQ3CgW2Vna3WUBAoPmu+rKFIkRtU5wH+5KA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":86487},"main":"./dist/index.js","type":"module","_from":"file:diabolicallabs-llm-pricing-1.0.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"lint":"biome check ./src && eslint ./src","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","pricing:verify":"tsx scripts/verify-pricing.ts"},"_npmUser":{"name":"shackled78","email":"shackled78@gmail.com"},"_resolved":"/tmp/abec3f383abda95f5016d41e25e1a410/diabolicallabs-llm-pricing-1.0.0.tgz","publisher":"Diabolical Labs","_integrity":"sha512-bjZKF53uNaafKvNvwro7D9uFcEPzH0QC6YCvfFQxBtDy9A5anuiTl9nP73kcYWpA9YRYof57uXPPqZxMCl/0zA==","repository":{"url":"git+https://github.com/mannism/dlabs-toolkit.git","type":"git","directory":"packages/llm-pricing"},"_npmVersion":"10.8.2","description":"Pricing table + cost computation for @diabolicallabs/llm-client. © Diabolical Labs","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.4","tsup":"^8.3.5","vitest":"^4.1.5","@types/node":"^25.6.2","@vitest/coverage-v8":"^4.1.5"},"_npmOperationalInternal":{"tmp":"tmp/llm-pricing_1.0.0_1779114020426_0.9575223897154976","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@diabolicallabs/llm-pricing","version":"1.1.0","author":{"url":"https://deeismail.com","name":"Diana Ismail","email":"diana@deeismail.com"},"license":"MIT","_id":"@diabolicallabs/llm-pricing@1.1.0","maintainers":[{"name":"shackled78","email":"shackled78@gmail.com"}],"homepage":"https://github.com/mannism/dlabs-toolkit#readme","bugs":{"url":"https://github.com/mannism/dlabs-toolkit/issues"},"dist":{"shasum":"e12a22d979ae3917904fbac5cd9c699c6059b294","tarball":"https://registry.npmjs.org/@diabolicallabs/llm-pricing/-/llm-pricing-1.1.0.tgz","fileCount":6,"integrity":"sha512-RJmeEiLIbLNqdzLdmS0Com2p0913Jcv1hfqzHIQpnE/ufr6VKtDpnC3WF1avj2LtuyEBEEjHsORxSnDOYMlgXg==","signatures":[{"sig":"MEYCIQCdhnLjrmfRzOop/sdim5iVIwdo/G38PMEAlWvU1YQMQgIhAMp92VrDyrT3DaD8JN3oMMkfOj024l1Q00x5SxVWp+kH","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":92537},"main":"./dist/index.js","type":"module","_from":"file:diabolicallabs-llm-pricing-1.1.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"lint":"biome check ./src && eslint ./src","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","pricing:verify":"tsx scripts/verify-pricing.ts"},"_npmUser":{"name":"shackled78","email":"shackled78@gmail.com"},"_resolved":"/tmp/8c80f9eb1645422ce262bcff5fae9366/diabolicallabs-llm-pricing-1.1.0.tgz","publisher":"Diabolical Labs","_integrity":"sha512-RJmeEiLIbLNqdzLdmS0Com2p0913Jcv1hfqzHIQpnE/ufr6VKtDpnC3WF1avj2LtuyEBEEjHsORxSnDOYMlgXg==","repository":{"url":"git+https://github.com/mannism/dlabs-toolkit.git","type":"git","directory":"packages/llm-pricing"},"_npmVersion":"10.8.2","description":"Pricing table + cost computation for @diabolicallabs/llm-client. © Diabolical Labs","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.4","tsup":"^8.3.5","vitest":"^4.1.5","@types/node":"^25.6.2","@vitest/coverage-v8":"^4.1.5"},"_npmOperationalInternal":{"tmp":"tmp/llm-pricing_1.1.0_1779160794088_0.8276510783143189","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@diabolicallabs/llm-pricing","version":"1.2.0","author":{"url":"https://deeismail.com","name":"Diana Ismail","email":"diana@deeismail.com"},"license":"MIT","_id":"@diabolicallabs/llm-pricing@1.2.0","maintainers":[{"name":"shackled78","email":"shackled78@gmail.com"}],"homepage":"https://github.com/mannism/dlabs-toolkit#readme","bugs":{"url":"https://github.com/mannism/dlabs-toolkit/issues"},"dist":{"shasum":"f918682649c7ec8b46969ba04b4f81c9fe633081","tarball":"https://registry.npmjs.org/@diabolicallabs/llm-pricing/-/llm-pricing-1.2.0.tgz","fileCount":6,"integrity":"sha512-0/yisB+R+DN6LJhcU48NsAnoDN6H3Qo257EMzu9fy2n/l/khBq0ma6U5DQxTUsPlrndD5oTDEO8gTe+e72FORQ==","signatures":[{"sig":"MEUCIGJKs4XhV8mcnR1v7WIumohxGmv/W2pCxy/3NzEZLCh7AiEA+cKRADkUuRTPkEylK3ETnKHHhoeJlbrzGv4gmBeIDFI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":93667},"main":"./dist/index.js","type":"module","_from":"file:diabolicallabs-llm-pricing-1.2.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"lint":"biome check ./src && eslint ./src","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","pricing:verify":"tsx scripts/verify-pricing.ts"},"_npmUser":{"name":"shackled78","email":"shackled78@gmail.com"},"_resolved":"/tmp/83041f60b73a836919e21659027d8619/diabolicallabs-llm-pricing-1.2.0.tgz","publisher":"Diabolical Labs","_integrity":"sha512-0/yisB+R+DN6LJhcU48NsAnoDN6H3Qo257EMzu9fy2n/l/khBq0ma6U5DQxTUsPlrndD5oTDEO8gTe+e72FORQ==","repository":{"url":"git+https://github.com/mannism/dlabs-toolkit.git","type":"git","directory":"packages/llm-pricing"},"_npmVersion":"10.8.2","description":"Pricing table + cost computation for @diabolicallabs/llm-client. © Diabolical Labs","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","tsup":"^8.3.5","vitest":"^4.1.9","@types/node":"^25.9.3","@vitest/coverage-v8":"^4.1.9"},"_npmOperationalInternal":{"tmp":"tmp/llm-pricing_1.2.0_1781634084406_0.9628485989661912","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@diabolicallabs/llm-pricing","version":"1.3.0","author":{"url":"https://deeismail.com","name":"Diana Ismail","email":"diana@deeismail.com"},"license":"MIT","_id":"@diabolicallabs/llm-pricing@1.3.0","maintainers":[{"name":"shackled78","email":"shackled78@gmail.com"}],"homepage":"https://github.com/mannism/dlabs-toolkit#readme","bugs":{"url":"https://github.com/mannism/dlabs-toolkit/issues"},"dist":{"shasum":"0ea99d23c921a0c12c68ade32e83b03a11bf2645","tarball":"https://registry.npmjs.org/@diabolicallabs/llm-pricing/-/llm-pricing-1.3.0.tgz","fileCount":6,"integrity":"sha512-x8F486GvJZQw91PjDDhigkeLDxT/EpIlwi/BpjtCbMaACCv67+0SKbjN8sc5jeduq7UTXW8K5wkvfvKnQoH5Uw==","signatures":[{"sig":"MEYCIQDaKehnIxOAs//pxVe9bFe6SeAyaiTGRmY94sFF53biXAIhAOJ4YfxDWcHeDQm0qm33rLCrx9m3TSHq9pN0EXG0Bvlh","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":99864},"main":"./dist/index.js","type":"module","_from":"file:diabolicallabs-llm-pricing-1.3.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"lint":"biome check ./src && eslint ./src","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","pricing:verify":"tsx scripts/verify-pricing.ts"},"_npmUser":{"name":"shackled78","email":"shackled78@gmail.com"},"_resolved":"/tmp/0015331881cb506dab6d24c970483fa1/diabolicallabs-llm-pricing-1.3.0.tgz","publisher":"Diabolical Labs","_integrity":"sha512-x8F486GvJZQw91PjDDhigkeLDxT/EpIlwi/BpjtCbMaACCv67+0SKbjN8sc5jeduq7UTXW8K5wkvfvKnQoH5Uw==","repository":{"url":"git+https://github.com/mannism/dlabs-toolkit.git","type":"git","directory":"packages/llm-pricing"},"_npmVersion":"10.8.2","description":"Pricing table + cost computation for @diabolicallabs/llm-client. © Diabolical Labs","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.1","tsup":"^8.3.5","vitest":"^4.1.10","@types/node":"^26.1.1","@vitest/coverage-v8":"^4.1.10"},"_npmOperationalInternal":{"tmp":"tmp/llm-pricing_1.3.0_1785258308482_0.5584776165281726","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@diabolicallabs/llm-pricing","version":"1.4.0","author":{"url":"https://deeismail.com","name":"Diana Ismail","email":"diana@deeismail.com"},"license":"MIT","_id":"@diabolicallabs/llm-pricing@1.4.0","maintainers":[{"name":"shackled78","email":"shackled78@gmail.com"}],"homepage":"https://github.com/mannism/dlabs-toolkit#readme","bugs":{"url":"https://github.com/mannism/dlabs-toolkit/issues"},"dist":{"shasum":"a1acc4897acc19367e82a93bdfb7eeda1ea1bc8e","tarball":"https://registry.npmjs.org/@diabolicallabs/llm-pricing/-/llm-pricing-1.4.0.tgz","fileCount":6,"integrity":"sha512-pScjp0piFHDHHuhbbaYj8xc89VpA0N/HhjRa054Yfpoc8B9UtbhLK3Lk+Gt2MU5OaHTmXW/UVstexErs61RfwQ==","signatures":[{"sig":"MEUCIBBnO5aRA8y++NpcmOfAUcHnwNyUdBe31vTr30mF93wYAiEAkAkwhyAs215gTSUGC4q48KheTOfBW6hX0aoJBZPwd2g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":100842},"main":"./dist/index.js","type":"module","_from":"file:diabolicallabs-llm-pricing-1.4.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"lint":"biome check ./src && eslint ./src","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","pricing:verify":"tsx scripts/verify-pricing.ts"},"_npmUser":{"name":"shackled78","email":"shackled78@gmail.com"},"_resolved":"/tmp/b9f098329252c037fb2b30ecf607fcb7/diabolicallabs-llm-pricing-1.4.0.tgz","publisher":"Diabolical Labs","_integrity":"sha512-pScjp0piFHDHHuhbbaYj8xc89VpA0N/HhjRa054Yfpoc8B9UtbhLK3Lk+Gt2MU5OaHTmXW/UVstexErs61RfwQ==","repository":{"url":"git+https://github.com/mannism/dlabs-toolkit.git","type":"git","directory":"packages/llm-pricing"},"_npmVersion":"10.8.2","description":"Pricing table + cost computation for @diabolicallabs/llm-client. © Diabolical Labs","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.1","tsup":"^8.3.5","vitest":"^4.1.10","@types/node":"^26.1.2","@vitest/coverage-v8":"^4.1.10"},"_npmOperationalInternal":{"tmp":"tmp/llm-pricing_1.4.0_1786202236318_0.6303442827984098","host":"s3://npm-registry-packages-npm-production"}},"1.4.1":{"name":"@diabolicallabs/llm-pricing","version":"1.4.1","author":{"url":"https://deeismail.com","name":"Diana Ismail","email":"diana@deeismail.com"},"license":"MIT","_id":"@diabolicallabs/llm-pricing@1.4.1","maintainers":[{"name":"shackled78","email":"shackled78@gmail.com"}],"homepage":"https://github.com/mannism/dlabs-toolkit#readme","bugs":{"url":"https://github.com/mannism/dlabs-toolkit/issues"},"dist":{"shasum":"94de7c449d761a4ec9e9f4e8be58abfe6d1356c7","tarball":"https://registry.npmjs.org/@diabolicallabs/llm-pricing/-/llm-pricing-1.4.1.tgz","fileCount":6,"integrity":"sha512-7E1svvXtedB9SK2lYq0YUvZyItBquNxCEGkdFfAEamsYCqnFEVbbbmid9MfaQulOfGvBHK1qJggGkEJ+M1SIuw==","signatures":[{"sig":"MEQCIG1pCJbflUHKsOKdFE5R/4uVdJQHwrT0HcbTpOYyQk8XAiA4xhLsnnpVZu2brg+57HQsgl2QFGiuMlumMwSjwo00Mw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":101487},"main":"./dist/index.js","type":"module","_from":"file:diabolicallabs-llm-pricing-1.4.1.tgz","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"lint":"biome check ./src && eslint ./src","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","pricing:verify":"tsx scripts/verify-pricing.ts"},"_npmUser":{"name":"shackled78","email":"shackled78@gmail.com"},"_resolved":"/tmp/900739d2ac15235d691930178e209c54/diabolicallabs-llm-pricing-1.4.1.tgz","publisher":"Diabolical Labs","_integrity":"sha512-7E1svvXtedB9SK2lYq0YUvZyItBquNxCEGkdFfAEamsYCqnFEVbbbmid9MfaQulOfGvBHK1qJggGkEJ+M1SIuw==","repository":{"url":"git+https://github.com/mannism/dlabs-toolkit.git","type":"git","directory":"packages/llm-pricing"},"_npmVersion":"10.8.2","description":"Pricing table + cost computation for @diabolicallabs/llm-client. © Diabolical Labs","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.12","tsup":"^8.3.5","vitest":"^4.1.10","@types/node":"^26.2.0","@vitest/coverage-v8":"^4.1.10"},"_npmOperationalInternal":{"tmp":"tmp/llm-pricing_1.4.1_1787028348287_0.16357856155287642","host":"s3://npm-registry-packages-npm-production"}},"1.4.2":{"name":"@diabolicallabs/llm-pricing","version":"1.4.2","author":{"url":"https://deeismail.com","name":"Diana Ismail","email":"diana@deeismail.com"},"license":"MIT","_id":"@diabolicallabs/llm-pricing@1.4.2","maintainers":[{"name":"shackled78","email":"shackled78@gmail.com"}],"homepage":"https://github.com/mannism/dlabs-toolkit#readme","bugs":{"url":"https://github.com/mannism/dlabs-toolkit/issues"},"dist":{"shasum":"807169ae5847874d89387e1e7d01e90e97478d81","tarball":"https://registry.npmjs.org/@diabolicallabs/llm-pricing/-/llm-pricing-1.4.2.tgz","fileCount":6,"integrity":"sha512-v8pcRAO6gLI8jvEVRf9YcD3YucWyTuUUbC3E5PpHSsTsP9xGXZGYbBsWUqTghzqQ+Z8+Wrp4rQaUBu+g/IMuqA==","signatures":[{"sig":"MEYCIQDk4sdTNHGh4zgdODf61v+zOrjcwZgxlpAGiN9rB4OpjQIhANGfa51CFx1RDLSK7qc1bKiMYXFk2ql/mcEnRVgqEmPI","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":106224},"main":"./dist/index.js","type":"module","_from":"file:diabolicallabs-llm-pricing-1.4.2.tgz","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"lint":"biome check ./src && eslint ./src","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","pricing:verify":"tsx scripts/verify-pricing.ts"},"_npmUser":{"name":"shackled78","email":"shackled78@gmail.com"},"_resolved":"/tmp/d95b86a741b0e0663c9c44128c4eb829/diabolicallabs-llm-pricing-1.4.2.tgz","publisher":"Diabolical Labs","_integrity":"sha512-v8pcRAO6gLI8jvEVRf9YcD3YucWyTuUUbC3E5PpHSsTsP9xGXZGYbBsWUqTghzqQ+Z8+Wrp4rQaUBu+g/IMuqA==","repository":{"url":"git+https://github.com/mannism/dlabs-toolkit.git","type":"git","directory":"packages/llm-pricing"},"_npmVersion":"10.8.2","description":"Pricing table + cost computation for @diabolicallabs/llm-client. © Diabolical Labs","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.12","tsup":"^8.3.5","vitest":"^4.1.10","@types/node":"^26.2.0","@vitest/coverage-v8":"^4.1.10"},"_npmOperationalInternal":{"tmp":"tmp/llm-pricing_1.4.2_1787033406517_0.34772734599747857","host":"s3://npm-registry-packages-npm-production"}},"1.4.3":{"name":"@diabolicallabs/llm-pricing","version":"1.4.3","author":{"url":"https://deeismail.com","name":"Diana Ismail","email":"diana@deeismail.com"},"license":"MIT","_id":"@diabolicallabs/llm-pricing@1.4.3","maintainers":[{"name":"shackled78","email":"shackled78@gmail.com"}],"homepage":"https://github.com/mannism/dlabs-toolkit#readme","bugs":{"url":"https://github.com/mannism/dlabs-toolkit/issues"},"dist":{"shasum":"c91e517a2987bbc245017b1d05a7385f0476ce29","tarball":"https://registry.npmjs.org/@diabolicallabs/llm-pricing/-/llm-pricing-1.4.3.tgz","fileCount":6,"integrity":"sha512-89gpSvGigW/3xcYrycoJSqgvrIS7G5GwHjLMb7fmTO1/+mC67phFe5KV/EJydfpitDS+QUXsrGX37fgji7BXWw==","signatures":[{"sig":"MEUCIQC/t/ogSrI9frxSh+j72H8NiVpEWwvv0AEgZSF8C5GloAIgesCBcWxolBR7Dh3C00Sq/sCAZkmsif3CQ9BCcAz8iHU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":105359},"main":"./dist/index.js","type":"module","_from":"file:diabolicallabs-llm-pricing-1.4.3.tgz","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"lint":"biome check ./src && eslint ./src","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","pricing:verify":"tsx scripts/verify-pricing.ts"},"_npmUser":{"name":"shackled78","email":"shackled78@gmail.com"},"_resolved":"/tmp/36bd348c3859875e2914c22acece78d9/diabolicallabs-llm-pricing-1.4.3.tgz","publisher":"Diabolical Labs","_integrity":"sha512-89gpSvGigW/3xcYrycoJSqgvrIS7G5GwHjLMb7fmTO1/+mC67phFe5KV/EJydfpitDS+QUXsrGX37fgji7BXWw==","repository":{"url":"git+https://github.com/mannism/dlabs-toolkit.git","type":"git","directory":"packages/llm-pricing"},"_npmVersion":"10.8.2","description":"Pricing table + cost computation for @diabolicallabs/llm-client. © Diabolical Labs","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.12","tsup":"^8.3.5","vitest":"^4.1.10","@types/node":"^26.2.0","@vitest/coverage-v8":"^4.1.10"},"_npmOperationalInternal":{"tmp":"tmp/llm-pricing_1.4.3_1787121292512_0.5867523066791778","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"@diabolicallabs/llm-pricing","version":"1.5.0","author":{"url":"https://deeismail.com","name":"Diana Ismail","email":"diana@deeismail.com"},"license":"MIT","_id":"@diabolicallabs/llm-pricing@1.5.0","maintainers":[{"name":"shackled78","email":"shackled78@gmail.com"}],"homepage":"https://github.com/mannism/dlabs-toolkit#readme","bugs":{"url":"https://github.com/mannism/dlabs-toolkit/issues"},"dist":{"shasum":"b3e73c47c2d1d0c63f0171344c006d77da5a4bde","tarball":"https://registry.npmjs.org/@diabolicallabs/llm-pricing/-/llm-pricing-1.5.0.tgz","fileCount":6,"integrity":"sha512-FypCaW+z0DDYezCGUzS4zocys3owl5kURWbPEIHFFLQjjKhS5I7NQ8JMEcCZy03E0XiZWoCoKoHKFwTrpYCrNg==","signatures":[{"sig":"MEUCIQDQb2zHVg2e4IRnujMwzusHtFvbuRncp/5gCllOJVA+GwIgG5QFH86qS5G74kWTwh1VT/waPsRSvEQqtMIIDyS0dpE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":105889},"main":"./dist/index.js","type":"module","_from":"file:diabolicallabs-llm-pricing-1.5.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"lint":"biome check ./src && eslint ./src","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest","pricing:verify":"tsx scripts/verify-pricing.ts"},"_npmUser":{"name":"shackled78","email":"shackled78@gmail.com"},"_resolved":"/tmp/4bba012c3f7721f60a9709c18c1000a7/diabolicallabs-llm-pricing-1.5.0.tgz","publisher":"Diabolical Labs","_integrity":"sha512-FypCaW+z0DDYezCGUzS4zocys3owl5kURWbPEIHFFLQjjKhS5I7NQ8JMEcCZy03E0XiZWoCoKoHKFwTrpYCrNg==","repository":{"url":"git+https://github.com/mannism/dlabs-toolkit.git","type":"git","directory":"packages/llm-pricing"},"_npmVersion":"10.8.2","description":"Pricing table + cost computation for @diabolicallabs/llm-client. © Diabolical Labs","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.12","tsup":"^8.3.5","vitest":"^4.1.10","@types/node":"^26.2.0","@vitest/coverage-v8":"^4.1.10"},"_npmOperationalInternal":{"tmp":"tmp/llm-pricing_1.5.0_1788592393237_0.4367237511230395","host":"s3://npm-registry-packages-npm-production"}},"1.6.0":{"name":"@diabolicallabs/llm-pricing","version":"1.6.0","description":"Pricing table + cost computation for @diabolicallabs/llm-client. © Diabolical Labs","author":{"name":"Diana Ismail","email":"diana@deeismail.com","url":"https://deeismail.com"},"publisher":"Diabolical Labs","license":"MIT","type":"module","exports":{".":{"import":"./dist/index.js","types":"./dist/index.d.ts"}},"main":"./dist/index.js","types":"./dist/index.d.ts","repository":{"type":"git","url":"git+https://github.com/mannism/dlabs-toolkit.git","directory":"packages/llm-pricing"},"homepage":"https://github.com/mannism/dlabs-toolkit#readme","bugs":{"url":"https://github.com/mannism/dlabs-toolkit/issues"},"engines":{"node":">=20"},"devDependencies":{"@types/node":"^26.2.0","@vitest/coverage-v8":"^4.1.10","tsx":"^4.23.12","tsup":"^8.3.5","vitest":"^4.1.10"},"scripts":{"build":"tsup","typecheck":"tsc --noEmit","lint":"biome check ./src && eslint ./src","test":"vitest run","test:watch":"vitest","pricing:verify":"tsx scripts/verify-pricing.ts"},"_id":"@diabolicallabs/llm-pricing@1.6.0","_integrity":"sha512-veirctlupS0imMGJHKdTnJg0/xKy39hZshG4oR9miIWuB6Q/MrfCY+GVwJoRh2YwHXPqAW2ovTHIJ+1rb7P6yQ==","_resolved":"/tmp/5efc0e6c3209f16fa5488ba636e7c5d1/diabolicallabs-llm-pricing-1.6.0.tgz","_from":"file:diabolicallabs-llm-pricing-1.6.0.tgz","_nodeVersion":"20.20.2","_npmVersion":"10.8.2","dist":{"integrity":"sha512-veirctlupS0imMGJHKdTnJg0/xKy39hZshG4oR9miIWuB6Q/MrfCY+GVwJoRh2YwHXPqAW2ovTHIJ+1rb7P6yQ==","shasum":"dba749175de1309011444940ca3b24979cd4fcfb","tarball":"https://registry.npmjs.org/@diabolicallabs/llm-pricing/-/llm-pricing-1.6.0.tgz","fileCount":6,"unpackedSize":114111,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIAmWUB9568RpwxMbciK6NOacrxaD/iAVpdVPrQMlInQaAiAJzYMa7vGAOWlKLvt7ohsrrPp4drJPH5qvBIy23tZSog=="}]},"_npmUser":{"name":"shackled78","email":"shackled78@gmail.com"},"directories":{},"maintainers":[{"name":"shackled78","email":"shackled78@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/llm-pricing_1.6.0_1788595256503_0.6542761620597453"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-13T12:39:22.167Z","modified":"2026-09-05T08:00:56.891Z","0.1.0":"2026-05-13T12:39:22.432Z","0.2.0":"2026-05-14T09:11:18.128Z","0.3.0":"2026-05-17T17:04:03.988Z","0.4.0":"2026-05-18T13:42:18.059Z","1.0.0":"2026-05-18T14:20:20.583Z","1.1.0":"2026-05-19T03:19:54.280Z","1.2.0":"2026-06-16T18:21:24.558Z","1.3.0":"2026-07-28T17:05:08.614Z","1.4.0":"2026-08-08T15:17:16.456Z","1.4.1":"2026-08-18T04:45:48.435Z","1.4.2":"2026-08-18T06:10:06.657Z","1.4.3":"2026-08-19T06:34:52.657Z","1.5.0":"2026-09-05T07:13:13.385Z","1.6.0":"2026-09-05T08:00:56.642Z"},"bugs":{"url":"https://github.com/mannism/dlabs-toolkit/issues"},"author":{"name":"Diana Ismail","email":"diana@deeismail.com","url":"https://deeismail.com"},"license":"MIT","homepage":"https://github.com/mannism/dlabs-toolkit#readme","repository":{"type":"git","url":"git+https://github.com/mannism/dlabs-toolkit.git","directory":"packages/llm-pricing"},"description":"Pricing table + cost computation for @diabolicallabs/llm-client. © Diabolical Labs","maintainers":[{"name":"shackled78","email":"shackled78@gmail.com"}],"readme":"# @diabolicallabs/llm-pricing\n\nPricing table + cost computation for `@diabolicallabs/llm-client`. Converts `LlmUsage` token counts to per-call USD cost breakdowns across all six supported providers (Anthropic, OpenAI, Gemini, DeepSeek, Perplexity, xAI). © Diabolical Labs\n\n**Stable since 1.0.0** (2026-05-18). The public API — `computeCost`, `resolveModelPricing`, `fetchRemoteTable`, `DEFAULT_PRICING_TABLE`, and the exported type shapes — is committed. Pricing-table refreshes and new model additions ship as minor releases. Breaking schema changes (e.g. multimodal billing extensions) will be flagged in advance and shipped as a major.\n\n## Status\n\nDefault pricing table covers Anthropic, OpenAI (including GPT-5.x family), Gemini, DeepSeek, Perplexity. Remote table via `fetchRemoteTable()` with stale-while-revalidate cache. Pluggable diagnostic logger via `setPricingLogger()` — see [Logging](#logging).\n\n## Install\n\n```bash\npnpm add @diabolicallabs/llm-pricing\n```\n\nPublic on npmjs.com — no `.npmrc` config required.\n\n## Usage\n\n```typescript\nimport { computeCost } from '@diabolicallabs/llm-pricing';\n\n// After an LLM call via @diabolicallabs/llm-client:\nconst cost = computeCost({\n  usage: response.usage,\n  provider: 'anthropic',\n  model: 'claude-sonnet-4-6',\n});\n\n// cost.input    — USD input token cost\n// cost.output   — USD output token cost\n// cost.cacheRead  — USD cache read cost (Anthropic, Gemini)\n// cost.cacheWrite — USD cache write cost (Anthropic ephemeral)\n// cost.total    — sum of all components\n// cost.currency — always 'USD'\n// cost.isPartial — true when billing components exist that cannot be computed\n//                  from token usage (o-series reasoning tokens, sonar-deep-research fees)\n```\n\n## Pricing table\n\nThe default table covers all six providers (Anthropic, OpenAI, Gemini, DeepSeek, Perplexity, xAI). Access it directly:\n\n```typescript\nimport { DEFAULT_PRICING_TABLE } from '@diabolicallabs/llm-pricing';\n\nconsole.log(DEFAULT_PRICING_TABLE.versionedAt); // '2026-07-25'\n\n// Consumer override — merge your rates over the defaults\nconst cost = computeCost({\n  usage: response.usage,\n  provider: 'openai',\n  model: 'gpt-5.5',\n  pricingTable: {\n    ...DEFAULT_PRICING_TABLE,\n    openai: {\n      'gpt-5.5': { inputPer1M: 4.5, outputPer1M: 28.0, verifiedAt: '2026-05-14', sourceUrl: 'internal' },\n    },\n  },\n});\n```\n\n### `versionedAt` — staleness detection\n\n`DEFAULT_PRICING_TABLE.versionedAt` is an ISO 8601 date string. Consumers who need freshness guarantees can check it at startup:\n\n```typescript\nimport { DEFAULT_PRICING_TABLE } from '@diabolicallabs/llm-pricing';\n\nconst ageInDays =\n  (Date.now() - new Date(DEFAULT_PRICING_TABLE.versionedAt).getTime()) / 86_400_000;\n\nif (ageInDays > 90) {\n  console.warn(\n    `llm-pricing default table is ${Math.floor(ageInDays)} days old — consider updating @diabolicallabs/llm-pricing`\n  );\n}\n```\n\nThe Agent Spend Dashboard surfaces `versionedAt` in its UI so operators can see when the table was last confirmed.\n\n## Remote table (v0.2.0)\n\n`fetchRemoteTable()` fetches a `PricingTable` from a URL (typically the canonical `pricing/table.json` in the dlabs-toolkit repo) with an in-memory stale-while-revalidate cache. It **never throws** — on any failure it returns the bundled `DEFAULT_PRICING_TABLE`.\n\n```typescript\nimport { fetchRemoteTable, computeCost } from '@diabolicallabs/llm-pricing';\n\nconst CANONICAL_URL =\n  'https://raw.githubusercontent.com/mannism/dlabs-toolkit/main/pricing/table.json';\n\nconst result = await fetchRemoteTable(CANONICAL_URL);\n// result.source — 'remote' | 'cache' | 'fallback'\n// result.table  — the resolved PricingTable\n// result.error  — set when source === 'fallback'\n\nconst cost = computeCost({\n  usage: response.usage,\n  provider: 'anthropic',\n  model: 'claude-sonnet-4-6',\n  pricingTable: result.table,\n});\n```\n\nWhen used with `@diabolicallabs/llm-client@^3.0.0`, set `pricing.remoteUrl` on `createClient()` to wire this automatically — you don't need to call `fetchRemoteTable()` directly.\n\n### Precedence (highest → lowest)\n\n| Source | How |\n|---|---|\n| `pricing.table` on `createClient()` | Consumer-explicit static override — always wins |\n| `pricing.remoteUrl` on `createClient()` | Fetched once on init, cached per TTL |\n| `DEFAULT_PRICING_TABLE` | Bundled fallback — always available |\n\n### Cache TTL\n\nDefault: **24 hours** (`cacheTtlMs: 24 * 60 * 60 * 1000`).\n\nRationale: GitHub raw fetches are cheap but bounded. 24h matches the realistic provider-repricing cadence — faster wouldn't catch drift sooner; slower starts to lag noticeably. Override via `options.cacheTtlMs`.\n\n### Fail-safe contract\n\nOn any failure (network error, HTTP non-2xx, JSON parse error, schema validation failure, 5s connect timeout), `fetchRemoteTable()` returns `{ source: 'fallback', table: DEFAULT_PRICING_TABLE }` and emits a `pricing_fetch_failed` event via the configured `PricingLogger`. With the default logger that materializes as:\n\n```json\n{ \"level\": \"warn\", \"event\": \"pricing_fetch_failed\", \"url\": \"...\", \"error\": \"...\", \"fallback\": \"DEFAULT_PRICING_TABLE\" }\n```\n\nwritten to stdout. See [Logging](#logging) below to override the logger.\n\nPricing failures never crash LLM requests — degraded mode (bundled table) is always preferable to an exception.\n\n### Testing\n\nUse `clearPricingCache(url?)` to reset the in-memory cache between tests:\n\n```typescript\nimport { clearPricingCache } from '@diabolicallabs/llm-pricing';\n\nbeforeEach(() => clearPricingCache());\n```\n\n## Provider-specific behavior\n\n### Anthropic — prompt cache\n\nAnthropic has two cache write tiers. The toolkit's `providerOptions.promptCache: 'ephemeral'` wires the **5-minute tier**. Both rates are in the pricing table:\n\n| Field | Applies to |\n|---|---|\n| `cacheWritePer1M` | 5-min ephemeral write (toolkit wired) |\n| `cacheWrite1hPer1M` | 1-hr write (reserved for future `LlmUsage` field) |\n\n`cacheCreationTokens` in `LlmUsage` maps to the 5-min write rate. The 1-hr rate is not applied until a `cacheWrite1hTokens` field ships.\n\n### Gemini — long-context tiering\n\n`gemini-3.1-pro-preview` and `gemini-2.5-pro` have two price tiers. `computeCost()` picks the tier automatically based on `usage.inputTokens`:\n\n- `inputTokens ≤ 200 000` → standard rates (`inputPer1M`, `outputPer1M`)\n- `inputTokens > 200 000` → elevated rates (`longContextInputPer1M`, `longContextOutputPer1M`)\n\n`gemini-2.5-flash` has flat pricing — no tiering.\n\n### OpenAI — reasoning models (`o3`, `o4-mini`, `gpt-5.6-sol/terra/luna`, `gpt-5`/`gpt-5-mini`/`gpt-5-nano`/`gpt-5-pro`, `gpt-6-astra`)\n\nO-series and `gpt-5.x`/`gpt-6` reasoning-family models bill reasoning tokens against `outputPer1M` but do not return them in the response. `usage.outputTokens` is therefore higher than visible output tokens. `computeCost()` returns the correct billing total but sets `isPartial: true` so consumers know the visible output cost is a floor, not the exact computation cost.\n\n`gpt-6-astra` additionally has a long-context tier, same mechanism as the Gemini models above but with its own threshold:\n\n- `inputTokens ≤ 272 000` → standard rates (`inputPer1M` $10.00, `outputPer1M` $50.00)\n- `inputTokens > 272 000` → the **entire request** bills at `longContextInputPer1M` ($20.00, 2x) and `longContextOutputPer1M` ($75.00, 1.5x) — not just the excess over the threshold.\n\n### DeepSeek — deprecated aliases\n\n`deepseek-chat` and `deepseek-reasoner` are deprecated upstream — both now route to `deepseek-v4-flash` server-side. The pricing table includes them with the same rates as `deepseek-v4-flash`. `computeCost()` emits a `pricing_deprecated_alias` log event (via the configured `PricingLogger`, see [Logging](#logging)) when it resolves through a deprecated alias.\n\nUse the canonical IDs:\n\n| Canonical | Notes |\n|---|---|\n| `deepseek-v4-flash` | General + reasoning (thinking mode). Default. |\n| `deepseek-v4-pro` | High-capability. Promotional discount expires 2026-05-31. |\n\n### Perplexity — partial coverage\n\nPerplexity bills token costs **plus** per-request fees based on search context size. `computeCost()` covers token costs only. `sonar-deep-research` additionally has citation token, search query, and reasoning token fees not in `LlmUsage`. For these models, `cost.isPartial` is always `true` — the total is a floor.\n\n## Logging\n\n`@diabolicallabs/llm-pricing` emits diagnostic events for four conditions:\n\n| Event | When |\n|---|---|\n| `pricing_deprecated_alias` | A deprecated model alias resolved (e.g. `deepseek-chat` → `deepseek-v4-flash`) |\n| `pricing_date_strip_fallback` | A dated model ID matched its base alias via date-strip (e.g. `gpt-5.4-mini-2026-03-17` → `gpt-5.4-mini`) |\n| `pricing_unknown_model` | No pricing data for `(provider, model)` — returns zero cost with `isPartial: true` |\n| `pricing_fetch_failed` | `fetchRemoteTable()` fell back to the bundled table |\n\nEach event fires **once per unique key per process lifetime** so high-volume callers don't spam logs.\n\n### Default behavior — structured JSON to stdout\n\nThe default logger writes one line per event to `stdout` using `console.log`:\n\n```json\n{ \"level\": \"warn\", \"event\": \"pricing_date_strip_fallback\", \"provider\": \"openai\", \"model\": \"gpt-5.4-mini-2026-03-17\", \"alias\": \"gpt-5.4-mini\" }\n```\n\nStdout (not stderr) is deliberate — log ingesters that classify severity by stream (Railway, many GCP/AWS log routers) would otherwise label every warning as `severity: error`. The structured `level` field carries the intent without forcing a false-error classification on every consumer.\n\n### Override — `setPricingLogger()`\n\nSwap the logger at bootstrap to integrate with your app's logger or restore human-readable output:\n\n```typescript\nimport { setPricingLogger } from '@diabolicallabs/llm-pricing';\n\n// CLI tool — human-readable stderr\nsetPricingLogger({\n  warn: (event, data) => console.warn(`[${event}]`, data),\n});\n\n// Pino / Winston / Datadog\nsetPricingLogger({\n  warn: (event, data) => myAppLogger.warn({ event, ...data }, event),\n});\n\n// Reset to the default (structured JSON to stdout)\nsetPricingLogger(null);\n```\n\nThe `PricingLogger` type is exported for typed implementations:\n\n```typescript\nimport type { PricingLogger } from '@diabolicallabs/llm-pricing';\n```\n\n## Maintenance\n\nThis package uses a monthly Perplexity drift check + quarterly baseline refresh (Option D from the pricing maintenance brief).\n\n### `pnpm pricing:verify`\n\nRun this before merging a pricing table PR to confirm table values are in the expected ballpark:\n\n```bash\nset -a; source .env; set +a\npnpm pricing:verify\n# Optional: custom threshold (default 10%)\npnpm pricing:verify --threshold=5\n```\n\nRequires `PERPLEXITY_API_KEY`. Queries Perplexity `sonar` once per provider, prints a diff table, and exits non-zero if any model's detected price differs by more than the threshold. **Never auto-updates the table** — detected drift triggers a human-verified research refresh.\n\n### Monthly drift check (v0.2.0+ hybrid model)\n\nA Routine running on the first of each month queries Perplexity `sonar` for all provider prices and diffs against `pricing/table.json`. Detection threshold: 5% on input or output. When drift is detected, the Routine opens a PR directly against `pricing/table.json` with the diffed price changes — no code change, no npm release needed.\n\n**Refresh workflow (v0.2.0+):**\n1. Routine detects drift → opens a PR with updated `pricing/table.json`.\n2. Sable reviews + runs `pnpm pricing:verify`, then merges.\n3. After merge: run `node pricing/sync-bundled.mjs` to regenerate `table.ts`, commit both files together.\n4. Consumers using `pricing.remoteUrl` pick up the change on next process restart (no npm release needed).\n5. When bundled table is stale enough to warrant a release, bump `llm-pricing` and publish normally.\n\nThis is lighter than the v0.1.0 flow which required a full release cycle per price fix.\n\n### Reporting a pricing error\n\nIf you notice a rate that appears wrong:\n\n1. Check the official provider pricing page (links in `ModelPricing.sourceUrl`).\n2. Edit `pricing/table.json` directly via GitHub — or open an issue with label `pricing-drift`, title: `[pricing-drift] {provider} {model} — detected rate: {X}, table rate: {Y}`.\n3. Tom will verify; Sable opens a PR against `pricing/table.json`.\n\n## License\n\nMIT — see [LICENSE](../../LICENSE)\n","readmeFilename":"README.md"}