{"_id":"@anvaka/vue-llm","_rev":"12-0a60eda837e78d2d24270e839fc42add","name":"@anvaka/vue-llm","dist-tags":{"latest":"0.5.2"},"versions":{"0.1.0":{"name":"@anvaka/vue-llm","version":"0.1.0","license":"MIT","_id":"@anvaka/vue-llm@0.1.0","maintainers":[{"name":"anvaka","email":"anvaka@gmail.com"}],"dist":{"shasum":"fa7af901cfbb6fa8ad06be8769e1281a4fdd8008","tarball":"https://registry.npmjs.org/@anvaka/vue-llm/-/vue-llm-0.1.0.tgz","fileCount":28,"integrity":"sha512-7AoOAIvojDdLhighq5nfVsF9PbGsNXRj7wh3RoPRIeVwK9gEBju97bW6IQRv1wC8qWKAtEYyCVr6Q9lVuU7YDg==","signatures":[{"sig":"MEQCIDgre3fFBRrk7Y57KBQYSePR228fRwApjHVpKyFI/6V0AiB/uWRRD5b5j9SLxE1x+tSwXgGbWg6Fc0bBcFq3a1x55A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":112962},"main":"dist/index.js","type":"module","module":"dist/index.js","exports":{".":{"import":"./dist/index.js","default":"./dist/index.js"},"./vue":{"import":"./dist/vue/index.js","default":"./dist/vue/index.js"},"./providers":{"import":"./dist/providers/index.js","default":"./dist/providers/index.js"},"./styles/variables.css":"./src/styles/variables.css","./styles/components.css":"./src/styles/components.css"},"gitHead":"d0fcd1a11260405c6b62cde1f419291390d2bfe1","scripts":{"dev":"vite build --watch","build":"vite build"},"_npmUser":{"name":"anvaka","email":"anvaka@gmail.com"},"_npmVersion":"11.5.1","description":"Browser-only LLM client with provider adapters and Vue 3 components","directories":{},"_nodeVersion":"24.7.0","_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.0","@vitejs/plugin-vue":"^5.2.0"},"peerDependencies":{"vue":">=3.3.0"},"_npmOperationalInternal":{"tmp":"tmp/vue-llm_0.1.0_1765875298603_0.05355081543193463","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@anvaka/vue-llm","version":"0.1.1","license":"MIT","_id":"@anvaka/vue-llm@0.1.1","maintainers":[{"name":"anvaka","email":"anvaka@gmail.com"}],"dist":{"shasum":"ad39b48ed50794ed6679548608f8a98231509347","tarball":"https://registry.npmjs.org/@anvaka/vue-llm/-/vue-llm-0.1.1.tgz","fileCount":28,"integrity":"sha512-JdUQ/CcfPqY4/lsfNkznBP31QAUNLeYLNiC2DFDlHvBEDENdSPd1LqEZ/rJvWvBL6q/mIbUevBumzzPr8pBQfA==","signatures":[{"sig":"MEYCIQC8TkITuZG/QQli2uNVhEeBhQ8I4cCEzvQBm58nKY6t2wIhAO4tJArteiALb04A4N1GcEcDgg73zu5Dpqsah/KCtgr7","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":113005},"main":"dist/index.js","type":"module","module":"dist/index.js","exports":{".":{"import":"./dist/index.js","default":"./dist/index.js"},"./vue":{"import":"./dist/vue/index.js","default":"./dist/vue/index.js"},"./providers":{"import":"./dist/providers/index.js","default":"./dist/providers/index.js"},"./dist/vue-llm.css":"./dist/vue-llm.css","./styles/variables.css":"./src/styles/variables.css","./styles/components.css":"./src/styles/components.css"},"gitHead":"8db06a191df3dfca235099fe73e2a08542a5351b","scripts":{"dev":"vite build --watch","build":"vite build"},"_npmUser":{"name":"anvaka","email":"anvaka@gmail.com"},"_npmVersion":"11.5.1","description":"Browser-only LLM client with provider adapters and Vue 3 components","directories":{},"_nodeVersion":"24.7.0","_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.0","@vitejs/plugin-vue":"^5.2.0"},"peerDependencies":{"vue":">=3.3.0"},"_npmOperationalInternal":{"tmp":"tmp/vue-llm_0.1.1_1765877112594_0.42686579893008303","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@anvaka/vue-llm","version":"0.1.2","license":"MIT","_id":"@anvaka/vue-llm@0.1.2","maintainers":[{"name":"anvaka","email":"anvaka@gmail.com"}],"dist":{"shasum":"4e2c0de11dc7f51448a7437139af2f402ae0f91a","tarball":"https://registry.npmjs.org/@anvaka/vue-llm/-/vue-llm-0.1.2.tgz","fileCount":28,"integrity":"sha512-XRBaJdHYBw57Cg0BNkvBYhwseNhi4F1/bRIlg/G4R4OMDE6pjsqX/5RB1O3T/sXSp4D4r1tiWQ96bU/AD5PKoQ==","signatures":[{"sig":"MEUCIQDS19IYomxc3iD6L3NRFJ7jy42iRJnxUmMMXB4UVFdYgwIgY6OpTmvaSpCwWCxCpWx/xmRcyJ3GIqJqdt2kmiryncw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":113823},"main":"dist/index.js","type":"module","module":"dist/index.js","exports":{".":{"import":"./dist/index.js","default":"./dist/index.js"},"./vue":{"import":"./dist/vue/index.js","default":"./dist/vue/index.js"},"./providers":{"import":"./dist/providers/index.js","default":"./dist/providers/index.js"},"./dist/vue-llm.css":"./dist/vue-llm.css","./styles/variables.css":"./src/styles/variables.css","./styles/components.css":"./src/styles/components.css"},"gitHead":"d2774e34aa9d405dfefd81268547e8250164e6ad","scripts":{"dev":"vite build --watch","build":"vite build"},"_npmUser":{"name":"anvaka","email":"anvaka@gmail.com"},"_npmVersion":"11.5.1","description":"Browser-only LLM client with provider adapters and Vue 3 components","directories":{},"_nodeVersion":"24.7.0","_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.0","@vitejs/plugin-vue":"^5.2.0"},"peerDependencies":{"vue":">=3.3.0"},"_npmOperationalInternal":{"tmp":"tmp/vue-llm_0.1.2_1770530115574_0.8145661366431591","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@anvaka/vue-llm","version":"0.2.0","license":"MIT","_id":"@anvaka/vue-llm@0.2.0","maintainers":[{"name":"anvaka","email":"anvaka@gmail.com"}],"dist":{"shasum":"5f01c9be349e518609161cbdc7f37e14d716c5a3","tarball":"https://registry.npmjs.org/@anvaka/vue-llm/-/vue-llm-0.2.0.tgz","fileCount":29,"integrity":"sha512-i7+Bxw2JMpVI26xytzAi2brHanoczAiy9c8ocjk9XtYKPX56JED41sugY6zrcUDLo2AnNLmc0t4vVyZiSb4WtA==","signatures":[{"sig":"MEYCIQCaplcP8U7OIkkfiNv5GAN/10PCq4zHQdMLT8LkAiK6jwIhAI/r5Dv6+vQuN+exC4MN8POGOI1xvx4Va4QgL8eJ8kso","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":128178},"main":"dist/index.js","type":"module","module":"dist/index.js","exports":{".":{"import":"./dist/index.js","default":"./dist/index.js"},"./vue":{"import":"./dist/vue/index.js","default":"./dist/vue/index.js"},"./providers":{"import":"./dist/providers/index.js","default":"./dist/providers/index.js"},"./dist/vue-llm.css":"./dist/vue-llm.css","./styles/variables.css":"./src/styles/variables.css","./styles/components.css":"./src/styles/components.css"},"gitHead":"18cff439ca753da2f008309e5f72c6b45c6fff67","scripts":{"dev":"vite build --watch","build":"vite build"},"_npmUser":{"name":"anvaka","email":"anvaka@gmail.com"},"_npmVersion":"11.5.1","description":"Browser-only LLM client with provider adapters and Vue 3 components","directories":{},"_nodeVersion":"24.7.0","_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.0","@vitejs/plugin-vue":"^5.2.0"},"peerDependencies":{"vue":">=3.3.0"},"_npmOperationalInternal":{"tmp":"tmp/vue-llm_0.2.0_1779423803938_0.5535323947130901","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@anvaka/vue-llm","version":"0.3.0","license":"MIT","_id":"@anvaka/vue-llm@0.3.0","maintainers":[{"name":"anvaka","email":"anvaka@gmail.com"}],"dist":{"shasum":"0c7b9c09930368dc1a1a3d645bc2f279fa439109","tarball":"https://registry.npmjs.org/@anvaka/vue-llm/-/vue-llm-0.3.0.tgz","fileCount":33,"integrity":"sha512-+gwRFnHkU0GIvipIYcZVPNvYO9E7aTgSUcPH2RpI4hw/b0rZA6kOurYXkAg6bRdp1UybFcUgk2R/aENB8jJXzw==","signatures":[{"sig":"MEQCIDYhyohOpAPrTbNpFX8zQKm4erUVlX0k6tFV/VYZHiR/AiA/LutGF1EyxNMB0F3x//ERpaIaJWi3M7PXDYVaQaJSYQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":151805},"main":"dist/index.js","type":"module","module":"dist/index.js","exports":{".":{"import":"./dist/index.js","default":"./dist/index.js"},"./vue":{"import":"./dist/vue/index.js","default":"./dist/vue/index.js"},"./pricing":{"import":"./dist/pricing/index.js","default":"./dist/pricing/index.js"},"./providers":{"import":"./dist/providers/index.js","default":"./dist/providers/index.js"},"./dist/vue-llm.css":"./dist/vue-llm.css","./styles/variables.css":"./src/styles/variables.css","./styles/components.css":"./src/styles/components.css"},"gitHead":"6785d2b0fba4153e968bc008712c36863f65e237","scripts":{"dev":"vite build --watch","build":"vite build","test:providers":"node test/providers.mjs"},"_npmUser":{"name":"anvaka","email":"anvaka@gmail.com"},"_npmVersion":"11.5.1","description":"Browser-only LLM client with provider adapters and Vue 3 components","directories":{},"_nodeVersion":"24.7.0","_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.0","@vitejs/plugin-vue":"^5.2.0"},"peerDependencies":{"vue":">=3.3.0"},"_npmOperationalInternal":{"tmp":"tmp/vue-llm_0.3.0_1779863444991_0.5051606746223674","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@anvaka/vue-llm","version":"0.3.1","license":"MIT","_id":"@anvaka/vue-llm@0.3.1","maintainers":[{"name":"anvaka","email":"anvaka@gmail.com"}],"dist":{"shasum":"496f034b33cf1830dcecd41a43ae5276b905de9f","tarball":"https://registry.npmjs.org/@anvaka/vue-llm/-/vue-llm-0.3.1.tgz","fileCount":33,"integrity":"sha512-aQhP/my7VCKDT8kF9rVmQ6Gu53T0Bylxf2WNLLz957VD3aEtNzkUMCZyxMpNXRM/aH91clCkPWcwtYbYS65T5A==","signatures":[{"sig":"MEYCIQCvYcW5BIijicCJSEq+xgRFb0cV4EXvjRcVpKf/AFwCWQIhAKBcbhiTcPdCWxs52Z1el4H8HCrK2o1BRGZxqHHwnAls","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":155504},"main":"dist/index.js","type":"module","module":"dist/index.js","exports":{".":{"import":"./dist/index.js","default":"./dist/index.js"},"./vue":{"import":"./dist/vue/index.js","default":"./dist/vue/index.js"},"./pricing":{"import":"./dist/pricing/index.js","default":"./dist/pricing/index.js"},"./providers":{"import":"./dist/providers/index.js","default":"./dist/providers/index.js"},"./dist/vue-llm.css":"./dist/vue-llm.css","./styles/variables.css":"./src/styles/variables.css","./styles/components.css":"./src/styles/components.css"},"gitHead":"a2f1920efe6c8efd9161ef9c52c9d8162a7ae4e2","scripts":{"dev":"vite build --watch","build":"vite build","test:caching":"node test/caching.mjs","test:providers":"node test/providers.mjs"},"_npmUser":{"name":"anvaka","email":"anvaka@gmail.com"},"_npmVersion":"11.5.1","description":"Browser-only LLM client with provider adapters and Vue 3 components","directories":{},"_nodeVersion":"24.7.0","_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.0","@vitejs/plugin-vue":"^5.2.0"},"peerDependencies":{"vue":">=3.3.0"},"_npmOperationalInternal":{"tmp":"tmp/vue-llm_0.3.1_1780243351824_0.6970290085426869","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"@anvaka/vue-llm","version":"0.3.2","license":"MIT","_id":"@anvaka/vue-llm@0.3.2","maintainers":[{"name":"anvaka","email":"anvaka@gmail.com"}],"dist":{"shasum":"687aa25870695b51f4c356727e239889a4f1c453","tarball":"https://registry.npmjs.org/@anvaka/vue-llm/-/vue-llm-0.3.2.tgz","fileCount":33,"integrity":"sha512-f3+NeVEp0YZnA3C8ruG4FmLWsWosLhUX/5AlwTWPz3CJQzIdJsSjBT8WH4ai55K65eqY+sPmlTo30WOUmJOKgg==","signatures":[{"sig":"MEUCIAS/Y0U6hxHhirkDNG0+L/rSPJsgooSXQp64fSzis8xhAiEAmdb3op+j/NlLHI4wM+tz3iMk05RKxDhDiqTlXBXPDv8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":157273},"main":"dist/index.js","type":"module","module":"dist/index.js","exports":{".":{"import":"./dist/index.js","default":"./dist/index.js"},"./vue":{"import":"./dist/vue/index.js","default":"./dist/vue/index.js"},"./pricing":{"import":"./dist/pricing/index.js","default":"./dist/pricing/index.js"},"./providers":{"import":"./dist/providers/index.js","default":"./dist/providers/index.js"},"./dist/vue-llm.css":"./dist/vue-llm.css","./styles/variables.css":"./src/styles/variables.css","./styles/components.css":"./src/styles/components.css"},"gitHead":"2a08100e75d9d1aa6288bb7b46911fb578cac046","scripts":{"dev":"vite build --watch","build":"vite build","test:caching":"node test/caching.mjs","test:providers":"node test/providers.mjs"},"_npmUser":{"name":"anvaka","email":"anvaka@gmail.com"},"_npmVersion":"11.5.1","description":"Browser-only LLM client with provider adapters and Vue 3 components","directories":{},"_nodeVersion":"24.7.0","_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.0","@vitejs/plugin-vue":"^5.2.0"},"peerDependencies":{"vue":">=3.3.0"},"_npmOperationalInternal":{"tmp":"tmp/vue-llm_0.3.2_1780984748992_0.5848335233080058","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@anvaka/vue-llm","version":"0.4.0","license":"MIT","_id":"@anvaka/vue-llm@0.4.0","maintainers":[{"name":"anvaka","email":"anvaka@gmail.com"}],"dist":{"shasum":"3dd52446a6f3ca8ff5afe7a9cd08c1410f337c41","tarball":"https://registry.npmjs.org/@anvaka/vue-llm/-/vue-llm-0.4.0.tgz","fileCount":34,"integrity":"sha512-bm0bYwgTVZVje+o0sUrW8mAIgdD7V81CvnGCnY4V+BfHBVy8d50W246ZElFo9bdT2VQ4046vSAsHnJ9KNym6uQ==","signatures":[{"sig":"MEUCIGyXFXTZcPmzMtLvtd9w+UWbyIpRoquGTk06T++cEEvOAiEArDNW+n1DuvLBPD1O+Lmpb6y4yv2ojdwDs8b9uwR+ptA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":174661},"main":"dist/index.js","type":"module","module":"dist/index.js","exports":{".":{"import":"./dist/index.js","default":"./dist/index.js"},"./vue":{"import":"./dist/vue/index.js","default":"./dist/vue/index.js"},"./pricing":{"import":"./dist/pricing/index.js","default":"./dist/pricing/index.js"},"./providers":{"import":"./dist/providers/index.js","default":"./dist/providers/index.js"},"./dist/vue-llm.css":"./dist/vue-llm.css","./styles/variables.css":"./src/styles/variables.css","./styles/components.css":"./src/styles/components.css"},"gitHead":"294c51d07e0d15b20eeac7d554d12fb6811264a0","scripts":{"dev":"vite build --watch","build":"vite build","test:caching":"node test/caching.mjs","test:providers":"node test/providers.mjs"},"_npmUser":{"name":"anvaka","email":"anvaka@gmail.com"},"_npmVersion":"11.5.1","description":"Browser-only LLM client with provider adapters and Vue 3 components","directories":{},"_nodeVersion":"24.7.0","_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.0","@vitejs/plugin-vue":"^5.2.0"},"peerDependencies":{"vue":">=3.3.0"},"_npmOperationalInternal":{"tmp":"tmp/vue-llm_0.4.0_1783202001071_0.34104724693879374","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@anvaka/vue-llm","version":"0.4.1","license":"MIT","_id":"@anvaka/vue-llm@0.4.1","maintainers":[{"name":"anvaka","email":"anvaka@gmail.com"}],"dist":{"shasum":"9dc2f6898b6f7f75bfcee0baeb2872740bbe526e","tarball":"https://registry.npmjs.org/@anvaka/vue-llm/-/vue-llm-0.4.1.tgz","fileCount":34,"integrity":"sha512-7gxzOjiwUQlWTA6hLHq+yy7fPTjyOdCeHJarZgmLXOB3YKUvCRw9qhWbB7w7VeSnJtd934A75+hXT1shOtrtng==","signatures":[{"sig":"MEUCIFntVyU48FibItjQYsoYLBf0oVLJoBr5wLR0kcnX0NNvAiEA18gToMXu9hD+pkrcX6biubqgisxvN3VAHY+FySMFCdI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":174730},"main":"dist/index.js","type":"module","module":"dist/index.js","exports":{".":{"import":"./dist/index.js","default":"./dist/index.js"},"./vue":{"import":"./dist/vue/index.js","default":"./dist/vue/index.js"},"./pricing":{"import":"./dist/pricing/index.js","default":"./dist/pricing/index.js"},"./providers":{"import":"./dist/providers/index.js","default":"./dist/providers/index.js"},"./dist/vue-llm.css":"./dist/vue-llm.css","./styles/variables.css":"./src/styles/variables.css","./styles/components.css":"./src/styles/components.css"},"gitHead":"07178d26475327620bb5bdc3e5338cd473ed6e0a","scripts":{"dev":"vite build --watch","build":"vite build","test:caching":"node test/caching.mjs","test:providers":"node test/providers.mjs"},"_npmUser":{"name":"anvaka","email":"anvaka@gmail.com"},"_npmVersion":"11.5.1","description":"Browser-only LLM client with provider adapters and Vue 3 components","directories":{},"_nodeVersion":"24.7.0","_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.0","@vitejs/plugin-vue":"^5.2.0"},"peerDependencies":{"vue":">=3.3.0"},"_npmOperationalInternal":{"tmp":"tmp/vue-llm_0.4.1_1783497207092_0.8881795997635378","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"@anvaka/vue-llm","version":"0.4.2","license":"MIT","_id":"@anvaka/vue-llm@0.4.2","maintainers":[{"name":"anvaka","email":"anvaka@gmail.com"}],"dist":{"shasum":"68dc4d89076940889945a761348de0d78865b8de","tarball":"https://registry.npmjs.org/@anvaka/vue-llm/-/vue-llm-0.4.2.tgz","fileCount":35,"integrity":"sha512-2HaC/SVt+7WtsW+96CuqepyorbvNm/rGTfD3vnGJERdpymGQxh/BQQC57J34cyE6bMKhdl6Q33GEmFrQk6/5ww==","signatures":[{"sig":"MEUCIH914E4OfecSAVPuCCA1yjwVeI+uNKxvHDQ+9j+jlcVKAiEA7FPLtL89aN1vMJInjDBB9saZhIwNtHaQ4My2Jte1e4s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":180807},"main":"dist/index.js","type":"module","module":"dist/index.js","exports":{".":{"import":"./dist/index.js","default":"./dist/index.js"},"./vue":{"import":"./dist/vue/index.js","default":"./dist/vue/index.js"},"./pricing":{"import":"./dist/pricing/index.js","default":"./dist/pricing/index.js"},"./providers":{"import":"./dist/providers/index.js","default":"./dist/providers/index.js"},"./dist/vue-llm.css":"./dist/vue-llm.css","./styles/variables.css":"./src/styles/variables.css","./styles/components.css":"./src/styles/components.css"},"gitHead":"082edf206e0429fcb09bd120c59d508100353c18","scripts":{"dev":"vite build --watch","build":"vite build","test:caching":"node test/caching.mjs","test:providers":"node test/providers.mjs"},"_npmUser":{"name":"anvaka","email":"anvaka@gmail.com"},"_npmVersion":"11.5.1","description":"Browser-only LLM client with provider adapters and Vue 3 components","directories":{},"_nodeVersion":"24.7.0","_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.0","@vitejs/plugin-vue":"^5.2.0"},"peerDependencies":{"vue":">=3.3.0"},"_npmOperationalInternal":{"tmp":"tmp/vue-llm_0.4.2_1784171009896_0.1959425335468925","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@anvaka/vue-llm","version":"0.5.0","license":"MIT","_id":"@anvaka/vue-llm@0.5.0","maintainers":[{"name":"anvaka","email":"anvaka@gmail.com"}],"dist":{"shasum":"60685c2cca7218c5cc09aebcafb4e1f1b28b355e","tarball":"https://registry.npmjs.org/@anvaka/vue-llm/-/vue-llm-0.5.0.tgz","fileCount":35,"integrity":"sha512-lmobfoXz6stph1d06ZC/lHQVvljkj/aLkC4qdQVDKnXC2/rfrn1SzTBP5XlZ4uwUlDE6dgf8XZ4KV5U0BU7rSA==","signatures":[{"sig":"MEUCIDRq4DzxJkwvqNV4wjiQSL7dcavfbxAbM4uvEavSOktwAiEA4k63WjQuhK2+7aK8OVDzd5TayaPNxqYgLfhv8fyL3+E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":183871},"main":"dist/index.js","type":"module","module":"dist/index.js","exports":{".":{"import":"./dist/index.js","default":"./dist/index.js"},"./vue":{"import":"./dist/vue/index.js","default":"./dist/vue/index.js"},"./pricing":{"import":"./dist/pricing/index.js","default":"./dist/pricing/index.js"},"./providers":{"import":"./dist/providers/index.js","default":"./dist/providers/index.js"},"./dist/vue-llm.css":"./dist/vue-llm.css","./styles/variables.css":"./src/styles/variables.css","./styles/components.css":"./src/styles/components.css"},"gitHead":"15ba2412a4744519c9c1db2d57b26d13a5e6d995","scripts":{"dev":"vite build --watch","demo":"vite --config demo/vite.config.js","build":"vite build","demo:build":"vite build --config demo/vite.config.js","test:caching":"node test/caching.mjs","test:providers":"node test/providers.mjs","test:reasoning":"node test/reasoning.mjs"},"_npmUser":{"name":"anvaka","email":"anvaka@gmail.com"},"_npmVersion":"11.5.1","description":"Browser-only LLM client with provider adapters and Vue 3 components","directories":{},"_nodeVersion":"24.7.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.40","vite":"^6.0.0","@vitejs/plugin-vue":"^5.2.0"},"peerDependencies":{"vue":">=3.3.0"},"_npmOperationalInternal":{"tmp":"tmp/vue-llm_0.5.0_1784445989385_0.18483034479391436","host":"s3://npm-registry-packages-npm-production"}},"0.5.2":{"name":"@anvaka/vue-llm","version":"0.5.2","description":"Browser-only LLM client with provider adapters and Vue 3 components","type":"module","license":"MIT","main":"dist/index.js","module":"dist/index.js","scripts":{"build":"vite build","prepublishOnly":"npm run build","dev":"vite build --watch","demo":"vite --config demo/vite.config.js","demo:build":"vite build --config demo/vite.config.js","test:providers":"node test/providers.mjs","test:caching":"node test/caching.mjs","test:reasoning":"node test/reasoning.mjs"},"exports":{".":{"import":"./dist/index.js","default":"./dist/index.js"},"./vue":{"import":"./dist/vue/index.js","default":"./dist/vue/index.js"},"./providers":{"import":"./dist/providers/index.js","default":"./dist/providers/index.js"},"./pricing":{"import":"./dist/pricing/index.js","default":"./dist/pricing/index.js"},"./styles/variables.css":"./src/styles/variables.css","./styles/components.css":"./src/styles/components.css","./dist/vue-llm.css":"./dist/vue-llm.css"},"peerDependencies":{"vue":">=3.3.0"},"devDependencies":{"@vitejs/plugin-vue":"^5.2.0","vite":"^6.0.0","vue":"^3.5.40"},"_id":"@anvaka/vue-llm@0.5.2","gitHead":"8f1d422aa92d6479d89a5e7637ea4a5d568cb35c","_nodeVersion":"24.7.0","_npmVersion":"11.5.1","dist":{"integrity":"sha512-CijHPoSmCTsP3nvUxYXd6UECQjuRvCljZRpa9c/qi6a+iUmFAFZiDPfjflA7O1N2lIu9FfQQZIz/Bz+CGZ7efQ==","shasum":"d76776e495d6d9b080e13fb903d6d417eee8cc8c","tarball":"https://registry.npmjs.org/@anvaka/vue-llm/-/vue-llm-0.5.2.tgz","fileCount":36,"unpackedSize":194306,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCICq4WEtJ+vAGlzWYbR42E75GRQ3rhOWy+JBuiHJ2xwDVAiB/5DHUF3fs7WV5gCqVvMTmPVrTYxFLLLAGd0q2EXFBLQ=="}]},"_npmUser":{"name":"anvaka","email":"anvaka@gmail.com"},"directories":{},"maintainers":[{"name":"anvaka","email":"anvaka@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/vue-llm_0.5.2_1784472717796_0.870843624270542"},"_hasShrinkwrap":false}},"time":{"created":"2025-12-16T08:54:58.546Z","modified":"2026-07-19T14:51:58.126Z","0.1.0":"2025-12-16T08:54:58.734Z","0.1.1":"2025-12-16T09:25:12.743Z","0.1.2":"2026-02-08T05:55:15.711Z","0.2.0":"2026-05-22T04:23:24.090Z","0.3.0":"2026-05-27T06:30:45.121Z","0.3.1":"2026-05-31T16:02:31.963Z","0.3.2":"2026-06-09T05:59:09.129Z","0.4.0":"2026-07-04T21:53:21.216Z","0.4.1":"2026-07-08T07:53:27.246Z","0.4.2":"2026-07-16T03:03:30.049Z","0.5.0":"2026-07-19T07:26:29.516Z","0.5.2":"2026-07-19T14:51:57.957Z"},"license":"MIT","description":"Browser-only LLM client with provider adapters and Vue 3 components","maintainers":[{"name":"anvaka","email":"anvaka@gmail.com"}],"readme":"# @anvaka/vue-llm (WIP)\n\nBrowser-only LLM client + Vue 3 plugin, provider adapters, and lightweight components.\n\n## Features\n- Provider factory with 10 built-in providers (OpenAI, Anthropic, AWS, Grok, Gemini, Ollama, Llama Server, OpenRouter, DeepSeek, Custom) – extend with `registerProvider()`\n- **AWS** runs on the Bedrock Mantle endpoint and exposes the entire catalog (Claude, GPT-OSS, Qwen, Mistral, Gemma, …) from one model list — each request is routed to the right API surface automatically (Claude → Anthropic Messages, everything else → OpenAI Chat Completions)\n- LocalStorage-based config store (custom storage adapter supported)\n- Streaming + promise requests via `llmClient.stream()`\n- Normalized usage + USD cost on every response (override built-in rates per app or per model)\n- Automatic prompt caching for Claude (Anthropic + Bedrock) — caches the system+tools prefix, plus the rolling conversation in agent loops; opt out with `promptCache: false`\n- Vue plugin for dependency injection\n- `useLLM()` composable with reactive streaming state\n- Ready-to-use components: `ProviderSelector`, `LLMConfigModal`, `StoredKeysManager`\n- CSS variable theming (`--llm-*` tokens)\n\n## Quick Start\n```js\nimport { createApp } from 'vue'\nimport App from './App.vue'\nimport { LLMPlugin } from '@anvaka/vue-llm'\nimport '@anvaka/vue-llm/styles/variables.css'\n\ncreateApp(App)\n  .use(LLMPlugin, { autoInit: false, namespace: 'myllm' })\n  .mount('#app')\n```\n\n## Components\n\n### ProviderSelector\nDropdown to switch between configured providers.\n```vue\n<script setup>\nimport { ProviderSelector } from '@anvaka/vue-llm'\n</script>\n<template>\n  <ProviderSelector @changed=\"onProviderChanged\" @open-config=\"showModal = true\" />\n</template>\n```\n\n### LLMConfigModal\nFull configuration modal for managing providers (add, edit, test, delete).\n```vue\n<script setup>\nimport { ref } from 'vue'\nimport { LLMConfigModal } from '@anvaka/vue-llm'\nconst showConfig = ref(false)\n</script>\n<template>\n  <LLMConfigModal \n    :is-visible=\"showConfig\" \n    @close=\"showConfig = false\"\n    @config-changed=\"onConfigChanged\" \n  />\n</template>\n```\n\nProps:\n- `isVisible` (Boolean) – controls modal visibility\n- `editTarget` (Object) – optional config to edit directly\n- `showJudge` (Boolean) – enable judge mode UI\n- `showAllMode` (Boolean) – show all providers including disabled\n\nEvents:\n- `close` – emitted when modal closes\n- `configChanged` – emitted when a provider config is saved/deleted\n\n### StoredKeysManager\nManage stored API keys separately from provider configs.\n```vue\n<script setup>\nimport { StoredKeysManager } from '@anvaka/vue-llm'\n</script>\n<template>\n  <StoredKeysManager @close=\"closeManager\" @keysUpdated=\"refreshUI\" />\n</template>\n```\n\n## useLLM Composable\nAccess the LLM client, config store, and key store with reactive helpers.\n```js\nimport { useLLM } from '@anvaka/vue-llm'\n\nconst {\n  // Core objects\n  client,              // LLMClient instance\n  configStore,         // ConfigStore instance\n  keyStore,            // KeyStore instance\n\n  // Streaming with reactive state\n  stream,              // (messages, options) => Promise - stream with reactive updates\n  isStreaming,         // ref<boolean>\n  streamContent,       // ref<string> - accumulated response\n  streamThinking,      // ref<string> - accumulated thinking content\n\n  // Config management\n  getEnabledConfigs,   // () => config[] - enabled providers only\n  getAllConfigs,       // () => config[] - all providers including disabled\n  getActiveConfig,     // () => config | null\n  getActiveProviderId, // () => string | null\n  setActiveProviderId, // (id) => boolean\n  saveConfig,          // (id, config) => boolean\n  deleteConfig,        // (id) => boolean\n  enableProvider,      // (id) => boolean\n  disableProvider,     // (id) => boolean\n  getAvailableModels,  // (providerType, config) => Promise<string[]>\n  testConnection,      // (config) => Promise<string>\n  refresh,             // () => Promise<void>\n\n  // Key management\n  getStoredKey,        // (id) => string | null\n  storeKey,            // (id, apiKey, options) => boolean\n  deleteStoredKey,     // (id) => boolean\n  hasStoredKey,        // (providerType) => boolean\n  getAllStoredKeys,    // () => Record<string, KeyData>\n  getStoredKeyMeta     // (id) => KeyMeta | null\n} = useLLM()\n```\n\n## Non-Vue Usage\nFor scripts outside Vue components, use the singleton exports:\n```js\nimport { llmClient, configStore, keyStore } from '@anvaka/vue-llm'\n\n// Stream directly\nconst { content, usage, cost } = await llmClient.stream(\n  { messages: [...] },\n  chunk => console.log(chunk.fullContent)\n)\n\n// Manage configs\nconfigStore.saveConfig('my-provider', { ... })\nconfigStore.setActiveProviderId('my-provider')\n```\n\n## Usage & Cost\n\nEvery response carries a normalized `usage` object and a USD `cost` breakdown when the model's rates are known. Stream chunks expose a running `fullUsage` so consumers can render a live cost counter.\n\n```js\nconst { content, usage, cost } = await client.stream({ messages: [...] })\n\nusage // { inputTokens, outputTokens, totalTokens,\n      //   cachedInputTokens?, cacheCreationInputTokens?, reasoningTokens?, raw }\ncost  // { total, input, cachedInput, cacheCreation, output, currency, rates }\n      // or null when the model isn't in the rates table\n```\n\n`runAgentLoop` aggregates usage across all iterations (each tool round-trip is one call) and emits a `usage` event per iteration:\n\n```js\nconst { messages, usage, cost } = await client.runAgentLoop({\n  messages: [{ role: 'user', content: '7 * 11?' }],\n  tools, executors,\n  onEvent: ev => {\n    if (ev.type === 'usage') console.log(`iter cost: ${ev.cost?.total}`)\n  }\n})\n```\n\n### Prompt caching (Claude)\n\nAnthropic and Bedrock requests are sent with `cache_control` markers by default, so repeated prefixes are read from cache instead of re-billed at full input price. Two prefixes are tagged:\n\n- **System + tools** — on every Claude request. The static prefix recurs identically across calls and runs within the cache TTL (~5 min).\n- **Rolling conversation** — added by `runAgentLoop` only, since it re-sends the whole growing transcript each turn. Iteration *N* reads iterations `1..N-1` from cache and only writes the new turn.\n\nCache hits and writes surface in the usual `usage` fields (`cachedInputTokens`, `cacheCreationInputTokens`) and are priced via the `cachedInput` / `cacheCreation` rate keys. No setup is required — prefixes under the model's minimum cacheable length simply aren't cached (no error).\n\nDisable it per call or per provider config:\n\n```js\nclient.stream({ messages: [...], promptCache: false })   // single request\nconfigStore.saveConfig('claude', { ...cfg, promptCache: false }) // all requests for this provider\n```\n\n### Overriding rates\n\nBuilt-in rates are sourced from public pricing pages and *will* drift. Three ways to override, in priority order:\n\n```js\n// 1. Per-instance — wins over everything\nimport { LLMClient } from '@anvaka/vue-llm'\nconst client = new LLMClient({\n  pricing: {\n    openai: { 'gpt-4o': { input: 1.50, output: 6.00, cachedInput: 0.75 } }\n  }\n})\n\n// 2. Global runtime override\nimport { registerPricing } from '@anvaka/vue-llm'\nregisterPricing('openai', 'gpt-4o', { input: 1.50, output: 6.00 })\n\n// 3. Inline (without LLMClient)\nimport { calculateCost } from '@anvaka/vue-llm/pricing'\nconst cost = calculateCost(usage, { provider: 'openai', model: 'gpt-4o' })\n```\n\nRate keys: `input` (uncached prompt, per 1M tokens, USD), `output`, optional `cachedInput` (prompt-cache hits — defaults to `input` if omitted), optional `cacheCreation` (Anthropic-only cache-write premium).\n\nModel lookup is exact match first, then longest-prefix match — so registering `claude-haiku-4-5` automatically covers `claude-haiku-4-5-20251001`.\n\n```js\n// Pricing-only import (no Vue):\nimport { calculateCost, formatCost, registerPricing, DEFAULT_RATES } from '@anvaka/vue-llm/pricing'\nformatCost(0.00012) // \"$0.000120\"\n```\n\n## Reasoning effort\n\nReasoning models expose a graded **effort** control — how hard the model thinks before answering. It's a sub-setting of thinking: it only takes effect when `enableThinking` is on, and it's clamped to whatever levels the chosen model actually supports.\n\n```js\nconst { content, thinking, usage } = await client.stream({\n  messages: [{ role: 'user', content: 'Prove n^5 - n is divisible by 30.' }],\n  enableThinking: true,      // required — effort does nothing without it\n  reasoningEffort: 'high'    // 'minimal' | 'low' | 'medium' | 'high' | 'xhigh' | 'max'\n})\n\nthinking // the model's reasoning text, when the provider returns it (see below)\nusage.reasoningTokens // reasoning-token count, when reported\n```\n\nYou can also set `reasoningEffort` on a provider config (via `LLMConfigModal` or `saveConfig`) as the default for every request; a per-call value overrides it.\n\n**Supported levels are a property of the model** (see `src/providers/reasoningPolicy.js`), and the request carries the level whichever transport reaches the model — native, Bedrock (`anthropic.claude-*`), or an OpenRouter proxy id (`anthropic/claude-*`):\n\n| Model family | Levels |\n| --- | --- |\n| Claude Opus 4.7+, Sonnet/Opus/Fable 5 | `low` · `medium` · `high` · `xhigh` · `max` |\n| Claude Opus 4.6 | `low` · `medium` · `high` · `max` |\n| OpenAI `gpt-5` | `minimal` · `low` · `medium` · `high` |\n| OpenAI o-series | `low` · `medium` · `high` |\n| everything else | none (control hidden) |\n\nA requested level outside a model's range is snapped to the nearest supported one (`max` → `high` on gpt-5, etc.). `supportsReasoningEffort(model)` / `effortLevelsFor(model)` are exported from `@anvaka/vue-llm/providers` to drive UI.\n\nEach transport spells effort in its own wire field (handled for you): OpenAI Chat `reasoning_effort`, OpenAI Responses `reasoning.effort`, OpenRouter `reasoning: { enabled, effort }`, Anthropic/Bedrock `output_config: { effort }` alongside `thinking: { type: 'adaptive' }`.\n\n### Seeing the reasoning text (Claude / Bedrock)\n\nClaude only returns **readable** thinking text when the request asks for it via `thinking.display: 'summarized'` — which this library sends automatically. On Opus 4.7+ the display defaults to `omitted`, which returns an empty thinking block with only an encrypted `signature` (Opus 4.6 defaulted to `summarized`). If you build requests by hand, remember to set it or the reasoning will be invisible even though it ran and was billed.\n\nTwo more things worth knowing:\n\n- **Adaptive thinking may skip thinking** on easy prompts (0 reasoning tokens, empty `thinking`) even at high effort — the model decides. Use a genuinely hard prompt to see it engage.\n- **DeepSeek reasoner** returns reasoning text too (mapped from `reasoning_content`). Grok/Gemini/OpenAI reasoning models report token counts but not always text.\n\n## Theming\nOverride any `--llm-*` CSS variable globally or per container.\n```css\n:root { --llm-accent: #ff7e41; }\nhtml[data-theme='light'] { --llm-bg: #fff; }\n```\n\n## Extending Providers\n```js\nimport { BaseProvider, registerProvider } from '@anvaka/vue-llm/providers'\n\nclass MyProvider extends BaseProvider { \n  /* implement abstract methods */ \n}\nregisterProvider('my-provider', MyProvider)\n```\n\n### Available Exports\n```js\n// From '@anvaka/vue-llm/providers'\nimport { \n  BaseProvider,\n  PROVIDERS,           // { OPENAI, ANTHROPIC, BEDROCK, GROK, GEMINI, OLLAMA, LLAMA_SERVER, OPENROUTER, DEEPSEEK, CUSTOM }\n  DEFAULT_CONFIGS,     // Default configs for each provider type\n  createProvider,      // (type, config) => Provider\n  registerProvider,    // (type, ProviderClass) => void\n  createProviderFlexible // (type, config) => Provider (includes custom-registered)\n} from '@anvaka/vue-llm/providers'\n\n// Helper for creating config objects\nimport { createDefaultConfig } from '@anvaka/vue-llm'\nconst config = createDefaultConfig('openai') // Returns template config object\n```\n\n## License\nMIT\n","readmeFilename":"README.md"}