{"_id":"@aivana/sdk","_rev":"7-2bf4fbad3db879f273eb277008585029","name":"@aivana/sdk","dist-tags":{"latest":"0.5.0"},"versions":{"0.1.0":{"name":"@aivana/sdk","version":"0.1.0","keywords":["ai","llm","intelligence","api","aivana"],"license":"Apache-2.0","_id":"@aivana/sdk@0.1.0","maintainers":[{"name":"aivanadev","email":"dev@aivana.com"},{"name":"angelina10","email":"angelina.krauchanka@aivana.com"},{"name":"vijay_amin","email":"vijay.amin@aivana.com"},{"name":"aivanafounder","email":"chris@aivana.com"}],"homepage":"https://github.com/Aivana-Inc/aivana-sdk-node#readme","bugs":{"url":"https://github.com/Aivana-Inc/aivana-sdk-node/issues"},"dist":{"shasum":"32f68da7ad203f780deb6eb0f632adaf339a27da","tarball":"https://registry.npmjs.org/@aivana/sdk/-/sdk-0.1.0.tgz","fileCount":5,"integrity":"sha512-VkiHl7T1k6irJ5UXXid0b/tHOzz1gPJujT1vJvq81X794bfZhGzY3o1Gr/EXC1egxvHQN5Lhw3+ecxaVFo0x9w==","signatures":[{"sig":"MEUCIBqbBZk4R0Du6JL0VDk+hC5GZAvmqPFtzdXtYRnBovsgAiEA0jJiMGfvJu+p+jWdDiEMR03qbVgmNYFJMGIZYqXDtyI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16981},"main":"src/index.js","type":"module","types":"src/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./src/index.d.ts","import":"./src/index.js"}},"gitHead":"b2c4ccb0c74de345e91a6fcbc7f63468cab9ca74","scripts":{"test":"node --test"},"_npmUser":{"name":"vijay_amin","email":"vijay.amin@aivana.com"},"deprecated":"Deprecated — use the latest version.","repository":{"url":"git+https://github.com/Aivana-Inc/aivana-sdk-node.git","type":"git"},"_npmVersion":"11.9.0","description":"Aivana Intelligence API client (JavaScript / TypeScript).","directories":{},"_nodeVersion":"24.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/sdk_0.1.0_1784622018263_0.05816167762523028","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@aivana/sdk","version":"0.2.0","keywords":["ai","llm","intelligence","api","aivana"],"license":"Apache-2.0","_id":"@aivana/sdk@0.2.0","maintainers":[{"name":"aivanadev","email":"dev@aivana.com"},{"name":"angelina10","email":"angelina.krauchanka@aivana.com"},{"name":"vijay_amin","email":"vijay.amin@aivana.com"},{"name":"aivanafounder","email":"chris@aivana.com"}],"homepage":"https://github.com/Aivana-Inc/aivana-sdk-node#readme","bugs":{"url":"https://github.com/Aivana-Inc/aivana-sdk-node/issues"},"dist":{"shasum":"ce8e653e37d80ecf9ead3b78d510a8afcfd33c75","tarball":"https://registry.npmjs.org/@aivana/sdk/-/sdk-0.2.0.tgz","fileCount":5,"integrity":"sha512-GCdcXdAgG/VCzdNlKOkMmHLqHB94fko7J/LQ+5UAJUtpd5O3b3Bi26O142RL5/sTAaL50goIIVUbdpHn1COHxg==","signatures":[{"sig":"MEYCIQCa9nAab4AiiK3YR7We2yQl56cg7+EqnR9OAsvPdH4W2QIhAJegH9xb6Eza7cOO2vwB/k1lcZ/8QFTswryQZI2TCXfe","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":21400},"main":"src/index.js","type":"module","types":"src/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./src/index.d.ts","import":"./src/index.js"}},"gitHead":"b2c4ccb0c74de345e91a6fcbc7f63468cab9ca74","scripts":{"test":"node --test"},"_npmUser":{"name":"vijay_amin","email":"vijay.amin@aivana.com"},"repository":{"url":"git+https://github.com/Aivana-Inc/aivana-sdk-node.git","type":"git"},"_npmVersion":"11.9.0","description":"Aivana Intelligence API client (JavaScript / TypeScript).","directories":{},"_nodeVersion":"24.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/sdk_0.2.0_1784694836776_0.41605057503859344","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@aivana/sdk","version":"0.3.0","keywords":["ai","llm","intelligence","api","aivana"],"license":"Apache-2.0","_id":"@aivana/sdk@0.3.0","maintainers":[{"name":"aivanadev","email":"dev@aivana.com"},{"name":"angelina10","email":"angelina.krauchanka@aivana.com"},{"name":"vijay_amin","email":"vijay.amin@aivana.com"},{"name":"aivanafounder","email":"chris@aivana.com"}],"homepage":"https://github.com/Aivana-Inc/aivana-sdk-node#readme","bugs":{"url":"https://github.com/Aivana-Inc/aivana-sdk-node/issues"},"dist":{"shasum":"79494ab5a72ca655ab4f8a8f3c4c21dca61d2cdd","tarball":"https://registry.npmjs.org/@aivana/sdk/-/sdk-0.3.0.tgz","fileCount":5,"integrity":"sha512-gkvycLptWqkem9CFuoHyCxS3DVybsGqOGN5R7ZF6Kcubk9aH08lrO722p0VOVgybH9+WgKlaEse+nbxwMC5LFg==","signatures":[{"sig":"MEUCIQDiqQ3twdKHFMEi8bE1ZxA/DMZnCwJmMBVhFMH2imHlegIgU1sUqH//3fN8v3ehrGzsM9oIXFShuuFBo/8VwxotK6k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":24306},"main":"src/index.js","type":"module","types":"src/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./src/index.d.ts","import":"./src/index.js"}},"gitHead":"503c4592d1789e37c76abaa788b1c6fd01f6722d","scripts":{"test":"node --test"},"_npmUser":{"name":"vijay_amin","email":"vijay.amin@aivana.com"},"repository":{"url":"git+https://github.com/Aivana-Inc/aivana-sdk-node.git","type":"git"},"_npmVersion":"10.9.8","description":"Aivana Intelligence API client (JavaScript / TypeScript).","directories":{},"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/sdk_0.3.0_1785227976959_0.27681695159443476","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@aivana/sdk","version":"0.3.1","keywords":["ai","llm","intelligence","api","aivana"],"license":"Apache-2.0","_id":"@aivana/sdk@0.3.1","maintainers":[{"name":"aivanadev","email":"dev@aivana.com"},{"name":"angelina10","email":"angelina.krauchanka@aivana.com"},{"name":"vijay_amin","email":"vijay.amin@aivana.com"},{"name":"aivanafounder","email":"chris@aivana.com"}],"homepage":"https://github.com/Aivana-Inc/aivana-sdk-node#readme","bugs":{"url":"https://github.com/Aivana-Inc/aivana-sdk-node/issues"},"dist":{"shasum":"3541437aeadcfbfa7b8b3ac09c1f46e0e140b706","tarball":"https://registry.npmjs.org/@aivana/sdk/-/sdk-0.3.1.tgz","fileCount":5,"integrity":"sha512-o3+C0l7vySTbe1FmdF/fHr3jACmpat+gfu423pZ17fwyg01JETDw9gTRiyfwpQ+KeXwrf1DUdiDaRZDP0fAfGg==","signatures":[{"sig":"MEQCICHzg+eWhlEcBvkIeQcvWmx5FgeyDzLAeZFUk+l0c54OAiBCS058ZKSmWVvVjvwdk6s2J/flBU4wU9jlUlu1c4PFOA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":24534},"main":"src/index.js","type":"module","types":"src/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./src/index.d.ts","import":"./src/index.js"}},"gitHead":"1d188a4bc7d19012ff6bd89b33e19ff9da6dc4a1","scripts":{"test":"node --test"},"_npmUser":{"name":"vijay_amin","email":"vijay.amin@aivana.com"},"repository":{"url":"git+https://github.com/Aivana-Inc/aivana-sdk-node.git","type":"git"},"_npmVersion":"10.9.8","description":"Aivana Intelligence API client (JavaScript / TypeScript).","directories":{},"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/sdk_0.3.1_1785228933002_0.35759070069032806","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@aivana/sdk","version":"0.4.0","keywords":["ai","llm","intelligence","api","aivana"],"license":"Apache-2.0","_id":"@aivana/sdk@0.4.0","maintainers":[{"name":"aivanadev","email":"dev@aivana.com"},{"name":"angelina10","email":"angelina.krauchanka@aivana.com"},{"name":"vijay_amin","email":"vijay.amin@aivana.com"},{"name":"aivanafounder","email":"chris@aivana.com"}],"homepage":"https://github.com/Aivana-Inc/aivana-sdk-node#readme","bugs":{"url":"https://github.com/Aivana-Inc/aivana-sdk-node/issues"},"dist":{"shasum":"b8c02ad1917d2586284d7962c237227ba606313c","tarball":"https://registry.npmjs.org/@aivana/sdk/-/sdk-0.4.0.tgz","fileCount":5,"integrity":"sha512-kQJ1p08vqrn2tCNAJTrrCrnLCHHG4nI+Dyo1DnzUqQ3AG1eGTMs4swCs68jYvkHVonAVJVxRlkBNqTYut/Tn6w==","signatures":[{"sig":"MEUCIGOpqAg0bkoHbfQTfWl91/K7MD2N4JKyqVyJZu+yc0xXAiEA1XvENSblhT1KK5LbEFmAPbBXwdYJ5YdEtMOeP03H96Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":25134},"main":"src/index.js","type":"module","types":"src/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./src/index.d.ts","import":"./src/index.js"}},"gitHead":"4872a153cf4cb5284b21695ed420d6619fa61177","scripts":{"test":"node --test"},"_npmUser":{"name":"vijay_amin","email":"vijay.amin@aivana.com"},"repository":{"url":"git+https://github.com/Aivana-Inc/aivana-sdk-node.git","type":"git"},"_npmVersion":"10.9.8","description":"Aivana Intelligence API client (JavaScript / TypeScript).","directories":{},"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/sdk_0.4.0_1785229777608_0.993709783203095","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@aivana/sdk","version":"0.5.0","description":"Aivana Intelligence API client (JavaScript / TypeScript).","type":"module","main":"src/index.js","types":"src/index.d.ts","exports":{".":{"import":"./src/index.js","types":"./src/index.d.ts"}},"repository":{"type":"git","url":"git+https://github.com/Aivana-Inc/aivana-sdk-node.git"},"homepage":"https://github.com/Aivana-Inc/aivana-sdk-node#readme","bugs":{"url":"https://github.com/Aivana-Inc/aivana-sdk-node/issues"},"publishConfig":{"access":"public"},"engines":{"node":">=18"},"scripts":{"test":"node --test"},"keywords":["ai","llm","intelligence","api","aivana"],"license":"Apache-2.0","_id":"@aivana/sdk@0.5.0","gitHead":"1f3ece80fc14f1db6d2a3b9480deb26954660ad5","_nodeVersion":"22.23.1","_npmVersion":"10.9.8","dist":{"integrity":"sha512-RK0pA5AN5fbyTLbugvn291CUJvdc38c5FU6EBY7FYoJdkkqJi749nMMjALjAgpi99ycLIKk4Zzw9Ej1/19pThA==","shasum":"a55f1a1e5eced4e924cf7a011eb553cb15b1130d","tarball":"https://registry.npmjs.org/@aivana/sdk/-/sdk-0.5.0.tgz","fileCount":5,"unpackedSize":25280,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIFMyXwK9XiHEmadZjAWWVIyaQO0upUz7M7kTwejhUxXbAiEAruND/xrXdGBOIAurMy02d973vabHEwwbe2Rl/wrS4tQ="}]},"_npmUser":{"name":"vijay_amin","email":"vijay.amin@aivana.com"},"directories":{},"maintainers":[{"name":"aivanadev","email":"dev@aivana.com"},{"name":"angelina10","email":"angelina.krauchanka@aivana.com"},{"name":"vijay_amin","email":"vijay.amin@aivana.com"},{"name":"aivanafounder","email":"chris@aivana.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/sdk_0.5.0_1786528682976_0.2244598092890926"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-21T08:20:18.002Z","modified":"2026-08-12T09:58:03.350Z","0.1.0":"2026-07-21T08:20:18.389Z","0.2.0":"2026-07-22T04:33:56.936Z","0.3.0":"2026-07-28T08:39:37.095Z","0.3.1":"2026-07-28T08:55:33.157Z","0.4.0":"2026-07-28T09:09:37.784Z","0.5.0":"2026-08-12T09:58:03.110Z"},"bugs":{"url":"https://github.com/Aivana-Inc/aivana-sdk-node/issues"},"license":"Apache-2.0","homepage":"https://github.com/Aivana-Inc/aivana-sdk-node#readme","keywords":["ai","llm","intelligence","api","aivana"],"repository":{"type":"git","url":"git+https://github.com/Aivana-Inc/aivana-sdk-node.git"},"description":"Aivana Intelligence API client (JavaScript / TypeScript).","maintainers":[{"name":"aivanadev","email":"dev@aivana.com"},{"name":"angelina10","email":"angelina.krauchanka@aivana.com"},{"name":"vijay_amin","email":"vijay.amin@aivana.com"},{"name":"aivanafounder","email":"chris@aivana.com"}],"readme":"# @aivana/sdk\n\nJavaScript / TypeScript client for the Aivana Intelligence API.\n\nAsk a question, get a synthesized answer. Aivana routes each request across one or\nmore frontier models, reconciles what they say, and returns a single result — you\ndon't pick models or manage providers.\n\nRequires Node.js 18 or newer (uses the built-in `fetch`). Ships with TypeScript\ndefinitions; no runtime dependencies.\n\n> **Server-side only.** This client authenticates with a long-lived API key. Never\n> bundle it into browser code — the key would be readable by any visitor through\n> devtools, and stays valid until you revoke it. Call Aivana from your own backend\n> and proxy browser requests through it.\n\n## Install\n\n```bash\nnpm install @aivana/sdk\n```\n\n## Quick start\n\n```js\nimport Aivana from \"@aivana/sdk\";\n\nconst client = new Aivana({ apiKey: process.env.AIVANA_API_KEY });\n\nconst res = await client.generate(\"Summarise our Q3 churn drivers.\");\nconsole.log(res.answer);\n```\n\nThat's the whole setup. Your API key is the only required option.\n\n### What comes back\n\n```js\n{\n  answer: \"...\",              // the synthesized response\n  intent: { name, confidence },\n  models_used: [...],         // the Aivana model id, e.g. [\"aivana-mmi\"]\n  usage: { input_tokens, output_tokens, credits },\n  latency_ms: 8421,\n  finish_reason: \"stop\"\n}\n```\n\n## Streaming\n\nStream tokens as they're produced instead of waiting for the full answer:\n\n```js\nfor await (const chunk of client.generateStream(\"Draft a launch plan.\")) {\n  if (chunk.event === \"delta\") process.stdout.write(chunk.data.text);\n}\n```\n\nEach chunk is `{ event, data }`. The events you'll care about:\n\n| event | meaning |\n|---|---|\n| `delta` | a piece of the answer — `data.text` |\n| `stage` | progress update while the answer is being produced |\n| `route` | an outcome-level progress checkpoint |\n| `done` | finished — carries `usage` and `finish_reason` |\n| `error` | something failed upstream |\n\n## Conversation history\n\nAivana is stateless: it never stores your conversations. To ask a follow-up, you\nsend the prior turns back with the next question. There are two ways to do that.\n\n**Let the SDK track it.** `chat()` keeps the history in memory and appends each\nturn for you:\n\n```js\nconst chat = client.chat();\n\nawait chat.send(\"We're choosing between Postgres and DynamoDB.\");\nawait chat.send(\"What changes if write volume triples?\");   // remembers the above\n\nchat.reset();   // start a fresh conversation\n```\n\n**Or manage it yourself**, which is what you want when history lives in your own\ndatabase and spans processes or requests:\n\n```js\nconst messages = [\n  { role: \"user\",      content: \"We're choosing between Postgres and DynamoDB.\" },\n  { role: \"assistant\", content: previousAnswer },\n  { role: \"user\",      content: \"What changes if write volume triples?\" },\n];\n\nconst res = await client.generate(null, { messages });\n```\n\nPass `messages` **instead of** a prompt — the last `user` message is the current\nquestion. Each item is `{ role, content }` where role is `\"user\"`, `\"assistant\"`,\nor `\"system\"`, in chronological order.\n\nFor best results on follow-ups, also pass `previousIntent` from the prior\nresponse. It helps Aivana resolve replies like \"yes, do that\" against what was\nactually offered:\n\n```js\nconst res = await client.generate(null, {\n  messages,\n  previousIntent: previous.intent.name,\n});\n```\n\n## Images\n\nSend images inline with a question — chart screenshots, diagrams, photos of a\nwhiteboard:\n\n```js\nimport { readFileSync } from \"node:fs\";\n\nconst res = await client.generate(\"What's driving the dip in this chart?\", {\n  attachments: [\n    { mimeType: \"image/png\", data: readFileSync(\"chart.png\").toString(\"base64\") },\n  ],\n});\n```\n\n`data` takes raw base64 or a full data URL (`data:image/png;base64,...`) — both work.\n\n| | |\n|---|---|\n| Formats | `image/png`, `image/jpeg`, `image/webp`, `image/gif` |\n| Max per request | 6 images |\n| Max size | 8 MiB each, decoded |\n\nImages attach to the **current turn only** and are never replayed on later turns.\nIf a follow-up question is about the same image, send it again:\n\n```js\nconst chat = client.chat();\nawait chat.send(\"What's wrong with this architecture?\", {\n  attachments: [{ mimeType: \"image/png\", data: diagramB64 }],\n});\nawait chat.send(\"How would you fix the bottleneck?\", {\n  attachments: [{ mimeType: \"image/png\", data: diagramB64 }],   // resend\n});\n```\n\nNothing is stored server-side — the bytes are used for that request and discarded.\n\n## Generation options\n\nBoth generation options are **optional, and omitting them is the recommended\ndefault.** Aivana picks a temperature and an output budget suited to each question.\nPassing a value opts out of that per-request tuning, so pass one only when you\nspecifically need to.\n\n```js\nconst res = await client.generate(\"Draft a launch plan.\", {\n  temperature: 0.2,   // omit → chosen per request\n  maxTokens: 500,     // omit → sized to the question\n});\n```\n\n`temperature` accepts `0.0`–`2.0`. Lower is more deterministic, higher more varied.\n\n`maxTokens` is a **ceiling, not a target.** It can only shorten an answer — it never\nraises the model-aware limit, so a very large value has no effect. When you lower it,\nAivana shortens what it aims to write rather than letting a full-length answer get\ncut off mid-sentence.\n\nBoth work the same on `generate()`, `generateStream()`, and `chat()`.\n\n## Quotas\n\n```js\nconst { windows } = await client.quotas();\n\n// Tokens used and still available, per window:\n//   windows.hour  / .day / .month\n//     .input_tokens  { used, limit, pending }\n//     .output_tokens { used, limit, pending }\n//\n// `limit` and `pending` are null when a window is unmetered — no plan sets an\n// hourly ceiling, so `hour` reports usage only.\nconsole.log(windows.day.input_tokens.used, \"of\", windows.day.input_tokens.limit);\n```\n\n## Errors\n\nEvery failure throws a subclass of `AivanaError`, each carrying `code`, `status`,\nand `requestId` — quote `requestId` when reporting a problem.\n\n| error | when |\n|---|---|\n| `AuthError` | missing or invalid API key (401) |\n| `ForbiddenError` | key lacks access (403) |\n| `RateLimitError` | rate limit or quota exhausted (429) |\n| `InvalidRequestError` | malformed request (400) |\n| `UpstreamError` | model provider failed (502) |\n\n```js\nimport { RateLimitError } from \"@aivana/sdk\";\n\ntry {\n  await client.generate(\"...\");\n} catch (err) {\n  if (err instanceof RateLimitError) await backoff(err.requestId);\n  else throw err;\n}\n```\n\n## Configuration\n\n```js\nnew Aivana({\n  apiKey: process.env.AIVANA_API_KEY,\n  timeoutMs: 120_000,   // default\n  apiBase: \"...\",       // override the API endpoint\n  fetch: customFetch,   // inject your own fetch\n});\n```\n\nCancel an in-flight request with an `AbortSignal`:\n\n```js\nconst ac = new AbortController();\nsetTimeout(() => ac.abort(), 5000);\nawait client.generate(\"...\", { signal: ac.signal });\n```\n\n## License\n\nApache-2.0\n","readmeFilename":"README.md"}