{"_id":"@earendil-works/pi-ai","_rev":"62-274005a68c0459c6e026cd082c537d45","name":"@earendil-works/pi-ai","dist-tags":{"legacy-node20":"0.74.2","latest":"1.4.0"},"versions":{"0.74.0":{"name":"@earendil-works/pi-ai","version":"0.74.0","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@earendil-works/pi-ai@0.74.0","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"}],"homepage":"https://github.com/earendil-works/pi-mono#readme","bugs":{"url":"https://github.com/earendil-works/pi-mono/issues"},"bin":{"pi-ai":"dist/cli.js"},"dist":{"shasum":"68ab0e83c42215c6764bdf6cd5e4316915bb0ea9","tarball":"https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.74.0.tgz","fileCount":178,"integrity":"sha512-7M7qcrZY/KEkH4wFkX3eqzvmKru4O88wezNKoN0KD2m4aAOmp9tdW2xCmUgSTSWlKB7b2Xw9QtAgrzHtg6t6iw==","signatures":[{"sig":"MEUCIQCfM4RtwsSYYV5nTEJOlwZrfdj8Sm3GUUz2jDB6neNJdgIgJbznaqvUJa8xdh//4Z1GOs3lLKwShxeIT3Oi8WA/Vlg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4256458},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./google":{"types":"./dist/providers/google.d.ts","import":"./dist/providers/google.js"},"./mistral":{"types":"./dist/providers/mistral.d.ts","import":"./dist/providers/mistral.js"},"./anthropic":{"types":"./dist/providers/anthropic.d.ts","import":"./dist/providers/anthropic.js"},"./google-vertex":{"types":"./dist/providers/google-vertex.d.ts","import":"./dist/providers/google-vertex.js"},"./bedrock-provider":{"types":"./dist/bedrock-provider.d.ts","import":"./dist/bedrock-provider.js"},"./openai-responses":{"types":"./dist/providers/openai-responses.d.ts","import":"./dist/providers/openai-responses.js"},"./openai-completions":{"types":"./dist/providers/openai-completions.d.ts","import":"./dist/providers/openai-completions.js"},"./azure-openai-responses":{"types":"./dist/providers/azure-openai-responses.d.ts","import":"./dist/providers/azure-openai-responses.js"},"./openai-codex-responses":{"types":"./dist/providers/openai-codex-responses.d.ts","import":"./dist/providers/openai-codex-responses.js"}},"gitHead":"1eee081e29c1323c40b98db11d0a62b919831881","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","test":"vitest --run","build":"npm run generate-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","dev:tsc":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","prepublishOnly":"npm run clean && npm run build","generate-models":"npx tsx scripts/generate-models.ts"},"_npmUser":{"name":"badlogic","email":"mario@badlogicgames.com"},"repository":{"url":"git+https://github.com/earendil-works/pi-mono.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.10.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"25.2.1","dependencies":{"chalk":"^5.6.2","openai":"6.26.0","undici":"^7.19.1","typebox":"^1.1.24","proxy-agent":"^6.5.0","partial-json":"^0.1.7","@google/genai":"^1.40.0","@anthropic-ai/sdk":"^0.91.1","zod-to-json-schema":"^3.24.6","@mistralai/mistralai":"^2.2.0","@aws-sdk/client-bedrock-runtime":"^3.1030.0"},"_hasShrinkwrap":false,"devDependencies":{"canvas":"^3.2.0","vitest":"^3.2.4","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-ai_0.74.0_1778166937280_0.8820072883594583","host":"s3://npm-registry-packages-npm-production"}},"0.74.1":{"name":"@earendil-works/pi-ai","version":"0.74.1","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@earendil-works/pi-ai@0.74.1","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"}],"homepage":"https://github.com/earendil-works/pi-mono#readme","bugs":{"url":"https://github.com/earendil-works/pi-mono/issues"},"bin":{"pi-ai":"dist/cli.js"},"dist":{"shasum":"0cbb2a800e8ee5dccead07decde4595cfcc17ba1","tarball":"https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.74.1.tgz","fileCount":206,"integrity":"sha512-xBgJnsrB+eCIsEB2rQ+aD/goGDo/YJMzQoICyL+ltHSB0SVQDgawjCzNF1IuRCzvUFceqZGJETUiejfWRDUe0Q==","signatures":[{"sig":"MEQCIFK+PGp57uinOMYCI0A9og1CieE6oihAxo2KNJ8U8ncIAiBU3gBIGVSzYeVZ3wzStLn1tfJoD/JMCYiKS4Tzrm9XzA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4390102},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./google":{"types":"./dist/providers/google.d.ts","import":"./dist/providers/google.js"},"./mistral":{"types":"./dist/providers/mistral.d.ts","import":"./dist/providers/mistral.js"},"./anthropic":{"types":"./dist/providers/anthropic.d.ts","import":"./dist/providers/anthropic.js"},"./google-vertex":{"types":"./dist/providers/google-vertex.d.ts","import":"./dist/providers/google-vertex.js"},"./bedrock-provider":{"types":"./dist/bedrock-provider.d.ts","import":"./dist/bedrock-provider.js"},"./openai-responses":{"types":"./dist/providers/openai-responses.d.ts","import":"./dist/providers/openai-responses.js"},"./openai-completions":{"types":"./dist/providers/openai-completions.d.ts","import":"./dist/providers/openai-completions.js"},"./azure-openai-responses":{"types":"./dist/providers/azure-openai-responses.d.ts","import":"./dist/providers/azure-openai-responses.js"},"./openai-codex-responses":{"types":"./dist/providers/openai-codex-responses.d.ts","import":"./dist/providers/openai-codex-responses.js"}},"gitHead":"a015c15f5f1b572bbe8cdc00eda907193f986b53","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","test":"vitest --run","build":"npm run generate-models && npm run generate-image-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","dev:tsc":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","prepublishOnly":"npm run clean && npm run build","generate-models":"npx tsx scripts/generate-models.ts","generate-image-models":"npx tsx scripts/generate-image-models.ts"},"_npmUser":{"name":"badlogic","email":"mario@badlogicgames.com"},"repository":{"url":"git+https://github.com/earendil-works/pi-mono.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.10.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"25.2.1","dependencies":{"openai":"6.26.0","typebox":"^1.1.24","partial-json":"^0.1.7","@google/genai":"^1.40.0","http-proxy-agent":"^7.0.2","@anthropic-ai/sdk":"^0.91.1","https-proxy-agent":"^7.0.6","@mistralai/mistralai":"^2.2.0","@aws-sdk/client-bedrock-runtime":"^3.1030.0"},"_hasShrinkwrap":false,"devDependencies":{"canvas":"^3.2.0","vitest":"^3.2.4","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-ai_0.74.1_1778974490586_0.5821870326825604","host":"s3://npm-registry-packages-npm-production"}},"0.75.0":{"name":"@earendil-works/pi-ai","version":"0.75.0","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@earendil-works/pi-ai@0.75.0","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"}],"homepage":"https://github.com/earendil-works/pi-mono#readme","bugs":{"url":"https://github.com/earendil-works/pi-mono/issues"},"bin":{"pi-ai":"dist/cli.js"},"dist":{"shasum":"61764ce26a3860636fd06f2c719c587a77967e19","tarball":"https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.75.0.tgz","fileCount":206,"integrity":"sha512-mWSYHAjGQPs8fr+OjWXC/HvPAgybzuwqe4aFy69DZpc6a19NlaNvHLEUjqzMqQwS1vaQE36kPn0yk7CZE2aznw==","signatures":[{"sig":"MEYCIQCSHRqTdWL//LJitjNbeRIXYfLhzkOgbM8pltoEenIDKgIhAOx04ZcoX38lpiCxz0jWTyIL+SpdjVrhglAvaJ10ey29","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4389703},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./google":{"types":"./dist/providers/google.d.ts","import":"./dist/providers/google.js"},"./mistral":{"types":"./dist/providers/mistral.d.ts","import":"./dist/providers/mistral.js"},"./anthropic":{"types":"./dist/providers/anthropic.d.ts","import":"./dist/providers/anthropic.js"},"./google-vertex":{"types":"./dist/providers/google-vertex.d.ts","import":"./dist/providers/google-vertex.js"},"./bedrock-provider":{"types":"./dist/bedrock-provider.d.ts","import":"./dist/bedrock-provider.js"},"./openai-responses":{"types":"./dist/providers/openai-responses.d.ts","import":"./dist/providers/openai-responses.js"},"./openai-completions":{"types":"./dist/providers/openai-completions.d.ts","import":"./dist/providers/openai-completions.js"},"./azure-openai-responses":{"types":"./dist/providers/azure-openai-responses.d.ts","import":"./dist/providers/azure-openai-responses.js"},"./openai-codex-responses":{"types":"./dist/providers/openai-codex-responses.d.ts","import":"./dist/providers/openai-codex-responses.js"}},"gitHead":"12f5c00cc1332e04d18e2120b71731627174bcc7","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","test":"vitest --run","build":"npm run generate-models && npm run generate-image-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","dev:tsc":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","prepublishOnly":"npm run clean && npm run build","generate-models":"npx tsx scripts/generate-models.ts","generate-image-models":"npx tsx scripts/generate-image-models.ts"},"_npmUser":{"name":"badlogic","email":"mario@badlogicgames.com"},"repository":{"url":"git+https://github.com/earendil-works/pi-mono.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.10.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"25.2.1","dependencies":{"openai":"6.26.0","typebox":"^1.1.24","partial-json":"^0.1.7","@google/genai":"^1.40.0","http-proxy-agent":"^7.0.2","@anthropic-ai/sdk":"^0.91.1","https-proxy-agent":"^7.0.6","@mistralai/mistralai":"^2.2.0","@aws-sdk/client-bedrock-runtime":"^3.1030.0"},"_hasShrinkwrap":false,"devDependencies":{"canvas":"^3.2.0","vitest":"^3.2.4","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-ai_0.75.0_1779044607294_0.2932761040987837","host":"s3://npm-registry-packages-npm-production"}},"0.75.1":{"name":"@earendil-works/pi-ai","version":"0.75.1","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@earendil-works/pi-ai@0.75.1","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"}],"homepage":"https://github.com/earendil-works/pi-mono#readme","bugs":{"url":"https://github.com/earendil-works/pi-mono/issues"},"bin":{"pi-ai":"dist/cli.js"},"dist":{"shasum":"49ab8bdb6e937921d59ccf014268781693efd81b","tarball":"https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.75.1.tgz","fileCount":206,"integrity":"sha512-/bhCWS2R+qHLBDnN+d1t1QRUxtZk7sZpMcrlexPq3W++3bJ0Df0GjhM2FToTubhoCsjOBdBOuRYcV8FNPfRUVQ==","signatures":[{"sig":"MEUCICDDCyNjPtj20SSHSU1jklFPSQ1ri1FWI4cQsfDvh7m4AiEA0EoTS1Q86bFhLTTQ5y6MOLHBGstA3xp6R/4slJh0Hn8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4386155},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./google":{"types":"./dist/providers/google.d.ts","import":"./dist/providers/google.js"},"./mistral":{"types":"./dist/providers/mistral.d.ts","import":"./dist/providers/mistral.js"},"./anthropic":{"types":"./dist/providers/anthropic.d.ts","import":"./dist/providers/anthropic.js"},"./google-vertex":{"types":"./dist/providers/google-vertex.d.ts","import":"./dist/providers/google-vertex.js"},"./bedrock-provider":{"types":"./dist/bedrock-provider.d.ts","import":"./dist/bedrock-provider.js"},"./openai-responses":{"types":"./dist/providers/openai-responses.d.ts","import":"./dist/providers/openai-responses.js"},"./openai-completions":{"types":"./dist/providers/openai-completions.d.ts","import":"./dist/providers/openai-completions.js"},"./azure-openai-responses":{"types":"./dist/providers/azure-openai-responses.d.ts","import":"./dist/providers/azure-openai-responses.js"},"./openai-codex-responses":{"types":"./dist/providers/openai-codex-responses.d.ts","import":"./dist/providers/openai-codex-responses.js"}},"gitHead":"73a61654af52f8b02439d697a3b74126fa6b6782","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","test":"vitest --run","build":"npm run generate-models && npm run generate-image-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","dev:tsc":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","prepublishOnly":"npm run clean && npm run build","generate-models":"npx tsx scripts/generate-models.ts","generate-image-models":"npx tsx scripts/generate-image-models.ts"},"_npmUser":{"name":"badlogic","email":"mario@badlogicgames.com"},"repository":{"url":"git+https://github.com/earendil-works/pi-mono.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.10.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"25.2.1","dependencies":{"openai":"6.26.0","typebox":"^1.1.24","partial-json":"^0.1.7","@google/genai":"^1.40.0","http-proxy-agent":"^7.0.2","@anthropic-ai/sdk":"^0.91.1","https-proxy-agent":"^7.0.6","@mistralai/mistralai":"^2.2.0","@aws-sdk/client-bedrock-runtime":"^3.1030.0"},"_hasShrinkwrap":false,"devDependencies":{"canvas":"^3.2.0","vitest":"^3.2.4","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-ai_0.75.1_1779062502284_0.40741117596490617","host":"s3://npm-registry-packages-npm-production"}},"0.75.2":{"name":"@earendil-works/pi-ai","version":"0.75.2","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@earendil-works/pi-ai@0.75.2","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"}],"homepage":"https://github.com/earendil-works/pi-mono#readme","bugs":{"url":"https://github.com/earendil-works/pi-mono/issues"},"bin":{"pi-ai":"dist/cli.js"},"dist":{"shasum":"1756df00c136a606175fb8d8274cdf3705ebd98f","tarball":"https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.75.2.tgz","fileCount":206,"integrity":"sha512-OjMXTrNDMwIDJ6GN3u5AtJ/ML0gsc9BrlyIpcWrYy22ebamLJC+SXi1xESvLsoFFRcLXSN7tULOZ1ZGIPJklew==","signatures":[{"sig":"MEUCIQDSstogyoHjFpGsQ5Ilha2uB6fCbJbVX+kfai2ZvmTavgIgM9qV052pYfnMJq39170IEFG4ln4YSz6zPD358uj3LzE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4396755},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./google":{"types":"./dist/providers/google.d.ts","import":"./dist/providers/google.js"},"./mistral":{"types":"./dist/providers/mistral.d.ts","import":"./dist/providers/mistral.js"},"./anthropic":{"types":"./dist/providers/anthropic.d.ts","import":"./dist/providers/anthropic.js"},"./google-vertex":{"types":"./dist/providers/google-vertex.d.ts","import":"./dist/providers/google-vertex.js"},"./bedrock-provider":{"types":"./dist/bedrock-provider.d.ts","import":"./dist/bedrock-provider.js"},"./openai-responses":{"types":"./dist/providers/openai-responses.d.ts","import":"./dist/providers/openai-responses.js"},"./openai-completions":{"types":"./dist/providers/openai-completions.d.ts","import":"./dist/providers/openai-completions.js"},"./azure-openai-responses":{"types":"./dist/providers/azure-openai-responses.d.ts","import":"./dist/providers/azure-openai-responses.js"},"./openai-codex-responses":{"types":"./dist/providers/openai-codex-responses.d.ts","import":"./dist/providers/openai-codex-responses.js"}},"gitHead":"ea713ba1744e5cf1c5a1914a8d7e7328583042e1","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","test":"vitest --run","build":"npm run generate-models && npm run generate-image-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","dev:tsc":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","prepublishOnly":"npm run clean && npm run build","generate-models":"npx tsx scripts/generate-models.ts","generate-image-models":"npx tsx scripts/generate-image-models.ts"},"_npmUser":{"name":"badlogic","email":"mario@badlogicgames.com"},"repository":{"url":"git+https://github.com/earendil-works/pi-mono.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.10.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"25.2.1","dependencies":{"openai":"6.26.0","typebox":"^1.1.24","partial-json":"^0.1.7","@google/genai":"^1.40.0","http-proxy-agent":"^7.0.2","@anthropic-ai/sdk":"^0.91.1","https-proxy-agent":"^7.0.6","@mistralai/mistralai":"^2.2.0","@aws-sdk/client-bedrock-runtime":"^3.1030.0"},"_hasShrinkwrap":false,"devDependencies":{"canvas":"^3.2.0","vitest":"^3.2.4","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-ai_0.75.2_1779097622356_0.9642443351287178","host":"s3://npm-registry-packages-npm-production"}},"0.75.3":{"name":"@earendil-works/pi-ai","version":"0.75.3","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@earendil-works/pi-ai@0.75.3","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"}],"homepage":"https://github.com/earendil-works/pi-mono#readme","bugs":{"url":"https://github.com/earendil-works/pi-mono/issues"},"bin":{"pi-ai":"dist/cli.js"},"dist":{"shasum":"a82793dd4ee601d3ff0a09156154a8b934792cfd","tarball":"https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.75.3.tgz","fileCount":206,"integrity":"sha512-UKccS+ADlkSVJ49a00346jUfXmUi6zzzB+pPWotsyA6SxhKr2ejjkGQksGyR1DyNVrsEP/WWlsOSTUUwVlzNaA==","signatures":[{"sig":"MEYCIQCDbDxb9/Bxg/xNT4sm+3a9qVO58fw0kFtlvpc23JZ4IQIhAOozk/qIfG+C14+pG1OU2b9I7jRm5F9dx5MvkemcYM2W","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4396755},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./google":{"types":"./dist/providers/google.d.ts","import":"./dist/providers/google.js"},"./mistral":{"types":"./dist/providers/mistral.d.ts","import":"./dist/providers/mistral.js"},"./anthropic":{"types":"./dist/providers/anthropic.d.ts","import":"./dist/providers/anthropic.js"},"./google-vertex":{"types":"./dist/providers/google-vertex.d.ts","import":"./dist/providers/google-vertex.js"},"./bedrock-provider":{"types":"./dist/bedrock-provider.d.ts","import":"./dist/bedrock-provider.js"},"./openai-responses":{"types":"./dist/providers/openai-responses.d.ts","import":"./dist/providers/openai-responses.js"},"./openai-completions":{"types":"./dist/providers/openai-completions.d.ts","import":"./dist/providers/openai-completions.js"},"./azure-openai-responses":{"types":"./dist/providers/azure-openai-responses.d.ts","import":"./dist/providers/azure-openai-responses.js"},"./openai-codex-responses":{"types":"./dist/providers/openai-codex-responses.d.ts","import":"./dist/providers/openai-codex-responses.js"}},"gitHead":"a7d8dd3d5db7d66aa5cc6886e32768b1196ce91f","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","test":"vitest --run","build":"npm run generate-models && npm run generate-image-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","dev:tsc":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","prepublishOnly":"npm run clean && npm run build","generate-models":"npx tsx scripts/generate-models.ts","generate-image-models":"npx tsx scripts/generate-image-models.ts"},"_npmUser":{"name":"badlogic","email":"mario@badlogicgames.com"},"repository":{"url":"git+https://github.com/earendil-works/pi-mono.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.10.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"25.2.1","dependencies":{"openai":"6.26.0","typebox":"^1.1.24","partial-json":"^0.1.7","@google/genai":"^1.40.0","http-proxy-agent":"^7.0.2","@anthropic-ai/sdk":"^0.91.1","https-proxy-agent":"^7.0.6","@mistralai/mistralai":"^2.2.0","@aws-sdk/client-bedrock-runtime":"^3.1030.0"},"_hasShrinkwrap":false,"devDependencies":{"canvas":"^3.2.0","vitest":"^3.2.4","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-ai_0.75.3_1779098350970_0.059442559183249255","host":"s3://npm-registry-packages-npm-production"}},"0.75.4":{"name":"@earendil-works/pi-ai","version":"0.75.4","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@earendil-works/pi-ai@0.75.4","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"}],"homepage":"https://github.com/earendil-works/pi-mono#readme","bugs":{"url":"https://github.com/earendil-works/pi-mono/issues"},"bin":{"pi-ai":"dist/cli.js"},"dist":{"shasum":"4e5d67b40192d78b800787e95524bdfb1dd6305e","tarball":"https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.75.4.tgz","fileCount":210,"integrity":"sha512-m/w8Hh3vQ0rAycwJiJWdzkypkn4295f4eq/966lDRy8aX5sk6bgYXH8TQmL16TO7Uwc7MbJG0QoyFHgX8RqXUQ==","signatures":[{"sig":"MEYCIQCUEVdTn2Ka2JutX2/Cq0dgJdMznErun5Licjmj/Ca+wAIhAISdigLltke8fTkENNGS6d4F6S8pvSUBkskNW6et4wX4","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4421046},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./google":{"types":"./dist/providers/google.d.ts","import":"./dist/providers/google.js"},"./mistral":{"types":"./dist/providers/mistral.d.ts","import":"./dist/providers/mistral.js"},"./anthropic":{"types":"./dist/providers/anthropic.d.ts","import":"./dist/providers/anthropic.js"},"./google-vertex":{"types":"./dist/providers/google-vertex.d.ts","import":"./dist/providers/google-vertex.js"},"./bedrock-provider":{"types":"./dist/bedrock-provider.d.ts","import":"./dist/bedrock-provider.js"},"./openai-responses":{"types":"./dist/providers/openai-responses.d.ts","import":"./dist/providers/openai-responses.js"},"./openai-completions":{"types":"./dist/providers/openai-completions.d.ts","import":"./dist/providers/openai-completions.js"},"./azure-openai-responses":{"types":"./dist/providers/azure-openai-responses.d.ts","import":"./dist/providers/azure-openai-responses.js"},"./openai-codex-responses":{"types":"./dist/providers/openai-codex-responses.d.ts","import":"./dist/providers/openai-codex-responses.js"}},"gitHead":"3533843dd781dcd233f51854fc883ec246a6a919","scripts":{"test":"vitest --run","build":"npm run generate-models && npm run generate-image-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","prepublishOnly":"npm run clean && npm run build","generate-models":"node scripts/generate-models.ts","generate-image-models":"node scripts/generate-image-models.ts"},"_npmUser":{"name":"badlogic","email":"mario@badlogicgames.com"},"repository":{"url":"git+https://github.com/earendil-works/pi-mono.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.10.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"25.2.1","dependencies":{"openai":"6.26.0","typebox":"1.1.38","partial-json":"0.1.7","@google/genai":"1.52.0","http-proxy-agent":"7.0.2","@anthropic-ai/sdk":"0.91.1","https-proxy-agent":"7.0.6","@mistralai/mistralai":"2.2.1","@aws-sdk/client-bedrock-runtime":"3.1048.0"},"_hasShrinkwrap":false,"devDependencies":{"canvas":"3.2.3","vitest":"3.2.4","@types/node":"24.12.4"},"_npmOperationalInternal":{"tmp":"tmp/pi-ai_0.75.4_1779287049830_0.6895584685848424","host":"s3://npm-registry-packages-npm-production"}},"0.74.2":{"name":"@earendil-works/pi-ai","version":"0.74.2","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@earendil-works/pi-ai@0.74.2","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"}],"homepage":"https://github.com/earendil-works/pi-mono#readme","bugs":{"url":"https://github.com/earendil-works/pi-mono/issues"},"bin":{"pi-ai":"dist/cli.js"},"dist":{"shasum":"fa8680d5b452a593b717aa6f08a0d6e1838ae092","tarball":"https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.74.2.tgz","fileCount":206,"integrity":"sha512-ukQBHGDm20k9ZUS2cGjNN9vDJp/48r35xmvgSx3paCaC06r2N/PLuRZoJmwQ1ZM7f8T3072odv9YPWn+77w0LA==","signatures":[{"sig":"MEUCIQDdhlMlbDFBiiJ9cYhm87y5aZtUtYSSAo/UCnqBZVDOiAIgSh7Y6bluIJ+x5aSodLffcEzdb3PpK62TxKnkk5zYMgk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4378594},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./google":{"types":"./dist/providers/google.d.ts","import":"./dist/providers/google.js"},"./mistral":{"types":"./dist/providers/mistral.d.ts","import":"./dist/providers/mistral.js"},"./anthropic":{"types":"./dist/providers/anthropic.d.ts","import":"./dist/providers/anthropic.js"},"./google-vertex":{"types":"./dist/providers/google-vertex.d.ts","import":"./dist/providers/google-vertex.js"},"./bedrock-provider":{"types":"./dist/bedrock-provider.d.ts","import":"./dist/bedrock-provider.js"},"./openai-responses":{"types":"./dist/providers/openai-responses.d.ts","import":"./dist/providers/openai-responses.js"},"./openai-completions":{"types":"./dist/providers/openai-completions.d.ts","import":"./dist/providers/openai-completions.js"},"./azure-openai-responses":{"types":"./dist/providers/azure-openai-responses.d.ts","import":"./dist/providers/azure-openai-responses.js"},"./openai-codex-responses":{"types":"./dist/providers/openai-codex-responses.d.ts","import":"./dist/providers/openai-codex-responses.js"}},"gitHead":"8b57630bc91a0c8f18ad3dcfa8fcf0f67623d780","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","test":"vitest --run","build":"npm run generate-models && npm run generate-image-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","dev:tsc":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","prepublishOnly":"npm run clean && npm run build","generate-models":"npx tsx scripts/generate-models.ts","generate-image-models":"npx tsx scripts/generate-image-models.ts"},"_npmUser":{"name":"badlogic","email":"mario@badlogicgames.com"},"repository":{"url":"git+https://github.com/earendil-works/pi-mono.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.10.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"25.2.1","dependencies":{"openai":"6.26.0","typebox":"^1.1.24","partial-json":"^0.1.7","@google/genai":"^1.40.0","http-proxy-agent":"^7.0.2","@anthropic-ai/sdk":"^0.91.1","https-proxy-agent":"^7.0.6","@mistralai/mistralai":"^2.2.0","@aws-sdk/client-bedrock-runtime":"^3.1030.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"canvas":"^3.2.0","vitest":"^3.2.4","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-ai_0.74.2_1779402115241_0.12205902651924605","host":"s3://npm-registry-packages-npm-production"}},"0.75.5":{"name":"@earendil-works/pi-ai","version":"0.75.5","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@earendil-works/pi-ai@0.75.5","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"}],"homepage":"https://github.com/earendil-works/pi-mono#readme","bugs":{"url":"https://github.com/earendil-works/pi-mono/issues"},"bin":{"pi-ai":"dist/cli.js"},"dist":{"shasum":"93d29b83ac1d4d2cf6d0fa1b5f368f79b1b4dbcb","tarball":"https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.75.5.tgz","fileCount":214,"integrity":"sha512-zf1F5kXk1pqZeFShXOqq9ibUk8QdtRoLCDPAjO+hj44e3EUs9/GFO2qnhTC5+JA2uwVCx+WCNe1PiCjlBYWm5w==","signatures":[{"sig":"MEYCIQCKoEShwcW+REXdkXY69HnXNhzTv+XhqExRZfi6f4D1IgIhANr0irIQqfzhJHRCzZnqK0DGeIOuvIuJ7BRe3d+fGuU+","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4387529},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./google":{"types":"./dist/providers/google.d.ts","import":"./dist/providers/google.js"},"./mistral":{"types":"./dist/providers/mistral.d.ts","import":"./dist/providers/mistral.js"},"./anthropic":{"types":"./dist/providers/anthropic.d.ts","import":"./dist/providers/anthropic.js"},"./google-vertex":{"types":"./dist/providers/google-vertex.d.ts","import":"./dist/providers/google-vertex.js"},"./bedrock-provider":{"types":"./dist/bedrock-provider.d.ts","import":"./dist/bedrock-provider.js"},"./openai-responses":{"types":"./dist/providers/openai-responses.d.ts","import":"./dist/providers/openai-responses.js"},"./openai-completions":{"types":"./dist/providers/openai-completions.d.ts","import":"./dist/providers/openai-completions.js"},"./azure-openai-responses":{"types":"./dist/providers/azure-openai-responses.d.ts","import":"./dist/providers/azure-openai-responses.js"},"./openai-codex-responses":{"types":"./dist/providers/openai-codex-responses.d.ts","import":"./dist/providers/openai-codex-responses.js"}},"gitHead":"83a227aed3f6f7d2f8a63bdd66df0bdb80cd21e2","scripts":{"test":"vitest --run","build":"npm run generate-models && npm run generate-image-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","prepublishOnly":"npm run clean && npm run build","generate-models":"node scripts/generate-models.ts","generate-image-models":"node scripts/generate-image-models.ts"},"_npmUser":{"name":"badlogic","email":"mario@badlogicgames.com"},"repository":{"url":"git+https://github.com/earendil-works/pi-mono.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.10.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"25.2.1","dependencies":{"openai":"6.26.0","typebox":"1.1.38","partial-json":"0.1.7","@google/genai":"1.52.0","http-proxy-agent":"7.0.2","@anthropic-ai/sdk":"0.91.1","https-proxy-agent":"7.0.6","@mistralai/mistralai":"2.2.1","@smithy/node-http-handler":"4.7.3","@aws-sdk/client-bedrock-runtime":"3.1048.0"},"_hasShrinkwrap":false,"devDependencies":{"canvas":"3.2.3","vitest":"3.2.4","@types/node":"24.12.4"},"_npmOperationalInternal":{"tmp":"tmp/pi-ai_0.75.5_1779530793531_0.5207650594733377","host":"s3://npm-registry-packages-npm-production"}},"0.76.0":{"name":"@earendil-works/pi-ai","version":"0.76.0","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@earendil-works/pi-ai@0.76.0","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"},{"name":"rwachtler","email":"r.wachtler@outlook.com"}],"homepage":"https://github.com/earendil-works/pi-mono#readme","bugs":{"url":"https://github.com/earendil-works/pi-mono/issues"},"bin":{"pi-ai":"dist/cli.js"},"dist":{"shasum":"e96126ac8f557c72abda61c714accbebac14c89b","tarball":"https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.76.0.tgz","fileCount":218,"integrity":"sha512-RO/L80iTxkK/nM2s5IVuirjH04UBsVzFfAT0qVcP/VwtDe9pjpqL+BVqb3XTyfitTD9tBo/hQuKmagN8Ep5qZA==","signatures":[{"sig":"MEUCIQDDxKYbBKD0R5Iu+gNIiGzMTlYsEKaiOqCSQmcz1/R70AIgT+h0O/ZFzKa6dGPzo4ztzLuS8RvAOL0GlqAq/hNuOeg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4404666},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./google":{"types":"./dist/providers/google.d.ts","import":"./dist/providers/google.js"},"./mistral":{"types":"./dist/providers/mistral.d.ts","import":"./dist/providers/mistral.js"},"./anthropic":{"types":"./dist/providers/anthropic.d.ts","import":"./dist/providers/anthropic.js"},"./google-vertex":{"types":"./dist/providers/google-vertex.d.ts","import":"./dist/providers/google-vertex.js"},"./bedrock-provider":{"types":"./dist/bedrock-provider.d.ts","import":"./dist/bedrock-provider.js"},"./openai-responses":{"types":"./dist/providers/openai-responses.d.ts","import":"./dist/providers/openai-responses.js"},"./openai-completions":{"types":"./dist/providers/openai-completions.d.ts","import":"./dist/providers/openai-completions.js"},"./azure-openai-responses":{"types":"./dist/providers/azure-openai-responses.d.ts","import":"./dist/providers/azure-openai-responses.js"},"./openai-codex-responses":{"types":"./dist/providers/openai-codex-responses.d.ts","import":"./dist/providers/openai-codex-responses.js"}},"gitHead":"706f8720f8cfe75f562b4e488681486cb70bbe9b","scripts":{"test":"vitest --run","build":"npm run generate-models && npm run generate-image-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","prepublishOnly":"npm run clean && npm run build","generate-models":"node scripts/generate-models.ts","generate-image-models":"node scripts/generate-image-models.ts"},"_npmUser":{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},"repository":{"url":"git+https://github.com/earendil-works/pi-mono.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.11.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"25.8.1","dependencies":{"openai":"6.26.0","typebox":"1.1.38","partial-json":"0.1.7","@google/genai":"1.52.0","http-proxy-agent":"7.0.2","@anthropic-ai/sdk":"0.91.1","https-proxy-agent":"7.0.6","@mistralai/mistralai":"2.2.1","@smithy/node-http-handler":"4.7.3","@aws-sdk/client-bedrock-runtime":"3.1048.0"},"_hasShrinkwrap":false,"devDependencies":{"canvas":"3.2.3","vitest":"3.2.4","@types/node":"24.12.4"},"_npmOperationalInternal":{"tmp":"tmp/pi-ai_0.76.0_1779912231846_0.360236672926892","host":"s3://npm-registry-packages-npm-production"}},"0.77.0":{"name":"@earendil-works/pi-ai","version":"0.77.0","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@earendil-works/pi-ai@0.77.0","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"},{"name":"rwachtler","email":"r.wachtler@outlook.com"}],"homepage":"https://github.com/earendil-works/pi#readme","bugs":{"url":"https://github.com/earendil-works/pi/issues"},"bin":{"pi-ai":"dist/cli.js"},"dist":{"shasum":"f56a8236ca10ae0b78b9e4464c081588c050e254","tarball":"https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.77.0.tgz","fileCount":218,"integrity":"sha512-H21BrQDPf3ydaeBmS5maNDHxUGFMiKBF/n3WnE+OTWloIZSayeL+/NVEgG3aKQw8fZL6HAMYAGpUIVJgFuKtnw==","signatures":[{"sig":"MEYCIQC2bo3mpl/8XYy6biJqqMT70COCN1489FIvuTsrOyWclAIhANPHrH/UPFJjCU+8J2vgUpquoj04rirOUWn5qa2Xf/Y2","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fpi-ai@0.77.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4454755},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./google":{"types":"./dist/providers/google.d.ts","import":"./dist/providers/google.js"},"./mistral":{"types":"./dist/providers/mistral.d.ts","import":"./dist/providers/mistral.js"},"./anthropic":{"types":"./dist/providers/anthropic.d.ts","import":"./dist/providers/anthropic.js"},"./google-vertex":{"types":"./dist/providers/google-vertex.d.ts","import":"./dist/providers/google-vertex.js"},"./bedrock-provider":{"types":"./dist/bedrock-provider.d.ts","import":"./dist/bedrock-provider.js"},"./openai-responses":{"types":"./dist/providers/openai-responses.d.ts","import":"./dist/providers/openai-responses.js"},"./openai-completions":{"types":"./dist/providers/openai-completions.d.ts","import":"./dist/providers/openai-completions.js"},"./azure-openai-responses":{"types":"./dist/providers/azure-openai-responses.d.ts","import":"./dist/providers/azure-openai-responses.js"},"./openai-codex-responses":{"types":"./dist/providers/openai-codex-responses.d.ts","import":"./dist/providers/openai-codex-responses.js"}},"gitHead":"93600d89802a253decdf2d8c3cd56fb362538f38","scripts":{"test":"vitest --run","build":"npm run generate-models && npm run generate-image-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","prepublishOnly":"npm run clean && npm run build","generate-models":"node scripts/generate-models.ts","generate-image-models":"node scripts/generate-image-models.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:975b2765-9d44-42ba-a322-c1cbbce03f36"}},"repository":{"url":"git+https://github.com/earendil-works/pi.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.16.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"22.22.3","dependencies":{"openai":"6.26.0","typebox":"1.1.38","partial-json":"0.1.7","@google/genai":"1.52.0","http-proxy-agent":"7.0.2","@anthropic-ai/sdk":"0.91.1","https-proxy-agent":"7.0.6","@mistralai/mistralai":"2.2.1","@smithy/node-http-handler":"4.7.3","@aws-sdk/client-bedrock-runtime":"3.1048.0"},"_hasShrinkwrap":false,"devDependencies":{"canvas":"3.2.3","vitest":"3.2.4","@types/node":"24.12.4"},"_npmOperationalInternal":{"tmp":"tmp/pi-ai_0.77.0_1780008532853_0.6300958544220825","host":"s3://npm-registry-packages-npm-production"}},"0.78.0":{"name":"@earendil-works/pi-ai","version":"0.78.0","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@earendil-works/pi-ai@0.78.0","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"},{"name":"rwachtler","email":"r.wachtler@outlook.com"}],"homepage":"https://github.com/earendil-works/pi#readme","bugs":{"url":"https://github.com/earendil-works/pi/issues"},"bin":{"pi-ai":"dist/cli.js"},"dist":{"shasum":"f6befb7c84e1cb04ab66eb0a19f497670d4f2b0f","tarball":"https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.78.0.tgz","fileCount":218,"integrity":"sha512-q0hUrvT6ngT6cgBX0oIbzfQfmzztgdkZobP8OTL+sCOOBlnG6+1YRt8g7zO9CC/4NdeYEqa7uGqWdQhH0fjCLA==","signatures":[{"sig":"MEUCIDmhQh/dJrrnpMdqg2s9gmBfpfhnxnXkbZHA1vTespUkAiEAhfYKd+E8UabcPK+ZkI5Kltd0Gs+xs4TVNHxN/lQr16o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fpi-ai@0.78.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4464634},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./google":{"types":"./dist/providers/google.d.ts","import":"./dist/providers/google.js"},"./mistral":{"types":"./dist/providers/mistral.d.ts","import":"./dist/providers/mistral.js"},"./anthropic":{"types":"./dist/providers/anthropic.d.ts","import":"./dist/providers/anthropic.js"},"./google-vertex":{"types":"./dist/providers/google-vertex.d.ts","import":"./dist/providers/google-vertex.js"},"./bedrock-provider":{"types":"./dist/bedrock-provider.d.ts","import":"./dist/bedrock-provider.js"},"./openai-responses":{"types":"./dist/providers/openai-responses.d.ts","import":"./dist/providers/openai-responses.js"},"./openai-completions":{"types":"./dist/providers/openai-completions.d.ts","import":"./dist/providers/openai-completions.js"},"./azure-openai-responses":{"types":"./dist/providers/azure-openai-responses.d.ts","import":"./dist/providers/azure-openai-responses.js"},"./openai-codex-responses":{"types":"./dist/providers/openai-codex-responses.d.ts","import":"./dist/providers/openai-codex-responses.js"}},"gitHead":"0897f175e4d46592c0f59b3a2d399f11b8d078af","scripts":{"test":"vitest --run","build":"npm run generate-models && npm run generate-image-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","prepublishOnly":"npm run clean && npm run build","generate-models":"node scripts/generate-models.ts","generate-image-models":"node scripts/generate-image-models.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:975b2765-9d44-42ba-a322-c1cbbce03f36"}},"repository":{"url":"git+https://github.com/earendil-works/pi.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.16.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"22.22.3","dependencies":{"openai":"6.26.0","typebox":"1.1.38","partial-json":"0.1.7","@google/genai":"1.52.0","http-proxy-agent":"7.0.2","@anthropic-ai/sdk":"0.91.1","https-proxy-agent":"7.0.6","@mistralai/mistralai":"2.2.1","@smithy/node-http-handler":"4.7.3","@aws-sdk/client-bedrock-runtime":"3.1048.0"},"_hasShrinkwrap":false,"devDependencies":{"canvas":"3.2.3","vitest":"3.2.4","@types/node":"24.12.4"},"_npmOperationalInternal":{"tmp":"tmp/pi-ai_0.78.0_1780098688497_0.9715674418805678","host":"s3://npm-registry-packages-npm-production"}},"0.78.1":{"name":"@earendil-works/pi-ai","version":"0.78.1","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@earendil-works/pi-ai@0.78.1","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"},{"name":"rwachtler","email":"r.wachtler@outlook.com"}],"homepage":"https://github.com/earendil-works/pi#readme","bugs":{"url":"https://github.com/earendil-works/pi/issues"},"bin":{"pi-ai":"dist/cli.js"},"dist":{"shasum":"8822913921db86db788f54a736726fc866c605f4","tarball":"https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.78.1.tgz","fileCount":218,"integrity":"sha512-CM2pkTs1iupG/maw381lC9Q/Y/aQaMGK7GILc28ttImD0ci3LDwKroDsGkWbly5JIy3iqxdRxB9JlG7vvzCzTg==","signatures":[{"sig":"MEUCIQCNxt+xC3YKYn9clHxMgU6Lzzr3lZY2uSkydacsqsy+RAIgaeOAUhfBqMHutj9qZCl/4pYKe7po6oQd0ZJ2LHqDiJA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fpi-ai@0.78.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4605181},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./google":{"types":"./dist/providers/google.d.ts","import":"./dist/providers/google.js"},"./mistral":{"types":"./dist/providers/mistral.d.ts","import":"./dist/providers/mistral.js"},"./anthropic":{"types":"./dist/providers/anthropic.d.ts","import":"./dist/providers/anthropic.js"},"./google-vertex":{"types":"./dist/providers/google-vertex.d.ts","import":"./dist/providers/google-vertex.js"},"./bedrock-provider":{"types":"./dist/bedrock-provider.d.ts","import":"./dist/bedrock-provider.js"},"./openai-responses":{"types":"./dist/providers/openai-responses.d.ts","import":"./dist/providers/openai-responses.js"},"./openai-completions":{"types":"./dist/providers/openai-completions.d.ts","import":"./dist/providers/openai-completions.js"},"./azure-openai-responses":{"types":"./dist/providers/azure-openai-responses.d.ts","import":"./dist/providers/azure-openai-responses.js"},"./openai-codex-responses":{"types":"./dist/providers/openai-codex-responses.d.ts","import":"./dist/providers/openai-codex-responses.js"}},"gitHead":"592c34c05643d115d6eed08a6f615999651cfaa3","scripts":{"test":"vitest --run","build":"npm run generate-models && npm run generate-image-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","prepublishOnly":"npm run clean && npm run build","generate-models":"node scripts/generate-models.ts","generate-image-models":"node scripts/generate-image-models.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:975b2765-9d44-42ba-a322-c1cbbce03f36"}},"repository":{"url":"git+https://github.com/earendil-works/pi.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.16.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"22.22.3","dependencies":{"openai":"6.26.0","typebox":"1.1.38","partial-json":"0.1.7","@google/genai":"1.52.0","http-proxy-agent":"7.0.2","@anthropic-ai/sdk":"0.91.1","https-proxy-agent":"7.0.6","@mistralai/mistralai":"2.2.1","@smithy/node-http-handler":"4.7.3","@aws-sdk/client-bedrock-runtime":"3.1048.0"},"_hasShrinkwrap":false,"devDependencies":{"canvas":"3.2.3","vitest":"3.2.4","@types/node":"24.12.4"},"_npmOperationalInternal":{"tmp":"tmp/pi-ai_0.78.1_1780590933034_0.836282499905235","host":"s3://npm-registry-packages-npm-production"}},"0.79.0":{"name":"@earendil-works/pi-ai","version":"0.79.0","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@earendil-works/pi-ai@0.79.0","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"},{"name":"rwachtler","email":"r.wachtler@outlook.com"}],"homepage":"https://github.com/earendil-works/pi#readme","bugs":{"url":"https://github.com/earendil-works/pi/issues"},"bin":{"pi-ai":"dist/cli.js"},"dist":{"shasum":"a1ee8251fb77df00182f9cb925405729771b3ff4","tarball":"https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.79.0.tgz","fileCount":218,"integrity":"sha512-D/2aDoe9vcCbqAztALQcKkdqXGuaQcqAzLm8LfUhNaorwoIHkwnaAuDVlo+OkF5clpEwS8Z1bk2o8NiSrwEdsA==","signatures":[{"sig":"MEQCICSl0JJHMLGKdybrrlnkoU43fbpY+rQLNNoxPetMuovQAiAKcLiI8yyn9dcnKxIGsS95nythiCsqdvgjgZlXgDC2ow==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fpi-ai@0.79.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4615888},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./google":{"types":"./dist/providers/google.d.ts","import":"./dist/providers/google.js"},"./mistral":{"types":"./dist/providers/mistral.d.ts","import":"./dist/providers/mistral.js"},"./anthropic":{"types":"./dist/providers/anthropic.d.ts","import":"./dist/providers/anthropic.js"},"./google-vertex":{"types":"./dist/providers/google-vertex.d.ts","import":"./dist/providers/google-vertex.js"},"./bedrock-provider":{"types":"./dist/bedrock-provider.d.ts","import":"./dist/bedrock-provider.js"},"./openai-responses":{"types":"./dist/providers/openai-responses.d.ts","import":"./dist/providers/openai-responses.js"},"./openai-completions":{"types":"./dist/providers/openai-completions.d.ts","import":"./dist/providers/openai-completions.js"},"./azure-openai-responses":{"types":"./dist/providers/azure-openai-responses.d.ts","import":"./dist/providers/azure-openai-responses.js"},"./openai-codex-responses":{"types":"./dist/providers/openai-codex-responses.d.ts","import":"./dist/providers/openai-codex-responses.js"}},"gitHead":"c10fb95fd993a1f6a92d5f770258fada1a20b55a","scripts":{"test":"vitest --run","build":"npm run generate-models && npm run generate-image-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","prepublishOnly":"npm run clean && npm run build","generate-models":"node scripts/generate-models.ts","generate-image-models":"node scripts/generate-image-models.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:975b2765-9d44-42ba-a322-c1cbbce03f36"}},"repository":{"url":"git+https://github.com/earendil-works/pi.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.16.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"22.22.3","dependencies":{"openai":"6.26.0","typebox":"1.1.38","partial-json":"0.1.7","@google/genai":"1.52.0","http-proxy-agent":"7.0.2","@anthropic-ai/sdk":"0.91.1","https-proxy-agent":"7.0.6","@mistralai/mistralai":"2.2.1","@smithy/node-http-handler":"4.7.3","@aws-sdk/client-bedrock-runtime":"3.1048.0"},"_hasShrinkwrap":false,"devDependencies":{"canvas":"3.2.3","vitest":"3.2.4","@types/node":"24.12.4"},"_npmOperationalInternal":{"tmp":"tmp/pi-ai_0.79.0_1780932007381_0.37474090247616587","host":"s3://npm-registry-packages-npm-production"}},"0.79.1":{"name":"@earendil-works/pi-ai","version":"0.79.1","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@earendil-works/pi-ai@0.79.1","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"},{"name":"rwachtler","email":"r.wachtler@outlook.com"}],"homepage":"https://github.com/earendil-works/pi#readme","bugs":{"url":"https://github.com/earendil-works/pi/issues"},"bin":{"pi-ai":"dist/cli.js"},"dist":{"shasum":"3928fcde9248456bd5c242025fa8a2003641765b","tarball":"https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.79.1.tgz","fileCount":218,"integrity":"sha512-UnORwrcsTNLm4StEvoM8iEom0u87Te7BXEWxhec3iNXygWD6eEBosUoq9ddcveqtj/QpUZBMPWUu81cCtZxzkQ==","signatures":[{"sig":"MEQCICdOgRt4rSCMdKwYAJrW9C3bdJ+E8Foi65ju7Q214InqAiAxFDxa9vBAVTsVHa1ls4s64rjUBCdsBDtAbTx1PohAHw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fpi-ai@0.79.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4655837},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./google":{"types":"./dist/providers/google.d.ts","import":"./dist/providers/google.js"},"./mistral":{"types":"./dist/providers/mistral.d.ts","import":"./dist/providers/mistral.js"},"./anthropic":{"types":"./dist/providers/anthropic.d.ts","import":"./dist/providers/anthropic.js"},"./google-vertex":{"types":"./dist/providers/google-vertex.d.ts","import":"./dist/providers/google-vertex.js"},"./bedrock-provider":{"types":"./dist/bedrock-provider.d.ts","import":"./dist/bedrock-provider.js"},"./openai-responses":{"types":"./dist/providers/openai-responses.d.ts","import":"./dist/providers/openai-responses.js"},"./openai-completions":{"types":"./dist/providers/openai-completions.d.ts","import":"./dist/providers/openai-completions.js"},"./azure-openai-responses":{"types":"./dist/providers/azure-openai-responses.d.ts","import":"./dist/providers/azure-openai-responses.js"},"./openai-codex-responses":{"types":"./dist/providers/openai-codex-responses.d.ts","import":"./dist/providers/openai-codex-responses.js"}},"gitHead":"dacb367e9e51a649eb16aee17ddece7ada896ee9","scripts":{"test":"vitest --run","build":"npm run generate-models && npm run generate-image-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","prepublishOnly":"npm run clean && npm run build","generate-models":"node scripts/generate-models.ts","generate-image-models":"node scripts/generate-image-models.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:975b2765-9d44-42ba-a322-c1cbbce03f36"}},"repository":{"url":"git+https://github.com/earendil-works/pi.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.16.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"22.22.3","dependencies":{"openai":"6.26.0","typebox":"1.1.38","partial-json":"0.1.7","@google/genai":"1.52.0","http-proxy-agent":"7.0.2","@anthropic-ai/sdk":"0.91.1","https-proxy-agent":"7.0.6","@mistralai/mistralai":"2.2.1","@smithy/node-http-handler":"4.7.3","@aws-sdk/client-bedrock-runtime":"3.1048.0"},"_hasShrinkwrap":false,"devDependencies":{"canvas":"3.2.3","vitest":"3.2.4","@types/node":"24.12.4"},"_npmOperationalInternal":{"tmp":"tmp/pi-ai_0.79.1_1781040328507_0.10693514080482336","host":"s3://npm-registry-packages-npm-production"}},"0.79.2":{"name":"@earendil-works/pi-ai","version":"0.79.2","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@earendil-works/pi-ai@0.79.2","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"},{"name":"rwachtler","email":"r.wachtler@outlook.com"}],"homepage":"https://github.com/earendil-works/pi#readme","bugs":{"url":"https://github.com/earendil-works/pi/issues"},"bin":{"pi-ai":"dist/cli.js"},"dist":{"shasum":"c6c2d11af6ce4fd787c7dda71d0eda4c337a0d6b","tarball":"https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.79.2.tgz","fileCount":218,"integrity":"sha512-ydZ19dWqhw4KrkKXtLByFXdNPusRTpXYAElbnCMX0iSX+m59+SUJG0RgEQ6H7sIIV6LvGSEnnQsP6tm1vwcrLA==","signatures":[{"sig":"MEYCIQDmoQ3JDQzlVBfIZ6pL5bliuGsKloKGyYQB3EQLEZkArAIhAOwfYA5QB9xC3HbvaCmdrdmgcYfdbiS95nK4KnlLuDJ5","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fpi-ai@0.79.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4620320},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./google":{"types":"./dist/providers/google.d.ts","import":"./dist/providers/google.js"},"./mistral":{"types":"./dist/providers/mistral.d.ts","import":"./dist/providers/mistral.js"},"./anthropic":{"types":"./dist/providers/anthropic.d.ts","import":"./dist/providers/anthropic.js"},"./google-vertex":{"types":"./dist/providers/google-vertex.d.ts","import":"./dist/providers/google-vertex.js"},"./bedrock-provider":{"types":"./dist/bedrock-provider.d.ts","import":"./dist/bedrock-provider.js"},"./openai-responses":{"types":"./dist/providers/openai-responses.d.ts","import":"./dist/providers/openai-responses.js"},"./openai-completions":{"types":"./dist/providers/openai-completions.d.ts","import":"./dist/providers/openai-completions.js"},"./azure-openai-responses":{"types":"./dist/providers/azure-openai-responses.d.ts","import":"./dist/providers/azure-openai-responses.js"},"./openai-codex-responses":{"types":"./dist/providers/openai-codex-responses.d.ts","import":"./dist/providers/openai-codex-responses.js"}},"gitHead":"f21f3c4bbdd3868ce2a7a68019d7920b838f663b","scripts":{"test":"vitest --run","build":"npm run generate-models && npm run generate-image-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","prepublishOnly":"npm run clean && npm run build","generate-models":"node scripts/generate-models.ts","generate-image-models":"node scripts/generate-image-models.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:975b2765-9d44-42ba-a322-c1cbbce03f36"}},"repository":{"url":"git+https://github.com/earendil-works/pi.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.16.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"22.22.3","dependencies":{"openai":"6.26.0","typebox":"1.1.38","partial-json":"0.1.7","@google/genai":"1.52.0","http-proxy-agent":"7.0.2","@anthropic-ai/sdk":"0.91.1","https-proxy-agent":"7.0.6","@mistralai/mistralai":"2.2.1","@smithy/node-http-handler":"4.7.3","@aws-sdk/client-bedrock-runtime":"3.1048.0"},"_hasShrinkwrap":false,"devDependencies":{"canvas":"3.2.3","vitest":"3.2.4","@types/node":"24.12.4"},"_npmOperationalInternal":{"tmp":"tmp/pi-ai_0.79.2_1781303375346_0.1961492137504286","host":"s3://npm-registry-packages-npm-production"}},"0.79.3":{"name":"@earendil-works/pi-ai","version":"0.79.3","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@earendil-works/pi-ai@0.79.3","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"},{"name":"rwachtler","email":"r.wachtler@outlook.com"}],"homepage":"https://github.com/earendil-works/pi#readme","bugs":{"url":"https://github.com/earendil-works/pi/issues"},"bin":{"pi-ai":"dist/cli.js"},"dist":{"shasum":"c0ae2987df112d7eb0ab2d4fa4db7e225530222a","tarball":"https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.79.3.tgz","fileCount":218,"integrity":"sha512-lMSput/haP5uZAGbXhS5rAYd3GB7GYdJkoAUxg3VFummBeqGqGqllaTWrbHFN12kVGyVfWHhdySNXkiqVh65Iw==","signatures":[{"sig":"MEUCIARCTbhSBZk9BAJC0D9zDUC2MehnflHUdKpox5CseW16AiEA3ZOzPPcsQLsRFNccgGVbAbJsaubpwxy4214KMQK/Gt8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fpi-ai@0.79.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4621856},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./google":{"types":"./dist/providers/google.d.ts","import":"./dist/providers/google.js"},"./mistral":{"types":"./dist/providers/mistral.d.ts","import":"./dist/providers/mistral.js"},"./anthropic":{"types":"./dist/providers/anthropic.d.ts","import":"./dist/providers/anthropic.js"},"./google-vertex":{"types":"./dist/providers/google-vertex.d.ts","import":"./dist/providers/google-vertex.js"},"./bedrock-provider":{"types":"./dist/bedrock-provider.d.ts","import":"./dist/bedrock-provider.js"},"./openai-responses":{"types":"./dist/providers/openai-responses.d.ts","import":"./dist/providers/openai-responses.js"},"./openai-completions":{"types":"./dist/providers/openai-completions.d.ts","import":"./dist/providers/openai-completions.js"},"./azure-openai-responses":{"types":"./dist/providers/azure-openai-responses.d.ts","import":"./dist/providers/azure-openai-responses.js"},"./openai-codex-responses":{"types":"./dist/providers/openai-codex-responses.d.ts","import":"./dist/providers/openai-codex-responses.js"}},"gitHead":"6f29450e1339b37582796775749de3957936cd8d","scripts":{"test":"vitest --run","build":"npm run generate-models && npm run generate-image-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","prepublishOnly":"npm run clean && npm run build","generate-models":"node scripts/generate-models.ts","generate-image-models":"node scripts/generate-image-models.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:975b2765-9d44-42ba-a322-c1cbbce03f36"}},"repository":{"url":"git+https://github.com/earendil-works/pi.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.16.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"22.22.3","dependencies":{"openai":"6.26.0","typebox":"1.1.38","partial-json":"0.1.7","@google/genai":"1.52.0","http-proxy-agent":"7.0.2","@anthropic-ai/sdk":"0.91.1","https-proxy-agent":"7.0.6","@mistralai/mistralai":"2.2.1","@smithy/node-http-handler":"4.7.3","@aws-sdk/client-bedrock-runtime":"3.1048.0"},"_hasShrinkwrap":false,"devDependencies":{"canvas":"3.2.3","vitest":"3.2.4","@types/node":"24.12.4"},"_npmOperationalInternal":{"tmp":"tmp/pi-ai_0.79.3_1781342505000_0.4946293201172982","host":"s3://npm-registry-packages-npm-production"}},"0.79.4":{"name":"@earendil-works/pi-ai","version":"0.79.4","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@earendil-works/pi-ai@0.79.4","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"},{"name":"rwachtler","email":"r.wachtler@outlook.com"}],"homepage":"https://github.com/earendil-works/pi#readme","bugs":{"url":"https://github.com/earendil-works/pi/issues"},"bin":{"pi-ai":"dist/cli.js"},"dist":{"shasum":"4278ab29ce0e73f865657b2af251e2182ededd11","tarball":"https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.79.4.tgz","fileCount":218,"integrity":"sha512-Z1j+YP+6ZyPBKDUoc5m0GO/o1hPK17fWeErtDgegCTpm2dcKzuFvL/7GTqHeJkVkfpeXRwO37xOfgozQbK6EUw==","signatures":[{"sig":"MEQCIDmR8O+ts9d2bfgMYdinAvYsqAfDzSi5FIz1em2DlyPLAiBgwkhSCEQ2JBfb5s4OxJcj4c5xyFxSy77rNEkmFm8+3A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fpi-ai@0.79.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4640964},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./google":{"types":"./dist/providers/google.d.ts","import":"./dist/providers/google.js"},"./mistral":{"types":"./dist/providers/mistral.d.ts","import":"./dist/providers/mistral.js"},"./anthropic":{"types":"./dist/providers/anthropic.d.ts","import":"./dist/providers/anthropic.js"},"./google-vertex":{"types":"./dist/providers/google-vertex.d.ts","import":"./dist/providers/google-vertex.js"},"./bedrock-provider":{"types":"./dist/bedrock-provider.d.ts","import":"./dist/bedrock-provider.js"},"./openai-responses":{"types":"./dist/providers/openai-responses.d.ts","import":"./dist/providers/openai-responses.js"},"./openai-completions":{"types":"./dist/providers/openai-completions.d.ts","import":"./dist/providers/openai-completions.js"},"./azure-openai-responses":{"types":"./dist/providers/azure-openai-responses.d.ts","import":"./dist/providers/azure-openai-responses.js"},"./openai-codex-responses":{"types":"./dist/providers/openai-codex-responses.d.ts","import":"./dist/providers/openai-codex-responses.js"}},"gitHead":"bba6af2c71c5004546007cde59995d15efe8465b","scripts":{"test":"vitest --run","build":"npm run generate-models && npm run generate-image-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","prepublishOnly":"npm run clean && npm run build","generate-models":"node scripts/generate-models.ts","generate-image-models":"node scripts/generate-image-models.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:975b2765-9d44-42ba-a322-c1cbbce03f36"}},"repository":{"url":"git+https://github.com/earendil-works/pi.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.16.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"22.22.3","dependencies":{"openai":"6.26.0","typebox":"1.1.38","partial-json":"0.1.7","@google/genai":"1.52.0","http-proxy-agent":"7.0.2","@anthropic-ai/sdk":"0.91.1","https-proxy-agent":"7.0.6","@mistralai/mistralai":"2.2.1","@smithy/node-http-handler":"4.7.3","@aws-sdk/client-bedrock-runtime":"3.1048.0"},"_hasShrinkwrap":false,"devDependencies":{"canvas":"3.2.3","vitest":"3.2.4","@types/node":"24.12.4"},"_npmOperationalInternal":{"tmp":"tmp/pi-ai_0.79.4_1781512345935_0.02275608039449506","host":"s3://npm-registry-packages-npm-production"}},"0.79.5":{"name":"@earendil-works/pi-ai","version":"0.79.5","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@earendil-works/pi-ai@0.79.5","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"},{"name":"rwachtler","email":"r.wachtler@outlook.com"}],"homepage":"https://github.com/earendil-works/pi#readme","bugs":{"url":"https://github.com/earendil-works/pi/issues"},"bin":{"pi-ai":"dist/cli.js"},"dist":{"shasum":"d3ebc0403b2996abe384de859c43d76c6eba51d5","tarball":"https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.79.5.tgz","fileCount":222,"integrity":"sha512-LwZfV8HNvT90A9n5foA/a6/JMh5n/1lh1rRzOn+68kiFitf/tz3HTBpeSNFnUL4KLIdwp1lczjl4U2EJX0egvQ==","signatures":[{"sig":"MEYCIQD8EY1DBYrFmmgEaWY+MiaeV0mHhogKMJGkrdWD3AUfUQIhAIw587vJi8JTCnhnvUkdslTHnVvcLfOU39Dvm9AT9zZG","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fpi-ai@0.79.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4673158},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./google":{"types":"./dist/providers/google.d.ts","import":"./dist/providers/google.js"},"./mistral":{"types":"./dist/providers/mistral.d.ts","import":"./dist/providers/mistral.js"},"./anthropic":{"types":"./dist/providers/anthropic.d.ts","import":"./dist/providers/anthropic.js"},"./google-vertex":{"types":"./dist/providers/google-vertex.d.ts","import":"./dist/providers/google-vertex.js"},"./bedrock-provider":{"types":"./dist/bedrock-provider.d.ts","import":"./dist/bedrock-provider.js"},"./openai-responses":{"types":"./dist/providers/openai-responses.d.ts","import":"./dist/providers/openai-responses.js"},"./openai-completions":{"types":"./dist/providers/openai-completions.d.ts","import":"./dist/providers/openai-completions.js"},"./azure-openai-responses":{"types":"./dist/providers/azure-openai-responses.d.ts","import":"./dist/providers/azure-openai-responses.js"},"./openai-codex-responses":{"types":"./dist/providers/openai-codex-responses.d.ts","import":"./dist/providers/openai-codex-responses.js"}},"gitHead":"a78cd7ccb18952c3139c086c54b488a87c6e32e4","scripts":{"test":"vitest --run","build":"npm run generate-models && npm run generate-image-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","prepublishOnly":"npm run clean && npm run build","generate-models":"node scripts/generate-models.ts","generate-image-models":"node scripts/generate-image-models.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:975b2765-9d44-42ba-a322-c1cbbce03f36"}},"repository":{"url":"git+https://github.com/earendil-works/pi.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.16.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"22.22.3","dependencies":{"openai":"6.26.0","typebox":"1.1.38","partial-json":"0.1.7","@google/genai":"1.52.0","http-proxy-agent":"7.0.2","@anthropic-ai/sdk":"0.91.1","https-proxy-agent":"7.0.6","@mistralai/mistralai":"2.2.1","@smithy/node-http-handler":"4.7.3","@aws-sdk/client-bedrock-runtime":"3.1048.0"},"_hasShrinkwrap":false,"devDependencies":{"canvas":"3.2.3","vitest":"3.2.4","@types/node":"24.12.4"},"_npmOperationalInternal":{"tmp":"tmp/pi-ai_0.79.5_1781633219590_0.3321577553873132","host":"s3://npm-registry-packages-npm-production"}},"0.79.6":{"name":"@earendil-works/pi-ai","version":"0.79.6","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@earendil-works/pi-ai@0.79.6","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"},{"name":"rwachtler","email":"r.wachtler@outlook.com"}],"homepage":"https://github.com/earendil-works/pi#readme","bugs":{"url":"https://github.com/earendil-works/pi/issues"},"bin":{"pi-ai":"dist/cli.js"},"dist":{"shasum":"f3a1e8bb2de32653ee0a125a6ca26b4096ead853","tarball":"https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.79.6.tgz","fileCount":222,"integrity":"sha512-KGepEdgEeWDs7Imwlp96tBsO8TjSIpcDBvazsCDtHRa81+uwJI/YGetTegI52pMlKhVpJFLIGajRi4PCGC5MUg==","signatures":[{"sig":"MEUCIAyKoXxeUejBiHfdSORqycaBW0GNrE2tS13TjrMiB9hQAiEAmrW7bReS1xm2N4kQModMTSmwV+7xAFV9NMshLmpotwE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fpi-ai@0.79.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4673474},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./google":{"types":"./dist/providers/google.d.ts","import":"./dist/providers/google.js"},"./mistral":{"types":"./dist/providers/mistral.d.ts","import":"./dist/providers/mistral.js"},"./anthropic":{"types":"./dist/providers/anthropic.d.ts","import":"./dist/providers/anthropic.js"},"./google-vertex":{"types":"./dist/providers/google-vertex.d.ts","import":"./dist/providers/google-vertex.js"},"./bedrock-provider":{"types":"./dist/bedrock-provider.d.ts","import":"./dist/bedrock-provider.js"},"./openai-responses":{"types":"./dist/providers/openai-responses.d.ts","import":"./dist/providers/openai-responses.js"},"./openai-completions":{"types":"./dist/providers/openai-completions.d.ts","import":"./dist/providers/openai-completions.js"},"./azure-openai-responses":{"types":"./dist/providers/azure-openai-responses.d.ts","import":"./dist/providers/azure-openai-responses.js"},"./openai-codex-responses":{"types":"./dist/providers/openai-codex-responses.d.ts","import":"./dist/providers/openai-codex-responses.js"}},"gitHead":"31bfb2f16f7a1dd707876e970f0f80caa61f8435","scripts":{"test":"vitest --run","build":"npm run generate-models && npm run generate-image-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","prepublishOnly":"npm run clean && npm run build","generate-models":"node scripts/generate-models.ts","generate-image-models":"node scripts/generate-image-models.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:975b2765-9d44-42ba-a322-c1cbbce03f36"}},"repository":{"url":"git+https://github.com/earendil-works/pi.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.16.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"22.22.3","dependencies":{"openai":"6.26.0","typebox":"1.1.38","partial-json":"0.1.7","@google/genai":"1.52.0","http-proxy-agent":"7.0.2","@anthropic-ai/sdk":"0.91.1","https-proxy-agent":"7.0.6","@mistralai/mistralai":"2.2.1","@smithy/node-http-handler":"4.7.3","@aws-sdk/client-bedrock-runtime":"3.1048.0"},"_hasShrinkwrap":false,"devDependencies":{"canvas":"3.2.3","vitest":"3.2.4","@types/node":"24.12.4"},"_npmOperationalInternal":{"tmp":"tmp/pi-ai_0.79.6_1781647398892_0.9274129029148666","host":"s3://npm-registry-packages-npm-production"}},"0.79.7":{"name":"@earendil-works/pi-ai","version":"0.79.7","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@earendil-works/pi-ai@0.79.7","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"},{"name":"rwachtler","email":"r.wachtler@outlook.com"}],"homepage":"https://github.com/earendil-works/pi#readme","bugs":{"url":"https://github.com/earendil-works/pi/issues"},"bin":{"pi-ai":"dist/cli.js"},"dist":{"shasum":"0b4529a8c6fe61e17677912cf30beea3f3199b4e","tarball":"https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.79.7.tgz","fileCount":222,"integrity":"sha512-KTe2euBoBEmFb0W+KR05Im8Qq4coU+eo46++UgNAfT3L8OIBv3QU+/pif9EqaFQ1QUmirv8kgy4TQltvrCu7iQ==","signatures":[{"sig":"MEYCIQCDluVbprS731aIWNpZmsMdiExaHImd/yQSzy1vru4DwgIhAJCUXZ44fxcYxeZrp/ZHetvAAJ/Zh0ZScZBgl9Vctpjz","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fpi-ai@0.79.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4689917},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./google":{"types":"./dist/providers/google.d.ts","import":"./dist/providers/google.js"},"./mistral":{"types":"./dist/providers/mistral.d.ts","import":"./dist/providers/mistral.js"},"./anthropic":{"types":"./dist/providers/anthropic.d.ts","import":"./dist/providers/anthropic.js"},"./google-vertex":{"types":"./dist/providers/google-vertex.d.ts","import":"./dist/providers/google-vertex.js"},"./bedrock-provider":{"types":"./dist/bedrock-provider.d.ts","import":"./dist/bedrock-provider.js"},"./openai-responses":{"types":"./dist/providers/openai-responses.d.ts","import":"./dist/providers/openai-responses.js"},"./openai-completions":{"types":"./dist/providers/openai-completions.d.ts","import":"./dist/providers/openai-completions.js"},"./azure-openai-responses":{"types":"./dist/providers/azure-openai-responses.d.ts","import":"./dist/providers/azure-openai-responses.js"},"./openai-codex-responses":{"types":"./dist/providers/openai-codex-responses.d.ts","import":"./dist/providers/openai-codex-responses.js"}},"gitHead":"c4ab61dcbf719e75018f0ae90eb900b78a881603","scripts":{"test":"vitest --run","build":"npm run generate-models && npm run generate-image-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","prepublishOnly":"npm run clean && npm run build","generate-models":"node scripts/generate-models.ts","generate-image-models":"node scripts/generate-image-models.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:975b2765-9d44-42ba-a322-c1cbbce03f36"}},"repository":{"url":"git+https://github.com/earendil-works/pi.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.16.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"22.22.3","dependencies":{"openai":"6.26.0","typebox":"1.1.38","partial-json":"0.1.7","@google/genai":"1.52.0","http-proxy-agent":"7.0.2","@anthropic-ai/sdk":"0.91.1","https-proxy-agent":"7.0.6","@mistralai/mistralai":"2.2.1","@smithy/node-http-handler":"4.7.3","@aws-sdk/client-bedrock-runtime":"3.1048.0"},"_hasShrinkwrap":false,"devDependencies":{"canvas":"3.2.3","vitest":"3.2.4","@types/node":"24.12.4"},"_npmOperationalInternal":{"tmp":"tmp/pi-ai_0.79.7_1781800302444_0.1751770023099779","host":"s3://npm-registry-packages-npm-production"}},"0.79.8":{"name":"@earendil-works/pi-ai","version":"0.79.8","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@earendil-works/pi-ai@0.79.8","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"},{"name":"rwachtler","email":"r.wachtler@outlook.com"}],"homepage":"https://github.com/earendil-works/pi#readme","bugs":{"url":"https://github.com/earendil-works/pi/issues"},"bin":{"pi-ai":"dist/cli.js"},"dist":{"shasum":"06da2d45367dcac0dc4d638059ebf5add1d01250","tarball":"https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.79.8.tgz","fileCount":222,"integrity":"sha512-ZpSwaD7oNpsjn9vtEatZQNT9PSdDJXi6rFeY5Qv+OHQGFDKlmcrfJE4ypm4SAc/fBECPs4Rdi3l+YjVtXYrkKw==","signatures":[{"sig":"MEUCIFZZC3egwt+cpSG1CXXhuLqelF4+xtAP+PXyO6X0ZtW4AiEA2EYd9PHz6GcDYlX/TQ+pyggXuSqCH7w6OZCl+Pv7PZY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fpi-ai@0.79.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4691177},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./base":{"types":"./dist/base.d.ts","import":"./dist/base.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./google":{"types":"./dist/providers/google.d.ts","import":"./dist/providers/google.js"},"./mistral":{"types":"./dist/providers/mistral.d.ts","import":"./dist/providers/mistral.js"},"./anthropic":{"types":"./dist/providers/anthropic.d.ts","import":"./dist/providers/anthropic.js"},"./google-vertex":{"types":"./dist/providers/google-vertex.d.ts","import":"./dist/providers/google-vertex.js"},"./amazon-bedrock":{"types":"./dist/providers/amazon-bedrock.d.ts","import":"./dist/providers/amazon-bedrock.js"},"./bedrock-provider":{"types":"./dist/bedrock-provider.d.ts","import":"./dist/bedrock-provider.js"},"./openai-responses":{"types":"./dist/providers/openai-responses.d.ts","import":"./dist/providers/openai-responses.js"},"./openrouter-images":{"types":"./dist/providers/images/openrouter.d.ts","import":"./dist/providers/images/openrouter.js"},"./openai-completions":{"types":"./dist/providers/openai-completions.d.ts","import":"./dist/providers/openai-completions.js"},"./azure-openai-responses":{"types":"./dist/providers/azure-openai-responses.d.ts","import":"./dist/providers/azure-openai-responses.js"},"./openai-codex-responses":{"types":"./dist/providers/openai-codex-responses.d.ts","import":"./dist/providers/openai-codex-responses.js"}},"gitHead":"8eb9704b3e75391dcc4f584b7fc1a03c9e04e383","scripts":{"test":"vitest --run","build":"npm run generate-models && npm run generate-image-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","prepublishOnly":"npm run clean && npm run build","generate-models":"node scripts/generate-models.ts","generate-image-models":"node scripts/generate-image-models.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:975b2765-9d44-42ba-a322-c1cbbce03f36"}},"repository":{"url":"git+https://github.com/earendil-works/pi.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.16.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"22.22.3","dependencies":{"openai":"6.26.0","typebox":"1.1.38","partial-json":"0.1.7","@google/genai":"1.52.0","http-proxy-agent":"7.0.2","@anthropic-ai/sdk":"0.91.1","https-proxy-agent":"7.0.6","@opentelemetry/api":"1.9.0","@mistralai/mistralai":"2.2.6","@smithy/node-http-handler":"4.7.3","@aws-sdk/client-bedrock-runtime":"3.1048.0"},"_hasShrinkwrap":false,"devDependencies":{"canvas":"3.2.3","vitest":"4.1.9","@types/node":"24.12.4"},"_npmOperationalInternal":{"tmp":"tmp/pi-ai_0.79.8_1781855857218_0.795024474392551","host":"s3://npm-registry-packages-npm-production"}},"0.79.9":{"name":"@earendil-works/pi-ai","version":"0.79.9","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@earendil-works/pi-ai@0.79.9","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"},{"name":"rwachtler","email":"r.wachtler@outlook.com"}],"homepage":"https://github.com/earendil-works/pi#readme","bugs":{"url":"https://github.com/earendil-works/pi/issues"},"bin":{"pi-ai":"dist/cli.js"},"dist":{"shasum":"cbe7fa825e4674db949bb5dd035cccdb7dd26914","tarball":"https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.79.9.tgz","fileCount":222,"integrity":"sha512-fHmgNMONwCCE7bQAKbcz76sgm3iQuA7km1mpIc4H5xXd9+zhPh/faULz6ARkgjQE0EufHnfZPJY39+lNf8Sa9g==","signatures":[{"sig":"MEUCIQC8xDO2lZIsTwDXBx0YnFkhrmAj6B9TaUqkyMM+kL8bWwIgJbqkcKLMmmXjs0H0kLG5W+7PIm8c+/IE7acjDDNFrEM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fpi-ai@0.79.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4704026},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./base":{"types":"./dist/base.d.ts","import":"./dist/base.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./google":{"types":"./dist/providers/google.d.ts","import":"./dist/providers/google.js"},"./mistral":{"types":"./dist/providers/mistral.d.ts","import":"./dist/providers/mistral.js"},"./anthropic":{"types":"./dist/providers/anthropic.d.ts","import":"./dist/providers/anthropic.js"},"./google-vertex":{"types":"./dist/providers/google-vertex.d.ts","import":"./dist/providers/google-vertex.js"},"./amazon-bedrock":{"types":"./dist/providers/amazon-bedrock.d.ts","import":"./dist/providers/amazon-bedrock.js"},"./bedrock-provider":{"types":"./dist/bedrock-provider.d.ts","import":"./dist/bedrock-provider.js"},"./openai-responses":{"types":"./dist/providers/openai-responses.d.ts","import":"./dist/providers/openai-responses.js"},"./openrouter-images":{"types":"./dist/providers/images/openrouter.d.ts","import":"./dist/providers/images/openrouter.js"},"./openai-completions":{"types":"./dist/providers/openai-completions.d.ts","import":"./dist/providers/openai-completions.js"},"./azure-openai-responses":{"types":"./dist/providers/azure-openai-responses.d.ts","import":"./dist/providers/azure-openai-responses.js"},"./openai-codex-responses":{"types":"./dist/providers/openai-codex-responses.d.ts","import":"./dist/providers/openai-codex-responses.js"}},"gitHead":"615bf2f87444c0f48756d487323519349304906c","scripts":{"test":"vitest --run","build":"npm run generate-models && npm run generate-image-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","prepublishOnly":"npm run clean && npm run build","generate-models":"node scripts/generate-models.ts","generate-image-models":"node scripts/generate-image-models.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:975b2765-9d44-42ba-a322-c1cbbce03f36"}},"repository":{"url":"git+https://github.com/earendil-works/pi.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.16.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"22.22.3","dependencies":{"openai":"6.26.0","typebox":"1.1.38","partial-json":"0.1.7","@google/genai":"1.52.0","http-proxy-agent":"7.0.2","@anthropic-ai/sdk":"0.91.1","https-proxy-agent":"7.0.6","@opentelemetry/api":"1.9.0","@mistralai/mistralai":"2.2.6","@smithy/node-http-handler":"4.7.3","@aws-sdk/client-bedrock-runtime":"3.1048.0"},"_hasShrinkwrap":false,"devDependencies":{"canvas":"3.2.3","vitest":"4.1.9","@types/node":"24.12.4"},"_npmOperationalInternal":{"tmp":"tmp/pi-ai_0.79.9_1781986783008_0.4806789094122499","host":"s3://npm-registry-packages-npm-production"}},"0.79.10":{"name":"@earendil-works/pi-ai","version":"0.79.10","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@earendil-works/pi-ai@0.79.10","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"},{"name":"rwachtler","email":"r.wachtler@outlook.com"}],"homepage":"https://github.com/earendil-works/pi#readme","bugs":{"url":"https://github.com/earendil-works/pi/issues"},"bin":{"pi-ai":"dist/cli.js"},"dist":{"shasum":"e3f3ccfa00009b273339f2b116db9b7703cc6767","tarball":"https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.79.10.tgz","fileCount":222,"integrity":"sha512-9jR23tOl0BIUdQMn70Gr72xYBpM7Xgl9Lyv7gAnU1USfkNRuYG/f/edLl+n/Dp/RafDW3JI4DF7y/GhgkORuew==","signatures":[{"sig":"MEUCIGQBHds8B4ZTURgyRQEXk1z+r4TgBoITAlJ9pj0SWf2xAiEAzsTYReZDfx8LS1HxIhs614no6AGKgsEF4m4XUvw/AOA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fpi-ai@0.79.10","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4708128},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./base":{"types":"./dist/base.d.ts","import":"./dist/base.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./google":{"types":"./dist/providers/google.d.ts","import":"./dist/providers/google.js"},"./mistral":{"types":"./dist/providers/mistral.d.ts","import":"./dist/providers/mistral.js"},"./anthropic":{"types":"./dist/providers/anthropic.d.ts","import":"./dist/providers/anthropic.js"},"./google-vertex":{"types":"./dist/providers/google-vertex.d.ts","import":"./dist/providers/google-vertex.js"},"./amazon-bedrock":{"types":"./dist/providers/amazon-bedrock.d.ts","import":"./dist/providers/amazon-bedrock.js"},"./bedrock-provider":{"types":"./dist/bedrock-provider.d.ts","import":"./dist/bedrock-provider.js"},"./openai-responses":{"types":"./dist/providers/openai-responses.d.ts","import":"./dist/providers/openai-responses.js"},"./openrouter-images":{"types":"./dist/providers/images/openrouter.d.ts","import":"./dist/providers/images/openrouter.js"},"./openai-completions":{"types":"./dist/providers/openai-completions.d.ts","import":"./dist/providers/openai-completions.js"},"./azure-openai-responses":{"types":"./dist/providers/azure-openai-responses.d.ts","import":"./dist/providers/azure-openai-responses.js"},"./openai-codex-responses":{"types":"./dist/providers/openai-codex-responses.d.ts","import":"./dist/providers/openai-codex-responses.js"}},"gitHead":"8e1900666f3cb83c281297d8f787fae6ee2bd0e6","scripts":{"test":"vitest --run","build":"npm run generate-models && npm run generate-image-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","prepublishOnly":"npm run clean && npm run build","generate-models":"node scripts/generate-models.ts","generate-image-models":"node scripts/generate-image-models.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:975b2765-9d44-42ba-a322-c1cbbce03f36"}},"repository":{"url":"git+https://github.com/earendil-works/pi.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.16.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"_nodeVersion":"22.22.3","dependencies":{"openai":"6.26.0","typebox":"1.1.38","partial-json":"0.1.7","@google/genai":"1.52.0","http-proxy-agent":"7.0.2","@anthropic-ai/sdk":"0.91.1","https-proxy-agent":"7.0.6","@opentelemetry/api":"1.9.0","@mistralai/mistralai":"2.2.6","@smithy/node-http-handler":"4.7.3","@aws-sdk/client-bedrock-runtime":"3.1048.0"},"_hasShrinkwrap":false,"devDependencies":{"canvas":"3.2.3","vitest":"4.1.9","@types/node":"24.12.4"},"_npmOperationalInternal":{"tmp":"tmp/pi-ai_0.79.10_1782119926081_0.00012654102592413174","host":"s3://npm-registry-packages-npm-production"}},"0.80.1":{"name":"@earendil-works/pi-ai","version":"0.80.1","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@earendil-works/pi-ai@0.80.1","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"},{"name":"rwachtler","email":"r.wachtler@outlook.com"}],"homepage":"https://github.com/earendil-works/pi#readme","bugs":{"url":"https://github.com/earendil-works/pi/issues"},"bin":{"pi-ai":"dist/cli.js"},"dist":{"shasum":"befbfe15c8d1c6602bbc5fbb4d7f4f08aa394af9","tarball":"https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.80.1.tgz","fileCount":578,"integrity":"sha512-qsHmuoBRu7a6rkOis/Elwl8jEhA9T884H/mXMP3tbz1slEBI+dHaY3zJ0nlEqUl+jcTz1FJNdgOVLG4sQHOPXQ==","signatures":[{"sig":"MEQCIDMWXDuumJkUy9tnNdyWjVWVFIeQfG3lUEi1ty7psI8gAiAgk0d72+i8aSiQ9FDLan2IoU62G10WE1svWFa9O/nGAw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fpi-ai@0.80.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":5709400},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./api/*":{"types":"./dist/api/*.d.ts","import":"./dist/api/*.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./compat":{"types":"./dist/compat.d.ts","import":"./dist/compat.js"},"./providers/*":{"types":"./dist/providers/*.d.ts","import":"./dist/providers/*.js"},"./bedrock-provider":{"types":"./dist/bedrock-provider.d.ts","import":"./dist/bedrock-provider.js"}},"gitHead":"1c4a9ba7c80c2b0d7f3ab57d38ed4ba1f671cb90","scripts":{"test":"vitest --run","build":"npm run generate-models && npm run generate-image-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","prepublishOnly":"npm run clean && npm run build","generate-models":"node scripts/generate-models.ts","generate-image-models":"node scripts/generate-image-models.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:975b2765-9d44-42ba-a322-c1cbbce03f36"}},"repository":{"url":"git+https://github.com/earendil-works/pi.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.16.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"sideEffects":["./dist/compat.js","./dist/images.js","./dist/providers/images/register-builtins.js"],"_nodeVersion":"22.22.3","dependencies":{"openai":"6.26.0","typebox":"1.1.38","partial-json":"0.1.7","@google/genai":"1.52.0","http-proxy-agent":"7.0.2","@anthropic-ai/sdk":"0.91.1","https-proxy-agent":"7.0.6","@opentelemetry/api":"1.9.0","@mistralai/mistralai":"2.2.6","@smithy/node-http-handler":"4.7.3","@aws-sdk/client-bedrock-runtime":"3.1048.0"},"_hasShrinkwrap":false,"devDependencies":{"canvas":"3.2.3","vitest":"4.1.9","@types/node":"24.12.4"},"_npmOperationalInternal":{"tmp":"tmp/pi-ai_0.80.1_1782238113796_0.1782084148682963","host":"s3://npm-registry-packages-npm-production"}},"0.80.2":{"name":"@earendil-works/pi-ai","version":"0.80.2","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@earendil-works/pi-ai@0.80.2","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"},{"name":"rwachtler","email":"r.wachtler@outlook.com"}],"homepage":"https://github.com/earendil-works/pi#readme","bugs":{"url":"https://github.com/earendil-works/pi/issues"},"bin":{"pi-ai":"dist/cli.js"},"dist":{"shasum":"c2892241cdcbae7a34fccabf4639f746db470ada","tarball":"https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.80.2.tgz","fileCount":582,"integrity":"sha512-5GNKfdrRJ4uZ5Zd9iudoXggi/BbUcKnD/xfRHtdR+7q4vWqPvfx8auFuaT+ewGBVI8K4wj87eigFQ/iCSuy9RQ==","signatures":[{"sig":"MEUCIQC2h0+WZhYoiCviKs2zjEKRShGJZa5mDGtQrZ0OHp6rAwIgBavw8LQmk/rEcSQz40kA6di6sZCxU5O/cSO1Jn5r/JE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fpi-ai@0.80.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":5748068},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./api/*":{"types":"./dist/api/*.d.ts","import":"./dist/api/*.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./compat":{"types":"./dist/compat.d.ts","import":"./dist/compat.js"},"./providers/*":{"types":"./dist/providers/*.d.ts","import":"./dist/providers/*.js"},"./bedrock-provider":{"types":"./dist/bedrock-provider.d.ts","import":"./dist/bedrock-provider.js"}},"gitHead":"ec6311beb5b24fc918e5031173608447582d7262","scripts":{"test":"vitest --run","build":"npm run generate-models && npm run generate-image-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","prepublishOnly":"npm run clean && npm run build","generate-models":"node scripts/generate-models.ts","generate-image-models":"node scripts/generate-image-models.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:975b2765-9d44-42ba-a322-c1cbbce03f36"}},"repository":{"url":"git+https://github.com/earendil-works/pi.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.16.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"sideEffects":["./dist/compat.js","./dist/images.js","./dist/providers/images/register-builtins.js"],"_nodeVersion":"22.22.3","dependencies":{"openai":"6.26.0","typebox":"1.1.38","partial-json":"0.1.7","@google/genai":"1.52.0","http-proxy-agent":"7.0.2","@anthropic-ai/sdk":"0.91.1","https-proxy-agent":"7.0.6","@opentelemetry/api":"1.9.0","@mistralai/mistralai":"2.2.6","@smithy/node-http-handler":"4.7.3","@aws-sdk/client-bedrock-runtime":"3.1048.0"},"_hasShrinkwrap":false,"devDependencies":{"canvas":"3.2.3","vitest":"4.1.9","@types/node":"24.12.4"},"_npmOperationalInternal":{"tmp":"tmp/pi-ai_0.80.2_1782252209669_0.8213411334563034","host":"s3://npm-registry-packages-npm-production"}},"0.80.3":{"name":"@earendil-works/pi-ai","version":"0.80.3","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@earendil-works/pi-ai@0.80.3","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"},{"name":"rwachtler","email":"r.wachtler@outlook.com"}],"homepage":"https://github.com/earendil-works/pi#readme","bugs":{"url":"https://github.com/earendil-works/pi/issues"},"bin":{"pi-ai":"dist/cli.js"},"dist":{"shasum":"bdc2ea9dd336722deb5f6cc32a7d42c931233ddf","tarball":"https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.80.3.tgz","fileCount":594,"integrity":"sha512-jPZLMeGL5kkMSEAwAklfXTMHqZvfhsJtCCpKGIr5Duk7mc0n4skjB1dugk7y0z3z8ZHIUCmPAWHdyDqgUz5vdA==","signatures":[{"sig":"MEUCIQCBuLbF+W//JtD0gnkvQ5lxjQP+3TTNk8hUxhKL4sOfjAIgTkedcajRw5VYHYpQyB7UVAB4DIQzDRM6AOyId8lwI2g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fpi-ai@0.80.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":5895313},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./api/*":{"types":"./dist/api/*.d.ts","import":"./dist/api/*.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./compat":{"types":"./dist/compat.d.ts","import":"./dist/compat.js"},"./providers/*":{"types":"./dist/providers/*.d.ts","import":"./dist/providers/*.js"},"./bedrock-provider":{"types":"./dist/bedrock-provider.d.ts","import":"./dist/bedrock-provider.js"}},"gitHead":"a23abe4a695df8b69b613f73e9fdda2a8af894d4","scripts":{"test":"vitest --run","build":"npm run generate-models && npm run generate-image-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","prepublishOnly":"npm run clean && npm run build","generate-models":"node scripts/generate-models.ts","generate-image-models":"node scripts/generate-image-models.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:975b2765-9d44-42ba-a322-c1cbbce03f36"}},"repository":{"url":"git+https://github.com/earendil-works/pi.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.16.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"sideEffects":["./dist/compat.js","./dist/images.js","./dist/providers/images/register-builtins.js"],"_nodeVersion":"22.23.0","dependencies":{"openai":"6.26.0","typebox":"1.1.38","partial-json":"0.1.7","@google/genai":"1.52.0","http-proxy-agent":"7.0.2","@anthropic-ai/sdk":"0.91.1","https-proxy-agent":"7.0.6","@opentelemetry/api":"1.9.0","@mistralai/mistralai":"2.2.6","@smithy/node-http-handler":"4.7.3","@aws-sdk/client-bedrock-runtime":"3.1048.0"},"_hasShrinkwrap":false,"devDependencies":{"canvas":"3.2.3","vitest":"4.1.9","@types/node":"24.12.4"},"_npmOperationalInternal":{"tmp":"tmp/pi-ai_0.80.3_1782851650568_0.557539248052211","host":"s3://npm-registry-packages-npm-production"}},"0.80.5":{"name":"@earendil-works/pi-ai","version":"0.80.5","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@earendil-works/pi-ai@0.80.5","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"},{"name":"rwachtler","email":"r.wachtler@outlook.com"}],"homepage":"https://github.com/earendil-works/pi#readme","bugs":{"url":"https://github.com/earendil-works/pi/issues"},"bin":{"pi-ai":"dist/cli.js"},"dist":{"shasum":"a53735c45f070ea72c487a6d0b10590f4127b97d","tarball":"https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.80.5.tgz","fileCount":594,"integrity":"sha512-+7UODYKu4o/X8sxTHG8HEV3+O+dOYKg5MeO3MJIFQ+wu65pIWDhjZGc759uWsRr79AhV7MSJEe4GWnFn4l68gw==","signatures":[{"sig":"MEQCIEYM2iriYmTHxs8U0vHyzGnag97qoaezuzggaRzUnoOqAiBkW91UpdQEpV1w7FXMINJAWdIOhrfr+zbTYeHWf148SQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fpi-ai@0.80.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":6012643},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./api/*":{"types":"./dist/api/*.d.ts","import":"./dist/api/*.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./compat":{"types":"./dist/compat.d.ts","import":"./dist/compat.js"},"./providers/*":{"types":"./dist/providers/*.d.ts","import":"./dist/providers/*.js"},"./bedrock-provider":{"types":"./dist/bedrock-provider.d.ts","import":"./dist/bedrock-provider.js"}},"gitHead":"cc62baa442b5c0333923fdfdcc1d7264f445b5b0","scripts":{"test":"vitest --run","build":"npm run generate-models && npm run generate-image-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","prepublishOnly":"npm run clean && npm run build","generate-models":"node scripts/generate-models.ts","generate-image-models":"node scripts/generate-image-models.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:975b2765-9d44-42ba-a322-c1cbbce03f36"}},"repository":{"url":"git+https://github.com/earendil-works/pi.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.16.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"sideEffects":["./dist/compat.js","./dist/images.js","./dist/providers/images/register-builtins.js"],"_nodeVersion":"22.23.1","dependencies":{"openai":"6.26.0","typebox":"1.1.38","partial-json":"0.1.7","@google/genai":"1.52.0","http-proxy-agent":"7.0.2","@anthropic-ai/sdk":"0.91.1","https-proxy-agent":"7.0.6","@opentelemetry/api":"1.9.0","@mistralai/mistralai":"2.2.6","@smithy/node-http-handler":"4.7.3","@aws-sdk/client-bedrock-runtime":"3.1048.0"},"_hasShrinkwrap":false,"devDependencies":{"canvas":"3.2.3","vitest":"4.1.9","@types/node":"24.12.4"},"_npmOperationalInternal":{"tmp":"tmp/pi-ai_0.80.5_1783624123293_0.7008989676715074","host":"s3://npm-registry-packages-npm-production"}},"0.80.6":{"name":"@earendil-works/pi-ai","version":"0.80.6","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@earendil-works/pi-ai@0.80.6","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"},{"name":"rwachtler","email":"r.wachtler@outlook.com"}],"homepage":"https://github.com/earendil-works/pi#readme","bugs":{"url":"https://github.com/earendil-works/pi/issues"},"bin":{"pi-ai":"dist/cli.js"},"dist":{"shasum":"5a3a4e4e39cc62ce3d7fe8291fdb11ff16efd0e7","tarball":"https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.80.6.tgz","fileCount":594,"integrity":"sha512-7xfLk8sANBp+bpPEbjoOZTbPxsa+++b1JXAoSJsNa3vbs9AHHEclmvg54XLQcxH+fuwaeti/g2jeIfJ+mVYLpA==","signatures":[{"sig":"MEYCIQDj3xUcJ1L8WFLkpjP2JUZatv0GGMCwpZI3VYp/dqkdwgIhAPTtuFAqNefJFH7OPo9oDtBHaFJ6WF1odnnrNUdaqL6l","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fpi-ai@0.80.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":6040038},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./api/*":{"types":"./dist/api/*.d.ts","import":"./dist/api/*.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./compat":{"types":"./dist/compat.d.ts","import":"./dist/compat.js"},"./providers/*":{"types":"./dist/providers/*.d.ts","import":"./dist/providers/*.js"},"./bedrock-provider":{"types":"./dist/bedrock-provider.d.ts","import":"./dist/bedrock-provider.js"}},"gitHead":"2b3fda9921b5590f285165287bd442a25817f17b","scripts":{"test":"vitest --run","build":"npm run generate-models && npm run generate-image-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","prepublishOnly":"npm run clean && npm run build","generate-models":"node scripts/generate-models.ts","generate-image-models":"node scripts/generate-image-models.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:975b2765-9d44-42ba-a322-c1cbbce03f36"}},"repository":{"url":"git+https://github.com/earendil-works/pi.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.16.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"sideEffects":["./dist/compat.js","./dist/images.js","./dist/providers/images/register-builtins.js"],"_nodeVersion":"22.23.1","dependencies":{"openai":"6.26.0","typebox":"1.1.38","partial-json":"0.1.7","@google/genai":"1.52.0","http-proxy-agent":"7.0.2","@anthropic-ai/sdk":"0.91.1","https-proxy-agent":"7.0.6","@opentelemetry/api":"1.9.0","@mistralai/mistralai":"2.2.6","@smithy/node-http-handler":"4.7.3","@aws-sdk/client-bedrock-runtime":"3.1048.0"},"_hasShrinkwrap":false,"devDependencies":{"canvas":"3.2.3","vitest":"4.1.9","@types/node":"24.12.4"},"_npmOperationalInternal":{"tmp":"tmp/pi-ai_0.80.6_1783639304437_0.924792504608964","host":"s3://npm-registry-packages-npm-production"}},"0.80.7":{"name":"@earendil-works/pi-ai","version":"0.80.7","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@earendil-works/pi-ai@0.80.7","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"},{"name":"rwachtler","email":"r.wachtler@outlook.com"}],"homepage":"https://github.com/earendil-works/pi#readme","bugs":{"url":"https://github.com/earendil-works/pi/issues"},"bin":{"pi-ai":"dist/cli.js"},"dist":{"shasum":"6125379d71fe8314c2166e7cddb6e4b847213562","tarball":"https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.80.7.tgz","fileCount":610,"integrity":"sha512-8RLKLwe5TFM9kKFMNu/lTzveduq4GxZbnlG6ba8FAhLeb5wJP4zbj1eBumKBRvggpFQnW5R/Vo2a8zTlHsV9SQ==","signatures":[{"sig":"MEUCIQDjeKIIYzk8IqlYDWWjJmMk6YbwNS6YIAW1fZrXlt4GggIgQoQ7nRlIU62AfWE+e5z5iQREsPaMl6x3HC0obhlWaR4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fpi-ai@0.80.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":6262600},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./api/*":{"types":"./dist/api/*.d.ts","import":"./dist/api/*.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./compat":{"types":"./dist/compat.d.ts","import":"./dist/compat.js"},"./providers/*":{"types":"./dist/providers/*.d.ts","import":"./dist/providers/*.js"},"./bedrock-provider":{"types":"./dist/bedrock-provider.d.ts","import":"./dist/bedrock-provider.js"}},"gitHead":"818d67457cdd6b60bce6b121d16b23141c252dd8","scripts":{"test":"vitest --run","build":"npm run generate-models && npm run generate-image-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","prepublishOnly":"npm run clean && npm run build","generate-models":"node scripts/generate-models.ts","generate-image-models":"node scripts/generate-image-models.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:975b2765-9d44-42ba-a322-c1cbbce03f36"}},"repository":{"url":"git+https://github.com/earendil-works/pi.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.16.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"sideEffects":["./dist/compat.js","./dist/images.js","./dist/providers/images/register-builtins.js"],"_nodeVersion":"22.23.1","dependencies":{"openai":"6.26.0","typebox":"1.1.38","partial-json":"0.1.7","@google/genai":"1.52.0","http-proxy-agent":"7.0.2","@anthropic-ai/sdk":"0.91.1","https-proxy-agent":"7.0.6","@opentelemetry/api":"1.9.0","@mistralai/mistralai":"2.2.6","@smithy/node-http-handler":"4.7.3","@aws-sdk/client-bedrock-runtime":"3.1048.0"},"_hasShrinkwrap":false,"devDependencies":{"canvas":"3.2.3","vitest":"4.1.9","@types/node":"24.12.4"},"_npmOperationalInternal":{"tmp":"tmp/pi-ai_0.80.7_1784047291165_0.052876757986674905","host":"s3://npm-registry-packages-npm-production"}},"0.80.8":{"name":"@earendil-works/pi-ai","version":"0.80.8","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@earendil-works/pi-ai@0.80.8","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"},{"name":"rwachtler","email":"r.wachtler@outlook.com"}],"homepage":"https://github.com/earendil-works/pi#readme","bugs":{"url":"https://github.com/earendil-works/pi/issues"},"bin":{"pi-ai":"dist/cli.js"},"dist":{"shasum":"c53a0a5600d44508dc81eca1e79c94c1f01414b5","tarball":"https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.80.8.tgz","fileCount":630,"integrity":"sha512-GkiMUP3PB0hwBhj7qNppCa6z1U+CnwBf4gcxC+fg2PWdNrliaJQQNp4DUERiZqS7MJBLEu56kwpdrG7Tjymonw==","signatures":[{"sig":"MEUCIG2uZpOL7jqqLNQAhSMuuo7i0MnSSFp6mKTNbM6PbwHnAiEA392VCoYvnql4N/QpynS50JN+gW4W5k0g7Dwl/S7VNkY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fpi-ai@0.80.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":6333746},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./api/*":{"types":"./dist/api/*.d.ts","import":"./dist/api/*.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./compat":{"types":"./dist/compat.d.ts","import":"./dist/compat.js"},"./bun-oauth":{"types":"./dist/bun-oauth.d.ts","import":"./dist/bun-oauth.js"},"./providers/*":{"types":"./dist/providers/*.d.ts","import":"./dist/providers/*.js"},"./bedrock-provider":{"types":"./dist/bedrock-provider.d.ts","import":"./dist/bedrock-provider.js"}},"gitHead":"fae7176cb9f7c4725a40d9d481d8d70b80f18086","scripts":{"test":"vitest --run","build":"npm run generate-models && npm run generate-image-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","prepublishOnly":"npm run clean && npm run build","generate-models":"node scripts/generate-models.ts","generate-image-models":"node scripts/generate-image-models.ts","generate-model-catalog":"node scripts/generate-models.ts --strict --json-only --json-output ../../.artifacts/model-catalog"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:975b2765-9d44-42ba-a322-c1cbbce03f36"}},"repository":{"url":"git+https://github.com/earendil-works/pi.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.16.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"sideEffects":["./dist/compat.js","./dist/images.js","./dist/providers/images/register-builtins.js"],"_nodeVersion":"22.23.1","dependencies":{"openai":"6.26.0","typebox":"1.1.38","partial-json":"0.1.7","@google/genai":"1.52.0","http-proxy-agent":"7.0.2","@anthropic-ai/sdk":"0.91.1","https-proxy-agent":"7.0.6","@opentelemetry/api":"1.9.0","@mistralai/mistralai":"2.2.6","@smithy/node-http-handler":"4.7.3","@aws-sdk/client-bedrock-runtime":"3.1048.0"},"_hasShrinkwrap":false,"devDependencies":{"canvas":"3.2.3","vitest":"4.1.9","@types/node":"24.12.4"},"_npmOperationalInternal":{"tmp":"tmp/pi-ai_0.80.8_1784212817235_0.32911055431814407","host":"s3://npm-registry-packages-npm-production"}},"0.80.9":{"name":"@earendil-works/pi-ai","version":"0.80.9","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@earendil-works/pi-ai@0.80.9","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"},{"name":"rwachtler","email":"r.wachtler@outlook.com"}],"homepage":"https://github.com/earendil-works/pi#readme","bugs":{"url":"https://github.com/earendil-works/pi/issues"},"bin":{"pi-ai":"dist/cli.js"},"dist":{"shasum":"8f11195ed6787100197d646217f1fdc17c480df4","tarball":"https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.80.9.tgz","fileCount":630,"integrity":"sha512-kHsH5nO4FU7mbKnskK0BVPVuWzNb2DrZtiN1fb6LamP+6BMI8xEZiAOw2fqs4VudvlMQgOLjtbgErv+kNJRPIg==","signatures":[{"sig":"MEYCIQDLoCEg0de1qC3qkN3E2GMjjHD/3Pca0f2oIo1Ug2BSYQIhAPcjLP7CjEVraqgqMzuPcAi76jDtX7l0rw0/+1s9WwsK","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fpi-ai@0.80.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":6366899},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./api/*":{"types":"./dist/api/*.d.ts","import":"./dist/api/*.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./compat":{"types":"./dist/compat.d.ts","import":"./dist/compat.js"},"./bun-oauth":{"types":"./dist/bun-oauth.d.ts","import":"./dist/bun-oauth.js"},"./providers/*":{"types":"./dist/providers/*.d.ts","import":"./dist/providers/*.js"},"./bedrock-provider":{"types":"./dist/bedrock-provider.d.ts","import":"./dist/bedrock-provider.js"}},"gitHead":"2d16f92973230a7e095aa984f150ba8702784f50","scripts":{"test":"vitest --run","build":"npm run generate-models && npm run generate-image-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","prepublishOnly":"npm run clean && npm run build","generate-models":"node scripts/generate-models.ts","generate-image-models":"node scripts/generate-image-models.ts","generate-model-catalog":"node scripts/generate-models.ts --strict --json-only --json-output ../../.artifacts/model-catalog"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:975b2765-9d44-42ba-a322-c1cbbce03f36"}},"repository":{"url":"git+https://github.com/earendil-works/pi.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.16.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"sideEffects":["./dist/compat.js","./dist/images.js","./dist/providers/images/register-builtins.js"],"_nodeVersion":"22.23.1","dependencies":{"openai":"6.26.0","typebox":"1.1.38","partial-json":"0.1.7","@google/genai":"1.52.0","http-proxy-agent":"7.0.2","@anthropic-ai/sdk":"0.91.1","https-proxy-agent":"7.0.6","@opentelemetry/api":"1.9.0","@mistralai/mistralai":"2.2.6","@smithy/node-http-handler":"4.7.3","@aws-sdk/client-bedrock-runtime":"3.1048.0"},"_hasShrinkwrap":false,"devDependencies":{"canvas":"3.2.3","vitest":"4.1.9","@types/node":"24.12.4"},"_npmOperationalInternal":{"tmp":"tmp/pi-ai_0.80.9_1784222592349_0.874133770220552","host":"s3://npm-registry-packages-npm-production"}},"0.80.10":{"name":"@earendil-works/pi-ai","version":"0.80.10","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@earendil-works/pi-ai@0.80.10","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"},{"name":"rwachtler","email":"r.wachtler@outlook.com"}],"homepage":"https://github.com/earendil-works/pi#readme","bugs":{"url":"https://github.com/earendil-works/pi/issues"},"bin":{"pi-ai":"dist/cli.js"},"dist":{"shasum":"97e8a4c1a005dbeef193a2074754b173d88c5a78","tarball":"https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.80.10.tgz","fileCount":630,"integrity":"sha512-Moe/H8c87yacDGK9dPbWphZNjVsrb3nTrIHycOQJAkFEnY9PYxOOd74+ny44kATfPU9Dm7aTHefar3pZF+UKUA==","signatures":[{"sig":"MEQCIDnUD9B9nZbYOBH6WytwuGRabZyNpapxBemhsmr/lludAiAP8N+I26p28H8YUR7ZrsCOf0daa+G94h4G+OhsqR544Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fpi-ai@0.80.10","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":6359955},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./api/*":{"types":"./dist/api/*.d.ts","import":"./dist/api/*.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./compat":{"types":"./dist/compat.d.ts","import":"./dist/compat.js"},"./bun-oauth":{"types":"./dist/bun-oauth.d.ts","import":"./dist/bun-oauth.js"},"./providers/*":{"types":"./dist/providers/*.d.ts","import":"./dist/providers/*.js"},"./bedrock-provider":{"types":"./dist/bedrock-provider.d.ts","import":"./dist/bedrock-provider.js"}},"gitHead":"8dc78834cde4e329284cf505f9e3f99763df5529","scripts":{"test":"vitest --run","build":"npm run generate-models && npm run generate-image-models && tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","prepublishOnly":"npm run clean && npm run build","generate-models":"node scripts/generate-models.ts","generate-image-models":"node scripts/generate-image-models.ts","generate-model-catalog":"node scripts/generate-models.ts --strict --json-only --json-output ../../.artifacts/model-catalog"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:975b2765-9d44-42ba-a322-c1cbbce03f36"}},"repository":{"url":"git+https://github.com/earendil-works/pi.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.16.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"sideEffects":["./dist/compat.js","./dist/images.js","./dist/providers/images/register-builtins.js"],"_nodeVersion":"22.23.1","dependencies":{"openai":"6.26.0","typebox":"1.1.38","partial-json":"0.1.7","@google/genai":"1.52.0","http-proxy-agent":"7.0.2","@anthropic-ai/sdk":"0.91.1","https-proxy-agent":"7.0.6","@opentelemetry/api":"1.9.0","@mistralai/mistralai":"2.2.6","@smithy/node-http-handler":"4.7.3","@aws-sdk/client-bedrock-runtime":"3.1048.0"},"_hasShrinkwrap":false,"devDependencies":{"canvas":"3.2.3","vitest":"4.1.9","@types/node":"24.12.4"},"_npmOperationalInternal":{"tmp":"tmp/pi-ai_0.80.10_1784239490721_0.7447630329421477","host":"s3://npm-registry-packages-npm-production"}},"0.81.0":{"name":"@earendil-works/pi-ai","version":"0.81.0","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@earendil-works/pi-ai@0.81.0","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"},{"name":"rwachtler","email":"r.wachtler@outlook.com"}],"homepage":"https://github.com/earendil-works/pi#readme","bugs":{"url":"https://github.com/earendil-works/pi/issues"},"bin":{"pi-ai":"dist/cli.js"},"dist":{"shasum":"8e4296d3034077325ec0379e6ea9c62be4fe11d3","tarball":"https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.81.0.tgz","fileCount":692,"integrity":"sha512-n3lDV1Px/2BOp86rUJkoHcXuQ6uf7711VEtSjE5gTwrnPeMAEjzV3LnbQ3wTF9bUxl253Igi3U35U1CMF5POng==","signatures":[{"sig":"MEUCIQD2j2WViOFu57RszxDWIvJNMS5xc3Ykyy5+uwJNxBh8qgIgIR2004pl0IQBmxQPJgfkzKwL1b30NiekR48VCHYFZuc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fpi-ai@0.81.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3994969},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./api/*":{"types":"./dist/api/*.d.ts","import":"./dist/api/*.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./compat":{"types":"./dist/compat.d.ts","import":"./dist/compat.js"},"./bun-oauth":{"types":"./dist/bun-oauth.d.ts","import":"./dist/bun-oauth.js"},"./providers/*":{"types":"./dist/providers/*.d.ts","import":"./dist/providers/*.js"},"./bedrock-provider":{"types":"./dist/bedrock-provider.d.ts","import":"./dist/bedrock-provider.js"}},"gitHead":"9c480b6ad2c7419875a7a850fb4ad5f9232313b8","scripts":{"test":"vitest --run","build":"npm run generate-models && npm run build:offline","clean":"shx rm -rf dist","build:offline":"npm run check:model-data && tsgo -p tsconfig.build.json && shx rm -rf dist/providers/data && shx cp -r src/providers/data dist/providers/data","prepublishOnly":"npm run clean && npm run build","generate-models":"node scripts/generate-models.ts --strict","check:model-data":"node scripts/check-model-data.ts","hydrate-model-data":"node scripts/generate-models.ts --strict --data-only","generate-image-models":"node scripts/generate-image-models.ts --strict","generate-model-catalog":"node scripts/generate-models.ts --strict --json-only --json-output ../../.artifacts/model-catalog"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:975b2765-9d44-42ba-a322-c1cbbce03f36"}},"repository":{"url":"git+https://github.com/earendil-works/pi.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.16.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"sideEffects":["./dist/compat.js","./dist/images.js","./dist/providers/images/register-builtins.js"],"_nodeVersion":"22.23.1","dependencies":{"openai":"6.26.0","typebox":"1.1.38","partial-json":"0.1.7","@google/genai":"1.52.0","http-proxy-agent":"7.0.2","@anthropic-ai/sdk":"0.91.1","https-proxy-agent":"7.0.6","@opentelemetry/api":"1.9.0","@mistralai/mistralai":"2.2.6","@smithy/node-http-handler":"4.7.3","@aws-sdk/client-bedrock-runtime":"3.1048.0"},"_hasShrinkwrap":false,"devDependencies":{"canvas":"3.2.3","vitest":"4.1.9","@types/node":"24.12.4"},"_npmOperationalInternal":{"tmp":"tmp/pi-ai_0.81.0_1784640799730_0.08400062399470087","host":"s3://npm-registry-packages-npm-production"}},"0.81.1":{"name":"@earendil-works/pi-ai","version":"0.81.1","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@earendil-works/pi-ai@0.81.1","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"},{"name":"rwachtler","email":"r.wachtler@outlook.com"}],"homepage":"https://github.com/earendil-works/pi#readme","bugs":{"url":"https://github.com/earendil-works/pi/issues"},"bin":{"pi-ai":"dist/cli.js"},"dist":{"shasum":"ec49e3912de05587f05813cdfb470f584ab9e501","tarball":"https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.81.1.tgz","fileCount":692,"integrity":"sha512-hzHE7Z8l5mgJk+ke67Lge0rwS2+wbKJrFKl9o5M1R1rh33+cCT7D1AHz1OAtX5wFs90E1/BTGhyJRTUHaMxGvQ==","signatures":[{"sig":"MEUCIQCkZFe76Q50IX3tRntM0xDn/cddzRjK56TZAJNGZ/ZUkwIgIY6CSY6NJNfkIs6+e3nkMY6SF6SYyD6ED5/+5vEgRhI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fpi-ai@0.81.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4021581},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./api/*":{"types":"./dist/api/*.d.ts","import":"./dist/api/*.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./compat":{"types":"./dist/compat.d.ts","import":"./dist/compat.js"},"./bun-oauth":{"types":"./dist/bun-oauth.d.ts","import":"./dist/bun-oauth.js"},"./providers/*":{"types":"./dist/providers/*.d.ts","import":"./dist/providers/*.js"},"./bedrock-provider":{"types":"./dist/bedrock-provider.d.ts","import":"./dist/bedrock-provider.js"}},"gitHead":"20be4b18d4c57487f8993d2762bace129f0cf7c6","scripts":{"test":"vitest --run","build":"npm run generate-models && npm run build:offline","clean":"shx rm -rf dist","build:offline":"npm run check:model-data && tsgo -p tsconfig.build.json && shx rm -rf dist/providers/data && shx cp -r src/providers/data dist/providers/data","prepublishOnly":"npm run clean && npm run build","generate-models":"node scripts/generate-models.ts --strict","check:model-data":"node scripts/check-model-data.ts","hydrate-model-data":"node scripts/generate-models.ts --strict --data-only","generate-image-models":"node scripts/generate-image-models.ts --strict","generate-model-catalog":"node scripts/generate-models.ts --strict --json-only --json-output ../../.artifacts/model-catalog"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:975b2765-9d44-42ba-a322-c1cbbce03f36"}},"repository":{"url":"git+https://github.com/earendil-works/pi.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.16.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"sideEffects":["./dist/compat.js","./dist/images.js","./dist/providers/images/register-builtins.js"],"_nodeVersion":"22.23.1","dependencies":{"openai":"6.26.0","typebox":"1.1.38","partial-json":"0.1.7","@google/genai":"1.52.0","http-proxy-agent":"7.0.2","@anthropic-ai/sdk":"0.91.1","https-proxy-agent":"7.0.6","@opentelemetry/api":"1.9.0","@mistralai/mistralai":"2.2.6","@smithy/node-http-handler":"4.7.3","@aws-sdk/client-bedrock-runtime":"3.1048.0"},"_hasShrinkwrap":false,"devDependencies":{"canvas":"3.2.3","vitest":"4.1.9","@types/node":"24.12.4"},"_npmOperationalInternal":{"tmp":"tmp/pi-ai_0.81.1_1784652289317_0.43859137693230665","host":"s3://npm-registry-packages-npm-production"}},"0.82.0":{"name":"@earendil-works/pi-ai","version":"0.82.0","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@earendil-works/pi-ai@0.82.0","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"},{"name":"rwachtler","email":"r.wachtler@outlook.com"}],"homepage":"https://github.com/earendil-works/pi#readme","bugs":{"url":"https://github.com/earendil-works/pi/issues"},"bin":{"pi-ai":"dist/cli.js"},"dist":{"shasum":"b1f33e7cb81ef6a55918baaef2764ff03c37a925","tarball":"https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.82.0.tgz","fileCount":712,"integrity":"sha512-8MvW9+zno13sXDuT2kFMnWeTNUufUhPeZDRVO+igGoBRCDWgn7Xh2FkRQI1mRuet6QhF4ENQuLYdIAOyG6BhNw==","signatures":[{"sig":"MEYCIQD6OLCt/tiTFTkH+vzFqBvKorKVuFYzBhP2VQhAmlmupwIhALNeZL6DexplL6R8eJQ+8FasvCHtgyz+X/oIdlKbUHAZ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIHK//AgcB5Oo9y0ZGRDCmXmHEugI2OMuesIqkEBKoDXnAiAZ5lcorNw+aI9P9nExaCvc9Y6gmmdF3qkHk9QDVknjSA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fpi-ai@0.82.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3631098},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./api/*":{"types":"./dist/api/*.d.ts","import":"./dist/api/*.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./compat":{"types":"./dist/compat.d.ts","import":"./dist/compat.js"},"./bun-oauth":{"types":"./dist/bun-oauth.d.ts","import":"./dist/bun-oauth.js"},"./providers/*":{"types":"./dist/providers/*.d.ts","import":"./dist/providers/*.js"},"./bedrock-provider":{"types":"./dist/bedrock-provider.d.ts","import":"./dist/bedrock-provider.js"}},"gitHead":"083e61621276bff9f6faefab87ce07fcd98734e2","scripts":{"test":"vitest --run","build":"npm run generate-models && npm run build:offline","clean":"shx rm -rf dist","build:offline":"npm run check:model-data && tsgo -p tsconfig.build.json && shx rm -rf dist/providers/data && shx cp -r src/providers/data dist/providers/data","prepublishOnly":"npm run clean && npm run build","generate-models":"node scripts/generate-models.ts --strict","check:model-data":"node scripts/check-model-data.ts","hydrate-model-data":"node scripts/generate-models.ts --strict --data-only","generate-image-models":"node scripts/generate-image-models.ts --strict","generate-model-catalog":"node scripts/generate-models.ts --strict --json-only --json-output ../../.artifacts/model-catalog"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:975b2765-9d44-42ba-a322-c1cbbce03f36"}},"repository":{"url":"git+https://github.com/earendil-works/pi.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.16.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"sideEffects":["./dist/compat.js","./dist/images.js","./dist/providers/images/register-builtins.js"],"_nodeVersion":"22.23.1","dependencies":{"openai":"6.26.0","typebox":"1.1.38","partial-json":"0.1.7","@google/genai":"1.52.0","http-proxy-agent":"7.0.2","@anthropic-ai/sdk":"0.91.1","https-proxy-agent":"7.0.6","@opentelemetry/api":"1.9.0","@mistralai/mistralai":"2.2.6","@smithy/node-http-handler":"4.7.3","@aws-sdk/client-bedrock-runtime":"3.1048.0"},"_hasShrinkwrap":false,"devDependencies":{"canvas":"3.2.3","vitest":"4.1.9","@types/node":"24.12.4"},"_npmOperationalInternal":{"tmp":"tmp/pi-ai_0.82.0_1784873495208_0.6421327315763277","host":"s3://npm-registry-packages-npm-production"}},"0.82.1":{"name":"@earendil-works/pi-ai","version":"0.82.1","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@earendil-works/pi-ai@0.82.1","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"},{"name":"rwachtler","email":"r.wachtler@outlook.com"}],"homepage":"https://github.com/earendil-works/pi#readme","bugs":{"url":"https://github.com/earendil-works/pi/issues"},"bin":{"pi-ai":"dist/cli.js"},"dist":{"shasum":"02ebdfc2997fd88ca1f51a7b5c01f337a9462f34","tarball":"https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.82.1.tgz","fileCount":712,"integrity":"sha512-3WFYRhEp3lQB3444EhPMBcM7zSaEUE3eJgHOR7s4081NLqbw/FsWilIKWXSua0Gv3sRr7m9xMidR3pPDE7jI/A==","signatures":[{"sig":"MEYCIQCNSafqQmg36U4iaLnjCCRan5QBouzk/E8gLMP2+277NQIhAPEFgAKYst5ghb/1FDRtERr6HMF3ozJ6MVwhQODBI3zs","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIFiNq8ysAjWhLT4CpxMVTsEAgYWrPL8unuka0twlhU8nAiBdKGgADStyXLgTOsEdVYtFBhN0drAE7BzjKaLbfIRjpA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fpi-ai@0.82.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3639159},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./api/*":{"types":"./dist/api/*.d.ts","import":"./dist/api/*.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./compat":{"types":"./dist/compat.d.ts","import":"./dist/compat.js"},"./bun-oauth":{"types":"./dist/bun-oauth.d.ts","import":"./dist/bun-oauth.js"},"./providers/*":{"types":"./dist/providers/*.d.ts","import":"./dist/providers/*.js"},"./bedrock-provider":{"types":"./dist/bedrock-provider.d.ts","import":"./dist/bedrock-provider.js"}},"gitHead":"b4f293684bba718d59cc1157679bcf6157b3a7f5","scripts":{"test":"vitest --run","build":"npm run generate-models && npm run build:offline","clean":"shx rm -rf dist","build:offline":"npm run check:model-data && tsgo -p tsconfig.build.json && shx rm -rf dist/providers/data && shx cp -r src/providers/data dist/providers/data","prepublishOnly":"npm run clean && npm run build","generate-models":"node scripts/generate-models.ts --strict","check:model-data":"node scripts/check-model-data.ts","hydrate-model-data":"node scripts/generate-models.ts --strict --data-only","generate-image-models":"node scripts/generate-image-models.ts --strict","generate-model-catalog":"node scripts/generate-models.ts --strict --json-only --json-output ../../.artifacts/model-catalog"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:975b2765-9d44-42ba-a322-c1cbbce03f36"}},"repository":{"url":"git+https://github.com/earendil-works/pi.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.16.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"sideEffects":["./dist/compat.js","./dist/images.js","./dist/providers/images/register-builtins.js"],"_nodeVersion":"22.23.1","dependencies":{"openai":"6.26.0","typebox":"1.1.38","partial-json":"0.1.7","@google/genai":"1.52.0","http-proxy-agent":"7.0.2","@anthropic-ai/sdk":"0.91.1","https-proxy-agent":"7.0.6","@opentelemetry/api":"1.9.0","@mistralai/mistralai":"2.2.6","@smithy/node-http-handler":"4.7.3","@aws-sdk/client-bedrock-runtime":"3.1048.0"},"_hasShrinkwrap":false,"devDependencies":{"canvas":"3.2.3","vitest":"4.1.9","@types/node":"24.12.4"},"_npmOperationalInternal":{"tmp":"tmp/pi-ai_0.82.1_1784983612850_0.5230451893834744","host":"s3://npm-registry-packages-npm-production"}},"0.83.0":{"name":"@earendil-works/pi-ai","version":"0.83.0","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@earendil-works/pi-ai@0.83.0","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"},{"name":"rwachtler","email":"r.wachtler@outlook.com"}],"homepage":"https://github.com/earendil-works/pi#readme","bugs":{"url":"https://github.com/earendil-works/pi/issues"},"bin":{"pi-ai":"dist/cli.js"},"dist":{"shasum":"ac901287b6710469a29c77bd3b0861ce2dbc1a8c","tarball":"https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.83.0.tgz","fileCount":712,"integrity":"sha512-m3IZD4g3er0V8TC9+Vpgw/sjTKqcJlkcIBy/JvsgRubuuik3tAVzyugUg4rVrShIkkOT69mEd34NEqKUIsl6JQ==","signatures":[{"sig":"MEYCIQDU5+EjCFYyCOki/Jui3T/rr0wD514wWCXlVcuc4DLm2AIhAOthhE3GwrAQkWf6DCIYszE5qcTV+8qt/DK3uRiX4VUz","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCs5UQ+1sjW88ZNm+Qt8TdNFWNMr/sXEoqnU4AQg7ikwAIhAMcYzx8lJxqMrYJWWIinAepoS+t5JcgHq/e28Jc62P6D","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fpi-ai@0.83.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3693688},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./api/*":{"types":"./dist/api/*.d.ts","import":"./dist/api/*.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./compat":{"types":"./dist/compat.d.ts","import":"./dist/compat.js"},"./bun-oauth":{"types":"./dist/bun-oauth.d.ts","import":"./dist/bun-oauth.js"},"./providers/*":{"types":"./dist/providers/*.d.ts","import":"./dist/providers/*.js"},"./bedrock-provider":{"types":"./dist/bedrock-provider.d.ts","import":"./dist/bedrock-provider.js"}},"gitHead":"845d6ff1f6643aba440341cce877ce1c43ebbc39","scripts":{"test":"vitest --run","build":"npm run generate-models && npm run build:offline","clean":"shx rm -rf dist","build:offline":"npm run check:model-data && tsgo -p tsconfig.build.json && shx rm -rf dist/providers/data && shx cp -r src/providers/data dist/providers/data","prepublishOnly":"npm run clean && npm run build","generate-models":"node scripts/generate-models.ts --strict","check:model-data":"node scripts/check-model-data.ts","hydrate-model-data":"node scripts/generate-models.ts --strict --data-only","generate-image-models":"node scripts/generate-image-models.ts --strict","generate-model-catalog":"node scripts/generate-models.ts --strict --json-only --json-output ../../.artifacts/model-catalog"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:975b2765-9d44-42ba-a322-c1cbbce03f36"}},"repository":{"url":"git+https://github.com/earendil-works/pi.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.16.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"sideEffects":["./dist/compat.js","./dist/images.js","./dist/providers/images/register-builtins.js"],"_nodeVersion":"22.23.1","dependencies":{"openai":"6.26.0","typebox":"1.3.7","partial-json":"0.1.7","@google/genai":"1.52.0","http-proxy-agent":"7.0.2","@anthropic-ai/sdk":"0.91.1","https-proxy-agent":"7.0.6","@opentelemetry/api":"1.9.0","@mistralai/mistralai":"2.2.6","@smithy/node-http-handler":"4.7.3","@aws-sdk/client-bedrock-runtime":"3.1048.0"},"_hasShrinkwrap":false,"devDependencies":{"canvas":"3.2.3","vitest":"4.1.9","@types/node":"24.12.4"},"_npmOperationalInternal":{"tmp":"tmp/pi-ai_0.83.0_1785364265433_0.11070409257109248","host":"s3://npm-registry-packages-npm-production"}},"0.84.0":{"name":"@earendil-works/pi-ai","version":"0.84.0","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@earendil-works/pi-ai@0.84.0","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"},{"name":"rwachtler","email":"r.wachtler@outlook.com"}],"homepage":"https://github.com/earendil-works/pi#readme","bugs":{"url":"https://github.com/earendil-works/pi/issues"},"bin":{"pi-ai":"dist/cli.js"},"dist":{"shasum":"a81f9388cc843055a7085b9620ffe85376e758cf","tarball":"https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.84.0.tgz","fileCount":725,"integrity":"sha512-N9RDk8q0eglGiy+NqTZ3Ev2j+6oFNXSAJa8b0CYhvWB9HGiKZjsoCESXkUvMDLybrn0wXp75sdsoBzEtHxk9kA==","signatures":[{"sig":"MEUCIE/ej5fagC5qeCVdiOQSeax1xPoSgNwTC2W/kdiP3o6IAiEAhg+oKtNWHu4PyuJNKaZIFU1NkMee0Dy0oDcZfukd8Ek=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIEIpwcvSDE3cr65OgrVauNt1dKGYpw9sVwRP9VxX4kVeAiAjmQRGj4oQJWOZRJL0o+ypR2ZCZ4wqkYtOmYw2ML9n5w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fpi-ai@0.84.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3856890},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./api/*":{"types":"./dist/api/*.d.ts","import":"./dist/api/*.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./compat":{"types":"./dist/compat.d.ts","import":"./dist/compat.js"},"./bun-oauth":{"types":"./dist/bun-oauth.d.ts","import":"./dist/bun-oauth.js"},"./providers/*":{"types":"./dist/providers/*.d.ts","import":"./dist/providers/*.js"},"./bedrock-provider":{"types":"./dist/bedrock-provider.d.ts","import":"./dist/bedrock-provider.js"}},"gitHead":"8199aca40c9cf27aff3de7ba852e420985a54bf5","scripts":{"test":"vitest --run","build":"npm run generate-models && npm run build:offline","clean":"shx rm -rf dist","build:offline":"npm run check:model-data && tsgo -p tsconfig.build.json && shx rm -rf dist/providers/data && shx cp -r src/providers/data dist/providers/data","prepublishOnly":"npm run clean && npm run build","generate-models":"node scripts/generate-models.ts --strict","check:model-data":"node scripts/check-model-data.ts","hydrate-model-data":"node scripts/generate-models.ts --strict --data-only","generate-image-models":"node scripts/generate-image-models.ts --strict","generate-model-catalog":"node scripts/generate-models.ts --strict --json-only --json-output ../../.artifacts/model-catalog"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:975b2765-9d44-42ba-a322-c1cbbce03f36"}},"repository":{"url":"git+https://github.com/earendil-works/pi.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.16.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"sideEffects":["./dist/compat.js","./dist/images.js","./dist/providers/images/register-builtins.js"],"_nodeVersion":"22.23.2","dependencies":{"openai":"6.26.0","typebox":"1.3.7","partial-json":"0.1.7","@google/genai":"1.52.0","http-proxy-agent":"7.0.2","@anthropic-ai/sdk":"0.91.1","https-proxy-agent":"7.0.6","@opentelemetry/api":"1.9.0","@mistralai/mistralai":"2.2.6","@smithy/node-http-handler":"4.7.3","@earendil-works/pi-telemetry":"^0.84.0","@aws-sdk/client-bedrock-runtime":"3.1048.0"},"_hasShrinkwrap":false,"devDependencies":{"canvas":"3.2.3","vitest":"4.1.9","@types/node":"24.12.4"},"_npmOperationalInternal":{"tmp":"tmp/pi-ai_0.84.0_1786014710529_0.12004028593776561","host":"s3://npm-registry-packages-npm-production"}},"0.84.1":{"name":"@earendil-works/pi-ai","version":"0.84.1","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@earendil-works/pi-ai@0.84.1","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"},{"name":"rwachtler","email":"r.wachtler@outlook.com"}],"homepage":"https://github.com/earendil-works/pi#readme","bugs":{"url":"https://github.com/earendil-works/pi/issues"},"bin":{"pi-ai":"dist/cli.js"},"dist":{"shasum":"e3e6318392a9f6df6fcc9040dcfafa5e5fb779f4","tarball":"https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.84.1.tgz","fileCount":734,"integrity":"sha512-wMsAdJMxuNri08vLqTyYVI201DQQezGhPSTkzYsHdw5dYX3rCNwEmSvpaAwhi7ELKI/2tE/CEgSWg/6iRxSgdQ==","signatures":[{"sig":"MEQCIDUj9NLBHBwbEPN6O7pZKUfVa2r7rKryj0WXuNWPcCh7AiAKs6WPyS90CZ5K1UPH8NjFZ/faTw0M8m2aD+2csA6j8A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIFkCCRgMA0Xs8Prj4xWX8D81E6ZIxaFapmklvwETfoAbAiBp13m/pXgx7qCnscSEfEwbcvMmBFwBUIXgE365i+t/Gw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fpi-ai@0.84.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3894213},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./api/*":{"types":"./dist/api/*.d.ts","import":"./dist/api/*.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./compat":{"types":"./dist/compat.d.ts","import":"./dist/compat.js"},"./bun-oauth":{"types":"./dist/bun-oauth.d.ts","import":"./dist/bun-oauth.js"},"./providers/*":{"types":"./dist/providers/*.d.ts","import":"./dist/providers/*.js"},"./bedrock-provider":{"types":"./dist/bedrock-provider.d.ts","import":"./dist/bedrock-provider.js"}},"gitHead":"53fa77ccd8a279eb87e92294ef3687b03ff80112","scripts":{"test":"vitest --run","build":"npm run generate-models && npm run build:offline","clean":"shx rm -rf dist","build:offline":"npm run check:model-data && tsgo -p tsconfig.build.json && shx rm -rf dist/providers/data && shx cp -r src/providers/data dist/providers/data","prepublishOnly":"npm run clean && npm run build","generate-models":"node scripts/generate-models.ts --strict","check:model-data":"node scripts/check-model-data.ts","hydrate-model-data":"node scripts/generate-models.ts --strict --data-only","generate-image-models":"node scripts/generate-image-models.ts --strict","generate-model-catalog":"node scripts/generate-models.ts --strict --json-only --json-output ../../.artifacts/model-catalog"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:975b2765-9d44-42ba-a322-c1cbbce03f36"}},"repository":{"url":"git+https://github.com/earendil-works/pi.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.16.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"sideEffects":["./dist/compat.js","./dist/images.js","./dist/providers/images/register-builtins.js"],"_nodeVersion":"22.23.1","dependencies":{"openai":"6.26.0","typebox":"1.3.7","partial-json":"0.1.7","@google/genai":"1.52.0","http-proxy-agent":"7.0.2","@anthropic-ai/sdk":"0.91.1","https-proxy-agent":"7.0.6","@opentelemetry/api":"1.9.0","@mistralai/mistralai":"2.2.6","@smithy/node-http-handler":"4.7.3","@earendil-works/pi-telemetry":"^0.84.1","@aws-sdk/client-bedrock-runtime":"3.1048.0"},"_hasShrinkwrap":false,"devDependencies":{"canvas":"3.2.3","vitest":"4.1.9","@types/node":"24.12.4"},"_npmOperationalInternal":{"tmp":"tmp/pi-ai_0.84.1_1786082603039_0.6589351217890014","host":"s3://npm-registry-packages-npm-production"}},"0.84.2":{"name":"@earendil-works/pi-ai","version":"0.84.2","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@earendil-works/pi-ai@0.84.2","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"},{"name":"rwachtler","email":"r.wachtler@outlook.com"}],"homepage":"https://github.com/earendil-works/pi#readme","bugs":{"url":"https://github.com/earendil-works/pi/issues"},"bin":{"pi-ai":"dist/cli.js"},"dist":{"shasum":"708f13d19c0f5cfd9432fee704b0cde46e4d906f","tarball":"https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.84.2.tgz","fileCount":742,"integrity":"sha512-6MzsrYIYNVlE7SfpbL2yYb67Qo58p/7Q+xWG1RZvoX1P80aRCHSod2/13aFpxkow1lPO2LEh3c495J0Gwmyjig==","signatures":[{"sig":"MEUCIHXgQzJgr8eoB5pj3K19vgG1FndYK2mUeAV1GPf7g6OJAiEAvHjHbN1+RS7oDWBrbhcC9lLg0NWUuVbiMP5LuCJfGf0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCszXekZ88GyFSKniYV2XxkPn7JpMx3UaG1FT6dLVw5bQIhAO2clVfmDZWr3DVxNKM4sAio2W7wFCjjkOsohR7sNH26","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fpi-ai@0.84.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4034579},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./api/*":{"types":"./dist/api/*.d.ts","import":"./dist/api/*.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./compat":{"types":"./dist/compat.d.ts","import":"./dist/compat.js"},"./bun-oauth":{"types":"./dist/bun-oauth.d.ts","import":"./dist/bun-oauth.js"},"./providers/*":{"types":"./dist/providers/*.d.ts","import":"./dist/providers/*.js"},"./bedrock-provider":{"types":"./dist/bedrock-provider.d.ts","import":"./dist/bedrock-provider.js"}},"gitHead":"914cf1472e715297caa30db4b9535d534a9eb718","scripts":{"test":"vitest --run","build":"npm run generate-models && npm run build:offline","clean":"shx rm -rf dist","build:offline":"npm run check:model-data && tsgo -p tsconfig.build.json && shx rm -rf dist/providers/data && shx cp -r src/providers/data dist/providers/data","prepublishOnly":"npm run clean && npm run build","generate-models":"node scripts/generate-models.ts --strict","check:model-data":"node scripts/check-model-data.ts","hydrate-model-data":"node scripts/generate-models.ts --strict --data-only","generate-image-models":"node scripts/generate-image-models.ts --strict","generate-model-catalog":"node scripts/generate-models.ts --strict --json-only --json-output ../../.artifacts/model-catalog"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:975b2765-9d44-42ba-a322-c1cbbce03f36"}},"repository":{"url":"git+https://github.com/earendil-works/pi.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.16.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"sideEffects":["./dist/compat.js","./dist/images.js","./dist/providers/images/register-builtins.js"],"_nodeVersion":"22.23.1","dependencies":{"openai":"6.40.0","typebox":"1.3.7","partial-json":"0.1.7","@google/genai":"1.52.0","http-proxy-agent":"7.0.2","@anthropic-ai/sdk":"0.91.1","https-proxy-agent":"7.0.6","@opentelemetry/api":"1.9.0","@smithy/node-http-handler":"4.7.3","@earendil-works/pi-telemetry":"^0.84.2","@aws-sdk/client-bedrock-runtime":"3.1048.0"},"_hasShrinkwrap":false,"devDependencies":{"canvas":"3.2.3","vitest":"4.1.9","@types/node":"24.12.4"},"_npmOperationalInternal":{"tmp":"tmp/pi-ai_0.84.2_1786702074735_0.13374402543144526","host":"s3://npm-registry-packages-npm-production"}},"0.84.3":{"name":"@earendil-works/pi-ai","version":"0.84.3","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@earendil-works/pi-ai@0.84.3","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"},{"name":"rwachtler","email":"r.wachtler@outlook.com"}],"homepage":"https://github.com/earendil-works/pi#readme","bugs":{"url":"https://github.com/earendil-works/pi/issues"},"bin":{"pi-ai":"dist/cli.js"},"dist":{"shasum":"242bcf5cee37f49e7c79bc61b86bc0acc06a9aaa","tarball":"https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.84.3.tgz","fileCount":746,"integrity":"sha512-M0YUV8vNO3y2WwWSyY8ijKJV5W4gkSUixuvk+Z00ZBjsyMfsdXfITsHEwP1UIf09YRWXT6oGn0GlCamt+P32XQ==","signatures":[{"sig":"MEYCIQDn2cI0GJrJgeNm16mOgTK8FP/jpRM7vsmF4Zcw6e+W3AIhAMYFYRNNztkuElTso40ZTylUAYb1hDpI6+ikjXns5CfT","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCT7rmIAucP4DIbf8View+PpqdR3BFF9AmfKtyz9CCuMwIgBmups1MaAU2Id25lTW71y0MPfF0Ka3ufcnWedGdsYcU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fpi-ai@0.84.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4120452},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./api/*":{"types":"./dist/api/*.d.ts","import":"./dist/api/*.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./compat":{"types":"./dist/compat.d.ts","import":"./dist/compat.js"},"./bun-oauth":{"types":"./dist/bun-oauth.d.ts","import":"./dist/bun-oauth.js"},"./providers/*":{"types":"./dist/providers/*.d.ts","import":"./dist/providers/*.js"},"./bedrock-provider":{"types":"./dist/bedrock-provider.d.ts","import":"./dist/bedrock-provider.js"}},"gitHead":"bfb004d4418ff05c6f909eaaab856cbe75c1fde0","scripts":{"test":"vitest --run","build":"npm run generate-models && npm run build:offline","clean":"shx rm -rf dist","build:offline":"npm run check:model-data && tsgo -p tsconfig.build.json && shx rm -rf dist/providers/data && shx cp -r src/providers/data dist/providers/data","prepublishOnly":"npm run clean && npm run build","generate-models":"node scripts/generate-models.ts --strict","check:model-data":"node scripts/check-model-data.ts","hydrate-model-data":"node scripts/generate-models.ts --strict --data-only","generate-image-models":"node scripts/generate-image-models.ts --strict","generate-model-catalog":"node scripts/generate-models.ts --strict --json-only --json-output ../../.artifacts/model-catalog"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:975b2765-9d44-42ba-a322-c1cbbce03f36"}},"repository":{"url":"git+https://github.com/earendil-works/pi.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.16.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"sideEffects":["./dist/compat.js","./dist/images.js","./dist/providers/images/register-builtins.js"],"_nodeVersion":"22.23.2","dependencies":{"openai":"6.40.0","typebox":"1.3.7","partial-json":"0.1.7","@google/genai":"1.52.0","http-proxy-agent":"7.0.2","@anthropic-ai/sdk":"0.91.1","https-proxy-agent":"7.0.6","@smithy/node-http-handler":"4.7.3","@earendil-works/pi-telemetry":"^0.84.3","@aws-sdk/client-bedrock-runtime":"3.1048.0"},"_hasShrinkwrap":false,"devDependencies":{"canvas":"3.2.3","vitest":"4.1.9","@types/node":"22.19.19"},"_npmOperationalInternal":{"tmp":"tmp/pi-ai_0.84.3_1787569587056_0.08365473159746961","host":"s3://npm-registry-packages-npm-production"}},"0.84.4":{"name":"@earendil-works/pi-ai","version":"0.84.4","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@earendil-works/pi-ai@0.84.4","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"},{"name":"rwachtler","email":"r.wachtler@outlook.com"}],"homepage":"https://github.com/earendil-works/pi#readme","bugs":{"url":"https://github.com/earendil-works/pi/issues"},"bin":{"pi-ai":"dist/cli.js"},"dist":{"shasum":"348f1be5c2a0f4d17cc167fe1e5a7cabb191d079","tarball":"https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.84.4.tgz","fileCount":746,"integrity":"sha512-AClAZxf5+c4RRu44NJPS6wyQy+Nmq+Mzyyrdvm4ZVMNuixelO02RZX4G4Aq1F145Yzp43wnM5S+hLlSI7ypfVw==","signatures":[{"sig":"MEUCIQDbs3R7JTj8FtOs3wkQRzKlhINTxo/QTb5wpyJfYWXs9wIgWU9qdVD+J5aJbe2pMePbxLl5Ce1+SQUE2abW4Tz/CNw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDssg+kZfwvgebnTladPQ7r3uLvmCNaE2TARfdd1PVbCwIhAOEeMHkCzdR9NK8Dt4uuCqLvo+r6JW2FzvKZqeSqSuay","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fpi-ai@0.84.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4142646},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./api/*":{"types":"./dist/api/*.d.ts","import":"./dist/api/*.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./compat":{"types":"./dist/compat.d.ts","import":"./dist/compat.js"},"./bun-oauth":{"types":"./dist/bun-oauth.d.ts","import":"./dist/bun-oauth.js"},"./providers/*":{"types":"./dist/providers/*.d.ts","import":"./dist/providers/*.js"},"./bedrock-provider":{"types":"./dist/bedrock-provider.d.ts","import":"./dist/bedrock-provider.js"}},"gitHead":"b79e4cc834970cca69daebffab7df1da7d1e52c4","scripts":{"test":"vitest --run","build":"npm run generate-models && npm run build:offline","clean":"shx rm -rf dist","build:offline":"npm run check:model-data && tsgo -p tsconfig.build.json && shx rm -rf dist/providers/data && shx cp -r src/providers/data dist/providers/data","prepublishOnly":"npm run clean && npm run build","generate-models":"node scripts/generate-models.ts --strict","check:model-data":"node scripts/check-model-data.ts","hydrate-model-data":"node scripts/generate-models.ts --strict --data-only","generate-image-models":"node scripts/generate-image-models.ts --strict","generate-model-catalog":"node scripts/generate-models.ts --strict --json-only --json-output ../../.artifacts/model-catalog"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:975b2765-9d44-42ba-a322-c1cbbce03f36"}},"repository":{"url":"git+https://github.com/earendil-works/pi.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.16.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"sideEffects":["./dist/compat.js","./dist/images.js","./dist/providers/images/register-builtins.js"],"_nodeVersion":"22.23.2","dependencies":{"openai":"6.40.0","typebox":"1.3.7","partial-json":"0.1.7","@google/genai":"1.52.0","http-proxy-agent":"7.0.2","@anthropic-ai/sdk":"0.91.1","https-proxy-agent":"7.0.6","@smithy/node-http-handler":"4.7.3","@earendil-works/pi-telemetry":"^0.84.4","@aws-sdk/client-bedrock-runtime":"3.1048.0"},"_hasShrinkwrap":false,"devDependencies":{"canvas":"3.2.3","vitest":"4.1.9","@types/node":"22.19.19"},"_npmOperationalInternal":{"tmp":"tmp/pi-ai_0.84.4_1787954713843_0.7036543340649601","host":"s3://npm-registry-packages-npm-production"}},"0.85.0":{"name":"@earendil-works/pi-ai","version":"0.85.0","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@earendil-works/pi-ai@0.85.0","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"},{"name":"rwachtler","email":"r.wachtler@outlook.com"}],"homepage":"https://github.com/earendil-works/pi#readme","bugs":{"url":"https://github.com/earendil-works/pi/issues"},"bin":{"pi-ai":"dist/cli.js"},"dist":{"shasum":"93e0c324dd74160db01b926ad9801f9b8870c5a0","tarball":"https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.85.0.tgz","fileCount":750,"integrity":"sha512-CbeeZH3NHav7Rs182tYq0eoCAWfDd1MvOAXKzonIF4uN3uO99EB8iT1HfyGofJmPkAf8MeIwOBQtqqd0zgrPWA==","signatures":[{"sig":"MEUCIQC6euvptXzJR3Qu0YjsF1veZ/+TFMcE8cEHQoZsKP0jUgIgOVaFrNXLgG6mIF56pPUWbRpQFvMeBUPIA0rjUfTMjS8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCICsGbQdQpC5JdOBb01h7m54h73LaUzyRmR66/GXPrDmfAiAoVASxXphFsMOt/JBHuPIFX0VgFjPeXPUk3A5/BqvFRQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fpi-ai@0.85.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4266278},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./api/*":{"types":"./dist/api/*.d.ts","import":"./dist/api/*.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./compat":{"types":"./dist/compat.d.ts","import":"./dist/compat.js"},"./utils/*":{"types":"./dist/utils/*.d.ts","import":"./dist/utils/*.js"},"./bun-oauth":{"types":"./dist/bun-oauth.d.ts","import":"./dist/bun-oauth.js"},"./providers/*":{"types":"./dist/providers/*.d.ts","import":"./dist/providers/*.js"},"./bedrock-provider":{"types":"./dist/bedrock-provider.d.ts","import":"./dist/bedrock-provider.js"}},"gitHead":"107d79f11072bbc8a3a757ed7fd69596bee7d68c","scripts":{"test":"vitest --run","build":"npm run generate-models && npm run build:offline","clean":"shx rm -rf dist","build:offline":"npm run check:model-data && tsgo -p tsconfig.build.json && shx rm -rf dist/providers/data && shx cp -r src/providers/data dist/providers/data","prepublishOnly":"npm run clean && npm run build","generate-models":"node scripts/generate-models.ts --strict","check:model-data":"node scripts/check-model-data.ts","hydrate-model-data":"node scripts/generate-models.ts --strict --data-only","generate-image-models":"node scripts/generate-image-models.ts --strict","generate-model-catalog":"node scripts/generate-models.ts --strict --json-only --json-output ../../.artifacts/model-catalog"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:975b2765-9d44-42ba-a322-c1cbbce03f36"}},"repository":{"url":"git+https://github.com/earendil-works/pi.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.16.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"sideEffects":["./dist/compat.js","./dist/images.js","./dist/providers/images/register-builtins.js"],"_nodeVersion":"22.23.2","dependencies":{"openai":"6.40.0","typebox":"1.3.7","partial-json":"0.1.7","@google/genai":"1.52.0","http-proxy-agent":"7.0.2","@anthropic-ai/sdk":"0.123.0","https-proxy-agent":"7.0.6","@smithy/node-http-handler":"4.7.3","@earendil-works/pi-telemetry":"^0.85.0","@aws-sdk/client-bedrock-runtime":"3.1048.0"},"_hasShrinkwrap":false,"devDependencies":{"canvas":"3.2.3","vitest":"4.1.9","@types/node":"22.19.19"},"_npmOperationalInternal":{"tmp":"tmp/pi-ai_0.85.0_1788516827975_0.11037793028590492","host":"s3://npm-registry-packages-npm-production"}},"0.85.1":{"name":"@earendil-works/pi-ai","version":"0.85.1","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@earendil-works/pi-ai@0.85.1","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"},{"name":"rwachtler","email":"r.wachtler@outlook.com"}],"homepage":"https://github.com/earendil-works/pi#readme","bugs":{"url":"https://github.com/earendil-works/pi/issues"},"bin":{"pi-ai":"dist/cli.js"},"dist":{"shasum":"3f5726032c30149f6060a3aeacb79436c7387a37","tarball":"https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.85.1.tgz","fileCount":750,"integrity":"sha512-+VgVIJDkDO2efYJKEEqvPTH4zmnIaXdAppGbO+vKFA9qy5PdhFiAenuFAkU+oiCSfOC4dMHDyrjdQeL4ZoC5CQ==","signatures":[{"sig":"MEUCIQDcUNgX34W1J3Ffjyxp60oYZ1XAREdLCgragaApFQ3dQgIgRuPlOA+xS9p6btiaGC60AIzAuNVLk5/3o12k1yzIqlY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIE3Ux3LGmL/daUgy/Zmrz5jH9N0Dn/4NZ7sgA87LFCoCAiBfpsyPinrY34wckafPgUZzY5NNdPzez1MflP5duTU8Bg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fpi-ai@0.85.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4281282},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./api/*":{"types":"./dist/api/*.d.ts","import":"./dist/api/*.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./compat":{"types":"./dist/compat.d.ts","import":"./dist/compat.js"},"./utils/*":{"types":"./dist/utils/*.d.ts","import":"./dist/utils/*.js"},"./bun-oauth":{"types":"./dist/bun-oauth.d.ts","import":"./dist/bun-oauth.js"},"./providers/*":{"types":"./dist/providers/*.d.ts","import":"./dist/providers/*.js"},"./bedrock-provider":{"types":"./dist/bedrock-provider.d.ts","import":"./dist/bedrock-provider.js"}},"gitHead":"d981de1229ef899957bbe968bc8dcda02a21f477","scripts":{"test":"vitest --run","build":"npm run generate-models && npm run build:offline","clean":"shx rm -rf dist","build:offline":"npm run check:model-data && tsgo -p tsconfig.build.json && shx rm -rf dist/providers/data && shx cp -r src/providers/data dist/providers/data","prepublishOnly":"npm run clean && npm run build","generate-models":"node scripts/generate-models.ts --strict","check:model-data":"node scripts/check-model-data.ts","hydrate-model-data":"node scripts/generate-models.ts --strict --data-only","generate-image-models":"node scripts/generate-image-models.ts --strict","generate-model-catalog":"node scripts/generate-models.ts --strict --json-only --json-output ../../.artifacts/model-catalog"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:975b2765-9d44-42ba-a322-c1cbbce03f36"}},"repository":{"url":"git+https://github.com/earendil-works/pi.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.16.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"sideEffects":["./dist/compat.js","./dist/images.js","./dist/providers/images/register-builtins.js"],"_nodeVersion":"22.23.2","dependencies":{"openai":"6.40.0","typebox":"1.3.7","partial-json":"0.1.7","@google/genai":"1.52.0","http-proxy-agent":"7.0.2","@anthropic-ai/sdk":"0.123.0","https-proxy-agent":"7.0.6","@smithy/node-http-handler":"4.7.3","@earendil-works/pi-telemetry":"^0.85.1","@aws-sdk/client-bedrock-runtime":"3.1048.0"},"_hasShrinkwrap":false,"devDependencies":{"canvas":"3.2.3","vitest":"4.1.9","@types/node":"22.19.19"},"_npmOperationalInternal":{"tmp":"tmp/pi-ai_0.85.1_1788609947760_0.0805620257118449","host":"s3://npm-registry-packages-npm-production"}},"0.86.0":{"name":"@earendil-works/pi-ai","version":"0.86.0","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@earendil-works/pi-ai@0.86.0","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"},{"name":"rwachtler","email":"r.wachtler@outlook.com"}],"homepage":"https://github.com/earendil-works/pi#readme","bugs":{"url":"https://github.com/earendil-works/pi/issues"},"bin":{"pi-ai":"dist/cli.js"},"dist":{"shasum":"4221655f8a06da0f311453f5d91998406061d1b9","tarball":"https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.86.0.tgz","fileCount":759,"integrity":"sha512-7jc4tNTBiJrfg+2/nra6JPz2d3OGiGHDKrSVHpnfvsMgMy0uy4noGb7WidDNcqSEAK1S0kcRRTmpYAK66ZlTSw==","signatures":[{"sig":"MEYCIQDuXW/HRCVkoUa7R6rFiEVmi3rK85UKPu2aGMW/tDTGLgIhAONVbTKgBVWM6LqeO7t94EYZ2F1aucYlPMad+fBV03mE","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIGh0vX7WuVSYhAHkhQB4PR+qIzq81Abn6J8AlRuQdHpFAiEAk2P353XE9cwUsUKd6VHLcStS05AEH2vAoGgNjl37Sgg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fpi-ai@0.86.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4466791},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./api/*":{"types":"./dist/api/*.d.ts","import":"./dist/api/*.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./compat":{"types":"./dist/compat.d.ts","import":"./dist/compat.js"},"./utils/*":{"types":"./dist/utils/*.d.ts","import":"./dist/utils/*.js"},"./bun-oauth":{"types":"./dist/bun-oauth.d.ts","import":"./dist/bun-oauth.js"},"./providers/*":{"types":"./dist/providers/*.d.ts","import":"./dist/providers/*.js"},"./bedrock-provider":{"types":"./dist/bedrock-provider.d.ts","import":"./dist/bedrock-provider.js"}},"gitHead":"ecac0a9c4edad3dac5d9f8b40e0c7db7a56471fc","scripts":{"test":"vitest --run","build":"npm run generate-models && npm run build:offline","clean":"shx rm -rf dist","build:offline":"npm run check:model-data && tsgo -p tsconfig.build.json && shx rm -rf dist/providers/data && shx cp -r src/providers/data dist/providers/data","prepublishOnly":"npm run clean && npm run build","generate-models":"node scripts/generate-models.ts --strict","check:model-data":"node scripts/check-model-data.ts","hydrate-model-data":"node scripts/generate-models.ts --strict --data-only","generate-image-models":"node scripts/generate-image-models.ts --strict","generate-model-catalog":"node scripts/generate-models.ts --strict --json-only --json-output ../../.artifacts/model-catalog"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:975b2765-9d44-42ba-a322-c1cbbce03f36"}},"repository":{"url":"git+https://github.com/earendil-works/pi.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.16.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"sideEffects":["./dist/compat.js","./dist/images.js","./dist/providers/images/register-builtins.js"],"_nodeVersion":"22.23.2","dependencies":{"openai":"6.40.0","typebox":"1.3.27","partial-json":"0.1.7","@google/genai":"2.21.0","http-proxy-agent":"9.1.0","@anthropic-ai/sdk":"0.124.0","https-proxy-agent":"9.1.0","@smithy/node-http-handler":"4.12.1","@earendil-works/pi-telemetry":"^0.86.0","@aws-sdk/client-bedrock-runtime":"3.1127.0"},"_hasShrinkwrap":false,"devDependencies":{"canvas":"3.2.3","vitest":"4.1.9","@types/node":"22.19.19"},"_npmOperationalInternal":{"tmp":"tmp/pi-ai_0.86.0_1789859428125_0.6231333949948614","host":"s3://npm-registry-packages-npm-production"}},"0.86.1":{"name":"@earendil-works/pi-ai","version":"0.86.1","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@earendil-works/pi-ai@0.86.1","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"},{"name":"rwachtler","email":"r.wachtler@outlook.com"}],"homepage":"https://github.com/earendil-works/pi#readme","bugs":{"url":"https://github.com/earendil-works/pi/issues"},"bin":{"pi-ai":"dist/cli.js"},"dist":{"shasum":"ece82487686aa5700c6db8b36d90a2daf1a78ba9","tarball":"https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.86.1.tgz","fileCount":772,"integrity":"sha512-1XHhI6D/fyQdsBieHC/E/4zGKVOoGe4yDyX67VXvzoYkFsX/qE7NpZE7E1RC8e6Bz8B9oG/P+MQFXikv2/BGEg==","signatures":[{"sig":"MEUCIGKTzAa80HD/WPdwh5NMtVSfJpNLLd2sdtqu5M2gVr+gAiEA3BY3ZWf0WuTxCpAjNDrZVy20cU9IrVSSrFjf5cWdHZY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIBY58hmJTrGx3rfs3yJYBt8VVOtUSdLrwyASGOfa/VGCAiEA2cmXNywbTKvT4YrKvwjI+4fLh2H3nz5RmSb/L64WRUM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fpi-ai@0.86.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4509469},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./api/*":{"types":"./dist/api/*.d.ts","import":"./dist/api/*.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./compat":{"types":"./dist/compat.d.ts","import":"./dist/compat.js"},"./utils/*":{"types":"./dist/utils/*.d.ts","import":"./dist/utils/*.js"},"./bun-oauth":{"types":"./dist/bun-oauth.d.ts","import":"./dist/bun-oauth.js"},"./providers/*":{"types":"./dist/providers/*.d.ts","import":"./dist/providers/*.js"},"./bedrock-provider":{"types":"./dist/bedrock-provider.d.ts","import":"./dist/bedrock-provider.js"}},"gitHead":"13cbf77df2396303013a41646bcfa77b4271ae56","scripts":{"test":"vitest --run","build":"npm run generate-models && npm run build:offline","clean":"shx rm -rf dist","build:offline":"npm run check:model-data && tsgo -p tsconfig.build.json && shx rm -rf dist/providers/data && shx cp -r src/providers/data dist/providers/data","prepublishOnly":"npm run clean && npm run build","generate-models":"node scripts/generate-models.ts --strict","check:model-data":"node scripts/check-model-data.ts","hydrate-model-data":"node scripts/generate-models.ts --strict --data-only","generate-image-models":"node scripts/generate-image-models.ts --strict","generate-model-catalog":"node scripts/generate-models.ts --strict --json-only --json-output ../../.artifacts/model-catalog"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:975b2765-9d44-42ba-a322-c1cbbce03f36"}},"repository":{"url":"git+https://github.com/earendil-works/pi.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.16.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"sideEffects":["./dist/compat.js","./dist/images.js","./dist/providers/images/register-builtins.js"],"_nodeVersion":"22.23.2","dependencies":{"openai":"6.40.0","typebox":"1.3.27","partial-json":"0.1.7","@google/genai":"2.21.0","http-proxy-agent":"9.1.0","@anthropic-ai/sdk":"0.124.0","https-proxy-agent":"9.1.0","@smithy/node-http-handler":"4.12.1","@earendil-works/pi-telemetry":"^0.86.1","@aws-sdk/client-bedrock-runtime":"3.1127.0"},"_hasShrinkwrap":false,"devDependencies":{"canvas":"3.2.3","vitest":"4.1.9","@types/node":"22.19.19"},"_npmOperationalInternal":{"tmp":"tmp/pi-ai_0.86.1_1789902863024_0.005750518806199922","host":"s3://npm-registry-packages-npm-production"}},"0.87.0":{"name":"@earendil-works/pi-ai","version":"0.87.0","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@earendil-works/pi-ai@0.87.0","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"},{"name":"rwachtler","email":"r.wachtler@outlook.com"}],"homepage":"https://github.com/earendil-works/pi#readme","bugs":{"url":"https://github.com/earendil-works/pi/issues"},"bin":{"pi-ai":"dist/cli.js"},"dist":{"shasum":"e81ec36ab4e9f44bafa2c980c7ec3cf8cda32f8d","tarball":"https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.87.0.tgz","fileCount":772,"integrity":"sha512-lbRm+EMY6Jx3l+HLpbqbm9Yrhkc5u7EffLk2id+zJQEoBuR5I+tijGiZU8zlnuuCclmQOgH0PVjL9PLbeqJ9MQ==","signatures":[{"sig":"MEUCIQCY1N283A2ifDWkDU4OHfi5i7TO1mhWZH7Kds0xv2sC4QIgQhSh5lXLmjEIYWbVObsM1iMbPOvXCDP+KcFQQUCdKrk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIFe4/OAYDPmPry78hZ3CQDli+PJg0EAELW0HfUrspVs4AiEAveFeIojaww0Zq+SjrRbeyugHI/bSKUpVaFDccqTjFjw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fpi-ai@0.87.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4637126},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./api/*":{"types":"./dist/api/*.d.ts","import":"./dist/api/*.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./compat":{"types":"./dist/compat.d.ts","import":"./dist/compat.js"},"./utils/*":{"types":"./dist/utils/*.d.ts","import":"./dist/utils/*.js"},"./bun-oauth":{"types":"./dist/bun-oauth.d.ts","import":"./dist/bun-oauth.js"},"./providers/*":{"types":"./dist/providers/*.d.ts","import":"./dist/providers/*.js"},"./bedrock-provider":{"types":"./dist/bedrock-provider.d.ts","import":"./dist/bedrock-provider.js"}},"gitHead":"16787ad5b2dc748047f314ca1bfe7708f30f54f3","scripts":{"test":"vitest --run","build":"npm run generate-models && npm run build:offline","clean":"shx rm -rf dist","build:offline":"npm run check:model-data && tsgo -p tsconfig.build.json && shx rm -rf dist/providers/data && shx cp -r src/providers/data dist/providers/data","prepublishOnly":"npm run clean && npm run build","generate-models":"node scripts/generate-models.ts --strict","check:model-data":"node scripts/check-model-data.ts","hydrate-model-data":"node scripts/generate-models.ts --strict --data-only","generate-image-models":"node scripts/generate-image-models.ts --strict","generate-model-catalog":"node scripts/generate-models.ts --strict --json-only --json-output ../../.artifacts/model-catalog"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:975b2765-9d44-42ba-a322-c1cbbce03f36"}},"repository":{"url":"git+https://github.com/earendil-works/pi.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.16.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"sideEffects":["./dist/compat.js","./dist/images.js","./dist/providers/images/register-builtins.js"],"_nodeVersion":"22.23.2","dependencies":{"openai":"6.40.0","typebox":"1.3.27","partial-json":"0.1.7","@google/genai":"2.21.0","http-proxy-agent":"9.1.0","@anthropic-ai/sdk":"0.124.0","https-proxy-agent":"9.1.0","@smithy/node-http-handler":"4.12.1","@earendil-works/pi-telemetry":"^0.87.0","@aws-sdk/client-bedrock-runtime":"3.1127.0"},"_hasShrinkwrap":false,"devDependencies":{"canvas":"3.2.3","vitest":"4.1.9","@types/node":"22.19.19"},"_npmOperationalInternal":{"tmp":"tmp/pi-ai_0.87.0_1790008922561_0.5875650904006418","host":"s3://npm-registry-packages-npm-production"}},"0.87.1":{"name":"@earendil-works/pi-ai","version":"0.87.1","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@earendil-works/pi-ai@0.87.1","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"},{"name":"rwachtler","email":"r.wachtler@outlook.com"}],"homepage":"https://github.com/earendil-works/pi#readme","bugs":{"url":"https://github.com/earendil-works/pi/issues"},"bin":{"pi-ai":"dist/cli.js"},"dist":{"shasum":"7d1f174120d5e6d33f301503677ec3281f217e2a","tarball":"https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.87.1.tgz","fileCount":772,"integrity":"sha512-X/3PfQBnnoeVdO9Cv8zHghUMglzlgNZYGNzoPnbRoGnHl3Rw3TlA2UKSUB7BRHUOxMryHXYa8dnjWZlbRheDZA==","signatures":[{"sig":"MEUCICbmzumBQvmROAHB/UIIr7I0Mk4BXWn6lMzu0p9Nv2PRAiEA2tuC9VrWMj+3fThARijE8wbGCyGPMQRzXkPwsu+6Okw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDg9ihqX2icZ5On0nAapZLNvSA2ynRFpotPjR6jPtzkEgIhAM5PeDRodCdci4ySHIkst+nfqdn1JBAy5NGYHNAy4oRX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fpi-ai@0.87.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4671681},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./api/*":{"types":"./dist/api/*.d.ts","import":"./dist/api/*.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./compat":{"types":"./dist/compat.d.ts","import":"./dist/compat.js"},"./utils/*":{"types":"./dist/utils/*.d.ts","import":"./dist/utils/*.js"},"./bun-oauth":{"types":"./dist/bun-oauth.d.ts","import":"./dist/bun-oauth.js"},"./providers/*":{"types":"./dist/providers/*.d.ts","import":"./dist/providers/*.js"},"./bedrock-provider":{"types":"./dist/bedrock-provider.d.ts","import":"./dist/bedrock-provider.js"}},"gitHead":"f07218c4d4bbc12bef056a7058c3dd49dfe41abe","scripts":{"test":"vitest --run","build":"npm run generate-models && npm run build:offline","clean":"shx rm -rf dist","build:offline":"npm run check:model-data && tsgo -p tsconfig.build.json && shx rm -rf dist/providers/data && shx cp -r src/providers/data dist/providers/data","prepublishOnly":"npm run clean && npm run build","generate-models":"node scripts/generate-models.ts --strict","check:model-data":"node scripts/check-model-data.ts","hydrate-model-data":"node scripts/generate-models.ts --strict --data-only","generate-image-models":"node scripts/generate-image-models.ts --strict","generate-model-catalog":"node scripts/generate-models.ts --strict --json-only --json-output ../../.artifacts/model-catalog"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:975b2765-9d44-42ba-a322-c1cbbce03f36"}},"repository":{"url":"git+https://github.com/earendil-works/pi.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.16.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"sideEffects":["./dist/compat.js","./dist/images.js","./dist/providers/images/register-builtins.js"],"_nodeVersion":"22.23.2","dependencies":{"openai":"6.40.0","typebox":"1.3.27","partial-json":"0.1.7","@google/genai":"2.21.0","http-proxy-agent":"9.1.0","@anthropic-ai/sdk":"0.124.0","https-proxy-agent":"9.1.0","@smithy/node-http-handler":"4.12.1","@earendil-works/pi-telemetry":"^0.87.1","@aws-sdk/client-bedrock-runtime":"3.1127.0"},"_hasShrinkwrap":false,"devDependencies":{"canvas":"3.2.3","vitest":"4.1.9","@types/node":"22.19.19"},"_npmOperationalInternal":{"tmp":"tmp/pi-ai_0.87.1_1790105908070_0.8680546047292492","host":"s3://npm-registry-packages-npm-production"}},"0.99.0":{"name":"@earendil-works/pi-ai","version":"0.99.0","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@earendil-works/pi-ai@0.99.0","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"},{"name":"rwachtler","email":"r.wachtler@outlook.com"}],"homepage":"https://github.com/earendil-works/pi#readme","bugs":{"url":"https://github.com/earendil-works/pi/issues"},"bin":{"pi-ai":"dist/cli.js"},"dist":{"shasum":"49eecf13c9cb9a90b69ee2162a504170521ec392","tarball":"https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.99.0.tgz","fileCount":813,"integrity":"sha512-pJVG2aytD6x1xckiM4co7DlK6xXwfH7LKcMoI6SFDuJ4OvVqedUUAYFFekX4WkeqOoRNCIjUwka/l7mWb/mjsQ==","signatures":[{"sig":"MEQCIEZ1uIpnaXqZKr8ioggfYqxfyQLKIixLByB6IjniNw/LAiBVN3O6Rp/vlfoEvlcGTWOVinRy7m+69kbaYwgDcro29A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDmbQxJEFzr132fZ/Zv6GDliemypOCbQAgInfqZhB3iBwIhAIVvZSHjHmw7Z/Q2TYyzckWvsVziTsH/kBpAxeP36wc4","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fpi-ai@0.99.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3937499},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./api/*":{"types":"./dist/api/*.d.ts","import":"./dist/api/*.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./compat":{"types":"./dist/compat.d.ts","import":"./dist/compat.js"},"./utils/*":{"types":"./dist/utils/*.d.ts","import":"./dist/utils/*.js"},"./bun-oauth":{"types":"./dist/bun-oauth.d.ts","import":"./dist/bun-oauth.js"},"./providers/*":{"types":"./dist/providers/*.d.ts","import":"./dist/providers/*.js"},"./bedrock-provider":{"types":"./dist/bedrock-provider.d.ts","import":"./dist/bedrock-provider.js"}},"gitHead":"4b060d3a98618019adb9985d517516c8e99a2bbe","scripts":{"test":"vitest --run","build":"npm run generate-models && npm run build:offline","clean":"shx rm -rf dist","build:offline":"npm run check:model-data && tsc -p tsconfig.build.json && shx rm -rf dist/providers/data && shx cp -r src/providers/data dist/providers/data","prepublishOnly":"npm run clean && npm run build","generate-models":"node scripts/generate-models.ts --strict","check:model-data":"node scripts/check-model-data.ts","hydrate-model-data":"node scripts/generate-models.ts --strict --data-only","generate-model-catalog":"node scripts/generate-models.ts --strict --json-only --json-output ../../.artifacts/model-catalog"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"975b2765-9d44-42ba-a322-c1cbbce03f36"}},"repository":{"url":"git+https://github.com/earendil-works/pi.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.16.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"sideEffects":["./dist/compat.js","./dist/images.js","./dist/providers/images/register-builtins.js"],"_nodeVersion":"22.23.2","dependencies":{"openai":"7.19.0","typebox":"1.3.27","partial-json":"0.1.7","@google/genai":"2.21.0","http-proxy-agent":"9.1.0","@anthropic-ai/sdk":"0.124.0","https-proxy-agent":"9.1.0","@smithy/node-http-handler":"4.12.1","@earendil-works/pi-telemetry":"^0.99.0","@aws-sdk/client-bedrock-runtime":"3.1127.0"},"_hasShrinkwrap":false,"devDependencies":{"canvas":"3.2.3","vitest":"4.1.11","@types/node":"22.19.19"},"_npmOperationalInternal":{"tmp":"tmp/pi-ai_0.99.0_1790702219839_0.2619880563886898","host":"s3://npm-registry-packages-npm-production"}},"0.99.1":{"name":"@earendil-works/pi-ai","version":"0.99.1","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@earendil-works/pi-ai@0.99.1","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"},{"name":"rwachtler","email":"r.wachtler@outlook.com"}],"homepage":"https://github.com/earendil-works/pi#readme","bugs":{"url":"https://github.com/earendil-works/pi/issues"},"bin":{"pi-ai":"dist/cli.js"},"dist":{"shasum":"2945bf014fbb314bd37b919e83317560e0a8fa1d","tarball":"https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.99.1.tgz","fileCount":813,"integrity":"sha512-4nV9JKc94iPX8bwdGPc2nTuVPKIPsffhnp3WoN9NYCNqbtoOF8LhYcIs/+Sn/alroqJK/5QRu6/Z6Ck+n0hyBA==","signatures":[{"sig":"MEUCIGD8pMwfVv8FfFsS0Rlla8MC7d9LavkwzpjaZIMjsQjyAiEA/a/47gGRRaX8PBaQJNVZiy59NZ1U5mWAr6Bwnu8N5aU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCCKvmBlBMrEAzqYGzvQO+CfLgE4mw+1dcSqlJ+1t4gzwIgR0OavEx/5TzTc0b0imtmhBNnU1Fra7eCA4Mce8GBOYE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fpi-ai@0.99.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3944328},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./api/*":{"types":"./dist/api/*.d.ts","import":"./dist/api/*.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./compat":{"types":"./dist/compat.d.ts","import":"./dist/compat.js"},"./utils/*":{"types":"./dist/utils/*.d.ts","import":"./dist/utils/*.js"},"./bun-oauth":{"types":"./dist/bun-oauth.d.ts","import":"./dist/bun-oauth.js"},"./providers/*":{"types":"./dist/providers/*.d.ts","import":"./dist/providers/*.js"},"./bedrock-provider":{"types":"./dist/bedrock-provider.d.ts","import":"./dist/bedrock-provider.js"}},"gitHead":"d86654abb8862e201933517d6f1fce9f88dd117f","scripts":{"test":"vitest --run","build":"npm run generate-models && npm run build:offline","clean":"shx rm -rf dist","build:offline":"npm run check:model-data && tsc -p tsconfig.build.json && shx rm -rf dist/providers/data && shx cp -r src/providers/data dist/providers/data","prepublishOnly":"npm run clean && npm run build","generate-models":"node scripts/generate-models.ts --strict","check:model-data":"node scripts/check-model-data.ts","hydrate-model-data":"node scripts/generate-models.ts --strict --data-only","generate-model-catalog":"node scripts/generate-models.ts --strict --json-only --json-output ../../.artifacts/model-catalog"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"975b2765-9d44-42ba-a322-c1cbbce03f36"}},"repository":{"url":"git+https://github.com/earendil-works/pi.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.16.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"sideEffects":["./dist/compat.js","./dist/images.js","./dist/providers/images/register-builtins.js"],"_nodeVersion":"22.23.2","dependencies":{"openai":"7.19.0","typebox":"1.3.27","partial-json":"0.1.7","@google/genai":"2.21.0","http-proxy-agent":"9.1.0","@anthropic-ai/sdk":"0.124.0","https-proxy-agent":"9.1.0","@smithy/node-http-handler":"4.12.1","@earendil-works/pi-telemetry":"^0.99.1","@aws-sdk/client-bedrock-runtime":"3.1127.0"},"_hasShrinkwrap":false,"devDependencies":{"canvas":"3.2.3","vitest":"4.1.11","@types/node":"22.19.19"},"_npmOperationalInternal":{"tmp":"tmp/pi-ai_0.99.1_1790706001419_0.6024751810632083","host":"s3://npm-registry-packages-npm-production"}},"0.99.2":{"name":"@earendil-works/pi-ai","version":"0.99.2","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@earendil-works/pi-ai@0.99.2","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"},{"name":"rwachtler","email":"r.wachtler@outlook.com"}],"homepage":"https://github.com/earendil-works/pi#readme","bugs":{"url":"https://github.com/earendil-works/pi/issues"},"bin":{"pi-ai":"dist/cli.js"},"dist":{"shasum":"82dc270963b8b7650dfb65ed9ba2e11afeabd761","tarball":"https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.99.2.tgz","fileCount":813,"integrity":"sha512-9RFOEdY+ZTJ1AI+UuAFs4RM0tF2Tje/R/CEv9gWTJHt0iTu8XHZs64U/EIZxNSllFmec/4HfwsOxYj1qQek9bg==","signatures":[{"sig":"MEUCIG+9pErc5QP36mfjZs7Ap7wuQHl/Pq085rUarSa4yXI9AiEA5y41Y2ue0CmZ/JZpTzbvR9pm8U7O9AotfTA66uu60YU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIB931k0Ao+sVMhC63bTkk/Hih/mwCbkUNGUXzcZQpOYMAiBMzYVExeCrUU+zMbO0vvXA/hMFeAfrRim+lxZepG1dlw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fpi-ai@0.99.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3969808},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./api/*":{"types":"./dist/api/*.d.ts","import":"./dist/api/*.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./compat":{"types":"./dist/compat.d.ts","import":"./dist/compat.js"},"./models":{"types":"./dist/models.d.ts","import":"./dist/models.js"},"./utils/*":{"types":"./dist/utils/*.d.ts","import":"./dist/utils/*.js"},"./bun-oauth":{"types":"./dist/bun-oauth.d.ts","import":"./dist/bun-oauth.js"},"./providers/*":{"types":"./dist/providers/*.d.ts","import":"./dist/providers/*.js"},"./bedrock-provider":{"types":"./dist/bedrock-provider.d.ts","import":"./dist/bedrock-provider.js"}},"gitHead":"005af57d88ee23b33778f343a9595b32e67ff788","scripts":{"test":"vitest --run","build":"npm run generate-models && npm run build:offline","clean":"shx rm -rf dist","build:offline":"npm run check:model-data && tsc -p tsconfig.build.json && shx rm -rf dist/providers/data && shx cp -r src/providers/data dist/providers/data","prepublishOnly":"npm run clean && npm run build","generate-models":"node scripts/generate-models.ts --strict","check:model-data":"node scripts/check-model-data.ts","hydrate-model-data":"node scripts/generate-models.ts --strict --data-only","generate-model-catalog":"node scripts/generate-models.ts --strict --json-only --json-output ../../.artifacts/model-catalog"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"975b2765-9d44-42ba-a322-c1cbbce03f36"}},"repository":{"url":"git+https://github.com/earendil-works/pi.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.16.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"sideEffects":["./dist/compat.js","./dist/images.js","./dist/providers/images/register-builtins.js"],"_nodeVersion":"22.23.2","dependencies":{"openai":"7.19.0","typebox":"1.3.27","partial-json":"0.1.7","@google/genai":"2.21.0","http-proxy-agent":"9.1.0","@anthropic-ai/sdk":"0.124.0","https-proxy-agent":"9.1.0","@smithy/node-http-handler":"4.12.1","@earendil-works/pi-telemetry":"^0.99.2","@aws-sdk/client-bedrock-runtime":"3.1127.0"},"_hasShrinkwrap":false,"devDependencies":{"canvas":"3.2.3","vitest":"4.1.11","@types/node":"22.19.19"},"_npmOperationalInternal":{"tmp":"tmp/pi-ai_0.99.2_1790796325344_0.6014610725950675","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@earendil-works/pi-ai","version":"1.0.0","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@earendil-works/pi-ai@1.0.0","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"},{"name":"rwachtler","email":"r.wachtler@outlook.com"}],"homepage":"https://github.com/earendil-works/pi#readme","bugs":{"url":"https://github.com/earendil-works/pi/issues"},"bin":{"pi-ai":"dist/cli.js"},"dist":{"shasum":"48afaafcffeafdb951bee89b25c69daf4985c725","tarball":"https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-1.0.0.tgz","fileCount":813,"integrity":"sha512-3/W1vdDaVtpeMd23ElvJC12HLA5yS/BGqqcXF+0SK082dN7cbgNcCwguTBRBC258Ke8SzSvUW1B75iAf8w8IxA==","signatures":[{"sig":"MEYCIQDkLyF6I3Ou5auLNADs9s6b1JcTjgxPZT+BqcH0/4jiqgIhAPuxDs8mo/32tj9uQ6ok3TxPpl/smUHYHKwoYwAsNgJJ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDbSgoFowzD5p7+SSIilIIQEVYvnXx1FAr3oiSV+C406wIgGKwc2WoanPly3qS4rj8dZQaxa7YGOValmnc19zqIdtk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fpi-ai@1.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3977677},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./api/*":{"types":"./dist/api/*.d.ts","import":"./dist/api/*.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./compat":{"types":"./dist/compat.d.ts","import":"./dist/compat.js"},"./models":{"types":"./dist/models.d.ts","import":"./dist/models.js"},"./utils/*":{"types":"./dist/utils/*.d.ts","import":"./dist/utils/*.js"},"./bun-oauth":{"types":"./dist/bun-oauth.d.ts","import":"./dist/bun-oauth.js"},"./providers/*":{"types":"./dist/providers/*.d.ts","import":"./dist/providers/*.js"},"./bedrock-provider":{"types":"./dist/bedrock-provider.d.ts","import":"./dist/bedrock-provider.js"}},"gitHead":"a13d35a742c6ef8462812a28fbe1d8c8b7431c32","scripts":{"test":"vitest --run","build":"npm run generate-models && npm run build:offline","clean":"shx rm -rf dist","build:offline":"npm run check:model-data && tsc -p tsconfig.build.json && shx rm -rf dist/providers/data && shx cp -r src/providers/data dist/providers/data","prepublishOnly":"npm run clean && npm run build","generate-models":"node scripts/generate-models.ts --strict","check:model-data":"node scripts/check-model-data.ts","hydrate-model-data":"node scripts/generate-models.ts --strict --data-only","generate-model-catalog":"node scripts/generate-models.ts --strict --json-only --json-output ../../.artifacts/model-catalog"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"975b2765-9d44-42ba-a322-c1cbbce03f36"}},"repository":{"url":"git+https://github.com/earendil-works/pi.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.16.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"sideEffects":["./dist/compat.js","./dist/images.js","./dist/providers/images/register-builtins.js"],"_nodeVersion":"22.23.3","dependencies":{"openai":"7.19.0","typebox":"1.3.27","partial-json":"0.1.7","@google/genai":"2.21.0","http-proxy-agent":"9.1.0","@anthropic-ai/sdk":"0.124.0","https-proxy-agent":"9.1.0","@smithy/node-http-handler":"4.12.1","@earendil-works/pi-telemetry":"^1.0.0","@aws-sdk/client-bedrock-runtime":"3.1127.0"},"_hasShrinkwrap":false,"devDependencies":{"canvas":"3.2.3","vitest":"4.1.11","@types/node":"22.19.19"},"_npmOperationalInternal":{"tmp":"tmp/pi-ai_1.0.0_1790881938568_0.4062374615773996","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@earendil-works/pi-ai","version":"1.0.1","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@earendil-works/pi-ai@1.0.1","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"},{"name":"rwachtler","email":"r.wachtler@outlook.com"}],"homepage":"https://github.com/earendil-works/pi#readme","bugs":{"url":"https://github.com/earendil-works/pi/issues"},"bin":{"pi-ai":"dist/cli.js"},"dist":{"shasum":"6f3df9843292c0dc9a1f56257906c717fe7c577b","tarball":"https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-1.0.1.tgz","fileCount":813,"integrity":"sha512-eSA53pdfDLuQTTJn3yz1VC8BBmcX33OKkk8WihOXdVBvbgqqC4zuR6Sf+TeeWuAmh8LuqARoK14R1s2HZqVcsw==","signatures":[{"sig":"MEUCIQDPJqB8LXx3AwsFbIRD3wZr+gpXuIlXLu31LbrZhoncxAIgMnJW6p3ZgDDM/dKmvJtzwzhFWnhUbcK5l+IY9h6JMjo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCQPgwrgOpmLso+aSVDa5/oNWNQC9QGaG9b12d7EUin/QIgC6tH3nZQyo+yMeWAtBC9hI5QrnxB8RB5Cjp7jxj5BHc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fpi-ai@1.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3989506},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./api/*":{"types":"./dist/api/*.d.ts","import":"./dist/api/*.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./compat":{"types":"./dist/compat.d.ts","import":"./dist/compat.js"},"./models":{"types":"./dist/models.d.ts","import":"./dist/models.js"},"./utils/*":{"types":"./dist/utils/*.d.ts","import":"./dist/utils/*.js"},"./bun-oauth":{"types":"./dist/bun-oauth.d.ts","import":"./dist/bun-oauth.js"},"./providers/*":{"types":"./dist/providers/*.d.ts","import":"./dist/providers/*.js"},"./bedrock-provider":{"types":"./dist/bedrock-provider.d.ts","import":"./dist/bedrock-provider.js"}},"gitHead":"a7229ddc21810d6245105978033b7df645ecc2f7","scripts":{"test":"vitest --run","build":"npm run generate-models && npm run build:offline","clean":"shx rm -rf dist","build:offline":"npm run check:model-data && tsc -p tsconfig.build.json && shx rm -rf dist/providers/data && shx cp -r src/providers/data dist/providers/data","prepublishOnly":"npm run clean && npm run build","generate-models":"node scripts/generate-models.ts --strict","check:model-data":"node scripts/check-model-data.ts","hydrate-model-data":"node scripts/generate-models.ts --strict --data-only","generate-model-catalog":"node scripts/generate-models.ts --strict --json-only --json-output ../../.artifacts/model-catalog"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"975b2765-9d44-42ba-a322-c1cbbce03f36"}},"repository":{"url":"git+https://github.com/earendil-works/pi.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.16.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"sideEffects":["./dist/compat.js","./dist/images.js","./dist/providers/images/register-builtins.js"],"_nodeVersion":"22.23.3","dependencies":{"openai":"7.19.0","typebox":"1.3.27","partial-json":"0.1.7","@google/genai":"2.21.0","http-proxy-agent":"9.1.0","@anthropic-ai/sdk":"0.129.0","https-proxy-agent":"9.1.0","@smithy/node-http-handler":"4.12.1","@earendil-works/pi-telemetry":"^1.0.1","@aws-sdk/client-bedrock-runtime":"3.1127.0"},"_hasShrinkwrap":false,"devDependencies":{"canvas":"3.2.3","vitest":"4.1.11","@types/node":"22.19.19"},"_npmOperationalInternal":{"tmp":"tmp/pi-ai_1.0.1_1791030640529_0.3484062447519174","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@earendil-works/pi-ai","version":"1.0.2","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@earendil-works/pi-ai@1.0.2","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"},{"name":"rwachtler","email":"r.wachtler@outlook.com"}],"homepage":"https://github.com/earendil-works/pi#readme","bugs":{"url":"https://github.com/earendil-works/pi/issues"},"bin":{"pi-ai":"dist/cli.js"},"dist":{"shasum":"491b32ed7dd8e333a58a55dfc18ff61e31bc43c9","tarball":"https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-1.0.2.tgz","fileCount":813,"integrity":"sha512-JP59xGlSAQ/HhQ6EHN5qmneBlWfDyu6FPPryAvAaSo8A38ubAsEpS9YisCM5Jbbns0srrDffLZonE0OXorHI5A==","signatures":[{"sig":"MEQCIA2LgE97t4SJu/ngEfWp8Fq9heJYd8URnjweWrP/IYoKAiALkLMGgT7CEld/24sYGrQl8gRTyl8NawI6nnzyZhzRXg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCICWjSG3UiYbUUX4lQk8pG+UxNCcw4y1n1MpQy4Q82gDwAiEArgZiBLVMrw2bGfjuC8CCyzbqUp0BbzNBxpKke1c1OSo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fpi-ai@1.0.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3995358},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./api/*":{"types":"./dist/api/*.d.ts","import":"./dist/api/*.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./compat":{"types":"./dist/compat.d.ts","import":"./dist/compat.js"},"./models":{"types":"./dist/models.d.ts","import":"./dist/models.js"},"./utils/*":{"types":"./dist/utils/*.d.ts","import":"./dist/utils/*.js"},"./bun-oauth":{"types":"./dist/bun-oauth.d.ts","import":"./dist/bun-oauth.js"},"./providers/*":{"types":"./dist/providers/*.d.ts","import":"./dist/providers/*.js"},"./bedrock-provider":{"types":"./dist/bedrock-provider.d.ts","import":"./dist/bedrock-provider.js"}},"gitHead":"cd32f7725fdbddbaecdff5b1e68491563394e0ca","scripts":{"test":"vitest --run","build":"npm run generate-models && npm run build:offline","clean":"shx rm -rf dist","build:offline":"npm run check:model-data && tsc -p tsconfig.build.json && shx rm -rf dist/providers/data && shx cp -r src/providers/data dist/providers/data","prepublishOnly":"npm run clean && npm run build","generate-models":"node scripts/generate-models.ts --strict","check:model-data":"node scripts/check-model-data.ts","hydrate-model-data":"node scripts/generate-models.ts --strict --data-only","generate-model-catalog":"node scripts/generate-models.ts --strict --json-only --json-output ../../.artifacts/model-catalog"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"975b2765-9d44-42ba-a322-c1cbbce03f36"}},"repository":{"url":"git+https://github.com/earendil-works/pi.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.16.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"sideEffects":["./dist/compat.js","./dist/images.js","./dist/providers/images/register-builtins.js"],"_nodeVersion":"22.23.3","dependencies":{"openai":"7.19.0","typebox":"1.3.27","partial-json":"0.1.7","@google/genai":"2.21.0","http-proxy-agent":"9.1.0","@anthropic-ai/sdk":"0.129.0","https-proxy-agent":"9.1.0","@smithy/node-http-handler":"4.12.1","@earendil-works/pi-telemetry":"^1.0.2","@aws-sdk/client-bedrock-runtime":"3.1127.0"},"_hasShrinkwrap":false,"devDependencies":{"canvas":"3.2.3","vitest":"4.1.11","@types/node":"22.19.19"},"_npmOperationalInternal":{"tmp":"tmp/pi-ai_1.0.2_1791075178447_0.06295878253184584","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@earendil-works/pi-ai","version":"1.0.3","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@earendil-works/pi-ai@1.0.3","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"},{"name":"rwachtler","email":"r.wachtler@outlook.com"}],"homepage":"https://github.com/earendil-works/pi#readme","bugs":{"url":"https://github.com/earendil-works/pi/issues"},"bin":{"pi-ai":"dist/cli.js"},"dist":{"shasum":"31463068aa4f979db0f066aa8c1b79b57d310e35","tarball":"https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-1.0.3.tgz","fileCount":817,"integrity":"sha512-p+/EUrbmfT0xWOtL/NJRtWOsyzcKKFSyiivHLDBMG0DUVpHdaIykd5jFibq0YZDFGBN/nv61zdOelMb+ylPfSg==","signatures":[{"sig":"MEQCIAv3MV5H4b7SfdLLv2Az2f+NF0U69W5flVdES/NteyE7AiBOBIvEKi4Zh3DsghX9AfxW64JC1pE1uzrkmL8Di21WAg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIFcG+j0coPGHwRSTftWISGYbKHki1Sqd0yzUBcqYnT6LAiEAslO7XH6DPnKnhQgVxXu5Cfc8HZ5m+h8GiWarNAUAG6Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fpi-ai@1.0.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4005525},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./api/*":{"types":"./dist/api/*.d.ts","import":"./dist/api/*.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./compat":{"types":"./dist/compat.d.ts","import":"./dist/compat.js"},"./models":{"types":"./dist/models.d.ts","import":"./dist/models.js"},"./utils/*":{"types":"./dist/utils/*.d.ts","import":"./dist/utils/*.js"},"./bun-oauth":{"types":"./dist/bun-oauth.d.ts","import":"./dist/bun-oauth.js"},"./providers/*":{"types":"./dist/providers/*.d.ts","import":"./dist/providers/*.js"},"./bedrock-provider":{"types":"./dist/bedrock-provider.d.ts","import":"./dist/bedrock-provider.js"}},"gitHead":"d78dc83d633229d12f8b79631384c4c2717c399f","scripts":{"test":"vitest --run","build":"npm run generate-models && npm run build:offline","clean":"shx rm -rf dist","build:offline":"npm run check:model-data && tsc -p tsconfig.build.json && shx rm -rf dist/providers/data && shx cp -r src/providers/data dist/providers/data","prepublishOnly":"npm run clean && npm run build","generate-models":"node scripts/generate-models.ts --strict","check:model-data":"node scripts/check-model-data.ts","hydrate-model-data":"node scripts/generate-models.ts --strict --data-only","generate-model-catalog":"node scripts/generate-models.ts --strict --json-only --json-output ../../.artifacts/model-catalog"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"975b2765-9d44-42ba-a322-c1cbbce03f36"}},"repository":{"url":"git+https://github.com/earendil-works/pi.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.16.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"sideEffects":["./dist/compat.js","./dist/images.js","./dist/providers/images/register-builtins.js"],"_nodeVersion":"22.23.3","dependencies":{"openai":"7.19.0","typebox":"1.3.27","partial-json":"0.1.7","@google/genai":"2.21.0","http-proxy-agent":"9.1.0","@anthropic-ai/sdk":"0.129.0","https-proxy-agent":"9.1.0","@smithy/node-http-handler":"4.12.1","@earendil-works/pi-telemetry":"^1.0.3","@aws-sdk/client-bedrock-runtime":"3.1127.0"},"_hasShrinkwrap":false,"devDependencies":{"canvas":"3.2.3","vitest":"4.1.11","@types/node":"22.19.19"},"_npmOperationalInternal":{"tmp":"tmp/pi-ai_1.0.3_1791189059232_0.6121633828986268","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@earendil-works/pi-ai","version":"1.0.4","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@earendil-works/pi-ai@1.0.4","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"},{"name":"rwachtler","email":"r.wachtler@outlook.com"}],"homepage":"https://github.com/earendil-works/pi#readme","bugs":{"url":"https://github.com/earendil-works/pi/issues"},"bin":{"pi-ai":"dist/cli.js"},"dist":{"shasum":"f398aa4469437bfa0c6326bcb61f7bc4f25840e6","tarball":"https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-1.0.4.tgz","fileCount":817,"integrity":"sha512-/Eu5R0gfor6wcmRcVyOmulUiZmsHJ0bKu5wXXnpCoSHF3y4FnW4fgnjRlLjNza8NJWXdvW5Uew90Zukx7Sh2rw==","signatures":[{"sig":"MEUCIApAYjgAN/fkbyGucBQpAcFCoQ8a7lAUL2p7abcf7NPLAiEA3FZ3mA8B2JPdCt3RN9NzUZYZq6/iIHdk5E44F9v/NJ8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCPokdQ9k2oheqbeZhslOjPe+erm2QC/HPi6Pfc20cP7QIgKVe5frgXCyboy9mFWagkmsmOYLQ0g3mn82kyQvKs+js=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fpi-ai@1.0.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4005024},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./api/*":{"types":"./dist/api/*.d.ts","import":"./dist/api/*.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./compat":{"types":"./dist/compat.d.ts","import":"./dist/compat.js"},"./models":{"types":"./dist/models.d.ts","import":"./dist/models.js"},"./utils/*":{"types":"./dist/utils/*.d.ts","import":"./dist/utils/*.js"},"./bun-oauth":{"types":"./dist/bun-oauth.d.ts","import":"./dist/bun-oauth.js"},"./providers/*":{"types":"./dist/providers/*.d.ts","import":"./dist/providers/*.js"},"./bedrock-provider":{"types":"./dist/bedrock-provider.d.ts","import":"./dist/bedrock-provider.js"}},"gitHead":"7c10bd4337495ee613f2224843ecdf349b80d1df","scripts":{"test":"vitest --run","build":"npm run generate-models && npm run build:offline","clean":"shx rm -rf dist","build:offline":"npm run check:model-data && tsc -p tsconfig.build.json && shx rm -rf dist/providers/data && shx cp -r src/providers/data dist/providers/data","prepublishOnly":"npm run clean && npm run build","generate-models":"node scripts/generate-models.ts --strict","check:model-data":"node scripts/check-model-data.ts","hydrate-model-data":"node scripts/generate-models.ts --strict --data-only","generate-model-catalog":"node scripts/generate-models.ts --strict --json-only --json-output ../../.artifacts/model-catalog"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"975b2765-9d44-42ba-a322-c1cbbce03f36"}},"repository":{"url":"git+https://github.com/earendil-works/pi.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.16.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"sideEffects":["./dist/compat.js","./dist/images.js","./dist/providers/images/register-builtins.js"],"_nodeVersion":"22.23.3","dependencies":{"openai":"7.19.0","typebox":"1.3.27","partial-json":"0.1.7","@google/genai":"2.21.0","http-proxy-agent":"9.1.0","@anthropic-ai/sdk":"0.129.0","https-proxy-agent":"9.1.0","@smithy/node-http-handler":"4.12.1","@earendil-works/pi-telemetry":"^1.0.4","@aws-sdk/client-bedrock-runtime":"3.1127.0"},"_hasShrinkwrap":false,"devDependencies":{"canvas":"3.2.3","vitest":"4.1.11","@types/node":"22.19.19"},"_npmOperationalInternal":{"tmp":"tmp/pi-ai_1.0.4_1791236682322_0.8874789616632566","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@earendil-works/pi-ai","version":"1.1.0","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@earendil-works/pi-ai@1.1.0","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"},{"name":"rwachtler","email":"r.wachtler@outlook.com"}],"homepage":"https://github.com/earendil-works/pi#readme","bugs":{"url":"https://github.com/earendil-works/pi/issues"},"bin":{"pi-ai":"dist/cli.js"},"dist":{"shasum":"7729247848ae3c5481cd66367790472ab4a6e4f3","tarball":"https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-1.1.0.tgz","fileCount":829,"integrity":"sha512-1T7LAkc/5Bvc0v6w4vAGVdCrli0o/E0pEmYKTnixu95vSFArBjvbhS/G4ZwI0RUePgf0Imcu0VyqlM4EcXxqfw==","signatures":[{"sig":"MEUCIEwTvhuAOVy2rEqZuMyij6XogF9dHxz5myYIEs+ja1p3AiEAyRv8aLIUZRmin2jSvMRYpVi4X0LQd04s6b8c9HR4CfM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCMdr1uJ0Y8FhmD1fz8AXBSO9+Vc81TkUJuZz0Y3U5RzQIgUER1V/Fbo6V6aIKiuxe7Vyz1GxhDX2RfFssMDZON1L8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fpi-ai@1.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4086201},"main":"./dist/index.js","type":"module","_from":"file:/tmp/pi-package-artifacts-gBWTz8/tarballs/earendil-works-pi-ai-1.1.0-d53ecb02473f.tgz","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./api/*":{"types":"./dist/api/*.d.ts","import":"./dist/api/*.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./compat":{"types":"./dist/compat.d.ts","import":"./dist/compat.js"},"./models":{"types":"./dist/models.d.ts","import":"./dist/models.js"},"./utils/*":{"types":"./dist/utils/*.d.ts","import":"./dist/utils/*.js"},"./bun-oauth":{"types":"./dist/bun-oauth.d.ts","import":"./dist/bun-oauth.js"},"./providers/*":{"types":"./dist/providers/*.d.ts","import":"./dist/providers/*.js"},"./bedrock-provider":{"types":"./dist/bedrock-provider.d.ts","import":"./dist/bedrock-provider.js"}},"scripts":{"test":"vitest --run","build":"npm run generate-models && npm run build:offline","clean":"shx rm -rf dist","build:offline":"npm run check:model-data && tsc -p tsconfig.build.json && shx rm -rf dist/providers/data && shx cp -r src/providers/data dist/providers/data","prepublishOnly":"npm run clean && npm run build","generate-models":"node scripts/generate-models.ts --strict","check:model-data":"node scripts/check-model-data.ts","hydrate-model-data":"node scripts/generate-models.ts --strict --data-only","generate-model-catalog":"node scripts/generate-models.ts --strict --json-only --json-output ../../.artifacts/model-catalog"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"975b2765-9d44-42ba-a322-c1cbbce03f36"}},"_resolved":"/tmp/pi-package-artifacts-gBWTz8/tarballs/earendil-works-pi-ai-1.1.0-d53ecb02473f.tgz","_integrity":"sha512-1T7LAkc/5Bvc0v6w4vAGVdCrli0o/E0pEmYKTnixu95vSFArBjvbhS/G4ZwI0RUePgf0Imcu0VyqlM4EcXxqfw==","repository":{"url":"git+https://github.com/earendil-works/pi.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.16.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"sideEffects":["./dist/compat.js","./dist/images.js","./dist/providers/images/register-builtins.js"],"_nodeVersion":"22.23.3","dependencies":{"openai":"7.19.0","typebox":"1.3.27","partial-json":"0.1.7","@google/genai":"2.21.0","http-proxy-agent":"9.1.0","@anthropic-ai/sdk":"0.129.0","https-proxy-agent":"9.1.0","@smithy/node-http-handler":"4.12.1","@earendil-works/pi-telemetry":"^1.1.0","@aws-sdk/client-bedrock-runtime":"3.1127.0"},"_hasShrinkwrap":false,"devDependencies":{"canvas":"3.2.3","vitest":"4.1.11","@types/node":"22.19.19"},"_npmOperationalInternal":{"tmp":"tmp/pi-ai_1.1.0_1791411128513_0.5626605696932219","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@earendil-works/pi-ai","version":"1.2.0","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@earendil-works/pi-ai@1.2.0","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"},{"name":"rwachtler","email":"r.wachtler@outlook.com"}],"homepage":"https://github.com/earendil-works/pi#readme","bugs":{"url":"https://github.com/earendil-works/pi/issues"},"bin":{"pi-ai":"dist/cli.js"},"dist":{"shasum":"2819f257bc4b7b942cc720d926da8e3a80bdb435","tarball":"https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-1.2.0.tgz","fileCount":841,"integrity":"sha512-U5/1zXqfV1on7/9sbez03tT4Ru49Lvfb4+zXSDK3DBKF5cRk6KxvAOTOY3HJ4jimlZth+rs7vbJqN6iBQAoNuQ==","signatures":[{"sig":"MEYCIQC9QJ8ltzbZ6e1v7ANZdHTf0rP4OVbS6U1dutFZcJ83vAIhAPzugZz2FFqFBoCTEPq/BJUHoX3qPaR72hSZIahH1ude","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCsOS3Lxeq+URacTKkJtvhikbsDiSG3UPGAcyaRRbKRagIhAKlIN6ykk9bKBfH+6IIo9qBextHQk8YWKPatC0QVBHSr","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fpi-ai@1.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4174052},"main":"./dist/index.js","type":"module","_from":"file:/tmp/pi-package-artifacts-Jw8Saj/tarballs/earendil-works-pi-ai-1.2.0-539ff5cd7a9f.tgz","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./api/*":{"types":"./dist/api/*.d.ts","import":"./dist/api/*.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./compat":{"types":"./dist/compat.d.ts","import":"./dist/compat.js"},"./models":{"types":"./dist/models.d.ts","import":"./dist/models.js"},"./utils/*":{"types":"./dist/utils/*.d.ts","import":"./dist/utils/*.js"},"./bun-oauth":{"types":"./dist/bun-oauth.d.ts","import":"./dist/bun-oauth.js"},"./providers/*":{"types":"./dist/providers/*.d.ts","import":"./dist/providers/*.js"},"./bedrock-provider":{"types":"./dist/bedrock-provider.d.ts","import":"./dist/bedrock-provider.js"}},"scripts":{"test":"vitest --run","build":"npm run generate-models && npm run build:offline","clean":"shx rm -rf dist","build:offline":"npm run check:model-data && tsc -p tsconfig.build.json && shx rm -rf dist/providers/data && shx cp -r src/providers/data dist/providers/data","prepublishOnly":"npm run clean && npm run build","generate-models":"node scripts/generate-models.ts --strict","check:model-data":"node scripts/check-model-data.ts","hydrate-model-data":"node scripts/generate-models.ts --strict --data-only","generate-model-catalog":"node scripts/generate-models.ts --strict --json-only --json-output ../../.artifacts/model-catalog"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"975b2765-9d44-42ba-a322-c1cbbce03f36"}},"_resolved":"/tmp/pi-package-artifacts-Jw8Saj/tarballs/earendil-works-pi-ai-1.2.0-539ff5cd7a9f.tgz","_integrity":"sha512-U5/1zXqfV1on7/9sbez03tT4Ru49Lvfb4+zXSDK3DBKF5cRk6KxvAOTOY3HJ4jimlZth+rs7vbJqN6iBQAoNuQ==","repository":{"url":"git+https://github.com/earendil-works/pi.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.16.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"sideEffects":["./dist/compat.js","./dist/images.js","./dist/providers/images/register-builtins.js"],"_nodeVersion":"22.23.3","dependencies":{"openai":"7.19.0","typebox":"1.3.27","partial-json":"0.1.7","@google/genai":"2.21.0","http-proxy-agent":"9.1.0","@anthropic-ai/sdk":"0.129.0","https-proxy-agent":"9.1.0","@smithy/node-http-handler":"4.12.1","@earendil-works/pi-telemetry":"^1.2.0","@aws-sdk/client-bedrock-runtime":"3.1127.0"},"_hasShrinkwrap":false,"devDependencies":{"canvas":"3.2.3","vitest":"4.1.11","@types/node":"22.19.19"},"_npmOperationalInternal":{"tmp":"tmp/pi-ai_1.2.0_1791846100104_0.1030513231330965","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@earendil-works/pi-ai","version":"1.3.0","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@earendil-works/pi-ai@1.3.0","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"},{"name":"rwachtler","email":"r.wachtler@outlook.com"}],"homepage":"https://github.com/earendil-works/pi#readme","bugs":{"url":"https://github.com/earendil-works/pi/issues"},"bin":{"pi-ai":"dist/cli.js"},"dist":{"shasum":"fe720249f828642bcb66b5b6a0e49c1e5f2f8954","tarball":"https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-1.3.0.tgz","fileCount":837,"integrity":"sha512-KaBI8x7q7sPoFUXICNGD9efHzDG+oRNwVvkA9jdIsSQWH1RjFssOlEGsbLtewUPPgCrvmz0l2KTgSLXTyj3acw==","signatures":[{"sig":"MEYCIQDh1SPF/5f1kOdrjdisUbKO8HAaKcUP+pWwgMM/xh4q/wIhAIeRRo+2r/n8vGKpV18lbzevmsdVZkSIKOc6wXPtB4+L","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDlKdKcfuqXOuytWwiIDtCOkllwiqy/Uj+I3t709vLSowIhAIo6qUgD5qnrDn9BmimTC5ld18aiSagTwb596l2PD4dT","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fpi-ai@1.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4170589},"main":"./dist/index.js","type":"module","_from":"file:/tmp/pi-package-artifacts-O3jHRV/tarballs/earendil-works-pi-ai-1.3.0-29a048f31eea.tgz","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./api/*":{"types":"./dist/api/*.d.ts","import":"./dist/api/*.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./compat":{"types":"./dist/compat.d.ts","import":"./dist/compat.js"},"./models":{"types":"./dist/models.d.ts","import":"./dist/models.js"},"./utils/*":{"types":"./dist/utils/*.d.ts","import":"./dist/utils/*.js"},"./bun-oauth":{"types":"./dist/bun-oauth.d.ts","import":"./dist/bun-oauth.js"},"./providers/*":{"types":"./dist/providers/*.d.ts","import":"./dist/providers/*.js"},"./bedrock-provider":{"types":"./dist/bedrock-provider.d.ts","import":"./dist/bedrock-provider.js"}},"scripts":{"test":"vitest --run","build":"npm run generate-models && npm run build:offline","clean":"shx rm -rf dist","build:offline":"npm run check:model-data && tsc -p tsconfig.build.json && shx rm -rf dist/providers/data && shx cp -r src/providers/data dist/providers/data","prepublishOnly":"npm run clean && npm run build","generate-models":"node scripts/generate-models.ts --strict","check:model-data":"node scripts/check-model-data.ts","hydrate-model-data":"node scripts/generate-models.ts --strict --data-only","generate-model-catalog":"node scripts/generate-models.ts --strict --json-only --json-output ../../.artifacts/model-catalog"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"975b2765-9d44-42ba-a322-c1cbbce03f36"}},"_resolved":"/tmp/pi-package-artifacts-O3jHRV/tarballs/earendil-works-pi-ai-1.3.0-29a048f31eea.tgz","_integrity":"sha512-KaBI8x7q7sPoFUXICNGD9efHzDG+oRNwVvkA9jdIsSQWH1RjFssOlEGsbLtewUPPgCrvmz0l2KTgSLXTyj3acw==","repository":{"url":"git+https://github.com/earendil-works/pi.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.16.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"sideEffects":["./dist/compat.js","./dist/images.js","./dist/providers/images/register-builtins.js"],"_nodeVersion":"22.23.3","dependencies":{"openai":"7.19.0","typebox":"1.3.27","partial-json":"0.1.7","@google/genai":"2.21.0","http-proxy-agent":"9.1.0","@anthropic-ai/sdk":"0.129.0","https-proxy-agent":"9.1.0","@smithy/node-http-handler":"4.12.1","@earendil-works/pi-telemetry":"1.3.0","@aws-sdk/client-bedrock-runtime":"3.1127.0"},"_hasShrinkwrap":false,"devDependencies":{"canvas":"3.2.3","vitest":"4.1.11","@types/node":"22.19.19"},"_npmOperationalInternal":{"tmp":"tmp/pi-ai_1.3.0_1792091467698_0.5689406498931122","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"_id":"@earendil-works/pi-ai@1.4.0","bin":{"pi-ai":"dist/cli.js"},"bugs":{"url":"https://github.com/earendil-works/pi/issues"},"dist":{"shasum":"2ddca1029bbe97e26298d998d3a66d09db7759e2","tarball":"https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-1.4.0.tgz","fileCount":845,"integrity":"sha512-hQM/C4+1w8rHYACzDDf+0vQMnEnpzIop1tptIERVgR3ZeT/hHSzBNG8PaWPgxWQjqSeKCyBZSyp8uTT6eKK1pQ==","signatures":[{"sig":"MEUCIA6hpf7lcjYuSgv1+Qp5JBKMkX2hfSCF9qv6a9X/st6QAiEAtlV+T7bqMRWWh3NVxSxZonKX7xTN39h/VNVB1woeCQk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDnajo/OewnO42Tik1oqJ/CAzWA5dcQ/Gy5DxuLfAYG1wIhAOJGJGC85vouLb/6iEXNI+PLqoigQfbM5MByX2IpwmN9"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fpi-ai@1.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4303837},"main":"./dist/index.js","name":"@earendil-works/pi-ai","type":"module","_from":"file:/tmp/pi-package-artifacts-e5Jxrf/tarballs/earendil-works-pi-ai-1.4.0-85033f0b8fb5.tgz","types":"./dist/index.d.ts","author":{"name":"Mario Zechner"},"engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./api/*":{"types":"./dist/api/*.d.ts","import":"./dist/api/*.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./compat":{"types":"./dist/compat.d.ts","import":"./dist/compat.js"},"./models":{"types":"./dist/models.d.ts","import":"./dist/models.js"},"./utils/*":{"types":"./dist/utils/*.d.ts","import":"./dist/utils/*.js"},"./bun-oauth":{"types":"./dist/bun-oauth.d.ts","import":"./dist/bun-oauth.js"},"./providers/*":{"types":"./dist/providers/*.d.ts","import":"./dist/providers/*.js"},"./bedrock-provider":{"types":"./dist/bedrock-provider.d.ts","import":"./dist/bedrock-provider.js"}},"license":"MIT","scripts":{"test":"vitest --run","build":"npm run generate-models && npm run build:offline","clean":"shx rm -rf dist","build:offline":"npm run check:model-data && tsc -p tsconfig.build.json && shx rm -rf dist/providers/data && shx cp -r src/providers/data dist/providers/data","prepublishOnly":"npm run clean && npm run build","generate-models":"node scripts/generate-models.ts --strict","check:model-data":"node scripts/check-model-data.ts","hydrate-model-data":"node scripts/generate-models.ts --strict --data-only","generate-model-catalog":"node scripts/generate-models.ts --strict --json-only --json-output ../../.artifacts/model-catalog"},"version":"1.4.0","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"975b2765-9d44-42ba-a322-c1cbbce03f36"}},"homepage":"https://github.com/earendil-works/pi#readme","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"_resolved":"/tmp/pi-package-artifacts-e5Jxrf/tarballs/earendil-works-pi-ai-1.4.0-85033f0b8fb5.tgz","_integrity":"sha512-hQM/C4+1w8rHYACzDDf+0vQMnEnpzIop1tptIERVgR3ZeT/hHSzBNG8PaWPgxWQjqSeKCyBZSyp8uTT6eKK1pQ==","repository":{"url":"git+https://github.com/earendil-works/pi.git","type":"git","directory":"packages/ai"},"_npmVersion":"11.16.0","description":"Unified LLM API with automatic model discovery and provider configuration","directories":{},"maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"},{"name":"rwachtler","email":"r.wachtler@outlook.com"}],"sideEffects":["./dist/compat.js","./dist/images.js","./dist/providers/images/register-builtins.js"],"_nodeVersion":"22.23.3","dependencies":{"openai":"7.19.0","typebox":"1.3.27","partial-json":"0.1.7","@google/genai":"2.21.0","http-proxy-agent":"9.1.0","@anthropic-ai/sdk":"0.129.0","https-proxy-agent":"9.1.0","@smithy/node-http-handler":"4.12.1","@earendil-works/pi-telemetry":"1.4.0","@aws-sdk/client-bedrock-runtime":"3.1127.0"},"_hasShrinkwrap":false,"devDependencies":{"canvas":"3.2.3","vitest":"4.1.11","@types/node":"22.19.19"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/pi-ai_1.4.0_1792622629402_0.2793451183746958"}}},"time":{"created":"2026-05-07T15:15:37.162Z","modified":"2026-10-21T22:43:50.030Z","0.74.0":"2026-05-07T15:15:37.460Z","0.74.1":"2026-05-16T23:34:50.791Z","0.75.0":"2026-05-17T19:03:27.479Z","0.75.1":"2026-05-18T00:01:42.521Z","0.75.2":"2026-05-18T09:47:02.489Z","0.75.3":"2026-05-18T09:59:11.135Z","0.75.4":"2026-05-20T14:24:10.038Z","0.74.2":"2026-05-21T22:21:55.412Z","0.75.5":"2026-05-23T10:06:33.703Z","0.76.0":"2026-05-27T20:03:51.992Z","0.77.0":"2026-05-28T22:48:53.272Z","0.78.0":"2026-05-29T23:51:28.729Z","0.78.1":"2026-06-04T16:35:33.240Z","0.79.0":"2026-06-08T15:20:07.607Z","0.79.1":"2026-06-09T21:25:28.677Z","0.79.2":"2026-06-12T22:29:35.567Z","0.79.3":"2026-06-13T09:21:45.178Z","0.79.4":"2026-06-15T08:32:26.105Z","0.79.5":"2026-06-16T18:06:59.800Z","0.79.6":"2026-06-16T22:03:19.072Z","0.79.7":"2026-06-18T16:31:42.639Z","0.79.8":"2026-06-19T07:57:37.419Z","0.79.9":"2026-06-20T20:19:43.306Z","0.79.10":"2026-06-22T09:18:46.214Z","0.80.1":"2026-06-23T18:08:34.024Z","0.80.2":"2026-06-23T22:03:29.852Z","0.80.3":"2026-06-30T20:34:10.778Z","0.80.5":"2026-07-09T19:08:43.457Z","0.80.6":"2026-07-09T23:21:44.666Z","0.80.7":"2026-07-14T16:41:31.407Z","0.80.8":"2026-07-16T14:40:17.428Z","0.80.9":"2026-07-16T17:23:12.565Z","0.80.10":"2026-07-16T22:04:50.937Z","0.81.0":"2026-07-21T13:33:19.952Z","0.81.1":"2026-07-21T16:44:49.475Z","0.82.0":"2026-07-24T06:11:35.321Z","0.82.1":"2026-07-25T12:46:52.948Z","0.83.0":"2026-07-29T22:31:05.672Z","0.84.0":"2026-08-06T11:11:50.674Z","0.84.1":"2026-08-07T06:03:23.155Z","0.84.2":"2026-08-14T10:07:54.869Z","0.84.3":"2026-08-24T11:06:27.239Z","0.84.4":"2026-08-28T22:05:13.974Z","0.85.0":"2026-09-04T10:13:48.137Z","0.85.1":"2026-09-05T12:05:47.996Z","0.86.0":"2026-09-19T23:10:28.234Z","0.86.1":"2026-09-20T11:14:23.231Z","0.87.0":"2026-09-21T16:42:02.680Z","0.87.1":"2026-09-22T19:38:28.192Z","0.99.0":"2026-09-29T17:17:00.006Z","0.99.1":"2026-09-29T18:20:01.695Z","0.99.2":"2026-09-30T19:25:25.472Z","1.0.0":"2026-10-01T19:12:18.708Z","1.0.1":"2026-10-03T12:30:40.641Z","1.0.2":"2026-10-04T00:52:58.574Z","1.0.3":"2026-10-05T08:30:59.376Z","1.0.4":"2026-10-05T21:44:42.433Z","1.1.0":"2026-10-07T22:12:08.670Z","1.2.0":"2026-10-12T23:01:40.259Z","1.3.0":"2026-10-15T19:11:07.796Z","1.4.0":"2026-10-21T22:43:49.497Z"},"bugs":{"url":"https://github.com/earendil-works/pi/issues"},"author":{"name":"Mario Zechner"},"license":"MIT","homepage":"https://github.com/earendil-works/pi#readme","keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"repository":{"url":"git+https://github.com/earendil-works/pi.git","type":"git","directory":"packages/ai"},"description":"Unified LLM API with automatic model discovery and provider configuration","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"},{"name":"rwachtler","email":"r.wachtler@outlook.com"}],"readme":"# @earendil-works/pi-ai\n\nUnified LLM API with provider collections, automatic auth resolution, token and cost tracking, and simple context persistence and hand-off to other models mid-session.\n\n**Note**: The chat catalog only includes models that support tool calling (function calling), as this is essential for agentic workflows. Image and classifier catalogs use their operation-specific capabilities.\n\n## Table of Contents\n\n- [Supported Providers](#supported-providers)\n- [Installation](#installation)\n- [Quick Start](#quick-start)\n- [Providers and Models](#providers-and-models)\n  - [Provider Factories](#provider-factories)\n  - [All Built-in Providers](#all-built-in-providers)\n  - [Querying Models](#querying-models)\n  - [Static Catalog Reads](#static-catalog-reads)\n  - [Dynamic Providers](#dynamic-providers)\n- [Auth](#auth)\n  - [How Auth Resolves](#how-auth-resolves)\n  - [Transforming Request Headers](#transforming-request-headers)\n  - [Client Identity](#client-identity)\n  - [Credential Store](#credential-store)\n  - [Environment Variables](#environment-variables)\n- [Tools](#tools)\n  - [Defining Tools](#defining-tools)\n  - [Handling Tool Calls](#handling-tool-calls)\n  - [Streaming Tool Calls with Partial JSON](#streaming-tool-calls-with-partial-json)\n  - [Validating Tool Arguments](#validating-tool-arguments)\n  - [Complete Event Reference](#complete-event-reference)\n- [Image Input](#image-input)\n- [Image Generation](#image-generation)\n- [Classification](#classification)\n- [Thinking/Reasoning](#thinkingreasoning)\n  - [Unified Interface](#unified-interface-streamsimplecompletesimple)\n  - [Provider-Specific Options](#provider-specific-options-streamcomplete)\n  - [Streaming Thinking Content](#streaming-thinking-content)\n- [Stop Reasons](#stop-reasons)\n- [Telemetry](#telemetry)\n- [Error Handling](#error-handling)\n  - [Aborting Requests](#aborting-requests)\n  - [Continuing After Abort](#continuing-after-abort)\n  - [Debugging Provider Payloads](#debugging-provider-payloads)\n  - [Observing Provider Stream Events](#observing-provider-stream-events)\n- [Custom Providers](#custom-providers)\n  - [createProvider()](#createprovider)\n  - [Calling API Implementations Directly](#calling-api-implementations-directly)\n  - [OpenAI Compatibility Settings](#openai-compatibility-settings)\n- [Faux Provider for Tests](#faux-provider-for-tests)\n- [Cross-Provider Handoffs](#cross-provider-handoffs)\n- [System Messages](#system-messages)\n- [Context Serialization](#context-serialization)\n- [Browser Usage](#browser-usage)\n- [Bundling and Tree Shaking](#bundling-and-tree-shaking)\n- [OAuth Providers](#oauth-providers)\n  - [Vertex AI](#vertex-ai)\n  - [CLI Login](#cli-login)\n  - [Programmatic OAuth](#programmatic-oauth)\n- [Migrating from the Old Global API](#migrating-from-the-old-global-api)\n- [Development](#development)\n- [License](#license)\n\n## Supported Providers\n\n- **OpenAI** (including the Decisions classifier API)\n- **Ant Ling**\n- **Azure OpenAI (Responses)**\n- **OpenAI Codex (legacy)** (ChatGPT Plus/Pro subscription, requires OAuth, see below)\n- **Radius** (API key or OAuth, with a dynamically refreshed gateway catalog)\n- **TypeSafe** (System One classifier API)\n- **DeepSeek**\n- **NVIDIA NIM**\n- **Anthropic**\n- **Google**\n- **Vertex AI** (Gemini via Vertex AI)\n- **Mistral**\n- **Groq**\n- **Cerebras**\n- **Cloudflare AI Gateway**\n- **Cloudflare Workers AI**\n- **xAI**\n- **OpenRouter**\n- **Vercel AI Gateway**\n- **ZAI Coding Plan (Global)** (with separate China provider)\n- **MiniMax** (with separate China provider)\n- **Together AI**\n- **Baseten**\n- **Hugging Face**\n- **Moonshot AI** (with separate China provider)\n- **GitHub Copilot** (requires OAuth, see below)\n- **Amazon Bedrock**\n- **OpenCode Zen**\n- **OpenCode Go**\n- **Fireworks** (uses OpenAI- and Anthropic-compatible APIs)\n- **Kimi For Coding** (Moonshot AI subscription endpoint, uses Anthropic-compatible API)\n- **Meta** (Model API, uses OpenAI Responses-compatible API)\n- **Qwen Token Plan** (separate Individual and existing catalogs, with a separate China provider)\n- **Xiaomi MiMo** (defaults to API billing endpoint, with separate Token Plan providers for `cn`/`ams`/`sgp` regions)\n- **Any OpenAI-compatible API**: Ollama, vLLM, LM Studio, etc.\n\n## Installation\n\n```bash\nnpm install @earendil-works/pi-ai\n```\n\nTypeBox exports are re-exported from `@earendil-works/pi-ai`: `Type`, `Static`, and `TSchema`.\n\n## Quick Start\n\nYou build a `Models` collection of providers and stream through it. The quickest start registers every built-in provider; apps that care about bundle size register individual providers instead (see [Provider Factories](#provider-factories) and [Bundling and Tree Shaking](#bundling-and-tree-shaking)).\n\n```typescript\nimport { Type, type Context, type Tool } from '@earendil-works/pi-ai';\nimport { builtinModels } from '@earendil-works/pi-ai/providers/all';\n\n// A Models collection with every built-in provider registered\nconst models = builtinModels();\n\n// Sync lookup against the collection\nconst model = models.getModel('openai', 'gpt-4o-mini')!;\n\n// Define tools with TypeBox schemas for type safety and validation\nconst tools: Tool[] = [{\n  name: 'get_time',\n  description: 'Get the current time',\n  parameters: Type.Object({\n    timezone: Type.Optional(Type.String({ description: 'Optional timezone (e.g., America/New_York)' }))\n  })\n}];\n\n// Build a conversation context (easily serializable and transferable between models)\nconst context: Context = {\n  systemPrompt: 'You are a helpful assistant.',\n  messages: [{ role: 'user', content: 'What time is it?', timestamp: Date.now() }],\n  tools\n};\n\n// Option 1: Streaming with all event types.\n// Auth resolves through the provider (OPENAI_API_KEY from the environment here).\nconst s = models.stream(model, context);\n\nfor await (const event of s) {\n  switch (event.type) {\n    case 'start':\n      console.log(`Starting with ${event.partial.model}`);\n      break;\n    case 'text_start':\n      console.log('\\n[Text started]');\n      break;\n    case 'text_delta':\n      process.stdout.write(event.delta);\n      break;\n    case 'text_end':\n      console.log('\\n[Text ended]');\n      break;\n    case 'thinking_start':\n      console.log('[Model is thinking...]');\n      break;\n    case 'thinking_delta':\n      process.stdout.write(event.delta);\n      break;\n    case 'thinking_end':\n      console.log('[Thinking complete]');\n      break;\n    case 'toolcall_start':\n      console.log(`\\n[Tool call started: index ${event.contentIndex}]`);\n      break;\n    case 'toolcall_delta':\n      // Partial tool arguments are being streamed\n      const partialCall = event.partial.content[event.contentIndex];\n      if (partialCall.type === 'toolCall') {\n        console.log(`[Streaming args for ${partialCall.name}]`);\n      }\n      break;\n    case 'toolcall_end':\n      console.log(`\\nTool called: ${event.toolCall.name}`);\n      console.log(`Arguments: ${JSON.stringify(event.toolCall.arguments)}`);\n      break;\n    case 'done':\n      console.log(`\\nFinished: ${event.reason}`);\n      break;\n    case 'error':\n      console.error(`Error: ${event.error.errorMessage}`);\n      break;\n  }\n}\n\n// Get the final message after streaming, add it to the context\nconst finalMessage = await s.result();\ncontext.messages.push(finalMessage);\n\n// Handle tool calls if any\nconst toolCalls = finalMessage.content.filter(b => b.type === 'toolCall');\nfor (const call of toolCalls) {\n  const result = call.name === 'get_time'\n    ? new Date().toLocaleString('en-US', {\n        timeZone: call.arguments.timezone || 'UTC',\n        dateStyle: 'full',\n        timeStyle: 'long'\n      })\n    : 'Unknown tool';\n\n  // Add tool result to context (supports text and images)\n  context.messages.push({\n    role: 'toolResult',\n    toolCallId: call.id,\n    toolName: call.name,\n    content: [{ type: 'text', text: result }],\n    isError: false,\n    timestamp: Date.now()\n  });\n}\n\n// Continue if there were tool calls\nif (toolCalls.length > 0) {\n  const continuation = await models.complete(model, context);\n  context.messages.push(continuation);\n  console.log('After tool execution:', continuation.content);\n}\n\nconsole.log(`Total tokens: ${finalMessage.usage.input} in, ${finalMessage.usage.output} out`);\nconsole.log(`Cost: $${finalMessage.usage.cost.total.toFixed(4)}`);\n\n// Option 2: Get complete response without streaming\nconst response = await models.complete(model, context);\n\nfor (const block of response.content) {\n  if (block.type === 'text') {\n    console.log(block.text);\n  } else if (block.type === 'toolCall') {\n    console.log(`Tool: ${block.name}(${JSON.stringify(block.arguments)})`);\n  }\n}\n```\n\nSnippets in the rest of this README assume a `models` collection set up like this (with the relevant providers registered).\n\n## Providers and Models\n\nA **provider** is the runtime unit: it owns its model catalog, its auth (API key resolution, OAuth flows), and its stream behavior. A `Models` collection holds providers and routes every request to the provider that owns the model.\n\nProviders internally share **API implementations** (the wire protocols): Anthropic models use `anthropic-messages`, OpenAI uses `openai-responses`, while xAI, Groq, Cerebras, OpenRouter, and most others share `openai-completions`. Mixed-API providers (GitHub Copilot, OpenCode Zen) dispatch per model.\n\n### Provider Factories\n\nFor apps that only need specific providers, there is one factory per built-in provider, each a subpath import that pulls only that provider's catalog:\n\n```typescript\nimport { anthropicProvider } from '@earendil-works/pi-ai/providers/anthropic';\nimport { openaiProvider } from '@earendil-works/pi-ai/providers/openai';\nimport { openrouterProvider } from '@earendil-works/pi-ai/providers/openrouter';\nimport { amazonBedrockProvider } from '@earendil-works/pi-ai/providers/amazon-bedrock';\n// ...one module per provider in the Supported Providers list\n\nconst models = createModels();\nmodels.setProvider(anthropicProvider());\nmodels.setProvider(openrouterProvider());\n```\n\nProvider factories import their model catalog and a lazy API wrapper. They do not import other providers. With bundler code splitting, SDK implementations (`@anthropic-ai/sdk`, `openai`, `@google/genai`, etc.) stay in lazy chunks loaded on the first request to a model of that API.\n\n### All Built-in Providers\n\nFor apps that want everything (as in Quick Start):\n\n```typescript\nimport { builtinModels } from '@earendil-works/pi-ai/providers/all';\n\nconst models = builtinModels(); // a Models collection with every built-in provider registered\n```\n\nThis imports all catalogs and every built-in provider factory. It is the heavy, explicit entrypoint. `builtinModels()` accepts the same options as `createModels()` (`credentials`, `authContext`); `builtinProviders()` returns the provider array if you want to register them on your own collection.\n\n### Querying Models\n\nReads are synchronous and return the last-known lists:\n\n```typescript\nconst providers = models.getProviders();           // registered Provider objects\nconst provider = models.getProvider('anthropic');  // one provider\n\nconst all = models.getModels();                    // every chat model across providers\nconst anthropicModels = models.getModels('anthropic');\nconst model = models.getModel('anthropic', 'claude-sonnet-4-5');\n\nfor (const m of anthropicModels) {\n  console.log(`${m.id}: ${m.name}`);\n  console.log(`  API: ${m.api}`);\n  console.log(`  Context: ${m.contextWindow} tokens`);\n  console.log(`  Vision: ${m.input.includes('image')}`);\n  console.log(`  Reasoning: ${m.reasoning}`);\n}\n```\n\nThe unqualified reads `getModels()`/`getModel()`/`getAvailable()` return chat models (`Model<Api>`) usable with `stream()`. The `*OfType` reads return one model type, and `getAllModels()`/`getAllAvailable()` return every type as `AnyModel`:\n\n```typescript\nconst images = models.getModelsOfType('image', 'openrouter');           // ImageModel[]\nconst flux = models.getModelOfType('image', 'openrouter', 'black-forest-labs/flux.2-pro');\nconst jev = models.getModelOfType('classifier', 'typesafe', 'jev-latest');\nconst availableImages = await models.getAvailableOfType('image');\nconst everything = models.getAllModels();                               // AnyModel[]\n```\n\nThe model's `type` decides which operation accepts it: chat models stream, `type: \"image\"` models generate images, and `type: \"classifier\"` models classify structured state. `type` is optional on chat models, so a model without `type` is a chat model. Do not compare `type` directly; narrow mixed lists with `isModelType()` or read the effective type with `getModelType()`:\n\n```typescript\nimport { isModelType } from '@earendil-works/pi-ai';\n\nfor (const model of models.getAllModels()) {\n  if (isModelType(model, 'image')) {\n    // model: ImageModel<ImageApi>\n  }\n}\n```\n\nIDs are unique within each provider and type; one upstream model may have separate entries for different operations. On a provider, `getModels()` returns chat models and the optional `getAllModels()` returns every type; providers with only chat models can omit it.\n\nDynamically listed chat models are typed `Model<Api>`. Narrow with the `hasApi()` guard when you need API-specific option typing:\n\n```typescript\nimport { hasApi } from '@earendil-works/pi-ai';\n\nconst m = models.getModel('anthropic', 'claude-sonnet-4-5');\nif (m && hasApi(m, 'anthropic-messages')) {\n  // m: Model<'anthropic-messages'> — stream options fully typed\n  models.stream(m, context, { thinkingEnabled: true, thinkingBudgetTokens: 2048 });\n}\n```\n\n### Static Catalog Reads\n\nFor tooling that wants the generated built-in catalog with full literal typing (provider and model IDs auto-complete), independent of any collection:\n\n```typescript\nimport {\n  getAllBuiltinModels,\n  getBuiltinClassifierModel,\n  getBuiltinClassifierModels,\n  getBuiltinImageModel,\n  getBuiltinImageModels,\n  getBuiltinModel,\n  getBuiltinModels,\n  getBuiltinProviders,\n} from '@earendil-works/pi-ai/providers/all';\n\nconst model = getBuiltinModel('openai', 'gpt-4o-mini'); // typed Model<'openai-responses'>\nconst radius = getBuiltinModel('radius', 'balanced');   // typed Model<'pi-messages'>\nconst flux = getBuiltinImageModel('openrouter', 'black-forest-labs/flux.2-pro');\nconst jev = getBuiltinClassifierModel('typesafe', 'jev-latest');\nconst providers = getBuiltinProviders();\nconst openrouterChat = getBuiltinModels('openrouter');        // Model[]\nconst openrouterImages = getBuiltinImageModels('openrouter'); // ImageModel[]\nconst typesafeClassifiers = getBuiltinClassifierModels('typesafe'); // ClassifierModel[]\nconst openrouterAll = getAllBuiltinModels('openrouter');      // AnyModel[]\n```\n\n### Dynamic Providers\n\nProviders may have dynamic model lists (a llama.cpp server, a live OpenRouter listing). Reads stay sync; fetching is an explicit async verb:\n\n```typescript\n// getModels() returns the last-known list (empty before the first refresh)\nawait models.refresh({ providers: ['llamacpp'] }); // refresh one provider\nawait models.refresh();                            // refresh all providers concurrently, best-effort\nconst fresh = models.getModel('llamacpp', 'qwen3-30b');\n```\n\nStatic built-in providers are no-ops for `refresh()`. Radius is both static and dynamic: it ships the public `radius.pi.dev` catalog for synchronous API lookup, then overlays cached and freshly fetched `/v1/config` models when refreshed with configured auth. See [createProvider()](#createprovider) for building a dynamic provider.\n\n## Auth\n\nEvery provider owns its auth: how API keys resolve (stored credentials, environment variables, ambient sources like AWS profiles or gcloud ADC) and, where supported, OAuth login/refresh flows.\n\n### How Auth Resolves\n\nWhen you call `models.stream()`, the collection resolves auth through the owning provider and merges it into the request. Explicit per-request values always win:\n\n```typescript\n// Resolved through the provider (env var, stored credential, OAuth token):\nawait models.complete(model, context);\n\n// Explicit key wins over anything the provider would resolve:\nawait models.complete(model, context, { apiKey: 'sk-explicit' });\n```\n\nYou can inspect resolution without making a request. Pass a provider ID for provider-scoped auth, or a model to include its static `model.headers`:\n\n```typescript\nconst providerAuth = await models.getAuth(model.provider);\nconst modelAuth = await models.getAuth(model);\n\nif (modelAuth) {\n  console.log(`configured via ${modelAuth.source}`); // e.g. \"ANTHROPIC_API_KEY\", \"OAuth\", \"stored credential\"\n  console.log(modelAuth.auth.headers);              // Provider auth headers + model.headers\n} else {\n  console.log('not configured');\n}\n```\n\nBoth overloads resolve credentials, refresh expired OAuth when necessary, and may return an auth-derived `apiKey`, `headers`, or `baseUrl`. `getAuth()` resolves `undefined` for unconfigured providers and rejects with `ModelsError` when something is actually broken (`\"oauth\"`: token refresh failed, credential preserved for re-login; `\"auth\"`: key resolution or credential store failure). Request paths surface the same failures as stream errors.\n\n`getAuth()`, `checkAuth()`, `getAvailable()`, login, and logout accept optional caller cancellation through their existing options or interaction objects and remain unbounded when no signal is supplied. Provider `login`, `ApiKeyAuth.check`, `ApiKeyAuth.resolve`, and `OAuthAuth.refresh` implementations always receive a concrete signal and must honor it for blocking work.\n\n### Transforming Request Headers\n\n`Models.stream()`, `complete()`, `streamSimple()`, and `completeSimple()` accept a Models-only `transformHeaders` option. It runs once after provider auth, `model.headers`, and explicit `options.headers` have been merged, but before provider dispatch:\n\n```typescript\nconst response = await models.completeSimple(model, context, {\n  headers: { \"X-Client\": \"my-app\" },\n  transformHeaders: async (headers) => ({\n    ...headers,\n    \"X-Request-ID\": crypto.randomUUID(),\n  }),\n});\n```\n\nThe ordering is:\n\n```text\nprovider auth headers -> model.headers -> explicit options.headers -> transformHeaders -> Provider.stream*()\n```\n\nHeader names are merged case-insensitively. Explicit headers override auth/model headers, and the transform has final control; returning `null` for a header suppresses lower-level defaults that support deletion.\n\n`transformHeaders` belongs to `Models`, not `Provider`. A `Models` implementation must consume it and remove it before calling `Provider.stream*()`. Provider implementations continue receiving ordinary `ApiStreamOptions` or `SimpleStreamOptions` and never handle the transform themselves. Use this option instead of calling `getAuth(model)` before `stream*()`, which would resolve request auth twice.\n\n### Client Identity\n\n`identity` controls how requests identify the calling app to providers. Set it on `createModels()` as a default, or per request; a request's fields override the `Models` default field by field:\n\n```typescript\nconst models = createModels({\n  identity: {\n    userAgent: 'detailed',\n    version: '2.1.0',\n    attribution: { name: 'my-app', url: 'https://my-app.example', categories: ['cloud-agent'] },\n  },\n});\n\nawait models.completeSimple(model, context, { identity: { attribution: null } });\n```\n\n- `userAgent`: `\"detailed\"` (default) sends `pi/<version> (<platform>; <runtime>; <arch>)`, `\"short\"` sends `pi`, and `{ custom: \"...\" }` sends the given value. On Bedrock the value is appended to the AWS SDK user agent.\n- `version`: the version in the detailed `User-Agent`. Default: the pi-ai version.\n- `attribution`: provider attribution headers. Absent (default) or `null` sends none; `null` also turns off attribution from a merged identity. `{ name, url, categories? }` maps to each provider's headers:\n  - OpenRouter: `HTTP-Referer: <url>` (the app's identity in OpenRouter's rankings, grouped by origin), `X-OpenRouter-Title: <name>`, and `X-OpenRouter-Categories` (comma-separated).\n  - NVIDIA NIM: `X-BILLING-INVOKE-ORIGIN: <name>` with its first letter upper-cased.\n  - OpenCode: `x-opencode-client: <name>`.\n\n  `PI_ATTRIBUTION` is pi's: `{ name: \"pi\", url: \"https://pi.dev\", categories: [\"cli-agent\"] }`.\n\nIdentity headers are defaults below provider, model, and request headers, so configured headers win and a `null` request header removes one. Providers that send a fixed client identity, such as GitHub Copilot and Anthropic OAuth, keep it. `withClientIdentity(models, identity)` returns a wrapper of a `Models` (or `MutableModels`) whose requests use `identity` over the one the `Models` was created with, for libraries that receive a `Models` from their host. `identity` is plain JSON, so it can be persisted with other request options.\n\n### Credential Store\n\nStored credentials (API keys entered interactively, OAuth tokens) live in a `CredentialStore` — one type-tagged credential per provider. pi-ai ships an in-memory default; apps inject persistent storage:\n\n```typescript\nimport { createModels, type CredentialStore } from '@earendil-works/pi-ai';\n\nconst models = createModels({ credentials: myFileBackedStore });\n// builtinModels() takes the same options:\n// const models = builtinModels({ credentials: myFileBackedStore });\n```\n\nThe contract is small: `read(providerId)`, `list()` for non-secret `{ providerId, type }` metadata, `modify(providerId, fn)` (the only write path — a serialized read-modify-write), and `delete(providerId)`. Each operation accepts optional cancellation options. Enumeration must not resolve secrets or execute configured key commands. OAuth token refresh runs inside `modify`, so concurrent requests and processes cannot double-refresh a rotated token. A stored credential *owns* its provider: environment variables are only consulted when nothing is stored, and a failed refresh never silently falls back to an env key.\n\nAPI-key credentials use the same discriminator as pi's `auth.json` and can carry provider-scoped env/config values:\n\n```typescript\nconst credential = {\n  type: 'api_key',\n  key: '...',\n  env: {\n    CLOUDFLARE_ACCOUNT_ID: 'account-id',\n    CLOUDFLARE_GATEWAY_ID: 'gateway-id'\n  }\n} as const;\n```\n\n### Environment Variables\n\nBuilt-in providers resolve these env vars (Node.js; in browsers pass `apiKey` explicitly):\n\n| Provider | Environment Variable(s) |\n|----------|------------------------|\n| OpenAI | `OPENAI_API_KEY` |\n| Ant Ling | `ANT_LING_API_KEY` |\n| Azure OpenAI | `AZURE_OPENAI_API_KEY` + `AZURE_OPENAI_BASE_URL` (e.g. `https://{resource}.ai.azure.com`) or `AZURE_OPENAI_RESOURCE_NAME`. Supports `*.openai.azure.com`, `*.cognitiveservices.azure.com` and `*.ai.azure.com`; root endpoints auto-normalize to `/openai/v1`. Optional: `AZURE_OPENAI_API_VERSION` (default `v1`), `AZURE_OPENAI_DEPLOYMENT_NAME_MAP`. |\n| Anthropic | `ANTHROPIC_API_KEY` or `ANTHROPIC_OAUTH_TOKEN` |\n| Radius | `RADIUS_API_KEY` |\n| TypeSafe | `TYPESAFE_API_KEY` |\n| DeepSeek | `DEEPSEEK_API_KEY` |\n| NVIDIA NIM | `NVIDIA_API_KEY` |\n| Google | `GEMINI_API_KEY` |\n| Vertex AI | `GOOGLE_CLOUD_API_KEY` or `GOOGLE_CLOUD_PROJECT` (or `GCLOUD_PROJECT`) + `GOOGLE_CLOUD_LOCATION` + ADC |\n| Mistral | `MISTRAL_API_KEY` |\n| Groq | `GROQ_API_KEY` |\n| Cerebras | `CEREBRAS_API_KEY` |\n| Cloudflare AI Gateway | `CLOUDFLARE_API_KEY` + `CLOUDFLARE_ACCOUNT_ID` + `CLOUDFLARE_GATEWAY_ID` |\n| Cloudflare Workers AI | `CLOUDFLARE_API_KEY` + `CLOUDFLARE_ACCOUNT_ID` |\n| xAI | `XAI_API_KEY` |\n| Fireworks | `FIREWORKS_API_KEY` |\n| Together AI | `TOGETHER_API_KEY` |\n| Baseten | `BASETEN_API_KEY` |\n| OpenRouter | `OPENROUTER_API_KEY` |\n| Vercel AI Gateway | `AI_GATEWAY_API_KEY` |\n| ZAI Coding Plan (Global) | `ZAI_API_KEY` |\n| ZAI Coding Plan (China) | `ZAI_CODING_CN_API_KEY` |\n| MiniMax (Global) | `MINIMAX_API_KEY` |\n| MiniMax (China) | `MINIMAX_CN_API_KEY` |\n| Moonshot AI / Moonshot AI (China) | `MOONSHOT_API_KEY` |\n| Hugging Face | `HF_TOKEN` |\n| OpenCode Zen / OpenCode Go | `OPENCODE_API_KEY` |\n| Kimi For Coding | `KIMI_API_KEY` |\n| Meta | `META_API_KEY` |\n| Qwen Token Plan (existing catalog) | `QWEN_TOKEN_PLAN_API_KEY` |\n| Qwen Token Plan (Individual) | `QWEN_TOKEN_PLAN_API_KEY` |\n| Qwen Token Plan (China) | `QWEN_TOKEN_PLAN_CN_API_KEY` |\n| Xiaomi MiMo (API billing) | `XIAOMI_API_KEY` |\n| Xiaomi MiMo Token Plan (China) | `XIAOMI_TOKEN_PLAN_CN_API_KEY` |\n| Xiaomi MiMo Token Plan (Amsterdam) | `XIAOMI_TOKEN_PLAN_AMS_API_KEY` |\n| Xiaomi MiMo Token Plan (Singapore) | `XIAOMI_TOKEN_PLAN_SGP_API_KEY` |\n| GitHub Copilot | `COPILOT_GITHUB_TOKEN` |\n\n`qwen-token-plan-individual` and `qwen-token-plan` share the international endpoint and\n`QWEN_TOKEN_PLAN_API_KEY`. The Individual provider exposes only the models documented for Individual\nsubscriptions, while the existing provider retains its broader catalog for backward compatibility.\nStored credentials remain provider-scoped, so save the key under the provider ID you register.\n\nAmazon Bedrock resolves ambient AWS credentials (`AWS_PROFILE`, access key pairs, `AWS_BEARER_TOKEN_BEDROCK`, ECS task roles, web identity tokens); its provider-owned login flow supports bearer tokens, AWS profiles, and the existing credential chain. Vertex AI resolves either an explicit key or gcloud Application Default Credentials plus project/location, with a provider-owned login flow for API keys, ADC, and service-account files.\n\n## Tools\n\nTools enable LLMs to interact with external systems. This library uses TypeBox schemas for type-safe tool definitions with automatic validation using TypeBox's built-in validator and value conversion utilities. TypeBox schemas can be serialized and deserialized as plain JSON, making them ideal for distributed systems.\n\n### Defining Tools\n\n```typescript\nimport { Type, type Tool, StringEnum } from '@earendil-works/pi-ai';\n\n// Define tool parameters with TypeBox\nconst weatherTool: Tool = {\n  name: 'get_weather',\n  description: 'Get current weather for a location',\n  parameters: Type.Object({\n    location: Type.String({ description: 'City name or coordinates' }),\n    units: StringEnum(['celsius', 'fahrenheit'], { default: 'celsius' })\n  })\n};\n\n// Note: For Google API compatibility, use StringEnum helper instead of Type.Enum\n// Type.Enum generates anyOf/const patterns that Google doesn't support\n\nconst bookMeetingTool: Tool = {\n  name: 'book_meeting',\n  description: 'Schedule a meeting',\n  parameters: Type.Object({\n    title: Type.String({ minLength: 1 }),\n    startTime: Type.String({ format: 'date-time' }),\n    endTime: Type.String({ format: 'date-time' }),\n    attendees: Type.Array(Type.String({ format: 'email' }), { minItems: 1 })\n  })\n};\n```\n\n### Constrained Sampling for Tools\n\nTools can opt in to provider-side constrained sampling. For JSON-schema tools, `strict: 'prefer'` uses provider-side strict schema enforcement when supported and otherwise falls back to normal tool calling. `strict: 'require'` fails the request when the active provider/model cannot honor it. Set `constrainedSampling: false` to explicitly opt out; it behaves the same as omitting the field.\n\n```typescript\nconst strictTool: Tool = {\n  name: 'edit_file',\n  description: 'Edit a file',\n  parameters: Type.Object({\n    path: Type.String(),\n    content: Type.String()\n  }, { additionalProperties: false }),\n  constrainedSampling: { type: 'json_schema', strict: 'prefer' }\n};\n```\n\nStrict JSON-schema constrained sampling is supported for OpenAI, Anthropic, supported Amazon Bedrock Converse models, Mistral, and Gemini 3 tool calls through the Google Generative AI and Vertex adapters. Google uses `VALIDATED` function-calling mode (or `ANY` when explicitly requested); earlier Gemini versions fall back for `strict: 'prefer'` and reject `strict: 'require'` because they do not enforce required parameters. Bedrock strict-tool capability is generated from model structured-output metadata; custom Bedrock models can override `compat.supportsStrictMode`. OpenAI Responses and Chat Completions can also emit grammar-constrained custom tools with OpenAI Lark or regex grammar variants. If multiple OpenAI variants are supplied, Lark is preferred over regex. Grammar constraints are enforced when the active model supports grammar tools; otherwise the tool falls back to normal function/JSON-schema handling. Grammar tool capability is model metadata: the generated catalog sets `compat.supportsOpenAIGrammarTools` for GPT-5+ models on endpoints that pass OpenAI custom tools through (OpenAI, OpenAI Codex, Azure OpenAI Responses, GitHub Copilot, opencode, and Cloudflare AI Gateway). OpenAI rejects `type: \"custom\"` tools for pre-GPT-5 models, and gateways that normalize tool schemas (e.g. OpenRouter) mangle them, so the flag stays off elsewhere. Custom model definitions can opt in via `compat`. Grammar-capable models reject grammar configurations without a non-empty supported variant. Native grammar tools must have an object parameter schema with exactly one required string property:\n\n```typescript\nconst patchTool: Tool = {\n  name: 'apply_patch',\n  description: 'Apply a patch',\n  parameters: Type.Object({\n    input: Type.String()\n  }, { additionalProperties: false }),\n  constrainedSampling: {\n    type: 'grammar',\n    variants: {\n      openai_lark: 'start: /.+/s'\n    }\n  }\n};\n```\n\n### Handling Tool Calls\n\nTool results use content blocks and can include both text and images:\n\n```typescript\nimport { readFileSync } from 'fs';\n\nconst context: Context = {\n  messages: [{ role: 'user', content: 'What is the weather in London?', timestamp: Date.now() }],\n  tools: [weatherTool]\n};\n\nconst response = await models.complete(model, context);\n\n// Check for tool calls in the response\nfor (const block of response.content) {\n  if (block.type === 'toolCall') {\n    // Execute your tool with the arguments\n    // See \"Validating Tool Arguments\" section for validation\n    const result = await executeWeatherApi(block.arguments);\n\n    // Add tool result with text content\n    context.messages.push({\n      role: 'toolResult',\n      toolCallId: block.id,\n      toolName: block.name,\n      content: [{ type: 'text', text: JSON.stringify(result) }],\n      isError: false,\n      timestamp: Date.now()\n    });\n  }\n}\n\n// Tool results can also include images (for vision-capable models)\nconst imageBuffer = readFileSync('chart.png');\ncontext.messages.push({\n  role: 'toolResult',\n  toolCallId: 'tool_xyz',\n  toolName: 'generate_chart',\n  content: [\n    { type: 'text', text: 'Generated chart showing temperature trends' },\n    { type: 'image', data: imageBuffer.toString('base64'), mimeType: 'image/png' }\n  ],\n  isError: false,\n  timestamp: Date.now()\n});\n```\n\n### Streaming Tool Calls with Partial JSON\n\nDuring streaming, tool call arguments are progressively parsed as they arrive. This enables real-time UI updates before the complete arguments are available:\n\n```typescript\nconst s = models.stream(model, context);\n\nfor await (const event of s) {\n  if (event.type === 'toolcall_delta') {\n    const toolCall = event.partial.content[event.contentIndex];\n\n    // toolCall.arguments contains partially parsed JSON during streaming\n    // This allows for progressive UI updates\n    if (toolCall.type === 'toolCall' && toolCall.arguments) {\n      // BE DEFENSIVE: arguments may be incomplete\n      // Example: Show file path being written even before content is complete\n      if (toolCall.name === 'write_file' && toolCall.arguments.path) {\n        console.log(`Writing to: ${toolCall.arguments.path}`);\n\n        // Content might be partial or missing\n        if (toolCall.arguments.content) {\n          console.log(`Content preview: ${toolCall.arguments.content.substring(0, 100)}...`);\n        }\n      }\n    }\n  }\n\n  if (event.type === 'toolcall_end') {\n    // Here toolCall.arguments is complete (but not yet validated)\n    const toolCall = event.toolCall;\n    console.log(`Tool completed: ${toolCall.name}`, toolCall.arguments);\n  }\n}\n```\n\n**Important notes about partial tool arguments:**\n- During `toolcall_delta` events, `arguments` contains the best-effort parse of partial JSON\n- Fields may be missing or incomplete - always check for existence before use\n- String values may be truncated mid-word\n- Arrays may be incomplete\n- Nested objects may be partially populated\n- At minimum, `arguments` will be an empty object `{}`, never `undefined`\n- The Google provider does not support function call streaming. Instead, you will receive a single `toolcall_delta` event with the full arguments.\n\n### Validating Tool Arguments\n\nWhen implementing your own tool execution loop, use `validateToolCall` to validate arguments before passing them to your tools:\n\n```typescript\nimport { validateToolCall, type Tool } from '@earendil-works/pi-ai';\n\nconst tools: Tool[] = [weatherTool, calculatorTool];\nconst s = models.stream(model, { messages, tools });\n\nfor await (const event of s) {\n  if (event.type === 'toolcall_end') {\n    const toolCall = event.toolCall;\n\n    try {\n      // Validate arguments against the tool's schema (throws on invalid args)\n      const validatedArgs = validateToolCall(tools, toolCall);\n      const result = await executeMyTool(toolCall.name, validatedArgs);\n      // ... add tool result to context\n    } catch (error) {\n      // Validation failed - return error as tool result so model can retry\n      context.messages.push({\n        role: 'toolResult',\n        toolCallId: toolCall.id,\n        toolName: toolCall.name,\n        content: [{ type: 'text', text: error.message }],\n        isError: true,\n        timestamp: Date.now()\n      });\n    }\n  }\n}\n```\n\n### Complete Event Reference\n\nSuccessful generation follows `start → updates* → done`. A failure after generation starts follows `start → updates* → error`. Request setup may fail before generation starts, in which case the stream contains only `error`; `done` and update events are invalid before `start`. Direct API `streamSimple()` calls throw synchronously when request auth is missing.\n\nEvery non-terminal event's `partial` is the shared live response-so-far helper. It is intentionally not an event-time snapshot: providers may mutate the same message and content blocks as generation advances, including while older events wait in the stream queue. Inspect it when handling an event instead of retaining it as historical state. Text and ordinary thinking blocks are empty when their `*_start` event is emitted and grow only through matching `*_delta` events until the authoritative `*_end`; redacted thinking may be complete at start and emit no deltas. Tool-call arguments at `toolcall_start` are provider-specific; `toolcall_delta` carries subsequent JSON updates.\n\nAll streaming events emitted during assistant message generation:\n\n| Event Type | Description | Key Properties |\n|------------|-------------|----------------|\n| `start` | Stream begins | `partial`: Initial assistant message structure |\n| `text_start` | Text block starts | `contentIndex`: Position in content array |\n| `text_delta` | Text chunk received | `delta`: New text, `contentIndex`: Position |\n| `text_end` | Text block complete | `content`: Full text, `contentIndex`: Position |\n| `thinking_start` | Thinking block starts | `contentIndex`: Position in content array |\n| `thinking_delta` | Thinking chunk received | `delta`: New text, `contentIndex`: Position |\n| `thinking_end` | Thinking block complete | `content`: Full thinking, `contentIndex`: Position |\n| `toolcall_start` | Tool call begins | `contentIndex`: Position in content array |\n| `toolcall_delta` | Tool arguments streaming | `delta`: JSON chunk, `partial.content[contentIndex].arguments`: Partial parsed args |\n| `toolcall_end` | Tool call complete | `toolCall`: Complete, but not schema-validated, tool call with `id`, `name`, `arguments` |\n| `done` | Stream complete | `reason`: Stop reason (\"stop\", \"length\", \"toolUse\"), `message`: Final assistant message |\n| `error` | Error occurred | `reason`: Error type (\"error\" or \"aborted\"), `error`: AssistantMessage with partial content |\n\nStreaming events for different content blocks are not guaranteed to be contiguous. Providers may emit deltas for text, thinking, and tool calls in the same upstream chunk, and pi may surface corresponding events interleaved, for example `text_start`, `text_delta`, `toolcall_start`, `text_delta`, `toolcall_delta`. Consumers must use `contentIndex` to associate each delta/end event with its block and must not assume that a block's `*_start`/`*_delta`/`*_end` sequence is uninterrupted by events for other blocks.\n\n## Image Input\n\nModels with vision capabilities can process images. You can check if a model supports images via the `input` property. If you pass images to a non-vision model, they are silently ignored.\n\n```typescript\nimport { readFileSync } from 'fs';\n\nconst model = models.getModel('openai', 'gpt-4o-mini')!;\n\n// Check if model supports images\nif (model.input.includes('image')) {\n  console.log('Model supports vision');\n}\n\nconst imageBuffer = readFileSync('image.png');\nconst base64Image = imageBuffer.toString('base64');\n\nconst response = await models.complete(model, {\n  messages: [{\n    role: 'user',\n    content: [\n      { type: 'text', text: 'What is in this image?' },\n      { type: 'image', data: base64Image, mimeType: 'image/png' }\n    ],\n    timestamp: Date.now()\n  }]\n});\n\n// Access the response\nfor (const block of response.content) {\n  if (block.type === 'text') {\n    console.log(block.text);\n  }\n}\n```\n\n## Image Generation\n\nImage models live in the same `Models` collection and on the same `Provider` as chat models, so one credential per provider covers both. They are typed `ImageModel` with `type: \"image\"` and are used through `generateImages()`, a one-shot API that waits for the provider response and returns the final `AssistantImages` result. Do not use the chat/stream APIs for them; `stream()` rejects image models.\n\n### Basic Image Generation\n\n```typescript\nimport { builtinModels } from '@earendil-works/pi-ai/providers/all';\n\nconst models = builtinModels();\n\nconst model = models.getModelOfType('image', 'openrouter', 'google/gemini-2.5-flash-image')!;\n\n// Auth resolves through the provider (OPENROUTER_API_KEY here); explicit apiKey wins\nconst result = await models.generateImages(model, {\n  input: [{ type: 'text', text: 'Generate a red circle on a plain white background.' }]\n});\n\nfor (const block of result.output) {\n  if (block.type === 'text') {\n    console.log(block.text);\n  } else if (block.type === 'image') {\n    console.log(block.mimeType);\n    console.log(block.data.substring(0, 32));\n  }\n}\n```\n\n`generateImages()` accepts only `ImageModel` values. If an upstream model supports both chat and image generation, the catalog contains separate entries with the same provider and ID: `getModel()` returns its chat operation and `getModelOfType('image', ...)` returns its image operation. Failures never reject; they return an `AssistantImages` with `stopReason: \"error\"`, including unknown providers, unconfigured auth, and providers without an image implementation.\n\nA provider declares image support with the `images` option of [`createProvider()`](#createprovider): a map from `model.api` to an implementation with `generateImages()`. Image models go into the same `models` list as chat models. `api` becomes optional when `images` is present, so an image-only provider is just a provider without chat models:\n\n```typescript\nimport { createProvider, envApiKeyAuth } from '@earendil-works/pi-ai';\n\nconst pixels = createProvider({\n  id: 'pixels',\n  auth: { apiKey: envApiKeyAuth('Pixels API key', ['PIXELS_API_KEY']) },\n  models: [{\n    type: 'image',\n    id: 'flux-pro',\n    name: 'FLUX Pro',\n    api: 'pixels-images',\n    provider: 'pixels',\n    baseUrl: 'https://api.pixels.test/v1',\n    input: ['text'],\n    output: ['image'],\n    cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },\n  }],\n  images: {\n    'pixels-images': { generateImages: async (model, context, options) => { /* ... */ } },\n  },\n});\nmodels.setProvider(pixels);\n```\n\nThe old global API (`getImageModel()` / `getImageModels()` / `getImageProviders()` / `generateImages()`) remains available on the [compat entrypoint](#migrating-from-the-old-global-api):\n\n```typescript\nimport { getImageModel, generateImages } from '@earendil-works/pi-ai/compat';\n\nconst model = getImageModel('openrouter', 'google/gemini-2.5-flash-image');\nconst result = await generateImages(model, {\n  input: [{ type: 'text', text: 'Generate a red circle on a plain white background.' }]\n}, {\n  apiKey: process.env.OPENROUTER_API_KEY\n});\n```\n\nSome models also support image input:\n\n```typescript\nimport { readFileSync } from 'fs';\n\nconst imageBuffer = readFileSync('input.png');\nconst result = await models.generateImages(model, {\n  input: [\n    { type: 'text', text: 'Create a variation of this image with a blue background.' },\n    { type: 'image', data: imageBuffer.toString('base64'), mimeType: 'image/png' }\n  ]\n});\n```\n\nCheck capabilities on the model metadata:\n\n```typescript\nconsole.log(model.input);  // ['text'] or ['text', 'image']\nconsole.log(model.output); // ['image'] or ['image', 'text']\n```\n\n### Notes and Limitations\n\n- Image models and chat models share `Models` and `Provider`; list them with `getModelsOfType('image')` and run them with `generateImages()`, never the chat/stream APIs.\n- Image-generation models do not participate in tool calling.\n- Outputs are returned in `AssistantImages.output` and can include both base64-encoded `ImageContent` blocks and `TextContent` blocks.\n- Some models return only images, others return images plus text. Check `model.output`.\n- Some models accept image input, others are text-to-image only. Check `model.input`.\n- Like the streaming APIs, image generation supports options such as `apiKey`, `signal`, `headers`, `onPayload`, and `onResponse`, and results may include `stopReason`, `responseId`, and `usage`.\n- If you want a model to analyze images in a conversation or call tools, use the regular chat APIs with a model that supports image input.\n- At the moment, image generation is available through only one provider, OpenRouter.\n\n## Classification\n\nClassifier models consume structured JSON state, and optionally images, and answer one or more typed questions. They do not use chat or image-generation APIs. TypeSafe's Jev model, Cloudflare's Clef models, and OpenAI's GPT-6 Luna are available from these built-in providers:\n\n| Provider | Model IDs | Auth |\n| --- | --- | --- |\n| `typesafe` | `jev-latest` | `TYPESAFE_API_KEY` |\n| `openrouter` | `typesafe/jev-1.13`, `typesafe/jev-1.14`, `~typesafe/jev-latest`, `cloudflare/clef`, `cloudflare/clef-flash`, `cloudflare/clef-omni` | `OPENROUTER_API_KEY` or OpenRouter OAuth |\n| `cloudflare-workers-ai` | `typesafe/jev`, `typesafe/jev-1.14.0`, `@cf/cloudflare/clef`, `@cf/cloudflare/clef-flash`, `@cf/cloudflare/clef-omni` | `CLOUDFLARE_API_KEY` and `CLOUDFLARE_ACCOUNT_ID` |\n| `vercel-ai-gateway` | `typesafe-ai/jev` | `AI_GATEWAY_API_KEY` |\n| `opencode` | `jev-1.13`, `jev-1.13-free` | `OPENCODE_API_KEY` |\n| `openai` | `gpt-6-luna` | `OPENAI_API_KEY` |\n\n```typescript\nimport { builtinModels } from '@earendil-works/pi-ai/providers/all';\n\nconst models = builtinModels();\nconst model = models.getModelOfType('classifier', 'typesafe', 'jev-latest')!;\nconst result = await models.classify(model, {\n  state: { message: 'The change works perfectly, thanks.' },\n  questions: {\n    category: {\n      type: 'choice',\n      instructions: 'Classify the message.',\n      criteria: {\n        approval: 'The user approves of the result',\n        correction: 'The user requests a correction'\n      }\n    },\n    satisfaction: {\n      type: 'score',\n      instructions: 'Score user satisfaction.',\n      criteria: ['dissatisfied', 'neutral', 'satisfied']\n    },\n    approved: {\n      type: 'bool',\n      instructions: 'Does the user approve?',\n      criteria: { true: 'Approval', false: 'No approval' }\n    }\n  }\n});\n\nconsole.log(result.answers);\n```\n\nThe public contract uses `bool` questions and `{ type: \"bool\", probability }` answers. The TypeSafe adapter translates those to and from its `noul` wire representation. Like image generation, `classify()` resolves to a result with `stopReason: \"error\"` instead of rejecting for provider, authentication, or response errors.\n\nWhen the service reports token counts, `result.usage` carries them with their cost at the model's catalog price, the same `Usage` shape as chat messages. All System One services report token counts; a request that was answered with malformed answers keeps its usage. Local classifiers such as `llama-cpp-classify` report no usage.\n\n`ClassifierOptions.temperature` divides the answer logits by the given value before they are normalized; values above 1 soften the distribution. APIs that cannot apply it, such as System One and OpenAI Decisions, ignore it.\n\n`ClassifierContext.images` holds image blocks (`{ type: \"image\", data, mimeType }`) judged together with the state. Only models whose `input` includes `\"image\"` accept them; `classify()` returns an error result for other models.\n\n### System One images\n\nSystem One services take images in three forms. The model's `compat.imageInput` chooses the form (`\"assets\"`, `\"images\"`, or `\"state-image-urls\"`), and `compat.sendImageOptInHeader` controls TypeSafe's opt-in header:\n\n- **TypeSafe** (`typesafe`, and Jev on Workers AI) takes PNG and JPEG images as `assets`, `{ \"<image-1>\": { type: \"image\", format: \"png\", data_base64 } }`. Every asset must be referenced from the request, so the state is sent as `[\"<image-1>\", ..., state]`. Images are experimental on TypeSafe's own API and need the `TypeSafe-Danger-Zone-Images: true` header, which the API sends with requests that carry images.\n- **Clef on Workers AI** takes up to four PNG, JPEG, or WebP images as an `images` list of data URLs, next to the unchanged state.\n- **OpenRouter** takes images as `{ type: \"image_url\", image_url: { url } }` parts before the state: `[part, ..., state]`. It answers requests with `assets` but drops the images, without an error.\n\nBuilt-in catalog entries set `compat` explicitly, so they keep their form when `baseUrl` points at a proxy. For models without it, the APIs detect the form: OpenRouter by provider `openrouter` or a `baseUrl` containing `openrouter.ai`, Clef by a model ID starting with `@cf/cloudflare/clef`, and TypeSafe's form with the opt-in header otherwise. A custom provider that reaches OpenRouter through a proxy matches neither check and must set `compat.imageInput: \"state-image-urls\"` and `compat.sendImageOptInHeader: false`; otherwise OpenRouter drops its images.\n\nVercel AI Gateway and OpenCode list their Jev models with text input only.\n\n### OpenAI Decisions\n\nThe `openai-decisions` API calls OpenAI's [Decisions API](https://developers.openai.com/api/docs/guides/decisions) (`POST /v1/decisions`). GPT-6 Luna is its only model. The state is sent as JSON text; with images, the input is one user message with the state followed by the images as data URLs (at most 128). `choice` and `score` questions map to the Decisions types of the same name. `bool` questions become `predicate` questions; predicates have no criteria field, so the meanings of true and false are appended to the instructions. If OpenAI refuses to answer a question, the whole result is an error. Usage reports input tokens only, priced at the catalog input rate with OpenAI's long-context multiplier.\n\nThe endpoint needs an OpenAI API key; Sign in with ChatGPT credentials are rejected, so the `openai` provider hides `gpt-6-luna` from `getAvailableOfType('classifier')` while it uses OAuth. The API rejects inputs above 922K tokens, but requests that run longer than about five seconds, currently above roughly 600K input tokens, fail with a gateway timeout (504).\n\n### Chat models on llama.cpp\n\nllama.cpp also serves decision models such as Julia-1 or Kev natively through `/v1/systemone`. Since llama.cpp 0.6.0, `GET /models` lists `decisions` in a model's `architecture.output_modalities` for these models. They use the `typesafe-system-one` API with the server's `/v1` URL as `baseUrl` (for example `http://127.0.0.1:8080/v1`); it needs an `apiKey`, which llama.cpp ignores unless it was started with `--api-key`. The `llama-cpp-classify` API is the fallback for chat models.\n\nThe `llama-cpp-classify` API turns a chat model served by llama.cpp's `llama-server` into a classifier. Each question becomes one chat prompt: the state, every question of the request, the state again, and the question with its answers under single-token labels (letters for a choice, `Yes`/`No` for a bool, digits for a score). The prompt up to the final question is shared by all questions of a request, so the server's prompt cache evaluates the state once per request. The server returns the log-probabilities of the next token, and the answer is the softmax over the label tokens. Choices support up to 62 options and scores up to 10 levels. The model's `baseUrl` is the server URL; a trailing `/v1` is ignored. In router mode, the model ID selects the model.\n\n```typescript\nimport { createProvider } from '@earendil-works/pi-ai';\nimport { llamaCppClassifyApi } from '@earendil-works/pi-ai/api/llama-cpp-classify.lazy';\n\nconst provider = createProvider({\n  id: 'local-llama',\n  auth: { apiKey: { name: 'llama.cpp', resolve: async () => ({ auth: {} }) } },\n  models: [{\n    type: 'classifier',\n    id: 'qwen3-4b',\n    name: 'Qwen3 4B',\n    api: 'llama-cpp-classify',\n    provider: 'local-llama',\n    baseUrl: 'http://127.0.0.1:8080',\n    input: ['text'],\n    cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },\n    contextWindow: 32768\n  }],\n  classifiers: { 'llama-cpp-classify': llamaCppClassifyApi() }\n});\n```\n\nRaw label probabilities are usually overconfident; pass `temperature` above 1 to soften them.\n\nCustom providers register classifier models and implementations by API ID:\n\n```typescript\ncreateProvider({\n  id: 'classifier-service',\n  auth,\n  models: [model],\n  classifiers: {\n    'classifier-api': { classify: async (model, context, options) => result }\n  }\n});\n```\n\n## Thinking/Reasoning\n\nMany models support thinking/reasoning capabilities where they can show their internal thought process. You can check if a model supports reasoning via the `reasoning` property. If you pass reasoning options to a non-reasoning model, they are silently ignored.\n\n### Unified Interface (streamSimple/completeSimple)\n\n```typescript\n// Many models across providers support thinking/reasoning\nconst model = models.getModel('anthropic', 'claude-sonnet-4-5')!;\n// or models.getModel('openai', 'gpt-5-mini');\n// or models.getModel('google', 'gemini-2.5-flash');\n// or models.getModel('xai', 'grok-4.7');\n\n// Check if model supports reasoning\nif (model.reasoning) {\n  console.log('Model supports reasoning/thinking');\n}\n\n// Use the simplified reasoning option\nconst response = await models.completeSimple(model, {\n  messages: [{ role: 'user', content: 'Solve: 2x + 5 = 13', timestamp: Date.now() }]\n}, {\n  reasoning: 'medium'  // 'minimal' | 'low' | 'medium' | 'high' | 'xhigh' | 'max'\n});\n\n// Access thinking and text blocks\nfor (const block of response.content) {\n  if (block.type === 'thinking') {\n    console.log('Thinking:', block.thinking);\n  } else if (block.type === 'text') {\n    console.log('Response:', block.text);\n  }\n}\n```\n\n`xhigh` and `max` are model-specific, opt-in levels. Use `getSupportedThinkingLevels(model)` to determine whether a concrete model exposes either level; models such as GPT-5.6 can expose both.\n\n### Provider-Specific Options (stream/complete)\n\n`models.stream()`/`complete()` accept the owning API's full option set. Use `hasApi()` to narrow a dynamically looked-up model to its API for full option typing:\n\n```typescript\nimport { hasApi } from '@earendil-works/pi-ai';\n\n// OpenAI Reasoning (o1, o3, gpt-5)\nconst openaiModel = models.getModel('openai', 'gpt-5-mini')!;\nif (hasApi(openaiModel, 'openai-responses')) {\n  await models.complete(openaiModel, context, {\n    reasoningEffort: 'medium',\n    reasoningSummary: 'detailed'  // OpenAI Responses API only\n  });\n}\n\n// Anthropic Thinking\nconst anthropicModel = models.getModel('anthropic', 'claude-sonnet-4-5')!;\nif (hasApi(anthropicModel, 'anthropic-messages')) {\n  await models.complete(anthropicModel, context, {\n    thinkingEnabled: true,\n    thinkingBudgetTokens: 8192  // Optional token limit\n  });\n}\n\n// Google Gemini Thinking\nconst googleModel = models.getModel('google', 'gemini-2.5-flash')!;\nif (hasApi(googleModel, 'google-generative-ai')) {\n  await models.complete(googleModel, context, {\n    thinking: {\n      enabled: true,\n      budgetTokens: 8192  // -1 for dynamic, 0 to disable\n    }\n  });\n}\n```\n\n### Streaming Thinking Content\n\nWhen streaming, thinking content is delivered through specific events:\n\n```typescript\nconst s = models.streamSimple(model, context, { reasoning: 'high' });\n\nfor await (const event of s) {\n  switch (event.type) {\n    case 'thinking_start':\n      console.log('[Model started thinking]');\n      break;\n    case 'thinking_delta':\n      process.stdout.write(event.delta);  // Stream thinking content\n      break;\n    case 'thinking_end':\n      console.log('\\n[Thinking complete]');\n      break;\n  }\n}\n```\n\n## Stop Reasons\n\nEvery `AssistantMessage` includes a `stopReason` field that indicates how the generation ended:\n\n- `\"pending\"` - Only present in partial messages when we do not know what the stop reason will be\n- `\"stop\"` - This is the final message the model will produce this turn\n- `\"length\"` - Output hit the maximum token limit\n- `\"toolUse\"` - Model is calling tools and expects tool results\n- `\"error\"` - An error occurred during generation\n- `\"aborted\"` - Request was cancelled via abort signal\n\n`AssistantMessage` may also include `responseId`, a provider-specific upstream response or message identifier when the underlying API exposes one. Do not assume it is always present across providers.\n\n## Telemetry\n\nPass an explicit parent span (`TelemetrySpan`, not an adapter) through `telemetry`; omitting it uses the no-op span:\n\n```typescript\nimport { InMemoryTelemetryContext } from '@earendil-works/pi-telemetry';\n\nconst telemetry = new InMemoryTelemetryContext();\nawait telemetry.startSpan({ name: 'application.turn' }, async (span) => {\n  await models.completeSimple(model, context, { telemetry: span });\n});\n```\n\n`Models.stream()` and `streamSimple()` create `pi.ai.request`; `streamDeferred()` creates one `pi.ai.poll` per poll. Their completion helpers use the same spans. These spans include auth/setup, end at the terminal result, and do not require the caller to consume events. Direct provider/API calls are not instrumented.\n\n`AI_TELEMETRY_SCHEMA`, exported from the root and `@earendil-works/pi-ai/models`, defines the typed Pi-owned vocabulary:\n\n- Start attributes: `provider`, `api`, `model`, and `reasoning` only when `options.reasoning` is a string. Provider-native reasoning objects are ignored.\n- End attributes: `stop`, `usage.input`, `usage.output`, `usage.cache_read`, `usage.cache_write`, `cost.total`, and optional `response.id`. `stop: \"error\"` sets error status with the fixed category `provider_error` and `AssistantMessage.errorMessage` truncated to 500 characters (empty when absent). Cancellation keeps status `ok` with `stop: \"aborted\"`.\n- `pi.ai.first_chunk` marks the first normalized event, including setup errors. Each completed text, thinking, or tool-call block emits `pi.ai.block` with `type`, `index`, and `chars`; only tool calls include `tool`. Character counts use JavaScript string length; tool counts sum argument delta lengths without serializing arguments.\n\nWhen `options.telemetry.metrics` is available, the same requests record metrics:\n\n| Metric | Unit | Attributes |\n| --- | --- | --- |\n| `pi.ai.request.duration` | `ms` | `provider`, `model`, `stop` |\n| `pi.ai.first_chunk.duration` | `ms` | `provider`, `model` |\n| `pi.ai.tokens` | `token` | `provider`, `model`, `kind` (`input`, `output`, `cache_read`, `cache_write`) |\n| `pi.ai.cost` | `USD` | `provider`, `model` |\n\nDurations use `performance.now()`. Pending/deferred polls do not add tokens or cost; final completed/error polls do. A parent span without metric capabilities remains valid and simply records no metrics. Adapter-created spans carry the same optional metric and propagation capabilities as their root.\n\nTelemetry does not record prompts, generated text, reasoning content, or arguments in attributes/events. Error status includes up to 500 characters of provider error text, which may contain sensitive data; apply your export policy accordingly. Telemetry observes the existing forwarding path without another stream consumer or per-delta events. Response identifiers and error messages never become metric attributes.\n\n## Error Handling\n\nRequest failures after a stream is returned never throw: when a request ends with an error (including aborts and tool call validation errors), the streaming API emits an error event and the final message carries the details. Setup failures may emit `error` without `start`; failures after generation begins emit `start`, any observed updates, then `error`. Direct API `streamSimple()` calls throw synchronously when request auth is missing:\n\n```typescript\n// In streaming\nfor await (const event of s) {\n  if (event.type === 'error') {\n    // event.reason is either \"error\" or \"aborted\"\n    // event.error is the AssistantMessage with partial content\n    console.error(`Error (${event.reason}):`, event.error.errorMessage);\n    console.log('Partial content:', event.error.content);\n  }\n}\n\n// The final message will have the error details\nconst message = await s.result();\nif (message.stopReason === 'error' || message.stopReason === 'aborted') {\n  console.error('Request failed:', message.errorMessage);\n  // message.content contains any partial content received before the error\n  // message.usage contains partial token counts and costs\n}\n```\n\nWhen using a provider collection, auth failures (OAuth refresh failed, unknown provider) surface as a stream error with `stopReason: \"error\"`. Direct API `streamSimple()` calls instead throw synchronously when their required auth is absent.\n\n### Aborting Requests\n\nThe abort signal allows you to cancel in-progress requests. Aborted requests have `stopReason === 'aborted'`:\n\n```typescript\nconst controller = new AbortController();\n\n// Abort after 2 seconds\nsetTimeout(() => controller.abort(), 2000);\n\nconst s = models.stream(model, {\n  messages: [{ role: 'user', content: 'Write a long story', timestamp: Date.now() }]\n}, {\n  signal: controller.signal\n});\n\nfor await (const event of s) {\n  if (event.type === 'text_delta') {\n    process.stdout.write(event.delta);\n  } else if (event.type === 'error') {\n    // event.reason tells you if it was \"error\" or \"aborted\"\n    console.log(`${event.reason === 'aborted' ? 'Aborted' : 'Error'}:`, event.error.errorMessage);\n  }\n}\n\n// Get results (may be partial if aborted)\nconst response = await s.result();\nif (response.stopReason === 'aborted') {\n  console.log('Request was aborted:', response.errorMessage);\n  console.log('Partial content received:', response.content);\n  console.log('Tokens used:', response.usage);\n}\n```\n\n### Continuing After Abort\n\nAborted messages can be added to the conversation context and continued in subsequent requests:\n\n```typescript\nconst context = {\n  messages: [\n    { role: 'user', content: 'Explain quantum computing in detail', timestamp: Date.now() }\n  ]\n};\n\n// First request gets aborted after 2 seconds\nconst controller1 = new AbortController();\nsetTimeout(() => controller1.abort(), 2000);\n\nconst partial = await models.complete(model, context, { signal: controller1.signal });\n\n// Add the partial response to context\ncontext.messages.push(partial);\ncontext.messages.push({ role: 'user', content: 'Please continue', timestamp: Date.now() });\n\n// Continue the conversation\nconst continuation = await models.complete(model, context);\n```\n\n### Debugging Provider Payloads\n\nUse the `onPayload` callback to inspect the request payload sent to the provider. This is useful for debugging request formatting issues or provider validation errors.\n\n```typescript\nconst response = await models.complete(model, context, {\n  onPayload: (payload) => {\n    console.log('Provider payload:', JSON.stringify(payload, null, 2));\n  }\n});\n```\n\nThe callback is supported by `stream`, `complete`, `streamSimple`, and `completeSimple`.\n\n### Observing Provider Stream Events\n\nUse `onProviderStreamEvent` to inspect provider-specific fields that Pi does not include in `AssistantMessage`. The callback receives the parsed event available to the adapter before Pi normalizes it. Treat the event as read-only because mutations can affect normalization. This is not guaranteed to be the original HTTP bytes or SSE frame.\n\n```typescript\nconst openRouterModel = models.getModel('openrouter', 'openrouter/auto')!;\nconst response = await models.complete(openRouterModel, context, {\n  headers: { \"X-OpenRouter-Metadata\": \"enabled\" },\n  onProviderStreamEvent: (data) => {\n    const chunk = data as Record<string, unknown>;\n    if (chunk.openrouter_metadata) {\n      console.log(chunk.openrouter_metadata);\n    }\n  },\n});\n```\n\nCallbacks are awaited in stream order, so slow callbacks delay stream consumption and thrown errors fail the request. SDK-backed adapters can expose only fields retained by their SDK.\n\n## Custom Providers\n\n### createProvider()\n\n`createProvider()` builds a provider from parts: identity, auth, a model list, and an API implementation (`api` for chat models, `images` for image generation, `classifiers` for classification; at least one is required, see [Image Generation](#image-generation)). Use it for local inference servers, proxies, or any OpenAI/Anthropic-compatible endpoint:\n\n```typescript\nimport { createModels, createProvider, envApiKeyAuth, type Model } from '@earendil-works/pi-ai';\nimport { openAICompletionsApi } from '@earendil-works/pi-ai/api/openai-completions.lazy';\n\nconst ollamaModel: Model<'openai-completions'> = {\n  id: 'llama-3.1-8b',\n  name: 'Llama 3.1 8B (Ollama)',\n  api: 'openai-completions',\n  provider: 'ollama',\n  baseUrl: 'http://localhost:11434/v1',\n  reasoning: false,\n  input: ['text'],\n  cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },\n  contextWindow: 128000,\n  maxTokens: 32000\n};\n\nconst ollama = createProvider({\n  id: 'ollama',\n  name: 'Ollama',\n  baseUrl: 'http://localhost:11434/v1',\n  // Every provider declares auth; keyless local servers resolve as configured with no key.\n  auth: { apiKey: { name: 'Ollama', resolve: async () => ({ auth: {} }) } },\n  models: [ollamaModel],\n  api: openAICompletionsApi(),\n});\n\nconst models = createModels();\nmodels.setProvider(ollama);\n\nawait models.complete(models.getModel('ollama', 'llama-3.1-8b')!, context);\n```\n\nFor providers with real keys, `envApiKeyAuth(displayName, envVars)` gives the standard behavior (stored credential wins, then the first set env var):\n\n```typescript\nconst proxy = createProvider({\n  id: 'my-proxy',\n  auth: { apiKey: envApiKeyAuth('My proxy API key', ['MY_PROXY_API_KEY']) },\n  models: [/* ... */],\n  api: openAICompletionsApi(),\n});\n```\n\nMixed-API providers pass a map keyed by `model.api`; each model dispatches to its API's implementation:\n\n```typescript\nimport { anthropicMessagesApi } from '@earendil-works/pi-ai/api/anthropic-messages.lazy';\nimport { openAIResponsesApi } from '@earendil-works/pi-ai/api/openai-responses.lazy';\n\nconst gateway = createProvider({\n  id: 'my-gateway',\n  auth: { apiKey: envApiKeyAuth('Gateway key', ['GATEWAY_API_KEY']) },\n  models: [/* models with api: 'anthropic-messages' or 'openai-responses' */],\n  api: {\n    'anthropic-messages': anthropicMessagesApi(),\n    'openai-responses': openAIResponsesApi(),\n  },\n});\n```\n\nProvider-wide endpoint or request transformations belong in the provider's API implementation: wrap the `ProviderStreams` you pass as `api` so every request goes through the transformation before dispatch. The Cloudflare providers do this to materialize account/gateway endpoint placeholders from the resolved provider env:\n\n```typescript\nfunction tenantStreams(streams: ProviderStreams): ProviderStreams {\n  const withTenant = (model: Model<Api>) => ({ ...model, baseUrl: model.baseUrl.replace('{tenant}', tenantId) });\n  return {\n    stream: (model, context, options) => streams.stream(withTenant(model), context, options),\n    streamSimple: (model, context, options) => streams.streamSimple(withTenant(model), context, options),\n  };\n}\n\nconst tenantGateway = createProvider({\n  id: 'tenant-gateway',\n  auth: { apiKey: envApiKeyAuth('Gateway key', ['GATEWAY_API_KEY']) },\n  models: [/* ... */],\n  api: tenantStreams(openAICompletionsApi()),\n});\n```\n\nDynamic model lists use `fetchModels`, which can return models of every type. `Models.refresh()` refreshes every configured dynamic provider, passing its effective API-key or refreshed OAuth credential. A `ModelsStore` persists dynamic catalogs; both stores default to in-memory implementations. Its `read`, `write`, and `delete` operations accept optional cancellation, and `Models` binds those waits to the provider refresh signal.\n\n```typescript\nconst models = createModels({ credentials, modelsStore });\nconst llamacpp = createProvider({\n  id: 'llamacpp',\n  auth: { apiKey: { name: 'llama.cpp', resolve: async () => ({ auth: {} }) } },\n  models: [],\n  fetchModels: async ({ signal }) => fetchModelsFromServer('http://localhost:8080', signal),\n  api: openAICompletionsApi(),\n});\n\nmodels.setProvider(llamacpp);\nconst result = await mo","readmeFilename":"README.md","users":{"mtdog5":true}}