{"_id":"@conduit-labs/conduit-ai","_rev":"3-92cf364f3dc1d37047b7907204be8787","name":"@conduit-labs/conduit-ai","dist-tags":{"latest":"0.1.2"},"versions":{"0.1.0":{"name":"@conduit-labs/conduit-ai","version":"0.1.0","keywords":["llm","model","runtime","retry","timeout","fallback","generative-ai"],"license":"MIT","_id":"@conduit-labs/conduit-ai@0.1.0","maintainers":[{"name":"opuadm","email":"opuadm@gmail.com"}],"dist":{"shasum":"3b1f89429eda0a2931dd69118840523a4a37d75c","tarball":"https://registry.npmjs.org/@conduit-labs/conduit-ai/-/conduit-ai-0.1.0.tgz","fileCount":5,"integrity":"sha512-JfIujqF3hNasfBsxcisOsxjZAvvO7KHtKW/fRrJsSL01TUREevDDPjKdQdx6NU9F550iFFeXpBPtcAwHy1XAqw==","signatures":[{"sig":"MEUCIQCKyUOCYSWM5DhYmtKL2OuWDzjAnZVRMWTRijNw5UpJXQIgNBnTtqpSjW4ZWRPLpvFB5NuuceZd++G/PG5WBZhYsNU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5327},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","shasum":"3b1f89429eda0a2931dd69118840523a4a37d75c","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"bun test","build":"tsc","check":"tsc --noEmit","prepublishOnly":"bun run check && bun run test && bun run build"},"_npmUser":{"name":"opuadm","email":"opuadm@gmail.com"},"_integrity":"sha512-JfIujqF3hNasfBsxcisOsxjZAvvO7KHtKW/fRrJsSL01TUREevDDPjKdQdx6NU9F550iFFeXpBPtcAwHy1XAqw==","_npmVersion":"10.8.3","description":"Reliable model execution with timeouts, retries, and fallback chains","directories":{},"sideEffects":false,"_nodeVersion":"26.3.0","dependencies":{"ai":"^7.0.88"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.3","@types/node":"^22.19.19","@types/json-schema":"^7.0.15"},"_npmOperationalInternal":{"tmp":"tmp/conduit-ai_0.1.0_1788289216965_0.09138815829480951","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@conduit-labs/conduit-ai","version":"0.1.1","keywords":["llm","model","runtime","retry","timeout","fallback","generative-ai"],"license":"MIT","_id":"@conduit-labs/conduit-ai@0.1.1","maintainers":[{"name":"opuadm","email":"opuadm@gmail.com"}],"dist":{"shasum":"f210d3146634bda21a407b784ad4368bc1ef5c1c","tarball":"https://registry.npmjs.org/@conduit-labs/conduit-ai/-/conduit-ai-0.1.1.tgz","fileCount":5,"integrity":"sha512-RV4QxY/EjWdJN4hQR8BFufbR0uRbQu6BBPtDDBdkUjnoIkgZC8td+OnpcZinkA9FuHAUofqpRSWNTlrk5BgUZA==","signatures":[{"sig":"MEYCIQCc/eB8DdUajOFOPn9HcfYyYkvex9tqqWtv3EfpW2oEuAIhANdNSDAUKl7Oy7dZPJuvaUnWVf+erZpFPgaQTLJBBb6Z","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8932},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","shasum":"f210d3146634bda21a407b784ad4368bc1ef5c1c","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"bun test","build":"tsc","check":"tsc --noEmit","prepublishOnly":"bun run check && bun run test && bun run build"},"_npmUser":{"name":"opuadm","email":"opuadm@gmail.com"},"_integrity":"sha512-RV4QxY/EjWdJN4hQR8BFufbR0uRbQu6BBPtDDBdkUjnoIkgZC8td+OnpcZinkA9FuHAUofqpRSWNTlrk5BgUZA==","_npmVersion":"10.8.3","description":"Reliable model execution with timeouts, retries, and fallback chains","directories":{},"sideEffects":false,"_nodeVersion":"26.3.0","dependencies":{"ai":"^7.0.88"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.3","@types/node":"^22.19.19","@types/json-schema":"^7.0.15"},"_npmOperationalInternal":{"tmp":"tmp/conduit-ai_0.1.1_1788290159473_0.0342209695354081","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@conduit-labs/conduit-ai","version":"0.1.2","description":"Reliable model execution with timeouts, retries, and fallback chains","type":"module","license":"MIT","sideEffects":false,"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"build":"tsc","check":"tsc --noEmit","test":"bun test","prepublishOnly":"bun run check && bun run test && bun run build"},"dependencies":{"ai":"^7.0.88"},"devDependencies":{"@types/json-schema":"^7.0.15","@types/node":"^22.19.19","typescript":"^5.8.3"},"engines":{"node":">=22"},"publishConfig":{"access":"public"},"keywords":["llm","model","runtime","retry","timeout","fallback","generative-ai"],"_id":"@conduit-labs/conduit-ai@0.1.2","_integrity":"sha512-45hSsaXSnGXnJfKdlCjK7OP+QkNMIun2Cf8Y2uvmyOxgW9BCJL7nv+fsQr/vWTGLxlBi2K3BS53DgDJ8u4Z5vQ==","_nodeVersion":"26.3.0","_npmVersion":"10.8.3","shasum":"d6f2a5d5e712601db2717b59b87882268c3d43e5","dist":{"integrity":"sha512-45hSsaXSnGXnJfKdlCjK7OP+QkNMIun2Cf8Y2uvmyOxgW9BCJL7nv+fsQr/vWTGLxlBi2K3BS53DgDJ8u4Z5vQ==","shasum":"d6f2a5d5e712601db2717b59b87882268c3d43e5","tarball":"https://registry.npmjs.org/@conduit-labs/conduit-ai/-/conduit-ai-0.1.2.tgz","fileCount":12,"unpackedSize":598441,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCaRg0Q/nXutbW8QU/bmoBsMv6aSiUGMYkKc/0iFmG4igIhAP0DtRUmlAr95Xjy5DNA1Rv9PDLfc2x7cF9l6SZGZSTE"}]},"_npmUser":{"name":"opuadm","email":"opuadm@gmail.com"},"directories":{},"maintainers":[{"name":"opuadm","email":"opuadm@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/conduit-ai_0.1.2_1788291890170_0.5587571385677825"},"_hasShrinkwrap":false}},"time":{"created":"2026-09-01T19:00:16.782Z","modified":"2026-09-01T19:44:50.689Z","0.1.0":"2026-09-01T19:00:17.102Z","0.1.1":"2026-09-01T19:15:59.592Z","0.1.2":"2026-09-01T19:44:50.358Z"},"license":"MIT","keywords":["llm","model","runtime","retry","timeout","fallback","generative-ai"],"description":"Reliable model execution with timeouts, retries, and fallback chains","maintainers":[{"name":"opuadm","email":"opuadm@gmail.com"}],"readme":"# Conduit AI\n\nConduit AI provides a compact interface for executing language model calls\nwith consistent timeout, retry, and fallback behavior.\n\n![Conduit AI](https://cdn.jsdelivr.net/npm/@conduit-labs/conduit-ai@0.1.2/assets/screenshots/hero.png)\n\nIt is designed for applications that need predictable operational controls\nwithout repeating timeout and retry setup at every call site. A configured\nlanguage model is passed into each request, so model selection and provider\nconfiguration remain under application control.\n\n## Features\n\n- Per-request timeouts\n- Configurable retry limits\n- Ordered model fallback chains\n- Provider-agnostic model inputs\n- Full TypeScript declarations\n- Direct access to generated text, usage, and response metadata\n- Small public API with no global configuration\n\n## Requirements\n\n- Node.js 22 or newer\n- A compatible language model configured by the application\n- Bun, npm, pnpm, or another compatible package manager\n\n## Installation\n\nWith Bun:\n\n```shell\nbun add @conduit-labs/conduit-ai\n```\n\nWith npm:\n\n```shell\nnpm install @conduit-labs/conduit-ai\n```\n\n## Quick start\n\nThe model can come from any compatible provider integration. In this example,\n`configuredModel` is exported by the application's model configuration file.\n\n```ts\nimport { configuredModel } from './models';\nimport { runModel } from '@conduit-labs/conduit-ai';\n\nconst result = await runModel({\n  model: configuredModel,\n  prompt: 'Explain event loops in one paragraph.',\n});\n\nconsole.log(result.text);\n```\n\nBy default, a request has a 30 second timeout and allows two retries.\n\n## Configure timeout and retries\n\nUse `timeoutMs` to limit each request and `retries` to control how many times a\nfailed request may be retried.\n\n![Controlled model execution](https://cdn.jsdelivr.net/npm/@conduit-labs/conduit-ai@0.1.2/assets/screenshots/run-model.png)\n\n```ts\nimport { configuredModel } from './models';\nimport { runModel } from '@conduit-labs/conduit-ai';\n\nconst result = await runModel({\n  model: configuredModel,\n  prompt: 'Write a concise release summary.',\n  retries: 3,\n  timeoutMs: 20_000,\n});\n\nconsole.log(result.text);\n```\n\nThe timeout is cleared as soon as the request completes. When the timeout is\nreached, the active request is aborted.\n\n## Use a fallback chain\n\n`runWithFallback` accepts an ordered list of models. Each model is attempted in\nsequence. If one model fails after its retry limit is exhausted, the next model\nis attempted.\n\n![Ordered model fallback](https://cdn.jsdelivr.net/npm/@conduit-labs/conduit-ai@0.1.2/assets/screenshots/fallback.png)\n\n```ts\nimport { primaryModel, secondaryModel } from './models';\nimport { runWithFallback } from '@conduit-labs/conduit-ai';\n\nconst result = await runWithFallback({\n  models: [primaryModel, secondaryModel],\n  prompt: 'Summarize the supplied report.',\n  retriesPerModel: 2,\n  timeoutMs: 15_000,\n});\n\nconsole.log(result.text);\n```\n\nThe timeout applies separately to each model attempt. The first successful\nresult is returned immediately, and remaining models are not called.\n\n## Handle failures\n\nBoth functions reject when execution cannot produce a result. Standard\n`try` and `catch` handling can be used around a request.\n\n```ts\nimport { configuredModel } from './models';\nimport { runModel } from '@conduit-labs/conduit-ai';\n\ntry {\n  const result = await runModel({\n    model: configuredModel,\n    prompt: 'Generate a status report.',\n    timeoutMs: 10_000,\n  });\n\n  console.log(result.text);\n} catch (error) {\n  console.error('Model execution failed', error);\n}\n```\n\nAn empty fallback list throws `At least one model is required`. If every model\nin a fallback chain fails, the final error is `Every model attempt failed` and\nthe last model error is available as its cause.\n\n## Results\n\nThe underlying generation result is returned without reducing it to a custom\nresponse shape. Applications can access the generated text along with usage,\nfinish reason, response metadata, warnings, and other available result fields.\n\n```ts\nconst result = await runModel({\n  model: configuredModel,\n  prompt: 'Describe the request lifecycle.',\n});\n\nconsole.log(result.text);\nconsole.log(result.usage);\nconsole.log(result.finishReason);\n```\n\n## API reference\n\n### `runModel(options)`\n\nExecutes one configured model.\n\nOptions:\n\n- `model`: The language model used for generation.\n- `prompt`: The text prompt sent to the model.\n- `retries`: Optional retry limit. Defaults to `2`.\n- `timeoutMs`: Optional timeout in milliseconds. Defaults to `30000`.\n\n### `runWithFallback(options)`\n\nAttempts configured models in order until one succeeds.\n\nOptions:\n\n- `models`: An ordered, non-empty list of language models.\n- `prompt`: The text prompt sent to each attempted model.\n- `retriesPerModel`: Optional retry limit for each model. Defaults to `2`.\n- `timeoutMs`: Optional per-model timeout in milliseconds. Defaults to `30000`.\n\n## Operational guidance\n\n- Put the preferred model first in a fallback chain.\n- Use shorter timeouts for interactive requests.\n- Use longer timeouts for background generation tasks.\n- Keep retry counts low when providers already perform internal retries.\n- Log the final error cause when every fallback model fails.\n- Track usage data when enforcing application limits or budgets.\n\n## License\n\nMIT\n","readmeFilename":"README.md"}