{"_id":"n8n-nodes-typesafe-ai","_rev":"2-15458781d4b25dcf6fdb1d3294312127","name":"n8n-nodes-typesafe-ai","dist-tags":{"latest":"0.1.1"},"versions":{"0.1.0":{"name":"n8n-nodes-typesafe-ai","version":"0.1.0","keywords":["n8n-community-node-package","typesafe","typesafe-ai","ai","classification"],"author":{"name":"DomMonte","email":"monte351@gmail.com"},"license":"MIT","_id":"n8n-nodes-typesafe-ai@0.1.0","maintainers":[{"name":"dommonte","email":"domenic@montedev.com.au"}],"homepage":"https://github.com/DomMonte/n8n-nodes-typesafe-ai","bugs":{"url":"https://github.com/DomMonte/n8n-nodes-typesafe-ai/issues"},"n8n":{"nodes":["dist/nodes/TypeSafeAi/TypeSafeAi.node.js"],"strict":true,"credentials":["dist/credentials/TypeSafeAiApi.credentials.js"],"n8nNodesApiVersion":1},"dist":{"shasum":"fc0f2a8f3126c856f48f9febf547408cdc1d0506","tarball":"https://registry.npmjs.org/n8n-nodes-typesafe-ai/-/n8n-nodes-typesafe-ai-0.1.0.tgz","fileCount":29,"integrity":"sha512-UMmhKaXH3rjLY5PM5ku3WlOKs6bcos4jqzSByLs6uTTbbnsrvWtxKJcd/9hB9iKxTjGXdlWMXko7o0D8VH3o5A==","signatures":[{"sig":"MEQCIBmWYAbCWsc4yil61qfP6yKnRBUpqxK578eeIctY82DSAiBtc3G6X0mkJzMMKcUs3OW1XJsaZ8STPiaGsHLzjYafVw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/n8n-nodes-typesafe-ai@0.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":292475},"gitHead":"41a1f5e37ced0d5ef3eded2720dbf1cd014e2771","scripts":{"dev":"n8n-node dev","lint":"n8n-node lint","test":"vitest run","build":"n8n-node build","release":"n8n-node release","lint:fix":"n8n-node lint --fix","test:watch":"vitest","build:watch":"tsc --watch","prepublishOnly":"n8n-node prerelease"},"_npmUser":{"name":"dommonte","email":"domenic@montedev.com.au"},"repository":{"url":"git+https://github.com/DomMonte/n8n-nodes-typesafe-ai.git","type":"git"},"_npmVersion":"11.19.0","description":"n8n community node for the TypeSafe AI System One API: ask typed yes/no, choice and score questions about your data and get calibrated probabilities back","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"9.32.0","vitest":"^3.2.4","prettier":"3.6.2","release-it":"^19.0.4","typescript":"5.9.2","@n8n/node-cli":"*"},"peerDependencies":{"n8n-workflow":"*"},"_npmOperationalInternal":{"tmp":"tmp/n8n-nodes-typesafe-ai_0.1.0_1789661749918_0.23026979913702306","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"_id":"n8n-nodes-typesafe-ai@0.1.1","n8n":{"nodes":["dist/nodes/TypeSafeAi/TypeSafeAi.node.js"],"strict":true,"credentials":["dist/credentials/TypeSafeAiApi.credentials.js"],"n8nNodesApiVersion":1},"bugs":{"url":"https://github.com/DomMonte/n8n-nodes-typesafe-ai/issues"},"dist":{"shasum":"fa0987d8550d930f14c132445cbb410d5c8bf03e","tarball":"https://registry.npmjs.org/n8n-nodes-typesafe-ai/-/n8n-nodes-typesafe-ai-0.1.1.tgz","fileCount":29,"integrity":"sha512-AmMpgaVfR91oAvTvKEo4yv0v7M+6YSavXBRUcB8OQgktigX9wZ1IgXHY3JAzAxvlD7UOjoKRcVbxWzO9lhsN2Q==","signatures":[{"sig":"MEQCIEHwwdiw5jldPKDuyPla8oYb3HgTqS7w+tMYGUDriSG6AiB65LbRXZC62LQcl0qcCwqvyU6CWKfA4rGQEadfjoYCAQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIBnRDFizyt4swm7itvvgE/oDHPpAHdwTJ62RfUi6ip5nAiBb1cKsj3EsllzLiWkctgPDybGrbE3PBIa/mmj9cI8tWg=="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/n8n-nodes-typesafe-ai@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":292393},"name":"n8n-nodes-typesafe-ai","author":{"name":"DomMonte","email":"monte351@gmail.com"},"gitHead":"ff2afca0a90c8020db40e7c2dd2b13cad9514381","license":"MIT","scripts":{"dev":"n8n-node dev","lint":"n8n-node lint","test":"vitest run","build":"n8n-node build","release":"n8n-node release","lint:fix":"n8n-node lint --fix","test:watch":"vitest","build:watch":"tsc --watch","prepublishOnly":"n8n-node prerelease"},"version":"0.1.1","_npmUser":{"name":"dommonte","email":"domenic@montedev.com.au"},"homepage":"https://github.com/DomMonte/n8n-nodes-typesafe-ai","keywords":["n8n-community-node-package","typesafe","typesafe-ai","ai","classification"],"repository":{"url":"git+https://github.com/DomMonte/n8n-nodes-typesafe-ai.git","type":"git"},"_npmVersion":"11.19.0","description":"n8n community node for the TypeSafe AI System One API: ask typed yes/no, choice and score questions about your data and get calibrated probabilities back","directories":{},"maintainers":[{"name":"dommonte","email":"domenic@montedev.com.au"}],"_nodeVersion":"24.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"9.32.0","vitest":"^3.2.4","prettier":"3.6.2","release-it":"^19.0.4","typescript":"5.9.2","@n8n/node-cli":"*"},"peerDependencies":{"n8n-workflow":"*"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/n8n-nodes-typesafe-ai_0.1.1_1789964762986_0.986301514106791"}}},"time":{"created":"2026-09-17T16:15:49.768Z","modified":"2026-09-21T04:26:03.682Z","0.1.0":"2026-09-17T16:15:50.068Z","0.1.1":"2026-09-21T04:26:03.098Z"},"bugs":{"url":"https://github.com/DomMonte/n8n-nodes-typesafe-ai/issues"},"author":{"name":"DomMonte","email":"monte351@gmail.com"},"license":"MIT","homepage":"https://github.com/DomMonte/n8n-nodes-typesafe-ai","keywords":["n8n-community-node-package","typesafe","typesafe-ai","ai","classification"],"repository":{"url":"git+https://github.com/DomMonte/n8n-nodes-typesafe-ai.git","type":"git"},"description":"n8n community node for the TypeSafe AI System One API: ask typed yes/no, choice and score questions about your data and get calibrated probabilities back","maintainers":[{"name":"dommonte","email":"domenic@montedev.com.au"}],"readme":"# n8n-nodes-typesafe-ai\n\nAn [n8n](https://n8n.io) community node for the [TypeSafe AI](https://typesafe.ai) System One API.\n\nTypeSafe's System One models (Jev) answer small, typed questions about your data — yes/no probabilities, one-of-N choices, and scores against ordered levels — with calibrated probabilities your workflow can branch on directly. No prompt engineering, no free-text parsing.\n\n- [Installation](#installation)\n- [Credentials](#credentials)\n- [Operations](#operations)\n- [Output reference](#output-reference)\n- [Rate limits and retries](#rate-limits-and-retries)\n- [AI Agent tool](#ai-agent-tool)\n- [Resources](#resources)\n- [Author and support](#author-and-support)\n\n## Installation\n\nThe package is published on npm as `n8n-nodes-typesafe-ai`. Both methods below follow n8n's [community nodes installation guide](https://docs.n8n.io/integrations/community-nodes/installation-and-management/).\n\n### Install from the n8n GUI (recommended)\n\nOnly users with an Owner or Admin role can install community nodes on a self-hosted instance.\n\n1. Go to **Settings** > **Community Nodes**.\n2. Select **Install**.\n3. Enter `n8n-nodes-typesafe-ai` in **Enter npm package name**. To pin a version, append it, for example `n8n-nodes-typesafe-ai@0.1.0`.\n4. Agree to the [risks](https://docs.n8n.io/integrations/community-nodes/risks/) of using community nodes: select **I understand the risks of installing unverified code from a public source**.\n5. Select **Install**. n8n installs the node and returns to the **Community Nodes** list.\n\nThe **TypeSafe AI** node then appears in the node panel. Upgrades, downgrades and uninstalls are managed from the same **Settings** > **Community Nodes** page — see [GUI installation](https://docs.n8n.io/integrations/community-nodes/installation-and-management/gui-installation/).\n\n### Manual installation (self-hosted)\n\nUse this if your instance runs in queue mode or you prefer installing from the shell.\n\nAccess your n8n shell (for Docker):\n\n```sh\ndocker exec -it n8n sh\n```\n\nCreate `~/.n8n/nodes` if it doesn't already exist, navigate into it, and install the package:\n\n```sh\nmkdir -p ~/.n8n/nodes\ncd ~/.n8n/nodes\nnpm i n8n-nodes-typesafe-ai\n```\n\nThen restart n8n. To upgrade later, run `npm update n8n-nodes-typesafe-ai` in the same directory and restart; to remove it, run `npm uninstall n8n-nodes-typesafe-ai`. Full details: [Manual installation](https://docs.n8n.io/integrations/community-nodes/installation-and-management/manual-installation/).\n\nn8n Cloud users can install community nodes only after the package is verified by n8n; until then this package is available on self-hosted instances only.\n\n## Credentials\n\nCreate a **TypeSafe AI API** credential with your API key from the [TypeSafe dashboard](https://typesafe.ai). The key is sent as an `Authorization: Bearer` header. Use the credential's **Test** button to confirm it works (it calls `GET /v1/models`).\n\n## Operations\n\nAll question operations share these fields:\n\n| Field | Description |\n|---|---|\n| **State** | The content to evaluate. Plain text, or a JSON object/array (a chat log, a record, your app's current state). Expressions such as `{{ $json }}` that resolve to an object are sent as JSON. |\n| **Instructions** | The question the model should answer about the state. |\n| **Options → Model** | `jev-latest` by default. Pin a versioned ID such as `jev-1.13.0` if you have tuned thresholds against it. |\n| **Options → State Format** | `Auto` (default) sends JSON when the state parses as an object/array, otherwise text. `Text` and `JSON` force one behaviour. |\n| **Options → Simplify** | On by default. Turn off to receive the raw API response body. |\n\n### Question → Ask Yes/No\n\nReturns the probability that the answer is yes (a *noul*).\n\n- **Criteria** (optional): *True Means* / *False Means* descriptions.\n\nExample — State: `Help! My payouts have been failing for 3 days.` Instructions: `Does this convey urgency?`\n\n```json\n{ \"noul\": 0.92, \"model\": \"jev-1.13.0\", \"usage\": { \"input_tokens\": 312, \"output_tokens\": 48 } }\n```\n\n### Question → Ask Choice\n\nPicks one option from a set you define and returns the full probability distribution plus a confidence value.\n\n- **Choices**: one row per choice (`Value` key + optional `Description` rubric).\n\nExample — Instructions: `Which team should handle this?` Choices: `billing`, `technical`, `sales`\n\n```json\n{\n  \"choice\": \"technical\",\n  \"probabilities\": { \"billing\": 0.08, \"technical\": 0.85, \"sales\": 0.07 },\n  \"confidence\": 0.82,\n  \"model\": \"jev-1.13.0\",\n  \"usage\": { \"input_tokens\": 312, \"output_tokens\": 48 }\n}\n```\n\n### Question → Ask Score\n\nRates the state against ordered levels (lowest first) and returns a probability-weighted score that can land between levels.\n\n- **Levels**: at least two, each a short description, ordered from lowest to highest.\n\nExample — Instructions: `How frustrated is the customer?` Levels: `Calm`, `Frustrated`, `Very angry`\n\n```json\n{\n  \"score\": 1.6,\n  \"legend\": { \"0\": \"Calm\", \"1\": \"Frustrated\", \"2\": \"Very angry\" },\n  \"probabilities\": { \"0\": 0.05, \"1\": 0.3, \"2\": 0.65 },\n  \"confidence\": 0.78,\n  \"model\": \"jev-1.13.0\",\n  \"usage\": { \"input_tokens\": 312, \"output_tokens\": 48 }\n}\n```\n\n### Question → Evaluate Questions\n\nAsks several questions about the same state in **one** request — the cheapest and fastest way to use TypeSafe. Define questions with the form (each with an ID, type, instructions and criteria) or paste the `questions` map as JSON exactly as described in the [API reference](https://docs.typesafe.ai/api). For yes/no questions the optional **Criteria** collection holds *True Means* / *False Means*, exactly as in Ask Yes/No.\n\n```json\n{\n  \"answers\": {\n    \"is_urgent\": { \"type\": \"noul\", \"noul\": 0.92 },\n    \"department\": { \"type\": \"choice\", \"choice\": \"technical\", \"probabilities\": { \"...\": 0 }, \"confidence\": 0.82 }\n  },\n  \"model\": \"jev-1.13.0\",\n  \"usage\": { \"input_tokens\": 340, \"output_tokens\": 96 }\n}\n```\n\n### Model → Get Many\n\nLists the model names and aliases your account can use. One item per model: `{ name, description, release_date }`.\n\n## Output reference\n\n| Operation | Simplified output |\n|---|---|\n| Ask Yes/No | `noul`, `model`, `usage` |\n| Ask Choice | `choice`, `probabilities`, `confidence`, `model`, `usage` |\n| Ask Score | `score`, `legend`, `probabilities`, `confidence`, `model`, `usage` |\n| Evaluate Questions | `answers` (keyed by question ID, each with its `type`), `model`, `usage` |\n| Model → Get Many | `name`, `description`, `release_date` |\n\nWith **Simplify** off, every question operation returns the raw body: `{ \"model\", \"answers\": { \"answer\": { ... } }, \"usage\" }`.\n\n`confidence` (Choice and Score) summarises how concentrated the probability distribution is; see [Confidence](https://docs.typesafe.ai/confidence). A noul near 0.5 means yes and no are about equally likely.\n\n## Rate limits and retries\n\nTypeSafe returns `429 Too Many Requests` or `529 Overloaded` when you exceed your limits or the service is busy. This node does not retry on its own. Enable **Retry On Fail** in the node's settings (with a wait of at least 1 second) so n8n backs off and retries.\n\n## AI Agent tool\n\nThe node is marked usable as a tool, so an AI Agent can call it directly. Mark any field with *Let the model define this parameter* to have the agent fill it in.\n\n## Resources\n\n- [TypeSafe documentation](https://docs.typesafe.ai)\n- [HTTP API reference](https://docs.typesafe.ai/api)\n- [Question primitives](https://docs.typesafe.ai/primitives)\n- [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)\n\n## Author and support\n\nBuilt by [Domenic Monteleone](https://montedev.com.au) — see more of my work at [montedev.com.au](https://montedev.com.au).\n\nIf this node saves you time and you'd like to support its development, you can [donate via PayPal](https://paypal.me/DomMonteFUTAPI). Thank you!\n\n## License\n\n[MIT](LICENSE.md)\n","readmeFilename":"README.md"}