@juspay/neurolink 13.4.4 → 13.4.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +2 -2
- package/README.md +34 -16
- package/dist/browser/neurolink.min.js +1 -1
- package/dist/cli/commands/decide.js +1 -1
- package/dist/constants/enums.d.ts +2 -0
- package/dist/constants/enums.js +2 -0
- package/dist/hitl/hitlManager.js +1 -1
- package/dist/neurolink.d.ts +2 -2
- package/dist/neurolink.js +17 -4
- package/dist/providers/catalog/xor.json +23 -9
- package/dist/types/hitl.d.ts +3 -3
- package/dist/types/livekit.d.ts +1 -1
- package/dist/voice/livekit/config.d.ts +13 -1
- package/dist/voice/livekit/config.js +44 -7
- package/dist/voice/livekit/realtimeModel.d.ts +3 -1
- package/dist/voice/livekit/realtimeModel.js +9 -1
- package/docs-site/static/search-index.json +47 -47
- package/package.json +9 -8
|
@@ -786,7 +786,7 @@
|
|
|
786
786
|
{"objectID":"6df70184b50cfe765cb953c7f99da86bcc5085d7c1bd9c009ad1d936cd313d54","title":"decide [state]","url":"/docs/cli/commands#decide","content":"Get typed, calibrated judgements from a decision model — the decide inference type, alongside generate and stream. Takes one state plus a map of named typed questions and prints one answer per question; there is no free text anywhere in the response.\n\n`bash","hierarchy":{"lvl0":"Cli","lvl1":"CLI Command Reference","lvl2":"decide [state]","lvl3":""}},
|
|
787
787
|
{"objectID":"0076ed0bb97c3c91b6019b1168d3de94687353bc588fc474812ff9a55bf325d3","title":"State as a positional argument","url":"/docs/cli/commands#state-as-a-positional-argument","content":"npx @juspay/neurolink decide \"Refund request for a damaged item\" \\\n --questions '{\"urgent\":{\"type\":\"boolean\",\"instructions\":\"Is this urgent?\"}}'","hierarchy":{"lvl0":"Cli","lvl1":"CLI Command Reference","lvl2":"State as a positional argument","lvl3":""}},
|
|
788
788
|
{"objectID":"e7605e932a3b0b4ce109cdb2cbb0d1d5012cb18891ee886ed14d4873544bd69e","title":"State and questions from files, raw JSON output","url":"/docs/cli/commands#state-and-questions-from-files-raw-json-output","content":"npx @juspay/neurolink decide --state-file ticket.json \\\n --questions-file questions.json --format json","hierarchy":{"lvl0":"Cli","lvl1":"CLI Command Reference","lvl2":"State and questions from files, raw JSON output","lvl3":""}},
|
|
789
|
-
{"objectID":"fa49a31228234b0ba43f669692d1eaa0226061bb36c99c5019d4fc0451af9384","title":"Ask about an image (XOR, Perplexity, Cloudflare Clef and OpenAI Decisions read images); repeat --image for several, or use --video (XOR)","url":"/docs/cli/commands#ask-about-an-image-xor-perplexity-cloudflare-clef-and-openai-decisions-read-images-repeat---image-for-several-or-use---video-xor","content":"npx @juspay/neurolink decide \"What color is this?\" --provider xor \\\n --image ./photo.png \\\n --questions '{\"color\":{\"type\":\"choice\",\"instructions\":\"What color is the image?\",\"criteria\":{\"red\":\"red\",\"blue\":\"blue\"}}}'\n\n\n| Option | Description |\n| --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| state | The content to judge, as a positional argument (or use --state-file). |\n| --state-file | Path to a file holding the state (plain text or JSON). |\n| --questions | Inline JSON map of questions. Exactly one of this or --questions-file. |\n| --questions-file | Path to a JSON file holding the questions map.","hierarchy":{"lvl0":"Cli","lvl1":"CLI Command Reference","lvl2":"Ask about an image (XOR, Perplexity, Cloudflare Clef and OpenAI Decisions read images); repeat --image for several, or use --video (XOR)","lvl3":""}},
|
|
789
|
+
{"objectID":"fa49a31228234b0ba43f669692d1eaa0226061bb36c99c5019d4fc0451af9384","title":"Ask about an image (XOR, Perplexity, Cloudflare Clef and OpenAI Decisions read images); repeat --image for several, or use --video (XOR)","url":"/docs/cli/commands#ask-about-an-image-xor-perplexity-cloudflare-clef-and-openai-decisions-read-images-repeat---image-for-several-or-use---video-xor","content":"npx @juspay/neurolink decide \"What color is this?\" --provider xor --model xor-omni \\\n --image ./photo.png \\\n --questions '{\"color\":{\"type\":\"choice\",\"instructions\":\"What color is the image?\",\"criteria\":{\"red\":\"red\",\"blue\":\"blue\"}}}'\n\n\n| Option | Description |\n| --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| state | The content to judge, as a positional argument (or use --state-file). |\n| --state-file | Path to a file holding the state (plain text or JSON). |\n| --questions | Inline JSON map of questions. Exactly one of this or --questions-file. |\n| --questions-file | Path to a JSON file holding the questions map.","hierarchy":{"lvl0":"Cli","lvl1":"CLI Command Reference","lvl2":"Ask about an image (XOR, Perplexity, Cloudflare Clef and OpenAI Decisions read images); repeat --image for several, or use --video (XOR)","lvl3":""}},
|
|
790
790
|
{"objectID":"74ddf3bb2432e4cbdfe3a2e78aa95391bd1967ac817b4af735f337554b5b405a","title":"transcribe <file|->","url":"/docs/cli/commands#transcribe","content":"Turn audio into text — the transcribe inference type. Pass a file, or - to read the audio from stdin. With no STT provider configured, the built-in local engine (Whistle) runs on this machine with no key; set NEUROLINK_STT_PROVIDER (and that provider's key) to use another one.\n\n`bash","hierarchy":{"lvl0":"Cli","lvl1":"CLI Command Reference","lvl2":"transcribe <file|->","lvl3":""}},
|
|
791
791
|
{"objectID":"b71aa574620a9889a24a23e9d02ca657151930b6fb1754cb48144df208ef0215","title":"Plain transcription with the default engine","url":"/docs/cli/commands#plain-transcription-with-the-default-engine","content":"npx @juspay/neurolink transcribe meeting.wav","hierarchy":{"lvl0":"Cli","lvl1":"CLI Command Reference","lvl2":"Plain transcription with the default engine","lvl3":""}},
|
|
792
792
|
{"objectID":"688deed48aeb424e78413fcb7603c09c1d4bea2bc3db5c25d4fe8616a23d9a42","title":"Repair names the engine mis-hears, guarded by the decision model, then an LLM rewrite","url":"/docs/cli/commands#repair-names-the-engine-mis-hears-guarded-by-the-decision-model-then-an-llm-rewrite","content":"npx @juspay/neurolink transcribe call.mp3 \\\n --term \"Acme|akmee,ack me|the company name\" --correct","hierarchy":{"lvl0":"Cli","lvl1":"CLI Command Reference","lvl2":"Repair names the engine mis-hears, guarded by the decision model, then an LLM rewrite","lvl3":""}},
|
|
@@ -3358,13 +3358,13 @@
|
|
|
3358
3358
|
{"objectID":"a78bcf758e0d2cbf2d2e9ad39bb04c851848618fb55718447904be31d350055b","title":"Limitations","url":"/docs/features/csv-support#limitations","content":"Max file size: 10MB by default (configurable)\nMax rows: 1000 by default (configurable)\nEncoding: auto-detected via BOM + chardet (UTF-8 / UTF-16 / Windows-1252 / Latin-1 …), or forced with encoding (#362)\nPer-row size: a single row is capped at 10MB to bound memory; larger rows fail fast with a clear error (#371)\nParse timeout: parsing is time-bounded (30s strings / 5min files); on timeout partial rows are returned with metadata.parseTimedOut (#379)\nRow shape: parsed rows are validated to be string-keyed objects with string values; a malformed row aborts the parse with [CSVProcessor] Invalid CSV row <n> (#384)\nToken limits: Large CSV files may exceed provider token limits\nStreaming: CSV content is parsed and formatted before sending (not streamed to LLM)","hierarchy":{"lvl0":"Features","lvl1":"CSV File Support","lvl2":"Limitations","lvl3":""}},
|
|
3359
3359
|
{"objectID":"1e48831d1c4fc775af2633d0340bdeb3d11c96abc213cbdd814a53d14ce500df","title":"Related Features","url":"/docs/features/csv-support#related-features","content":"Office Documents: DOCX, PPTX, XLSX processing\nPDF Support: PDF document processing\nImage Support: Similar multimodal input for images\nFile Detection: Auto-detect file types with confidence scores\nMemory Efficient: Streaming parser for large files\nProvider Agnostic: Works across supported providers\nCLI Integration: Full CLI support with options","hierarchy":{"lvl0":"Features","lvl1":"CSV File Support","lvl2":"Related Features","lvl3":""}},
|
|
3360
3360
|
{"objectID":"19734b9ffaeb8376dfcebd944730a4cedae77bc1e7ed769733b8b71b1758c421","title":"Summary","url":"/docs/features/csv-support#summary","content":"CSV support is multimodal input (like images)\nUse csvFiles array or files array (auto-detect)\nCustomize with csvOptions (maxRows, formatStyle, includeHeaders)\nWorks across supported providers (not just vision models)\nMemory efficient streaming parser\nCLI support with --csv, --file, --csv-max-rows, --csv-format\nOnly types exposed from package (not classes)","hierarchy":{"lvl0":"Features","lvl1":"CSV File Support","lvl2":"Summary","lvl3":""}},
|
|
3361
|
-
{"objectID":"fce0b532226adb069bbeb5459dc5e4ec28037617ca805845768d918653ddbfd5","title":"The `decide` inference type","url":"/docs/features/decide-inference-type","content":"The decide inference type\n\nDeep-dive: generate, stream, decide: a third inference type for NeuroLink —\nwhy this shipped as a provider rather than a subsystem, the five call sites, and the four\ntransport bugs found by adding the Vercel AI Gateway (two of which produced plausible output).\n\nNeuroLink recognises three inference types. Two of them produce text:\n\n| Type | Call | Produces |\n| ------------ | ------------------------ | ------------------------------ |\n| generate | neurolink.generate() | text |\n| stream | neurolink.stream() | text, incrementally |\n| decide | neurolink.decide() | typed judgements — no text |\n\nA decision model takes one state plus a map of named, typed questions and\nreturns one typed answer per question, all evaluated in a single parallel pass.\nThere is no text anywhere in the response, so nothing has to be parsed back out\nof prose. The decide providers are TypeSafe's Jev, Convai Innovations'\nopen-weights Laya, Juspay's open-weights XOR, which also reads images and\nvideo, Subquadratic's hosted SubQ Snap, Perplexity's hosted Decisions\nAPI, which also reads images,\nCloudflare's Clef models on Workers AI,\nwhich also read images, OpenAI's\nDecisions API (a public beta), which also reads images, and ScaleDown's\nhosted Classify models, which read text only.\n\nThis is not neurolink.evaluate(), which scores an\nalready-generated response with RAGAS scorers. Different feature, different\nword.\n\nThe three primitives\n\n| Type | Question | Answer fields |\n| --------- | ------------------------------ | ------------------------------------------------ |\n| boolean | Is this statement true? | probability (0–1) — no confidence |\n| choice | Which option from this set? | choice, probabilities, confidence |\n| score | Rate against an ordered rubric | score, legend, probabilities, confidence |\n\nAll three mix freely in one call.\n\nVocabulary note. TypeSafe calls the yes/no primitive a noul and answers\nit in a field of the same name. The Vercel AI SDK and Pydantic AI both renamed\nthat to boolean/probability when exposing it, and NeuroLink follows them —\nthe vendor's spelling is translated inside TypeSafeProvider, so another\ndecision provider slots in without changing any call site.\n\nConfidence is not probability\n\nprobabilities says what the model thinks. confidence says _whether you\nshould act on it_. On TypeSafe's Jev it is calibrated — derived from the\ndistribution, not self-reported — which is what makes it usable as a gate. Each\nprovider reports its own: Perplexity's is, in Perplexity's words, the model's own\ncertainty estimate and not the top probability, Perplexity does not call it\ncalibrated, and NeuroLink has not measured whether it is, so tune a threshold on\nyour own data (see the\nPerplexity guide).\n\nCalibration is a property of groups of answers, not a promise about any\none. Where a confidence is calibrated, answers scored 0.8 are right about 80%\nof the time across many answers. It does not mean a specific 0.8 answer is right.\n\nA boolean carries no confidence of its own. Use decisionBooleanConfidence(p)\n— distance from a coin flip, so 0.5 → 0 and 0/1 → 1. Note also that a boolean\nand an equivalent two-option choice are not guaranteed to agree, and\ncomplementary booleans do not reliably sum to 1, so a threshold tuned on one\nquestion shape does not transfer to another.\n\nEnabling it\n\nGet a key at console.typesafe.ai/keys.\n\nLaya, at a Laya server or a LiteLLM proxy route\n\nLaya has no built-in endpoint. The base URL and key can equally come from the\nconfig passed to the SDK, new NeuroLink({ credentials: { laya: { baseURL, apiKey } } }),\nor per call; config set there counts when NeuroLink picks the default decision\nprovider, exactly as the environment does.\n\nWhen a TypeSafe key (TYPESAFE_API_KEY or AI_GATEWAY_API_KEY) is configured\nalongside Laya, TypeSafe is the default; Laya runs where a caller names it\n(provider: \"laya\") or when neither TypeSafe key is set. Laya counts as\nconfigured only with both its key and its base URL. See the\nLaya provider guide.\n\nXOR, at a deployment or a LiteLLM proxy route\n\nXOR, Juspay's open-weights decision model, has no built-in endpoint either.\nNeuroLink calls <base URL>/v1/
|
|
3361
|
+
{"objectID":"fce0b532226adb069bbeb5459dc5e4ec28037617ca805845768d918653ddbfd5","title":"The `decide` inference type","url":"/docs/features/decide-inference-type","content":"The decide inference type\n\nDeep-dive: generate, stream, decide: a third inference type for NeuroLink —\nwhy this shipped as a provider rather than a subsystem, the five call sites, and the four\ntransport bugs found by adding the Vercel AI Gateway (two of which produced plausible output).\n\nNeuroLink recognises three inference types. Two of them produce text:\n\n| Type | Call | Produces |\n| ------------ | ------------------------ | ------------------------------ |\n| generate | neurolink.generate() | text |\n| stream | neurolink.stream() | text, incrementally |\n| decide | neurolink.decide() | typed judgements — no text |\n\nA decision model takes one state plus a map of named, typed questions and\nreturns one typed answer per question, all evaluated in a single parallel pass.\nThere is no text anywhere in the response, so nothing has to be parsed back out\nof prose. The decide providers are TypeSafe's Jev, Convai Innovations'\nopen-weights Laya, Juspay's open-weights XOR, which also reads images and\nvideo, Subquadratic's hosted SubQ Snap, Perplexity's hosted Decisions\nAPI, which also reads images,\nCloudflare's Clef models on Workers AI,\nwhich also read images, OpenAI's\nDecisions API (a public beta), which also reads images, and ScaleDown's\nhosted Classify models, which read text only.\n\nThis is not neurolink.evaluate(), which scores an\nalready-generated response with RAGAS scorers. Different feature, different\nword.\n\nThe three primitives\n\n| Type | Question | Answer fields |\n| --------- | ------------------------------ | ------------------------------------------------ |\n| boolean | Is this statement true? | probability (0–1) — no confidence |\n| choice | Which option from this set? | choice, probabilities, confidence |\n| score | Rate against an ordered rubric | score, legend, probabilities, confidence |\n\nAll three mix freely in one call.\n\nVocabulary note. TypeSafe calls the yes/no primitive a noul and answers\nit in a field of the same name. The Vercel AI SDK and Pydantic AI both renamed\nthat to boolean/probability when exposing it, and NeuroLink follows them —\nthe vendor's spelling is translated inside TypeSafeProvider, so another\ndecision provider slots in without changing any call site.\n\nConfidence is not probability\n\nprobabilities says what the model thinks. confidence says _whether you\nshould act on it_. On TypeSafe's Jev it is calibrated — derived from the\ndistribution, not self-reported — which is what makes it usable as a gate. Each\nprovider reports its own: Perplexity's is, in Perplexity's words, the model's own\ncertainty estimate and not the top probability, Perplexity does not call it\ncalibrated, and NeuroLink has not measured whether it is, so tune a threshold on\nyour own data (see the\nPerplexity guide).\n\nCalibration is a property of groups of answers, not a promise about any\none. Where a confidence is calibrated, answers scored 0.8 are right about 80%\nof the time across many answers. It does not mean a specific 0.8 answer is right.\n\nA boolean carries no confidence of its own. Use decisionBooleanConfidence(p)\n— distance from a coin flip, so 0.5 → 0 and 0/1 → 1. Note also that a boolean\nand an equivalent two-option choice are not guaranteed to agree, and\ncomplementary booleans do not reliably sum to 1, so a threshold tuned on one\nquestion shape does not transfer to another.\n\nEnabling it\n\nGet a key at console.typesafe.ai/keys.\n\nLaya, at a Laya server or a LiteLLM proxy route\n\nLaya has no built-in endpoint. The base URL and key can equally come from the\nconfig passed to the SDK, new NeuroLink({ credentials: { laya: { baseURL, apiKey } } }),\nor per call; config set there counts when NeuroLink picks the default decision\nprovider, exactly as the environment does.\n\nWhen a TypeSafe key (TYPESAFE_API_KEY or AI_GATEWAY_API_KEY) is configured\nalongside Laya, TypeSafe is the default; Laya runs where a caller names it\n(provider: \"laya\") or when neither TypeSafe key is set. Laya counts as\nconfigured only with both its key and its base URL. See the\nLaya provider guide.\n\nXOR, at a deployment or a LiteLLM proxy route\n\nXOR, Juspay's open-weights decision model, has no built-in endpoint either.\nNeuroLink calls <base URL>/v1/decisions, and a trailing /v1 on the base URL\nis accepted. The base URL must be https://; http:// is accepted only for\nlocalhost, 127.0.0.1 and [::1], because every request carries the key and\nthe state. A redirect from the endpoint is refused, not followed. The base URL\nand key can equally come from the config passed to the SDK,\nnew NeuroLink({ credentials: { xor: { baseURL, apiKey } } }), or per call; config set there counts when NeuroLink picks the default decision\nprovider, exactly as the environment does. On a LiteLLM proxy the key's team\nmust allow xor-latest (and xor-omni for media), otherwise the proxy answers 403","hierarchy":{"lvl0":"Features","lvl1":"The `decide` inference type","lvl2":"","lvl3":""}},
|
|
3362
3362
|
{"objectID":"f91e7ef7473aa411ff8c0d3b04381325781477c1876408ffd5469dbaf2d9584c","title":"The decide inference type","url":"/docs/features/decide-inference-type#the-decide-inference-type","content":"Deep-dive: generate, stream, decide: a third inference type for NeuroLink —\nwhy this shipped as a provider rather than a subsystem, the five call sites, and the four\ntransport bugs found by adding the Vercel AI Gateway (two of which produced plausible output).\n\nNeuroLink recognises three inference types. Two of them produce text:\n\n| Type | Call | Produces |\n| ------------ | ------------------------ | ------------------------------ |\n| generate | neurolink.generate() | text |\n| stream | neurolink.stream() | text, incrementally |\n| decide | neurolink.decide() | typed judgements — no text |\n\nA decision model takes one state plus a map of named, typed questions and\nreturns one typed answer per question, all evaluated in a single parallel pass.\nThere is no text anywhere in the response, so nothing has to be parsed back out\nof prose. The decide providers are TypeSafe's Jev, Convai Innovations'\nopen-weights Laya, Juspay's open-weights XOR, which also reads images and\nvideo, Subquadratic's hosted SubQ Snap, Perplexity's hosted Decisions\nAPI, which also reads images,\nCloudflare's Clef models on Workers AI,\nwhich also read images, OpenAI's\nDecisions API (a public beta), which also reads images, and ScaleDown's\nhosted Classify models, which read text only.\n\nThis is not neurolink.evaluate(), which scores an\nalready-generated response with RAGAS scorers. Different feature, different\nword.","hierarchy":{"lvl0":"Features","lvl1":"The `decide` inference type","lvl2":"The decide inference type","lvl3":""}},
|
|
3363
3363
|
{"objectID":"2c0f154b9ae29f0af1a097de9ccb435db1e8f5c35a4df8bb91526eadb7b5eb97","title":"The three primitives","url":"/docs/features/decide-inference-type#the-three-primitives","content":"| Type | Question | Answer fields |\n| --------- | ------------------------------ | ------------------------------------------------ |\n| boolean | Is this statement true? | probability (0–1) — no confidence |\n| choice | Which option from this set? | choice, probabilities, confidence |\n| score | Rate against an ordered rubric | score, legend, probabilities, confidence |\n\nAll three mix freely in one call.\n\nVocabulary note. TypeSafe calls the yes/no primitive a noul and answers\nit in a field of the same name. The Vercel AI SDK and Pydantic AI both renamed\nthat to boolean/probability when exposing it, and NeuroLink follows them —\nthe vendor's spelling is translated inside TypeSafeProvider, so another\ndecision provider slots in without changing any call site.","hierarchy":{"lvl0":"Features","lvl1":"The `decide` inference type","lvl2":"The three primitives","lvl3":""}},
|
|
3364
3364
|
{"objectID":"ff28050e2ddf3c21c910bc84ca32105968e1f7ffdbc3b19a983bb9adc6e9cc36","title":"Confidence is not probability","url":"/docs/features/decide-inference-type#confidence-is-not-probability","content":"probabilities says what the model thinks. confidence says _whether you\nshould act on it_. On TypeSafe's Jev it is calibrated — derived from the\ndistribution, not self-reported — which is what makes it usable as a gate. Each\nprovider reports its own: Perplexity's is, in Perplexity's words, the model's own\ncertainty estimate and not the top probability, Perplexity does not call it\ncalibrated, and NeuroLink has not measured whether it is, so tune a threshold on\nyour own data (see the\nPerplexity guide).\n\nCalibration is a property of groups of answers, not a promise about any\none. Where a confidence is calibrated, answers scored 0.8 are right about 80%\nof the time across many answers. It does not mean a specific 0.8 answer is right.\n\nA boolean carries no confidence of its own. Use decisionBooleanConfidence(p)\n— distance from a coin flip, so 0.5 → 0 and 0/1 → 1. Note also that a boolean\nand an equivalent two-option choice are not guaranteed to agree, and\ncomplementary booleans do not reliably sum to 1, so a threshold tuned on one\nquestion shape does not transfer to another.","hierarchy":{"lvl0":"Features","lvl1":"The `decide` inference type","lvl2":"Confidence is not probability","lvl3":""}},
|
|
3365
3365
|
{"objectID":"91bfa1275464235c40e00d8a9ac0805e9e181450cccb6235fabd43178bef7c02","title":"Enabling it","url":"/docs/features/decide-inference-type#enabling-it","content":"Get a key at console.typesafe.ai/keys.","hierarchy":{"lvl0":"Features","lvl1":"The `decide` inference type","lvl2":"Enabling it","lvl3":""}},
|
|
3366
3366
|
{"objectID":"71509585343bb3860ff000ad67405f6ed19fbc26f8eb973ac1fe58088af460b4","title":"Laya, at a Laya server or a LiteLLM proxy route","url":"/docs/features/decide-inference-type#laya-at-a-laya-server-or-a-litellm-proxy-route","content":"Laya has no built-in endpoint. The base URL and key can equally come from the\nconfig passed to the SDK, new NeuroLink({ credentials: { laya: { baseURL, apiKey } } }),\nor per call; config set there counts when NeuroLink picks the default decision\nprovider, exactly as the environment does.\n\nWhen a TypeSafe key (TYPESAFE_API_KEY or AI_GATEWAY_API_KEY) is configured\nalongside Laya, TypeSafe is the default; Laya runs where a caller names it\n(provider: \"laya\") or when neither TypeSafe key is set. Laya counts as\nconfigured only with both its key and its base URL. See the\nLaya provider guide.","hierarchy":{"lvl0":"Features","lvl1":"The `decide` inference type","lvl2":"Laya, at a Laya server or a LiteLLM proxy route","lvl3":""}},
|
|
3367
|
-
{"objectID":"19994573e52cd09183db8050eadaea8ece3e291ef40c3009a5c44dfa959bf99c","title":"XOR, at a deployment or a LiteLLM proxy route","url":"/docs/features/decide-inference-type#xor-at-a-deployment-or-a-litellm-proxy-route","content":"XOR, Juspay's open-weights decision model, has no built-in endpoint either.\nNeuroLink calls <base URL>/v1/
|
|
3367
|
+
{"objectID":"19994573e52cd09183db8050eadaea8ece3e291ef40c3009a5c44dfa959bf99c","title":"XOR, at a deployment or a LiteLLM proxy route","url":"/docs/features/decide-inference-type#xor-at-a-deployment-or-a-litellm-proxy-route","content":"XOR, Juspay's open-weights decision model, has no built-in endpoint either.\nNeuroLink calls <base URL>/v1/decisions, and a trailing /v1 on the base URL\nis accepted. The base URL must be https://; http:// is accepted only for\nlocalhost, 127.0.0.1 and [::1], because every request carries the key and\nthe state. A redirect from the endpoint is refused, not followed. The base URL\nand key can equally come from the config passed to the SDK,\nnew NeuroLink({ credentials: { xor: { baseURL, apiKey } } }), or per call; config set there counts when NeuroLink picks the default decision\nprovider, exactly as the environment does. On a LiteLLM proxy the key's team\nmust allow xor-latest (and xor-omni for media), otherwise the proxy answers 403 team_model_access_denied.\n\nBuilt-in features use the first configured decision provider in the order\nTypeSafe, Laya, XOR, SubQ, Perplexity, Cloudflare Clef, OpenAI Decisions, ScaleDown. XOR counts as configured only with both its key\nand its base URL, and runs where a caller names it (provider: \"xor\") or when\nneither TypeSafe nor Laya is configured. It reads images and video; see\nImages and video and the\nXOR provider guide.","hierarchy":{"lvl0":"Features","lvl1":"The `decide` inference type","lvl2":"XOR, at a deployment or a LiteLLM proxy route","lvl3":""}},
|
|
3368
3368
|
{"objectID":"99d5ee10748044f10d6dd1e54785276aac1cf4375eca8dc6a1c9db90fc0c2158","title":"SubQ, at its hosted endpoint","url":"/docs/features/decide-inference-type#subq-at-its-hosted-endpoint","content":"Subquadratic's subq-snap-preview (public preview) speaks the same System One\nwire as TypeSafe, at a public endpoint, so a key alone configures it and there\nis no base URL to set. The key and base URL can equally come from the config\npassed to the SDK, new NeuroLink({ credentials: { subq: { apiKey, baseURL } } }),\nor per call. The provider id is subq; subquadratic and subq-snap name it\ntoo. It comes after TypeSafe, Laya and XOR and ahead of Perplexity and Cloudflare\nClef: its key belongs to no other provider, so it is set on purpose, whereas\ntheirs are shared with text providers and must not displace it. NeuroLink sends it no images or video: SubQ's image format is not\none the decide catalog can describe yet, so an image attached to a call is\nrefused before any request. The state window NeuroLink reports for it is advisory\n(reported, never enforced, not a guarantee); see the\nSubQ provider guide.","hierarchy":{"lvl0":"Features","lvl1":"The `decide` inference type","lvl2":"SubQ, at its hosted endpoint","lvl3":""}},
|
|
3369
3369
|
{"objectID":"dc8b9e9a2c66b1d2a60305a09a44263ceca755d40f04b6771e0a7c05a5237a64","title":"Perplexity, at its hosted endpoint","url":"/docs/features/decide-inference-type#perplexity-at-its-hosted-endpoint","content":"Perplexity's pplx-decider-v1-27b is a hosted API at a public endpoint, so a key\nalone configures it and there is no base URL to set. NeuroLink calls\n<base URL>/v1/decisions; a trailing /v1 on an override is accepted. The key\ncan equally come from the config passed to the SDK,\nnew NeuroLink({ credentials: { perplexityDecider: { apiKey } } }), or per call;\nconfig set there counts when a decide() call picks the default decision\nprovider, exactly as the environment does. The classifier router's auto gate\ncounts them too, per-call credentials included, so a\ncredentials.perplexityDecider passed on one call can make auto pick jev.\nThe provider id is perplexity-decider: the perplexity provider is the\nSonar text provider, which serves generate() and stream() and not decide().\n\nPERPLEXITY_API_KEY is shared with that text provider. A host that set it\nonly to use Sonar has therefore also configured decide, and built-in features\nwill use Perplexity whenever none of TypeSafe, Laya, XOR or SubQ is configured.\nPerplexity comes after XOR and SubQ in descriptor order, so it never displaces\none that is. Context compaction's relevance stage and summary gate need no opt-in of their\nown, so earlier conversation text starts going to Perplexity the first time a\nconversation outgrows its budget; model routing, tool routing and RAG planning do\nnothing unless enabled. To keep the shared key from activating decisions, pass\nthe text provider's key as credentials.perplexity instead of through the\nenvironment, and keep it out of .env too, because the SDK and the CLI load that\nfile into the environment, or configure one of TypeSafe, Laya, XOR and SubQ, which then\nreceives those texts instead. The Perplexity provider guide lists\nwhat each consumer sends\nand the\nexact switches.\nIt reads images but no video; see Images and video.","hierarchy":{"lvl0":"Features","lvl1":"The `decide` inference type","lvl2":"Perplexity, at its hosted endpoint","lvl3":""}},
|
|
3370
3370
|
{"objectID":"86d184ec9e501d4e94e973c833eaee71bb40744e683334ad36c497c3f625387f","title":"Cloudflare Clef, on Workers AI","url":"/docs/features/decide-inference-type#cloudflare-clef-on-workers-ai","content":"Cloudflare's clef and clef-flash are hosted on Workers AI at a public\nendpoint, so there is no base URL to set. The account id is part of the route, so\nClef counts as configured only with both the token and the account id. They can\nequally come from the config passed to the SDK,\nnew NeuroLink({ credentials: { cloudflareClef: { apiKey, accountId } } })\n(baseURL is optional), or per call; config set there counts when a decide()\ncall picks the default decision provider, exactly as the environment does. The\nclassifier router's auto gate counts them too, per-call credentials included,\nso a credentials.cloudflareClef passed on one call can make auto pick jev.\nThe provider id is cloudflare-clef: the cloudflare provider is the Workers AI text\nprovider, which serves generate() and stream() and not decide(), and\ncredentials.cloudflare does not configure decide.\n\nThe Workers AI endpoint's state window changed during October 2026.\nCloudflare documents a 64K window; until 2026-10-04 text past about 2,048 tokens\nwas ignored without an error, and on 2026-10-07 states of at least 190,153 tokens\n(clef-flash) and 52,154 (clef) were read in full (hosted service or model:\nunknown). NeuroLink refuses a state it estimates at more than 16,000 tokens with\nmax_tokens_exceeded, which every built-in consumer treats as \"carry on as\nbefore\"; see Limits and gotchas. Latency grows with the\nstate, about 0.2 s per 1,000 tokens on large ones, so NeuroLink's default timeout\nadds 250 ms per 1,000 estimated tokens.\n\nCLOUDFLARE_API_KEY and CLOUDFLARE_ACCOUNT_ID are shared with that text\nprovider. A host that set them only to use Workers AI text has therefore also\nconfigured decide, and built-in features will use Clef whenever none of\nTypeSafe, Laya, XOR, SubQ or Perplexity is configured. Clef comes after\nTypeSafe, Laya, XOR, SubQ and Perplexity, so it never displaces one that is. No switch turns it off while the two\nvariables are set.","hierarchy":{"lvl0":"Features","lvl1":"The `decide` inference type","lvl2":"Cloudflare Clef, on Workers AI","lvl3":""}},
|
|
@@ -3406,51 +3406,51 @@
|
|
|
3406
3406
|
{"objectID":"0de66cb24e860808d3967922706cb8f4c543cf24b9aa150e96a8b7d48788793f","title":"Environment Variables","url":"/docs/features/embeddings#environment-variables","content":"| Variable | Provider(s) | Description |\n| --------------------------- | ------------------------------- | ----------------------------------------------------------------------- |\n| OPENAI_EMBEDDING_MODEL | OpenAI | Override OpenAI default embedding model |\n| GOOGLE_AI_EMBEDDING_MODEL | Google AI Studio | Override AI Studio default embedding model |\n| VERTEX_EMBEDDING_MODEL | Google Vertex | Override Vertex default embedding model (default: text-embedding-004) |\n| GOOGLE_EMBEDDING_MODEL | Google AI Studio, Google Vertex | Shared fallback for Google providers |\n| BEDROCK_EMBEDDING_MODEL | Amazon Bedrock | Override Bedrock default embedding model |\n| AWS_EMBEDDING_MODEL | Amazon Bedrock | Alternative Bedrock env var |\n| VOYAGE_MODEL | Voyage | Override the provider's default embedding model |\n| JINA_MODEL | Jina | Override the provider's default embedding model |\n| OLLAMA_EMBEDDING_MODEL | Ollama | Locally available embedding model |\n| LITELLM_EMBEDDING_MODEL | LiteLLM | Embedding model or deployment served by the gateway |\n| NEUROLINK_EMBEDDING_MODEL | All (CLI RAG only) | Global override for RAG CLI commands |","hierarchy":{"lvl0":"Features","lvl1":"Embeddings","lvl2":"Environment Variables","lvl3":""}},
|
|
3407
3407
|
{"objectID":"2aeebbce7d7d32d83443815b6e956d40b7482158a0ad88582503606c264d8f69","title":"Key Files","url":"/docs/features/embeddings#key-files","content":"| File | Purpose |\n| -------------------------------------- | ------------------------------------------------------------------------------ |\n| src/lib/core/baseProvider.ts | Default embed() / embedMany() stubs |\n| src/lib/providers/openAI.ts | OpenAI embedding implementation |\n| src/lib/providers/googleAiStudio.ts | Google AI Studio embedding implementation |\n| src/lib/providers/googleVertex.ts | Google Vertex embedding implementation |\n| src/lib/providers/amazonBedrock.ts | Amazon Bedrock embedding implementation |\n| src/lib/server/routes/agentRoutes.ts | Server /embed and /embed-many routes |\n| src/lib/server/utils/validation.ts | EmbedRequestSchema, EmbedManyRequestSchema |\n| src/lib/server/types.ts | EmbedRequest, EmbedResponse, EmbedManyRequest, EmbedManyResponse types |\n| src/lib/types/providers.ts | AIProvider type with embedding methods |","hierarchy":{"lvl0":"Features","lvl1":"Embeddings","lvl2":"Key Files","lvl3":""}},
|
|
3408
3408
|
{"objectID":"7dc8cee91fc8da6885116ce742319dbaced7f61b1a073493131e7bcf566e43e7","title":"See Also","url":"/docs/features/embeddings#see-also","content":"RAG Document Processing Guide -- end-to-end RAG pipelines using embeddings\nSDK API Reference -- SDK API reference","hierarchy":{"lvl0":"Features","lvl1":"Embeddings","lvl2":"See Also","lvl3":""}},
|
|
3409
|
-
{"objectID":"d4f8720f9bb7fb3901fbd2263aabda49347af9cc64470e2596d0e244f6e21b71","title":"Enterprise Human-in-the-Loop System","url":"/docs/features/enterprise-hitl","content":"Enterprise Human-in-the-Loop System\n\nSince: v7.39.0 | Availability: SDK
|
|
3410
|
-
{"objectID":"f657e6a12a41f2e3e4154c625d37316b34b2b05fd8733d2319733d4f25707890","title":"Enterprise Human-in-the-Loop System","url":"/docs/features/enterprise-hitl#enterprise-human-in-the-loop-system","content":"Since: v7.39.0 | Availability: SDK
|
|
3411
|
-
{"objectID":"3e51c59f3c7b66d5d0827896808bc094566b2e937ca0e197111d8c4f73b8ea59","title":"Currently available","url":"/docs/features/enterprise-hitl#currently-available","content":"HITLConfig has exactly these
|
|
3412
|
-
{"objectID":"cdc9943cec3f7205dd828f820d0811c083a184041806fdec1ab59f96190d9520","title":"Executive Summary","url":"/docs/features/enterprise-hitl#executive-summary","content":"
|
|
3413
|
-
{"objectID":"93c851f60f7be9ce5fa8ad235b8ff9c30bc02df6b697a3d8067c863c0a09c316","title":"Strategic Value Proposition","url":"/docs/features/enterprise-hitl#strategic-value-proposition","content":"Risk Mitigation: Prevent costly AI mistakes through mandatory human checkpoints\nRegulatory Compliance:
|
|
3414
|
-
{"objectID":"f97b236dec71bbbed956753ef3b3dce22afba63b3852422d0361268f3dfaf230","title":"Key Metrics","url":"/docs/features/enterprise-hitl#key-metrics","content":"| Metric | Impact | Evidence |\n| ------------------------ | -------------------- | ----------------------------------------------- |\n| Accuracy Improvement | 95% increase | Human validation catches edge cases AI misses |\n| Compliance Coverage | 100% auditability | Complete decision trail for regulatory review |\n| Model Learning Rate | 60% faster | Structured feedback accelerates training cycles |\n| Enterprise Adoption | 90% confidence boost | Security teams approve HITL-enabled deployments |","hierarchy":{"lvl0":"Features","lvl1":"Enterprise Human-in-the-Loop System","lvl2":"Key Metrics","lvl3":""}},
|
|
3409
|
+
{"objectID":"d4f8720f9bb7fb3901fbd2263aabda49347af9cc64470e2596d0e244f6e21b71","title":"Enterprise Human-in-the-Loop System","url":"/docs/features/enterprise-hitl","content":"Enterprise Human-in-the-Loop System\n\nSince: v7.39.0 | Availability: SDK\n\nTreat every code sample below as the target API unless it appears in\n\"Currently available\" immediately after this box. A heading marked\n(Planned) has examples that use configuration keys or behaviour that do not\nexist, and (Planned) is not a promise of a date. The sections under \"Quick\nStart (5 Minutes)\" are covered by that heading's own label.\n\nNone of requireApproval, reviewCallback, statusCallback, mode,\nconfidenceThreshold, contentPatterns, escalationPolicy or the object form\nof auditLog exists in src/lib/types/hitl.ts or is handled by\nsrc/lib/hitl/hitlManager.ts. validateConfig does not reject unknown keys\neither, so a config copied from this page is accepted silently and every one\nof those keys is dropped — approval gates that never fire, with no error.\n\nThat includes the compliance sections. The HIPAA / SOC2 / GDPR examples show an\nauditLog storage backend and an escalationPolicy that do not exist; do not\ncite them as evidence of a control.\n\nTracking: #752.\n\nCurrently available\n\nHITLConfig has exactly these nine keys (see src/lib/types/hitl.ts).\nAnything else on this page is not implemented.\n\ndangerousActions is required whenever enabled is true; omitting it throws\nHITLConfigurationError from the NeuroLink constructor. auditLogging writes\neach request and decision to the NeuroLink logger at info level. Entries include\nthe full tool arguments, so redact secrets and personal data at the logger sink.\nallowArgumentModification is copied into the request event as\nallowModification for your approval UI; NeuroLink does not enforce it, and a\nhitl:confirmation-response that carries modifiedArguments is applied\neither way, so forward only the arguments you accept. The\nhitl:audit event is emitted on the internal HITLManager, and NeuroLink\nforwards only hitl:confirmation-request and hitl:timeout to\ngetEventEmitter().\n\nApproval is event-based, through the SDK emitter — there is no\nreviewCallback. The emitter is reached with getEventEmitter(); NeuroLink\ndoes not extend EventEmitter, so neurolink.on(...) and neurolink.emit(...)\ndo not exist:\n\nThis is the shape exercised by test/continuous-test-suite-hitl.ts. For\nproduction use today, refer to the Basic HITL Guide.\n\nExecutive Summary\n\nThis section describes the system the rest of this page is a design for. Today NeuroLink ships event-based tool approval and a log of each request and decision (see \"Currently available\"). It does not ship escalation, asynchronous review or an audit store, and it holds no HIPAA, SOC2 or GDPR certification or control.\n\nStrategic Value Proposition\nRisk Mitigation: Prevent costly AI mistakes through mandatory human checkpoints\nRegulatory Compliance (target): Produce the review records regulated industries ask for. Today auditLogging only writes a log line; compliance is the deployer's responsibility\nTrust & Transparency: Build stakeholder confidence with auditable AI decisions\nContinuous Improvement: Capture human expertise to improve AI accuracy over time\n\nWhen to Use HITL\n\nRequired for:\nMedical diagnosis and treatment recommendations\nFinancial transactions above risk thresholds\nLegal document generation and review\nCode execution in production environments\nPersonal data modification or deletion\nIrreversible operations (send email, post to social media)\n\nNot recommended for:\nRead-only operations (information retrieval)\nLow-stakes content generation\nDevelopment/testing environments\nHigh-volume, low-risk automation\n\nQuick Start (5 Minutes) — target API, not implemented\n\nThe configuration in this section is not implemented. Use\n\"Currently available\" above for a setup that works.\n\nInstallation\n\nHITL is built into NeuroLink SDK v7.39.0+. No additional packages required:\n\nBasic Configuration (Planned)\n\nMinimal setup for tool-based approval workflow:\n\nFirst Approval Request\n\nComplete end-to-end example with error handling:\n\nCore Concepts\nApproval Workflows\n\nThe target design supports both synchronous (blocking) and asynchronous (non-blocking) approval patterns. Today only the blocking, event-based flow under \"Currently available\" exists:\n\nSynchronous Approval (Blocking) (Planned)\n\nAI operation pauses until human approves or rejects:\n\nUse cases:\nReal-time operations requiring immediate decision\nInteractive applications with user present\nHigh-risk actions requiring instant validation\n\nAsynchronous Approval (Non-blocking) (Planned)\n\nAI operation returns pending status, continues when approved:\n\nUse cases:\nBatch processing workflows\nOperations requiring expert review (takes time)\nMulti-level approval chains\nIntegration with ticketing systems (Jira, ServiceNow)\nReview Triggers\n\nConfigure when human review is required:\n\nConfidence Threshold Trigger (Planned)\n\nAutomatically request review when AI confidence is low:\n\nTool-Specific Rules (Planned)\n\nToday, list the names in dangerousActions. It matches case-insensitive\nsubstrings of the tool name, not exact names; use a customRules c","hierarchy":{"lvl0":"Features","lvl1":"Enterprise Human-in-the-Loop System","lvl2":"","lvl3":""}},
|
|
3410
|
+
{"objectID":"f657e6a12a41f2e3e4154c625d37316b34b2b05fd8733d2319733d4f25707890","title":"Enterprise Human-in-the-Loop System","url":"/docs/features/enterprise-hitl#enterprise-human-in-the-loop-system","content":"Since: v7.39.0 | Availability: SDK\n\nTreat every code sample below as the target API unless it appears in\n\"Currently available\" immediately after this box. A heading marked\n(Planned) has examples that use configuration keys or behaviour that do not\nexist, and (Planned) is not a promise of a date. The sections under \"Quick\nStart (5 Minutes)\" are covered by that heading's own label.\n\nNone of requireApproval, reviewCallback, statusCallback, mode,\nconfidenceThreshold, contentPatterns, escalationPolicy or the object form\nof auditLog exists in src/lib/types/hitl.ts or is handled by\nsrc/lib/hitl/hitlManager.ts. validateConfig does not reject unknown keys\neither, so a config copied from this page is accepted silently and every one\nof those keys is dropped — approval gates that never fire, with no error.\n\nThat includes the compliance sections. The HIPAA / SOC2 / GDPR examples show an\nauditLog storage backend and an escalationPolicy that do not exist; do not\ncite them as evidence of a control.\n\nTracking: #752.","hierarchy":{"lvl0":"Features","lvl1":"Enterprise Human-in-the-Loop System","lvl2":"Enterprise Human-in-the-Loop System","lvl3":""}},
|
|
3411
|
+
{"objectID":"3e51c59f3c7b66d5d0827896808bc094566b2e937ca0e197111d8c4f73b8ea59","title":"Currently available","url":"/docs/features/enterprise-hitl#currently-available","content":"HITLConfig has exactly these nine keys (see src/lib/types/hitl.ts).\nAnything else on this page is not implemented.\n\ndangerousActions is required whenever enabled is true; omitting it throws\nHITLConfigurationError from the NeuroLink constructor. auditLogging writes\neach request and decision to the NeuroLink logger at info level. Entries include\nthe full tool arguments, so redact secrets and personal data at the logger sink.\nallowArgumentModification is copied into the request event as\nallowModification for your approval UI; NeuroLink does not enforce it, and a\nhitl:confirmation-response that carries modifiedArguments is applied\neither way, so forward only the arguments you accept. The\nhitl:audit event is emitted on the internal HITLManager, and NeuroLink\nforwards only hitl:confirmation-request and hitl:timeout to\ngetEventEmitter().\n\nApproval is event-based, through the SDK emitter — there is no\nreviewCallback. The emitter is reached with getEventEmitter(); NeuroLink\ndoes not extend EventEmitter, so neurolink.on(...) and neurolink.emit(...)\ndo not exist:\n\nThis is the shape exercised by test/continuous-test-suite-hitl.ts. For\nproduction use today, refer to the Basic HITL Guide.","hierarchy":{"lvl0":"Features","lvl1":"Enterprise Human-in-the-Loop System","lvl2":"Currently available","lvl3":""}},
|
|
3412
|
+
{"objectID":"cdc9943cec3f7205dd828f820d0811c083a184041806fdec1ab59f96190d9520","title":"Executive Summary","url":"/docs/features/enterprise-hitl#executive-summary","content":"This section describes the system the rest of this page is a design for. Today NeuroLink ships event-based tool approval and a log of each request and decision (see \"Currently available\"). It does not ship escalation, asynchronous review or an audit store, and it holds no HIPAA, SOC2 or GDPR certification or control.","hierarchy":{"lvl0":"Features","lvl1":"Enterprise Human-in-the-Loop System","lvl2":"Executive Summary","lvl3":""}},
|
|
3413
|
+
{"objectID":"93c851f60f7be9ce5fa8ad235b8ff9c30bc02df6b697a3d8067c863c0a09c316","title":"Strategic Value Proposition","url":"/docs/features/enterprise-hitl#strategic-value-proposition","content":"Risk Mitigation: Prevent costly AI mistakes through mandatory human checkpoints\nRegulatory Compliance (target): Produce the review records regulated industries ask for. Today auditLogging only writes a log line; compliance is the deployer's responsibility\nTrust & Transparency: Build stakeholder confidence with auditable AI decisions\nContinuous Improvement: Capture human expertise to improve AI accuracy over time","hierarchy":{"lvl0":"Features","lvl1":"Enterprise Human-in-the-Loop System","lvl2":"Strategic Value Proposition","lvl3":""}},
|
|
3415
3414
|
{"objectID":"2fde0188cc74ae4920ab9ba5ee8002de8276654a8c4ca8e8ff10ab3120e35b57","title":"When to Use HITL","url":"/docs/features/enterprise-hitl#when-to-use-hitl","content":"Required for:\nMedical diagnosis and treatment recommendations\nFinancial transactions above risk thresholds\nLegal document generation and review\nCode execution in production environments\nPersonal data modification or deletion\nIrreversible operations (send email, post to social media)\n\nNot recommended for:\nRead-only operations (information retrieval)\nLow-stakes content generation\nDevelopment/testing environments\nHigh-volume, low-risk automation","hierarchy":{"lvl0":"Features","lvl1":"Enterprise Human-in-the-Loop System","lvl2":"When to Use HITL","lvl3":""}},
|
|
3416
3415
|
{"objectID":"af86bd7dd4df58556f22907fc917fe6e9b6a2986032901694c0bb489dffc858c","title":"Quick Start (5 Minutes) — target API, not implemented","url":"/docs/features/enterprise-hitl#quick-start-5-minutes-target-api-not-implemented","content":"The configuration in this section is not implemented. Use\n\"Currently available\" above for a setup that works.","hierarchy":{"lvl0":"Features","lvl1":"Enterprise Human-in-the-Loop System","lvl2":"Quick Start (5 Minutes) — target API, not implemented","lvl3":""}},
|
|
3417
3416
|
{"objectID":"b62fa6408a8b9cdb6529cb46322d52d2eacf916cac33e17f4736f804c038d8d1","title":"Installation","url":"/docs/features/enterprise-hitl#installation","content":"HITL is built into NeuroLink SDK v7.39.0+. No additional packages required:\n\n`bash\nnpm install @juspay/neurolink@latest","hierarchy":{"lvl0":"Features","lvl1":"Enterprise Human-in-the-Loop System","lvl2":"Installation","lvl3":""}},
|
|
3418
3417
|
{"objectID":"e64ad379a8adaf78f03a2bb43e0b5e2cc81da2d47894833ec8506fabe02f36b8","title":"or","url":"/docs/features/enterprise-hitl#or","content":"pnpm add @juspay/neurolink@latest\n`","hierarchy":{"lvl0":"Features","lvl1":"Enterprise Human-in-the-Loop System","lvl2":"or","lvl3":""}},
|
|
3419
|
-
{"objectID":"
|
|
3418
|
+
{"objectID":"54e4f09edc4d5d60ca5168c95bb939e5b450b66343603c8ff9f675f30adeeaf7","title":"Basic Configuration (Planned)","url":"/docs/features/enterprise-hitl#basic-configuration-planned","content":"Minimal setup for tool-based approval workflow:","hierarchy":{"lvl0":"Features","lvl1":"Enterprise Human-in-the-Loop System","lvl2":"Basic Configuration (Planned)","lvl3":""}},
|
|
3420
3419
|
{"objectID":"7f7f3d5d5b93bd020c02e0d80f6e96d170aa3b855e991f89981cbfd91d5d3f7d","title":"First Approval Request","url":"/docs/features/enterprise-hitl#first-approval-request","content":"Complete end-to-end example with error handling:","hierarchy":{"lvl0":"Features","lvl1":"Enterprise Human-in-the-Loop System","lvl2":"First Approval Request","lvl3":""}},
|
|
3421
|
-
{"objectID":"b37484e134892774ba4fcd841de351fee01de51999e095a551e3ec563512faae","title":"1. Approval Workflows","url":"/docs/features/enterprise-hitl#1-approval-workflows","content":"
|
|
3422
|
-
{"objectID":"
|
|
3423
|
-
{"objectID":"
|
|
3420
|
+
{"objectID":"b37484e134892774ba4fcd841de351fee01de51999e095a551e3ec563512faae","title":"1. Approval Workflows","url":"/docs/features/enterprise-hitl#1-approval-workflows","content":"The target design supports both synchronous (blocking) and asynchronous (non-blocking) approval patterns. Today only the blocking, event-based flow under \"Currently available\" exists:","hierarchy":{"lvl0":"Features","lvl1":"Enterprise Human-in-the-Loop System","lvl2":"1. Approval Workflows","lvl3":""}},
|
|
3421
|
+
{"objectID":"b1092337a3f40291d239ebdf49d6f3a33c898e17b07e8e1ef199bb4a5241e157","title":"Synchronous Approval (Blocking) (Planned)","url":"/docs/features/enterprise-hitl#synchronous-approval-blocking-planned","content":"AI operation pauses until human approves or rejects:\n\nUse cases:\nReal-time operations requiring immediate decision\nInteractive applications with user present\nHigh-risk actions requiring instant validation","hierarchy":{"lvl0":"Features","lvl1":"Enterprise Human-in-the-Loop System","lvl2":"Synchronous Approval (Blocking) (Planned)","lvl3":""}},
|
|
3422
|
+
{"objectID":"d6fc5a8c547c672d9b77c95259cb22e9c547a903b6bd9ba2cd78b1cf8db96c92","title":"Asynchronous Approval (Non-blocking) (Planned)","url":"/docs/features/enterprise-hitl#asynchronous-approval-non-blocking-planned","content":"AI operation returns pending status, continues when approved:\n\nUse cases:\nBatch processing workflows\nOperations requiring expert review (takes time)\nMulti-level approval chains\nIntegration with ticketing systems (Jira, ServiceNow)","hierarchy":{"lvl0":"Features","lvl1":"Enterprise Human-in-the-Loop System","lvl2":"Asynchronous Approval (Non-blocking) (Planned)","lvl3":""}},
|
|
3424
3423
|
{"objectID":"6205d2fc63ebe60903db0c27c4760bc6afdf005dcf3b73d3b8ac89c9e4561dcf","title":"2. Review Triggers","url":"/docs/features/enterprise-hitl#2-review-triggers","content":"Configure when human review is required:","hierarchy":{"lvl0":"Features","lvl1":"Enterprise Human-in-the-Loop System","lvl2":"2. Review Triggers","lvl3":""}},
|
|
3425
3424
|
{"objectID":"8f65496ec30fbca49ed86247b1c2afefb4f4b7f42e372b1b372fed31c9f7507d","title":"Confidence Threshold Trigger (Planned)","url":"/docs/features/enterprise-hitl#confidence-threshold-trigger-planned","content":"Automatically request review when AI confidence is low:","hierarchy":{"lvl0":"Features","lvl1":"Enterprise Human-in-the-Loop System","lvl2":"Confidence Threshold Trigger (Planned)","lvl3":""}},
|
|
3426
|
-
{"objectID":"
|
|
3425
|
+
{"objectID":"46dfa98fab03ab01f82781693f4b24abc5ae09a7bcac9c12e27059693dc2ffdd","title":"Tool-Specific Rules (Planned)","url":"/docs/features/enterprise-hitl#tool-specific-rules-planned","content":"Today, list the names in dangerousActions. It matches case-insensitive\nsubstrings of the tool name, not exact names; use a customRules condition when\nyou need an exact match. requireApproval below does not exist.\n\nRequire approval for specific tools only:","hierarchy":{"lvl0":"Features","lvl1":"Enterprise Human-in-the-Loop System","lvl2":"Tool-Specific Rules (Planned)","lvl3":""}},
|
|
3427
3426
|
{"objectID":"2ae592a67407e3c2be324d72064d9be1a854c7beb1972341b4330b7d12e8216d","title":"Content Pattern Matching (Planned)","url":"/docs/features/enterprise-hitl#content-pattern-matching-planned","content":"Trigger review based on content patterns:","hierarchy":{"lvl0":"Features","lvl1":"Enterprise Human-in-the-Loop System","lvl2":"Content Pattern Matching (Planned)","lvl3":""}},
|
|
3428
|
-
{"objectID":"
|
|
3427
|
+
{"objectID":"7a08725ac01d94aef36553a64b02fa5b1baf24bd209a02b43c5e5cb6de22cae8","title":"Time-Based Restrictions (Planned)","url":"/docs/features/enterprise-hitl#time-based-restrictions-planned","content":"Today, a customRules entry whose condition checks the time can require\nconfirmation; the reviewCallback below does not exist.\n\nRequire approval outside business hours:","hierarchy":{"lvl0":"Features","lvl1":"Enterprise Human-in-the-Loop System","lvl2":"Time-Based Restrictions (Planned)","lvl3":""}},
|
|
3429
3428
|
{"objectID":"72e25e1d500a37dc894d964387e6764abc22e16f0b7f5ff8dcb06210f68fd9ae","title":"3. Escalation Policies (Planned)","url":"/docs/features/enterprise-hitl#3-escalation-policies-planned","content":"Handle timeout and multi-level approval:","hierarchy":{"lvl0":"Features","lvl1":"Enterprise Human-in-the-Loop System","lvl2":"3. Escalation Policies (Planned)","lvl3":""}},
|
|
3430
|
-
{"objectID":"
|
|
3431
|
-
{"objectID":"
|
|
3429
|
+
{"objectID":"206500821601c91fdd873101596e919ba144e32f90bebdce177f7d83c9112003","title":"TypeScript Configuration (Planned)","url":"/docs/features/enterprise-hitl#typescript-configuration-planned","content":"Complete configuration interface:","hierarchy":{"lvl0":"Features","lvl1":"Enterprise Human-in-the-Loop System","lvl2":"TypeScript Configuration (Planned)","lvl3":""}},
|
|
3430
|
+
{"objectID":"a89866f93345ab7d50f93d25b35ef827e85a7dcd51b589f947db344e4957cef2","title":"CLI Integration (Planned)","url":"/docs/features/enterprise-hitl#cli-integration-planned","content":"The CLI has no HITL support today: loop --enable-hitl and the /hitl commands\nbelow do not exist in src/cli. HITL is available through the SDK only.","hierarchy":{"lvl0":"Features","lvl1":"Enterprise Human-in-the-Loop System","lvl2":"CLI Integration (Planned)","lvl3":""}},
|
|
3431
|
+
{"objectID":"e6f2bf9fc699ca3223d106f8ef5dc9eab2caf77a6dd60615f3da4a34bf0e3189","title":"HITL in Loop Mode (Planned)","url":"/docs/features/enterprise-hitl#hitl-in-loop-mode-planned","content":"Interactive CLI provides built-in HITL commands:\n\n`bash","hierarchy":{"lvl0":"Features","lvl1":"Enterprise Human-in-the-Loop System","lvl2":"HITL in Loop Mode (Planned)","lvl3":""}},
|
|
3432
3432
|
{"objectID":"ea3b2d5a1e12c7256aac7a0ddeda51598adaffde52075a064d8b1937b541a59c","title":"Start loop with HITL enabled","url":"/docs/features/enterprise-hitl#start-loop-with-hitl-enabled","content":"npx @juspay/neurolink loop --enable-hitl","hierarchy":{"lvl0":"Features","lvl1":"Enterprise Human-in-the-Loop System","lvl2":"Start loop with HITL enabled","lvl3":""}},
|
|
3433
3433
|
{"objectID":"526eed06d51290a78aca63c4fc0e35977bc66ef06642c7087a66c2aaeaef10c1","title":"Inside loop session","url":"/docs/features/enterprise-hitl#inside-loop-session","content":"neurolink > /hitl status\n📋 Pending HITL Approvals (2):\nTool: deleteFile\n Args: { path: \"/tmp/data.csv\" }\n Confidence: 0.76\n Requested: 2 minutes ago\nTool: sendEmail\n Args: { to: \"customer@example.com\", subject: \"Order Update\" }\n Confidence: 0.92\n Requested: 5 seconds ago\n\nneurolink > /hitl approve 1\n✅ Approved deleteFile operation\n Execution completed successfully\n\nneurolink > /hitl reject 2 --reason \"Email template needs review\"\n❌ Rejected sendEmail operation\n Reason logged: Email template needs review\n`","hierarchy":{"lvl0":"Features","lvl1":"Enterprise Human-in-the-Loop System","lvl2":"Inside loop session","lvl3":""}},
|
|
3434
|
-
{"objectID":"
|
|
3435
|
-
{"objectID":"
|
|
3436
|
-
{"objectID":"
|
|
3437
|
-
{"objectID":"
|
|
3438
|
-
{"objectID":"
|
|
3439
|
-
{"objectID":"
|
|
3440
|
-
{"objectID":"
|
|
3434
|
+
{"objectID":"e195455e041901b1ebfdd6e8a04de697b88c064de2875fb3fd5fe05f08e2b78e","title":"CLI HITL Commands (Planned)","url":"/docs/features/enterprise-hitl#cli-hitl-commands-planned","content":"| Command | Description | Example |\n| -------------------- | --------------------------- | -------------------------------------------- |\n| /hitl status | View pending approvals | /hitl status |\n| /hitl approve <id> | Approve pending action | /hitl approve 1 |\n| /hitl reject <id> | Reject with optional reason | /hitl reject 2 --reason \"Security concern\" |\n| /hitl history | View approval history | /hitl history --last 10 |\n| /hitl config | View HITL configuration | /hitl config |","hierarchy":{"lvl0":"Features","lvl1":"Enterprise Human-in-the-Loop System","lvl2":"CLI HITL Commands (Planned)","lvl3":""}},
|
|
3435
|
+
{"objectID":"571a1b1a4eaeca23a851abf92ac5aec56cd5ee60b8167f8dcaff7e4d159754ef","title":"Pattern 1: Medical AI Validation (Planned)","url":"/docs/features/enterprise-hitl#pattern-1-medical-ai-validation-planned","content":"Physician oversight for AI-generated diagnostic recommendations:","hierarchy":{"lvl0":"Features","lvl1":"Enterprise Human-in-the-Loop System","lvl2":"Pattern 1: Medical AI Validation (Planned)","lvl3":""}},
|
|
3436
|
+
{"objectID":"121f8f39853d38aa6e8c2464c36ffd1c619e77e26d2ff6b0fb90f4b88f86b006","title":"Pattern 2: Financial Compliance (Planned)","url":"/docs/features/enterprise-hitl#pattern-2-financial-compliance-planned","content":"Transaction approval above risk thresholds:","hierarchy":{"lvl0":"Features","lvl1":"Enterprise Human-in-the-Loop System","lvl2":"Pattern 2: Financial Compliance (Planned)","lvl3":""}},
|
|
3437
|
+
{"objectID":"72031a1476abd0cfc6af409ecce2064f49d9f580301c6f43a494da9282edea57","title":"Pattern 3: Legal Document Review (Planned)","url":"/docs/features/enterprise-hitl#pattern-3-legal-document-review-planned","content":"Attorney validation of AI-generated contracts:","hierarchy":{"lvl0":"Features","lvl1":"Enterprise Human-in-the-Loop System","lvl2":"Pattern 3: Legal Document Review (Planned)","lvl3":""}},
|
|
3438
|
+
{"objectID":"127d95adf25b9fa9d5667d36b1af9cdf6b84222705884c946cbadecf67388ab8","title":"Pattern 4: Code Execution Safety (Planned)","url":"/docs/features/enterprise-hitl#pattern-4-code-execution-safety-planned","content":"Sandbox approval before executing AI-generated code:","hierarchy":{"lvl0":"Features","lvl1":"Enterprise Human-in-the-Loop System","lvl2":"Pattern 4: Code Execution Safety (Planned)","lvl3":""}},
|
|
3439
|
+
{"objectID":"2a7572746f8eb03a9b56bcbc16bc3aba175862c779c1e5f143fdd9a38056f7a3","title":"Full Configuration Object (Planned)","url":"/docs/features/enterprise-hitl#full-configuration-object-planned","content":"Complete TypeScript interface with all available options:","hierarchy":{"lvl0":"Features","lvl1":"Enterprise Human-in-the-Loop System","lvl2":"Full Configuration Object (Planned)","lvl3":""}},
|
|
3440
|
+
{"objectID":"64848d578f4cc9c2ed6ed34e725702af1a6a44392545075c13645ac87e1f8a24","title":"Environment Variables (Planned)","url":"/docs/features/enterprise-hitl#environment-variables-planned","content":"Configure HITL through environment variables:\n\n`bash","hierarchy":{"lvl0":"Features","lvl1":"Enterprise Human-in-the-Loop System","lvl2":"Environment Variables (Planned)","lvl3":""}},
|
|
3441
3441
|
{"objectID":"14bc2b3a7e3afa1c8766393ad07f977a6c9b7d8d148a5d0a75eddc6c1b50fc69","title":"Core HITL Settings","url":"/docs/features/enterprise-hitl#core-hitl-settings","content":"NEUROLINKHITLENABLED=true\nNEUROLINKHITLMODE=synchronous\nNEUROLINKHITLTIMEOUT=300000","hierarchy":{"lvl0":"Features","lvl1":"Enterprise Human-in-the-Loop System","lvl2":"Core HITL Settings","lvl3":""}},
|
|
3442
3442
|
{"objectID":"0155870a83c9fab4dcfc9fa12646dfd2809726e6e064f614220d1d41e4c54ff8","title":"Approval Configuration","url":"/docs/features/enterprise-hitl#approval-configuration","content":"NEUROLINKHITLCONFIDENCE_THRESHOLD=0.85\nNEUROLINKHITLREQUIRE_APPROVAL=writeFile,deleteFile,executeCode","hierarchy":{"lvl0":"Features","lvl1":"Enterprise Human-in-the-Loop System","lvl2":"Approval Configuration","lvl3":""}},
|
|
3443
3443
|
{"objectID":"cdd86713a78265d3ff42b5c5256991f8da1f6f4753e8065ea42330125910da88","title":"Audit Logging","url":"/docs/features/enterprise-hitl#audit-logging","content":"NEUROLINKHITLAUDIT_ENABLED=true\nNEUROLINKHITLAUDIT_STORAGE=database\nNEUROLINKHITLAUDITDBURL=postgresql://user:pass@localhost:5432/audit","hierarchy":{"lvl0":"Features","lvl1":"Enterprise Human-in-the-Loop System","lvl2":"Audit Logging","lvl3":""}},
|
|
3444
3444
|
{"objectID":"67a44f6b49f1934a63f5ade0ae604790a7f0ec79a1dacb0f09565354d6675c84","title":"Integration","url":"/docs/features/enterprise-hitl#integration","content":"NEUROLINKHITLSLACK_TOKEN=xoxb-your-token\nNEUROLINKHITLSLACK_CHANNEL=#ai-approvals\n`","hierarchy":{"lvl0":"Features","lvl1":"Enterprise Human-in-the-Loop System","lvl2":"Integration","lvl3":""}},
|
|
3445
|
-
{"objectID":"
|
|
3446
|
-
{"objectID":"
|
|
3447
|
-
{"objectID":"
|
|
3448
|
-
{"objectID":"
|
|
3449
|
-
{"objectID":"
|
|
3450
|
-
{"objectID":"
|
|
3451
|
-
{"objectID":"
|
|
3452
|
-
{"objectID":"
|
|
3453
|
-
{"objectID":"992e9bc1e57f267cefacae68b8b18a5ec518a01bc9bcfa6c27addc73b8361871","title":"See Also","url":"/docs/features/enterprise-hitl#see-also","content":"Quick HITL Guide - Simple HITL setup for common cases\nGuardrails Middleware - Complementary content filtering\nMiddleware Architecture - How HITL integrates with middleware\nCustom Tools - Building tools with HITL support\nCLI Loop Sessions - Using HITL in interactive CLI","hierarchy":{"lvl0":"Features","lvl1":"Enterprise Human-in-the-Loop System","lvl2":"See Also","lvl3":""}},
|
|
3445
|
+
{"objectID":"9025fddc5d6afe63d0a0292ac5254490777b878be5d3b08efd3cd0094d4c0691","title":"Audit Trail Format (Planned)","url":"/docs/features/enterprise-hitl#audit-trail-format-planned","content":"Today, with auditLogging: true, each\nentry carries timestamp, eventType (confirmation-requested,\nconfirmation-approved, confirmation-rejected, confirmation-timeout or\nconfirmation-auto-approved, among a few internal ones such as\nconfiguration-updated), toolName, userId, sessionId, arguments,\nreason and responseTime. There is no aiConfidence, reviewer,\nescalationLevel or outcome field.\n\nThe target format is:","hierarchy":{"lvl0":"Features","lvl1":"Enterprise Human-in-the-Loop System","lvl2":"Audit Trail Format (Planned)","lvl3":""}},
|
|
3446
|
+
{"objectID":"2a46c4809f797874969aab2ad5ab95312e396113aa8f032fd19fa7ae9016a18c","title":"HIPAA Compliance (Planned)","url":"/docs/features/enterprise-hitl#hipaa-compliance-planned","content":"HITL audit logs support HIPAA requirements:\nAccess Controls: Reviewer identity logged\nAudit Trail: Complete decision history\nData Integrity: Tamper-evident logging\nAccountability: Individual authorization tracking","hierarchy":{"lvl0":"Features","lvl1":"Enterprise Human-in-the-Loop System","lvl2":"HIPAA Compliance (Planned)","lvl3":""}},
|
|
3447
|
+
{"objectID":"6f7fa1be647afacc555eb1ec8c5244b21c55d4a46e3aa13d46f6082e42d055ff","title":"SOC2 Compliance (Planned)","url":"/docs/features/enterprise-hitl#soc2-compliance-planned","content":"Meet SOC2 Type II requirements:\nAuthorization: Documented approval workflow\nMonitoring: Real-time audit logging\nAvailability: Timeout and escalation policies\nConfidentiality: Encrypted audit storage","hierarchy":{"lvl0":"Features","lvl1":"Enterprise Human-in-the-Loop System","lvl2":"SOC2 Compliance (Planned)","lvl3":""}},
|
|
3448
|
+
{"objectID":"06bb17942ba87e133a8f3123608c81ae316afc524ed1951f2ede9a7676491cb7","title":"GDPR Compliance (Planned)","url":"/docs/features/enterprise-hitl#gdpr-compliance-planned","content":"Support GDPR data protection requirements:\nLawful Processing: Human oversight for data operations\nData Minimization: Review prevents excessive collection\nRight to Erasure: Approval required for deletions\nAccountability: Complete audit trail","hierarchy":{"lvl0":"Features","lvl1":"Enterprise Human-in-the-Loop System","lvl2":"GDPR Compliance (Planned)","lvl3":""}},
|
|
3449
|
+
{"objectID":"f1c23348d7cdfbf7d0811833c7b5fa00c0fd395870a9cf1c4485f4faeb0eacd4","title":"Issue: Timeout Exceeded (Planned)","url":"/docs/features/enterprise-hitl#issue-timeout-exceeded-planned","content":"Symptom: Review requests timing out before approval\n\nSolution:","hierarchy":{"lvl0":"Features","lvl1":"Enterprise Human-in-the-Loop System","lvl2":"Issue: Timeout Exceeded (Planned)","lvl3":""}},
|
|
3450
|
+
{"objectID":"18d85cbac3aabdb384555383993c9abc459eac1db213758d72b95b439af34194","title":"Issue: Approval Callback Not Called (Planned)","url":"/docs/features/enterprise-hitl#issue-approval-callback-not-called-planned","content":"Symptom: HITL enabled but callback never executes\n\nSolution: Ensure tool has requiresConfirmation: true:","hierarchy":{"lvl0":"Features","lvl1":"Enterprise Human-in-the-Loop System","lvl2":"Issue: Approval Callback Not Called (Planned)","lvl3":""}},
|
|
3451
|
+
{"objectID":"85b9b7f96f046182790a6d36bda6cd947bd3e316fc8a3b64e43528427d937a07","title":"Issue: Rejected Approvals Not Handled (Planned)","url":"/docs/features/enterprise-hitl#issue-rejected-approvals-not-handled-planned","content":"Symptom: Application crashes when approval rejected\n\nSolution: Handle rejection in error handling:","hierarchy":{"lvl0":"Features","lvl1":"Enterprise Human-in-the-Loop System","lvl2":"Issue: Rejected Approvals Not Handled (Planned)","lvl3":""}},
|
|
3452
|
+
{"objectID":"b7e00681519e3322c5a6b59fa27b3f4c690bc6b817ce444954975ab98b4ddced","title":"Debug Mode (Planned)","url":"/docs/features/enterprise-hitl#debug-mode-planned","content":"Enable detailed HITL logging:\n\nDebug output example:","hierarchy":{"lvl0":"Features","lvl1":"Enterprise Human-in-the-Loop System","lvl2":"Debug Mode (Planned)","lvl3":""}},
|
|
3453
|
+
{"objectID":"992e9bc1e57f267cefacae68b8b18a5ec518a01bc9bcfa6c27addc73b8361871","title":"See Also","url":"/docs/features/enterprise-hitl#see-also","content":"Quick HITL Guide - Simple HITL setup for common cases\nGuardrails Middleware - Complementary content filtering\nMiddleware Architecture - How HITL integrates with middleware\nCustom Tools - Building tools with HITL support\nCLI Loop Sessions - Using HITL in interactive CLI (planned; the CLI has no HITL commands yet)","hierarchy":{"lvl0":"Features","lvl1":"Enterprise Human-in-the-Loop System","lvl2":"See Also","lvl3":""}},
|
|
3454
3454
|
{"objectID":"d6c4b07886bed5cc608b44f7832c70c77eaddce3bcff88407c8c1bd14e35e571","title":"File Processors Guide","url":"/docs/features/file-processors","content":"File Processors Guide\n\nNeuroLink includes a comprehensive file processing system that supports 20+ file types with intelligent content extraction, security sanitization, and provider-agnostic formatting. This system enables seamless multimodal AI interactions across NeuroLink's multimodal-capable providers.\n\nOverview\n\nThe file processor system is organized into a modular architecture:\n\nQuick Start\n\nSupported File Types\n\nDocuments\n\n| Type | Extensions | Processor | Features |\n| ---------------- | ---------------------- | ----------------------- | ---------------------------------------------------- |\n| Excel | .xlsx, .xls | ExcelProcessor | Multi-sheet extraction, cell formatting, data tables |\n| Word | .docx, .doc | WordProcessor | Text extraction, paragraph preservation |\n| RTF | .rtf | RtfProcessor | Rich text to plain text conversion |\n| OpenDocument | .odt, .ods, .odp | OpenDocumentProcessor | LibreOffice/OpenOffice format support |\n\nData Files\n\n| Type | Extensions | Processor | Features |\n| -------- | --------------- | --------------- | ------------------------------------------------ |\n| JSON | .json | JsonProcessor | Validation, pretty-printing, syntax highlighting |\n| YAML | .yaml, .yml | YamlProcessor | Validation, formatting, multi-document support |\n| XML | .xml | XmlProcessor | Parsing, validation, entity handling |\n\nMarkup Files\n\n| Type | Extensions | Processor | Features |\n| ------------ | ------------------ | ------------------- | --------------------------------------------- |\n| HTML | .html, .htm | HtmlProcessor | OWASP-compliant sanitization, text extraction |\n| SVG | .svg | SvgProcessor | XSS prevention, text injection (not binary) |\n| Markdown | .md, .markdown | MarkdownProcessor | Formatting preservation, metadata extraction |\n| Text | .txt | TextProcessor | Plain text handling, encoding detection |\n\nSource Code\n\n| Type | Extensions | Processor | Features |\n| ------------------- | -------------------------- | --------------------- | ----------------------------------- |\n| TypeScript | .ts, .tsx | SourceCodeProcessor | Language detection, syntax metadata |\n| JavaScript | .js, .jsx, .mjs | SourceCodeProcessor | Module detection |\n| Python | .py | SourceCodeProcessor | Docstring preservation |\n| Java | .java | SourceCodeProcessor | Package detection |\n| Go | .go | SourceCodeProcessor | Module awareness |\n| Rust | .rs | SourceCodeProcessor | Crate detection |\n| C/C++ | .c, .cpp, .h, .hpp | SourceCodeProcessor | Header handling |\n| C# | .cs | SourceCodeProcessor | Namespace detection |\n| Ruby | .rb | SourceCodeProcessor | Gem awareness |\n| PHP | .php | SourceCodeProcessor | Tag handling |\n| Swift | .swift | SourceCodeProcessor | Framework detection |\n| Kotlin | .kt, .kts | SourceCodeProcessor | Android/JVM awareness |\n| Scala | .scala | SourceCodeProcessor | SBT integration |\n| Shell | .sh, .bash, .zsh | SourceCodeProcessor | Shebang detection |\n| SQL | .sql | SourceCodeProcessor | Dialect hints |\n| And 35+ more... | Various | SourceCodeProcessor | Automatic language detection |\n\nConfiguration Files\n\n| Type | Extensions | Processor | Features |\n| --------------- | ---------------- | ----------------- | ---------------------------------- |\n| Environment | .env, .env.* | ConfigProcessor | Secret masking option |\n| INI | .ini, .cfg | ConfigProcessor | Section parsing |\n| TOML | .toml | ConfigProcessor | Cargo.toml, pyproject.toml support |\n| Properties | .properties | ConfigProcessor | Java properties format |\n\nMedia Files\n\n| Type | Extensions | Processor | Features |\n| --------- | -------------------------","hierarchy":{"lvl0":"Features","lvl1":"File Processors Guide","lvl2":"","lvl3":""}},
|
|
3455
3455
|
{"objectID":"dea6ffeb235bc505d26c6d6a5ba281b31899eafa059b662f2c641e81e11db042","title":"File Processors Guide","url":"/docs/features/file-processors#file-processors-guide","content":"NeuroLink includes a comprehensive file processing system that supports 20+ file types with intelligent content extraction, security sanitization, and provider-agnostic formatting. This system enables seamless multimodal AI interactions across NeuroLink's multimodal-capable providers.","hierarchy":{"lvl0":"Features","lvl1":"File Processors Guide","lvl2":"File Processors Guide","lvl3":""}},
|
|
3456
3456
|
{"objectID":"381a019ed18ea05c4626079db491bf0605ee65af38e6554d9624911f9fea8023","title":"Overview","url":"/docs/features/file-processors#overview","content":"The file processor system is organized into a modular architecture:","hierarchy":{"lvl0":"Features","lvl1":"File Processors Guide","lvl2":"Overview","lvl3":""}},
|
|
@@ -3591,7 +3591,7 @@
|
|
|
3591
3591
|
{"objectID":"e3366024d1a12d0c73fbcb1592927d2dcc0d92c12eaea661cf5164bb7217c32f","title":"Feature Guides","url":"/docs/features","content":"Feature Guides\n\nComprehensive guides for all NeuroLink features organized by category. Each guide includes setup, usage patterns, configuration, and troubleshooting.\n\nLatest Features (Q1 2026)\n\n| Feature | Description |\n| ---------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| decide Inference Type | A third inference type alongside generate/stream: typed, calibrated boolean/choice/score judgments in one parallel pass — no text. ~400ms, ~$0.00002 per decision on TypeSafe; Perplexity adds about 65 ms for each further question, up to 128 (see its guide); Cloudflare Clef takes up to 64 questions and about 2,048 tokens of state (see its guide). Providers: TypeSafe Jev; Laya, open-weights and self-hosted; XOR, Juspay's open-weights model that also reads images and video; SubQ, a hosted API; Perplexity, a hosted API that also reads images; Cloudflare Clef, hosted on Workers AI, which also reads images; OpenAI Decisions, OpenAI's Decisions API (public beta), which also reads images; and ScaleDown, a hosted API that reads text only. Fail-open: a no-op when no decision provider is configured (the credentials of Perplexity, Cloudflare Clef and OpenAI Decisions are shared with their text providers; ScaleDown's is its own). |\n| Model Routing with a Decision Model | One round trip answers difficulty, capabilities, risk, context scope and the model pick, with asymmetric confidence bars (0.3 up / 0.6 down). ","hierarchy":{"lvl0":"Features","lvl1":"Feature Guides","lvl2":"","lvl3":""}},
|
|
3592
3592
|
{"objectID":"a477c76a577a17e7aeaf89736289a0a41734b4bcfe479a523cdd9e2051bd0ba7","title":"Feature Guides","url":"/docs/features#feature-guides","content":"Comprehensive guides for all NeuroLink features organized by category. Each guide includes setup, usage patterns, configuration, and troubleshooting.","hierarchy":{"lvl0":"Features","lvl1":"Feature Guides","lvl2":"Feature Guides","lvl3":""}},
|
|
3593
3593
|
{"objectID":"a43e81fa4a6c594f8b6b4cfc216db1356d75b3e4ebb54279dd2da7f69001d28f","title":"Latest Features (Q1 2026)","url":"/docs/features#latest-features-q1-2026","content":"| Feature | Description |\n| ---------------------------------------------------------------------------------------- |","hierarchy":{"lvl0":"Features","lvl1":"Feature Guides","lvl2":"Latest Features (Q1 2026)","lvl3":""}},
|
|
3594
|
-
{"objectID":"84c604ce940f85fbe8aa8d94675e4c1dae80b22ede558d58102426598f6a7d06","title":"Core Features (shipped 2025)","url":"/docs/features#core-features-shipped-2025","content":"| Feature | Description |\n| -------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- |\n| Image Generation | Generate images from text prompts using Gemini models via Vertex AI or Google AI Studio. |\n| Enterprise HITL |
|
|
3594
|
+
{"objectID":"84c604ce940f85fbe8aa8d94675e4c1dae80b22ede558d58102426598f6a7d06","title":"Core Features (shipped 2025)","url":"/docs/features#core-features-shipped-2025","content":"| Feature | Description |\n| -------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- |\n| Image Generation | Generate images from text prompts using Gemini models via Vertex AI or Google AI Studio. |\n| Enterprise HITL | HITL design guide. Event-based tool approval works today; the rest is planned. |\n| Interactive CLI | AI development environment with loop mode, session variables, and conversation memory. |\n| MCP Tools Showcase | Complete guide to 6 built-in tools and connecting external MCP servers across 6 categories. |\n| Human-in-the-Loop (HITL) | Pause AI tool execution for user approval before risky operations like file deletion or API calls. |\n| Guardrails Middleware | Content filtering, PII detection, and safety checks for AI outputs with zero configuration. |\n| Redis Conversation Export | Export complete session history as JSON for analytics, debugging, and compliance auditing. |\n| Context Compaction | Automatic conversation compression for long-running sessions to stay within token limits. |\n| LiteLLM Integration | Access 100+ AI models across a broad range of AI providers through unified LiteLLM routing interface. |\n| SageMaker Integration | Deploy and use custom-trained models on AWS SageMaker infrastructure with full control. |","hierarchy":{"lvl0":"Features","lvl1":"Feature Guides","lvl2":"Core Features (shipped 2025)","lvl3":""}},
|
|
3595
3595
|
{"objectID":"f64aba3e564a8f56064839c33b533971468da990a9cc95d86ceb1e9d13223478","title":"Earlier Core Features (shipped Q3 2025)","url":"/docs/features#earlier-core-features-shipped-q3-2025","content":"| Feature | Description |\n| ------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- |\n| Multimodal Chat Experiences | Stream text and images together with automatic provider fallbacks and format conversion. |\n| CSV File Support | Process CSV files for data analysis with automatic format conversion. Works across supported providers. |\n| PDF File Support | Process PDF documents for visual analysis and content extraction. Native provider support. |\n| Office Documents | Process DOCX, PPTX, XLSX files for document analysis. Native Bedrock, Vertex, Anthropic support. |\n| Auto Evaluation Engine | Automated quality scoring and metrics export for AI response validation using LLM-as-judge. |\n| CLI Loop Sessions | Persistent interactive mode with conversation memory and session state for prompt engineering. |\n| Regional Streaming Controls | Region-specific model deployment and routing for compliance and latency optimization. |\n| Provider Orchestration Brain | Adaptive provider and model selection with intelligent fallbacks based on task classification. |","hierarchy":{"lvl0":"Features","lvl1":"Feature Guides","lvl2":"Earlier Core Features (shipped Q3 2025)","lvl3":""}},
|
|
3596
3596
|
{"objectID":"fbd682fc148477639d38ab175c38363d003a1464834e84b2a48d88087d001b91","title":"Platform Capabilities at a Glance","url":"/docs/features#platform-capabilities-at-a-glance","content":"| Category | Features | Documentation |\n| ------------------------ | ------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------- |\n| Provider unification | Provider integrations with automatic failover, cost-aware routing, providerFallback policy, modelChain config | Provider Setup |\n| Multimodal pipeline | Stream images + CSV data + PDF documents + Office files across providers with auto-detection for mixed file types. | Multimodal Guide, CSV Support, PDF Support, Office Docs |\n| Voice pipeline | TTS (6 providers) + STT (4 providers) + realtime APIs (OpenAI Realtime, Gemini Live) | TTS Guide, STT Guide, Realtime Services |\n| Quality & governance | Auto-evaluation engine (14 scorers), guardrails middleware, HITL workflows, audit logging | Auto Evaluation, Guardrails, HITL |\n| Memory & context | Per-user condensed memory (S3/Redis/SQLite), Redis session export, 5-stage context compaction | Conversation Memory, Memory, Redis Export |\n| CLI tooling | Loop sessions, setup wizard, config validation, Redis auto-detect, JSON output, TTS/STT flags | CLI Loop, CLI Commands |\n| Enterprise ops | Claude proxy, OTLP observability, OpenObserve dashboard, regional routing,","hierarchy":{"lvl0":"Features","lvl1":"Feature Guides","lvl2":"Platform Capabilities at a Glance","lvl3":""}},
|
|
3597
3597
|
{"objectID":"71822e016bf07461e8af1f4f98755ff09c6a0af3daac91dc0cc0326dce7f06d1","title":"AI Provider Integration","url":"/docs/features#ai-provider-integration","content":"NeuroLink supports many AI providers with unified API access:\n\n| Provider | Key Features | Free Tier | Tool Support | Status | Documentation |\n| --------------------- | ---------------------------------------- | ------------ | ------------ | ---------- | ----------------------------------------------------------------------------------------------------------- |\n| OpenAI | GPT-4o, GPT-4o-mini, o1 models | No | Full | Production | Setup Guide |\n| Anthropic | Claude 4.6, 4.5/4.0 Sonnet, Opus, Haiku | No | Full | Production | Setup Guide, Subscription Guide |\n| Google AI | Gemini 3 Flash/Pro, Gemini 2.5 Flash/Pro | Free Tier | Full | Production | Setup Guide |\n| AWS Bedrock | Claude, Titan, Llama, Nova | No | Full | Production | Setup Guide |\n| Google Vertex | Gemini via GCP | No | Full | Production | Setup Guide |\n| Azure OpenAI | GPT-4, GPT-4o, o1 | No | Full | Production | Setup Guide |\n| LiteLLM | 100+ models unified | Varies | Full | Production | Integration Guide |\n| AWS SageMaker | Custom deployed models | No | Full | Production | Integration Guide |\n| Mistral AI | Mistral Large, Small | Free Tier | Full | Production | Setup Guide","hierarchy":{"lvl0":"Features","lvl1":"Feature Guides","lvl2":"AI Provider Integration","lvl3":""}},
|
|
@@ -3622,7 +3622,7 @@
|
|
|
3622
3622
|
{"objectID":"a52d7a696297099efd57a6c2db7aad741810362aef9f180517c472396267d125","title":"Start the interactive session","url":"/docs/features#start-the-interactive-session","content":"$ npx @juspay/neurolink loop\n\nneurolink » set provider google-ai\n✓ provider set to google-ai\n\nneurolink » set temperature 0.8\n✓ temperature set to 0.8\n\nneurolink » generate \"Tell me a fun fact about space\"\nThe quietest place on Earth is an anechoic chamber at Microsoft's headquarters...","hierarchy":{"lvl0":"Features","lvl1":"Feature Guides","lvl2":"Start the interactive session","lvl3":""}},
|
|
3623
3623
|
{"objectID":"793abedc47b3a45489689d77b646431971e56ce23a71d29a1d7fa7e3318e7ad8","title":"Exit the session","url":"/docs/features#exit-the-session","content":"neurolink » exit\n`\n\nComplete Loop Guide - Full documentation with all commands","hierarchy":{"lvl0":"Features","lvl1":"Feature Guides","lvl2":"Exit the session","lvl3":""}},
|
|
3624
3624
|
{"objectID":"164b1ae9f7c7eb2f50d998d5b8c755eee88a19a0248684adfaa42e5a1674e18a","title":"Production Capabilities","url":"/docs/features#production-capabilities","content":"| Feature | Description | Use Case | Documentation |\n| ---------------------------- | ----------------------------------- | ---------------------------- | ----------------------------------------------------------------- |\n| Enterprise Proxy | Corporate proxy support | Behind firewalls | Proxy Setup |\n| Redis Memory | Distributed conversation state | Multi-instance deployment | Redis Guide |\n| Cost Optimization | Automatic cheapest model selection | Budget control | Cost Guide |\n| Multi-Provider Failover | Automatic provider switching | High availability | Failover Guide |\n| Telemetry & Monitoring | OpenTelemetry integration | Observability | Observability Guide |\n| Security Hardening | Credential management, auditing | Compliance | Security Guide |\n| Custom Model Hosting | SageMaker integration | Private models | SageMaker Guide |\n| Load Balancing | LiteLLM proxy integration | Scale & routing | Load Balancing Guide |\n| Audit Trails | Comprehensive logging | Compliance | Audit Guide |\n| Configuration Management | Environment & credential management | Multi-environment deployment | Config Guide |","hierarchy":{"lvl0":"Features","lvl1":"Feature Guides","lvl2":"Production Capabilities","lvl3":""}},
|
|
3625
|
-
{"objectID":"
|
|
3625
|
+
{"objectID":"07b5e5c605236106353794515b9c42b83f8f8b8a1564ffe6c035bff47a24a8c8","title":"Human-in-the-Loop (HITL)","url":"/docs/features#human-in-the-loop-hitl","content":"Event-based approval for sensitive tool calls. The shipped configuration is HITLConfig:\n\nWhat ships today:\nPause a tool call until your app answers over the SDK event emitter\nReject on timeout, or auto-approve with exclusions\ncustomRules for conditional approval\nA log entry for each request and decision (a log, not a compliance control)\n\nPlanned, not implemented: an allow-list or deny-list policy, bulk approval, confidence thresholds, escalation and asynchronous review. See the Enterprise HITL guide for the target design and #752.","hierarchy":{"lvl0":"Features","lvl1":"Feature Guides","lvl2":"Human-in-the-Loop (HITL)","lvl3":""}},
|
|
3626
3626
|
{"objectID":"c81fd2f8780d547e81f6ea98ef097272fa09287c1f9f13a4954cde4378778e19","title":"Advanced Proxy Support","url":"/docs/features#advanced-proxy-support","content":"Corporate network compatibility:\n\n| Proxy Type | Support | Features |\n| -------------------- | ------- | ---------------------------------------- |\n| AWS Proxy | Full | AWS-specific proxy configuration |\n| HTTP/HTTPS Proxy | Full | Proxy support across supported providers |\n| No-Proxy Bypass | Full | Bypass configuration and utilities |","hierarchy":{"lvl0":"Features","lvl1":"Feature Guides","lvl2":"Advanced Proxy Support","lvl3":""}},
|
|
3627
3627
|
{"objectID":"15f245fee8b38a5783018e5867e335b078b5b03bbfa9cf2ed1e181e3e94aad13","title":"Enhanced Guardrails","url":"/docs/features#enhanced-guardrails","content":"AI-powered content security:\nContent Filtering: Automatic content screening\nToxicity Detection: Toxic content filtering\nPII Redaction: Privacy protection and PII detection\nCustom Rules: Configurable policy rules\nSecurity Reporting: Detailed security event reporting","hierarchy":{"lvl0":"Features","lvl1":"Feature Guides","lvl2":"Enhanced Guardrails","lvl3":""}},
|
|
3628
3628
|
{"objectID":"af17d7cb6a64c95bf45ad63fd19adcc4db8f3bf34c93d5918f81d4555a8728fe","title":"Security & Compliance","url":"/docs/features#security-compliance","content":"Deployable within SOC 2 Type II environments — NeuroLink itself is not audited or certified\nDeployable on ISO 27001-certified infrastructure — that certification is your infrastructure's, not NeuroLink's\nGDPR-conscious data handling (EU-region providers selectable; you own compliance)\nDeployable in HIPAA-aligned configurations — you are responsible for a compliant setup\nHardened OS verified (SELinux, AppArmor)\nZero credential logging\nEncrypted configuration storage\n\nEnterprise Deployment Guide - Complete production patterns","hierarchy":{"lvl0":"Features","lvl1":"Feature Guides","lvl2":"Security & Compliance","lvl3":""}},
|
|
@@ -3678,12 +3678,12 @@
|
|
|
3678
3678
|
{"objectID":"e6ef692117fe2ad968f2bb5bd1692e50783a069a189d3dbfd6ac49f71ef84c73","title":"Remembering a realtime call in the user's own conversation","url":"/docs/features/livekit-voice-agent#remembering-a-realtime-call-in-the-users-own-conversation","content":"A speech-to-speech call (defineRealtimeVoiceAgent) never goes through\nstream() or generate(), so by default nothing it says is stored. Opt in with\nmemory and the call's turns are written, through\nNeuroLink.recordConversationTurn, to the same conversation memory typed chat\nuses, appended to the conversation the person already has open. The model is\nalso seeded with that conversation's recent history when the call starts, so it\nknows what was said before.\n\nWhose conversation is never taken from the client. The host that creates\nthe room signs a binding and puts it in the room metadata next to authToken\nand mcpContext. The worker stores nothing unless it verifies.\nThe signature is HMAC-SHA256 over [\"neurolink.voice.memory.v1\", room,\nuserId, sessionId, exp] (a JSON array, so no choice of values can make two\n bindings collide), base64url-encoded. It covers the room name, so a binding\n copied into another room does not verify. exp is Unix seconds; the default\n lifetime is two hours, the cap 24 hours.\nThe shared secret is at least 16 characters, read from\n NEUROLINK_VOICE_MEMORY_SECRET unless memory.secret is set on the worker.\nsessionId matches ^[A-Za-z0-9_-]{1,128}$ (no :, which is part of the\n stored key). userId is 1 to 256 characters with no whitespace or control\n characters; : is allowed because chat user ids contain it.\nFail closed. No secret, no binding, a malformed or expired binding, or a\n bad signature: the call runs normally, nothing is stored, and a warning\n names the reason (never the ids).\nA client may name the conversation to append to. The host accepts the name\n only when neurolink.conversationExists({ sessionId, userId }) is true for\n the verified user. Otherwise it mints a new voice-<uuid>.\n\nWhat is stored. Each finished exchange becomes a user message and an\nassistant message with the ids ${turnId}:user and ${turnId}:assistant, where\nturnId is the realtime session's assistant message id, and\nmetadata.modality: \"voice\".","hierarchy":{"lvl0":"Features","lvl1":"LiveKit Voice Agent — Real-Time Voice over WebRTC","lvl2":"Remembering a realtime call in the user's own conversation","lvl3":""}},
|
|
3679
3679
|
{"objectID":"2b5f572d39aad7e08324d267d06f5dcbc4e90af9c0c31f1d536c84cc4243c5c1","title":"Realtime Speech-to-Speech Backends (Gemini Live and xAI Grok Voice)","url":"/docs/features/livekit-voice-agent#realtime-speech-to-speech-backends-gemini-live-and-xai-grok-voice","content":"defineRealtimeVoiceAgent runs one realtime model that does speech-to-text,\nreasoning, text-to-speech and turn detection over a single connection. Gemini\nLive on Vertex is the default. xAI's Grok Voice is a second backend, reached\nthrough LiveKit's xAI plugin.","hierarchy":{"lvl0":"Features","lvl1":"LiveKit Voice Agent — Real-Time Voice over WebRTC","lvl2":"Realtime Speech-to-Speech Backends (Gemini Live and xAI Grok Voice)","lvl3":""}},
|
|
3680
3680
|
{"objectID":"3ea0de3512723dda2eba65763b09a6e3eff2ded8a4d0aa2fa41581d46b88e6c7","title":"Status","url":"/docs/features/livekit-voice-agent#status","content":"Tested against a stub WebSocket server only. The stub listens on\n 127.0.0.1. It shows what the LiveKit xAI plugin sends to whatever it is\n pointed at, and how this package reads the OpenAI-style events it is given.\n It shows nothing about how xAI answers.\nNo request has been made to xAI by this project. No xAI key was available\n when the backend was written.\nNot established here: behaviour against the live service, latency,\n accuracy, and every xAI benchmark. Nothing in this section says the xai\n backend works with the real service. Treat it as untested against xAI until\n someone runs a call with a real key.","hierarchy":{"lvl0":"Features","lvl1":"LiveKit Voice Agent — Real-Time Voice over WebRTC","lvl2":"Status","lvl3":""}},
|
|
3681
|
-
{"objectID":"6676179c44d375115fe98161f9377ba40357b82eebf4a99b7b330ede9721e8c3","title":"Choosing the backend","url":"/docs/features/livekit-voice-agent#choosing-the-backend","content":"| Variable | Backend | Meaning
|
|
3681
|
+
{"objectID":"6676179c44d375115fe98161f9377ba40357b82eebf4a99b7b330ede9721e8c3","title":"Choosing the backend","url":"/docs/features/livekit-voice-agent#choosing-the-backend","content":"| Variable | Backend | Meaning |\n| --------------------------------------------------------------------------------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| VOICE_REALTIME_BACKEND | both | gemini or xai. Any other value throws at startup, naming the variable and the two choices and repeating nothing from the environment.","hierarchy":{"lvl0":"Features","lvl1":"LiveKit Voice Agent — Real-Time Voice over WebRTC","lvl2":"Choosing the backend","lvl3":""}},
|
|
3682
3682
|
{"objectID":"632f3752058fa7c7c6d48b02af1e8d5212b7daa55001e8cc931227404009278f","title":"Dependencies","url":"/docs/features/livekit-voice-agent#dependencies","content":"The xai backend needs @livekit/agents-plugin-xai and\n@livekit/agents-plugin-openai. Both are optional dependencies of this package,\nso they are installed with its other optional dependencies (an install that\nomits optional dependencies has to add them by hand), and both resolved to\n1.4.6 in its lockfile. The xAI plugin asks for @livekit/agents 1.4.6 exactly,\nwhich is why that package moved from 1.4.5 to 1.4.6 with it. The options the\nGemini backend builds are unchanged by the move, but no live Gemini call was\nrun after it.","hierarchy":{"lvl0":"Features","lvl1":"LiveKit Voice Agent — Real-Time Voice over WebRTC","lvl2":"Dependencies","lvl3":""}},
|
|
3683
3683
|
{"objectID":"a890643483526cae888fdc083535c83d5313ddef29c4a24f6d2771e94dcf3f71","title":"What the xai backend does","url":"/docs/features/livekit-voice-agent#what-the-xai-backend-does","content":"The LiveKit xAI plugin extends the OpenAI realtime model. Against a stub it\nconnects to <base URL>/realtime?model=<id> with Authorization: Bearer\n<XAI_API_KEY> (the key is never put in the URL) and its first event is a\nsession.update that carries the model, the voice, output_modalities:\n[\"audio\"], server-side voice-activity detection (threshold 0.5, 300 ms prefix\npadding, 200 ms silence, response creation and interruption on) and an input\ntranscription setting. The plugin's default endpoint is wss://api.x.ai/v1.\n\nTwo things in that list are the plugin's and are not verified against xAI:\nthe plugin sends gpt-4o-mini-transcribe, an OpenAI model name, as the input\n transcription model;\nthe plugin's own default model is grok-voice-think-fast-1.0. NeuroLink\n defaults to grok-voice-3.0, the flagship id xAI's documentation lists\n (together with the alias grok-voice-latest and a deprecated\n grok-voice-2.0). The plugin passes the id through; whether the service\n accepts it through the plugin has not been tested.\n\nA missing key stops the call before it connects. If XAI_API_KEY is unset\nthe plugin falls back to OPENAI_API_KEY, and a stub server showed that\nfallback sending the OpenAI key as the Bearer token to the configured xAI URL.\n(An empty value does not fall back: the plugin throws its own OpenAI API key is\nrequired error. A whitespace-only value is sent as the key.) NeuroLink\ntherefore refuses an unset, empty or whitespace-only key: it throws\nXAI_API_KEY is not set ... when the agent starts and again in\ncreateRealtimeLlm, and no connection is made.","hierarchy":{"lvl0":"Features","lvl1":"LiveKit Voice Agent — Real-Time Voice over WebRTC","lvl2":"What the xai backend does","lvl3":""}},
|
|
3684
3684
|
{"objectID":"b4b0a14667e072deb333f9771c062361a617e33da9a0142087c0ba9502d3e4f7","title":"How each part of the agent behaves on xai","url":"/docs/features/livekit-voice-agent#how-each-part-of-the-agent-behaves-on-xai","content":"| Part | On xai |\n| ------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Vertex ADC and GEMINI_API_KEY clearing | Not run. The xai backend never touches the Gemini environment. |\n| Data-channel event bridge, HITL, room context | Unchanged. They work on the LiveKit room and the agent session, not on a model. |\n| Session events (user transcript, assistant text, turn done, usage) | Unchanged code. Against a stub, OpenAI-style transcript and usage events reach the shapes the agent reads. |\n| MCP tool bridge and schema sanitizer | Unchanged. The sanitizer produces plain JSON Schema (the OpenAI-style API takes full JSON Schema), and the plugin forwards it as is. Keeping it is the safer choice: it drops $ref and unions that xAI has not been tried with. |\n| Conversation memory (recording and seeding) | Recording is shared by both backends.","hierarchy":{"lvl0":"Features","lvl1":"LiveKit Voice Agent — Real-Time Voice over WebRTC","lvl2":"How each part of the agent behaves on xai","lvl3":""}},
|
|
3685
3685
|
{"objectID":"f2c4f00431a110b4ec6b67653e157a21d79cc3d52751253260a13758eec90e66","title":"Still unknown without a real key","url":"/docs/features/livekit-voice-agent#still-unknown-without-a-real-key","content":"Whether xAI accepts the model ids above through the plugin; whether it accepts\nthe input transcription setting; whether it accepts the sanitized tool schemas\nand underscore tool names; the event names and ordering xAI really sends (the\nplugin line pinned here, 1.4.6, predates later xAI-specific handling in newer\nplugin releases); whether the seeded history is accepted; and how interruption,\ntruncation and tool calls behave. A live smoke test with a key supplied by the\nowner is the missing step.","hierarchy":{"lvl0":"Features","lvl1":"LiveKit Voice Agent — Real-Time Voice over WebRTC","lvl2":"Still unknown without a real key","lvl3":""}},
|
|
3686
|
-
{"objectID":"9eb38592a55bd3da33ee8a936b4648d18645a49909579f1fccb19844c8263ac7","title":"Troubleshooting","url":"/docs/features/livekit-voice-agent#troubleshooting","content":"VOICE_REALTIME_BACKEND must be \"gemini\" or \"xai\": fix the value, or unset it\n for gemini.\nXAI_API_KEY is not set: set it in the worker's environment. The check also\n rejects a whitespace-only value.\nXAI_REALTIME_BASE_URL must be a ws:// or wss:// URL: use a WebSocket URL,\n not an https:// one.\nA call that will not start on the xai backend: confirm that VOICE_LIVE_MODEL\n and VOICE_S2S_VOICE hold xAI values and not leftover Gemini ones, since both\n variables are shared.","hierarchy":{"lvl0":"Features","lvl1":"LiveKit Voice Agent — Real-Time Voice over WebRTC","lvl2":"Troubleshooting","lvl3":""}},
|
|
3686
|
+
{"objectID":"9eb38592a55bd3da33ee8a936b4648d18645a49909579f1fccb19844c8263ac7","title":"Troubleshooting","url":"/docs/features/livekit-voice-agent#troubleshooting","content":"VOICE_REALTIME_BACKEND must be \"gemini\" or \"xai\": fix the value, or unset it\n for gemini.\nXAI_API_KEY is not set: set it in the worker's environment. The check also\n rejects a whitespace-only value.\nXAI_REALTIME_BASE_URL must be a ws:// or wss:// URL: use a WebSocket URL,\n not an https:// one.\nXAI_REALTIME_BASE_URL is a ws:// URL to a host other than localhost, ... (or\n the same for xaiBaseURL): the URL would send XAI_API_KEY unencrypted to a\n host that is not loopback. Use a wss:// URL. Only if the path to that host is\n one you trust, set XAI_REALTIME_ALLOW_INSECURE=true, knowing the key then\n travels in cleartext.\nA call that will not start on the xai backend: confirm that VOICE_LIVE_MODEL\n and VOICE_S2S_VOICE hold xAI values and not leftover Gemini ones, since both\n variables are shared.","hierarchy":{"lvl0":"Features","lvl1":"LiveKit Voice Agent — Real-Time Voice over WebRTC","lvl2":"Troubleshooting","lvl3":""}},
|
|
3687
3687
|
{"objectID":"7ffe7e32a7c2baea6c491d743617448eb70eeb4afe439960050efdc3ead18c48","title":"Implementation Plan","url":"/docs/features/livekit-voice-agent#implementation-plan","content":"The integration is built and validated in phases. Each phase is independently testable.","hierarchy":{"lvl0":"Features","lvl1":"LiveKit Voice Agent — Real-Time Voice over WebRTC","lvl2":"Implementation Plan","lvl3":""}},
|
|
3688
3688
|
{"objectID":"d4c9885eea3272e250fa1a0dbc1af9503b1a24f0217a82dd0c30d93bf6c5df31","title":"Phase 0 — Console-mode spike (no infrastructure)","url":"/docs/features/livekit-voice-agent#phase-0-console-mode-spike-no-infrastructure","content":"Build a minimal agent (Silero VAD + Deepgram STT + ElevenLabs TTS + llmNode → neurolink.stream()) and run it in console mode using the host machine's mic/speakers. Validates the NeuroLink brain loop, conversationId history, and a tool call — with no LiveKit server and no browser. Requires only STT/TTS and LLM credentials.","hierarchy":{"lvl0":"Features","lvl1":"LiveKit Voice Agent — Real-Time Voice over WebRTC","lvl2":"Phase 0 — Console-mode spike (no infrastructure)","lvl3":""}},
|
|
3689
3689
|
{"objectID":"9dddf98f952af643b5357bdefbcb5554a3ff2d9c33a16b0c432243fd68db5569","title":"Phase 1 — NeuroLink LiveKit module","url":"/docs/features/livekit-voice-agent#phase-1-neurolink-livekit-module","content":"Implement brain.ts, voiceAgent.ts, voiceAgentWorker.ts, tokens.ts, config.ts; add the @juspay/neurolink/livekit export and optional/peer dependencies. The worker factory accepts an external NeuroLink instance so a host application's registered tools are available. Wire abort-on-interrupt. Verify build, type-check, and lint.","hierarchy":{"lvl0":"Features","lvl1":"LiveKit Voice Agent — Real-Time Voice over WebRTC","lvl2":"Phase 1 — NeuroLink LiveKit module","lvl3":""}},
|
|
@@ -3798,7 +3798,7 @@
|
|
|
3798
3798
|
{"objectID":"d72275c9e7abbf35d2de393371870aaa3be8bbdd91700d6b40b764f021b98ee7","title":"Testing","url":"/docs/features/mcp-enhancements#testing","content":"The MCP enhancements include a comprehensive continuous test suite covering all 14 modules.","hierarchy":{"lvl0":"Features","lvl1":"MCP Enhancements","lvl2":"Testing","lvl3":""}},
|
|
3799
3799
|
{"objectID":"b7897e60e94294066b1f6cc7bf6826a9775fceed2d09959e6ddfaaea03c5e278","title":"Environment Variables","url":"/docs/features/mcp-enhancements#environment-variables","content":"| Variable | Description | Default |\n| --------------- | ---------------------------------------- | ---------------------- |\n| TEST_PROVIDER | AI provider to use for integration tests | vertex |\n| TEST_MODEL | Model name override | Provider default model |","hierarchy":{"lvl0":"Features","lvl1":"MCP Enhancements","lvl2":"Environment Variables","lvl3":""}},
|
|
3800
3800
|
{"objectID":"41243c9cf6b59f63bf30d887f10b3be94d6ab2926fb59964b17b25292ef90e89","title":"Test Coverage","url":"/docs/features/mcp-enhancements#test-coverage","content":"The suite contains 44 test functions with 172+ assertions organized across 9 parts:\n\n| Part | Module | Tests | Focus |\n| ---- | --------------------------------- | ----- | ----------------------------------------------------- |\n| 1 | Tool Router | 5 | Strategies, registration, affinity, health, events |\n| 2 | Tool Cache | 5 | Set/get, TTL, eviction, invalidation, stats |\n| 3 | Request Batcher | 5 | Batching, flush, drain, server grouping, events |\n| 4 | Tool Annotations | 5 | Inference, safety levels, validation, merge, filter |\n| 5 | Tool Converter | 5 | Bidirectional conversion, batch, function, sanitize |\n| 6 | Tool Integration & Middleware | 5 | Middleware chain, elicitation, timeout, retry, custom |\n| 7 | Enhanced Discovery & Multi-Server | 5 | Search, safety filter, server groups, namespacing |\n| 8 | Server Base, Exposure, Registry | 5 | Custom server, agent/workflow exposure, registry |\n| 9 | Server Capabilities & Elicitation | 4 | Resources, prompts, subscriptions, elicitation types |","hierarchy":{"lvl0":"Features","lvl1":"MCP Enhancements","lvl2":"Test Coverage","lvl3":""}},
|
|
3801
|
-
{"objectID":"1f250cb2aa3fc19be6b69bf1883a325f5979f48d35c830dd3b09590df31fdd27","title":"MCP Tools Ecosystem - Built-in Tools + Any MCP Server","url":"/docs/features/mcp-tools-showcase","content":"MCP Tools Ecosystem: Built-in Tools + Any MCP Server\n\nSince: v7.0.0 | Status: Production Ready | MCP Version: 2024-11-05\n\nOverview\n\nNeuroLink's Model Context Protocol (MCP) integration provides a universal plugin system that transforms the SDK from a simple AI interface into a complete AI development platform. With 6 built-in core tools and the ability to connect any community MCP server (58+ cataloged in the server directory), you can extend AI capabilities to interact with filesystems, databases, APIs, cloud services, and custom enterprise systems.\n\nWhat is MCP?\n\nThe Model Context Protocol is an open standard (like USB-C for AI) that enables AI models to securely interact with external tools and data sources through a unified interface. Think of it as:\nFor Developers: A standardized way to connect AI to any external system\nFor AI Models: A tool registry with discoverable, executable functions\nFor Enterprises: A controlled, auditable way to extend AI capabilities\n\nWhy MCP Matters\n\n| Traditional Approach | MCP Approach | Benefit |\n| --------------------------------------- | --------------------------------- | ----------------------- |\n| Custom tool integrations per provider | One MCP tool works everywhere | 10x faster integration |\n| Manual tool discovery and configuration | Automatic tool registry | Zero-config tool usage |\n| Provider-specific tool formats | Universal JSON-RPC protocol | Provider portability |\n| Limited to SDK-defined tools | any community MCP server + custom | Unlimited extensibility |\n| Static tool set | Dynamic runtime addition | Adapt to changing needs |\n\nNeuroLink's Deep MCP Integration\n\nFactory-First Architecture: MCP tools work internally while users see simple factory methods:\n\nKey Features:\n99% Lighthouse Compatible: Existing MCP tools work with minimal changes\nDynamic Server Management: Add/remove MCP servers programmatically\nRich Context: 15+ fields including session, user, permissions, metadata\nPerformance Optimized: 0-11ms tool execution (target: \\<100ms)\nEnterprise Grade: Comprehensive error handling, audit logging, security\n\nQuick Start\n\nBuilt-in Core Tools (6)\n\nNeuroLink ships with 6 essential tools that require zero configuration:\ngetCurrentTime\n\nPurpose: Real-time clock with timezone support\n\nAuto-Available: Yes (always enabled)\n\nUse Cases:\nTimestamp generation\nTimezone conversions\nScheduling and reminders\nTime-based calculations\n\nExample:\n\nTool Schema:\nreadFile\n\nPurpose: Read file contents from filesystem\n\nAuto-Available: Yes (with filesystem access)\n\nUse Cases:\nDocument analysis\nCode review\nConfiguration reading\nLog file processing\n\nExample:\n\nTool Schema:\nwriteFile\n\nPurpose: Write content to filesystem\n\nAuto-Available: Yes (with HITL approval recommended)\n\nUse Cases:\nGenerated content saving\nReport creation\nConfiguration updates\nCode generation output\n\nExample:\n\nTool Schema:\nlistDirectory\n\nPurpose: List files and directories\n\nAuto-Available: Yes (with filesystem access)\n\nUse Cases:\nProject structure analysis\nFile discovery\nDirectory traversal\nAsset inventory\n\nExample:\n\nTool Schema:\n\nFile tool roots\n\nreadFile, writeFile, listDirectory and analyzeCSV only touch paths inside their roots. By default that is the process working directory. Configure other roots per instance, and narrow them per call:\nPrecedence: per-call toolRoots, then instance tools.fileRoots, then the NEUROLINK_TOOL_ROOTS environment variable (a :-separated list; ; on Windows). A per-call root outside the instance roots is rejected, so a server that forwards caller options cannot widen file access.\nResolution: each root must be an existing directory and is resolved through symlinks once, when the request starts. A missing root rejects the call before any model request. fileRoots: [] denies all file access.\nContainment: target paths are resolved through symlinks too, and the prefix check is separator-bounded, so neither <root>/link → /etc nor a sibling such as /srv/workspace-evil gets through. A symlink that does not resolve is refused. On Linux and macOS, reads, writes and CSV parses open the checked path with O_NOFOLLOW (create mode with O_EXCL), so a link swapped in at the final path component after the check fails instead of redirecting the operation; Windows has no O_NOFOLLOW, so there only create mode carries that last-moment guarantee — the realpath check itself applies on every platform. analyzeCSV also refuses anything that is not a regular file (a FIFO, a device, a directory). listDirectory reports a symlink entry as type: \"symlink\" with the link's own metadata, never its target's. One race is not closed on any platform: a directory component swapped for a symlink between the check and the open is followed, because Node has no openat-style walk and O_NOFOLLOW covers only the final component. That needs an attacker writing
|
|
3801
|
+
{"objectID":"1f250cb2aa3fc19be6b69bf1883a325f5979f48d35c830dd3b09590df31fdd27","title":"MCP Tools Ecosystem - Built-in Tools + Any MCP Server","url":"/docs/features/mcp-tools-showcase","content":"MCP Tools Ecosystem: Built-in Tools + Any MCP Server\n\nSince: v7.0.0 | Status: Production Ready | MCP Version: 2024-11-05\n\nOverview\n\nNeuroLink's Model Context Protocol (MCP) integration provides a universal plugin system that transforms the SDK from a simple AI interface into a complete AI development platform. With 6 built-in core tools and the ability to connect any community MCP server (58+ cataloged in the server directory), you can extend AI capabilities to interact with filesystems, databases, APIs, cloud services, and custom enterprise systems.\n\nWhat is MCP?\n\nThe Model Context Protocol is an open standard (like USB-C for AI) that enables AI models to securely interact with external tools and data sources through a unified interface. Think of it as:\nFor Developers: A standardized way to connect AI to any external system\nFor AI Models: A tool registry with discoverable, executable functions\nFor Enterprises: A controlled, auditable way to extend AI capabilities\n\nWhy MCP Matters\n\n| Traditional Approach | MCP Approach | Benefit |\n| --------------------------------------- | --------------------------------- | ----------------------- |\n| Custom tool integrations per provider | One MCP tool works everywhere | 10x faster integration |\n| Manual tool discovery and configuration | Automatic tool registry | Zero-config tool usage |\n| Provider-specific tool formats | Universal JSON-RPC protocol | Provider portability |\n| Limited to SDK-defined tools | any community MCP server + custom | Unlimited extensibility |\n| Static tool set | Dynamic runtime addition | Adapt to changing needs |\n\nNeuroLink's Deep MCP Integration\n\nFactory-First Architecture: MCP tools work internally while users see simple factory methods:\n\nKey Features:\n99% Lighthouse Compatible: Existing MCP tools work with minimal changes\nDynamic Server Management: Add/remove MCP servers programmatically\nRich Context: 15+ fields including session, user, permissions, metadata\nPerformance Optimized: 0-11ms tool execution (target: \\<100ms)\nEnterprise Grade: Comprehensive error handling, audit logging, security\n\nQuick Start\n\nBuilt-in Core Tools (6)\n\nNeuroLink ships with 6 essential tools that require zero configuration:\ngetCurrentTime\n\nPurpose: Real-time clock with timezone support\n\nAuto-Available: Yes (always enabled)\n\nUse Cases:\nTimestamp generation\nTimezone conversions\nScheduling and reminders\nTime-based calculations\n\nExample:\n\nTool Schema:\nreadFile\n\nPurpose: Read file contents from filesystem\n\nAuto-Available: Yes (with filesystem access)\n\nUse Cases:\nDocument analysis\nCode review\nConfiguration reading\nLog file processing\n\nExample:\n\nTool Schema:\nwriteFile\n\nPurpose: Write content to filesystem\n\nAuto-Available: Yes (with HITL approval recommended)\n\nUse Cases:\nGenerated content saving\nReport creation\nConfiguration updates\nCode generation output\n\nExample:\n\nSee the HITL guide for the approval flow.\n\nTool Schema:\nlistDirectory\n\nPurpose: List files and directories\n\nAuto-Available: Yes (with filesystem access)\n\nUse Cases:\nProject structure analysis\nFile discovery\nDirectory traversal\nAsset inventory\n\nExample:\n\nTool Schema:\n\nFile tool roots\n\nreadFile, writeFile, listDirectory and analyzeCSV only touch paths inside their roots. By default that is the process working directory. Configure other roots per instance, and narrow them per call:\nPrecedence: per-call toolRoots, then instance tools.fileRoots, then the NEUROLINK_TOOL_ROOTS environment variable (a :-separated list; ; on Windows). A per-call root outside the instance roots is rejected, so a server that forwards caller options cannot widen file access.\nResolution: each root must be an existing directory and is resolved through symlinks once, when the request starts. A missing root rejects the call before any model request. fileRoots: [] denies all file access.\nContainment: target paths are resolved through symlinks too, and the prefix check is separator-bounded, so neither <root>/link → /etc nor a sibling such as /srv/workspace-evil gets through. A symlink that does not resolve is refused. On Linux and macOS, reads, writes and CSV parses open the checked path with O_NOFOLLOW (create mode with O_EXCL), so a link swapped in at the final path component after the check fails instead of redirecting the operation; Windows has no O_NOFOLLOW, so there only create mode carries that last-moment guarantee — the realpath check itself applies on every platform. analyzeCSV also refuses anything that is not a regular file (a FIFO, a device, a directory). listDirectory reports a symlink entry as type: \"symlink\" with the link's own metadata, never its target's. One race is not closed on any platform: a directory component swapped for a symlink between the check and the open is followed, because Node has no openat-style walk and O_NOFOLLOW covers only the final component. That needs an attacker writing","hierarchy":{"lvl0":"Features","lvl1":"MCP Tools Ecosystem - Built-in Tools + Any MCP Server","lvl2":"","lvl3":""}},
|
|
3802
3802
|
{"objectID":"d77f56e2563e08643ae18e7fea4540e640fdcdc7720690210a1b9c5c9a651cc2","title":"MCP Tools Ecosystem: Built-in Tools + Any MCP Server","url":"/docs/features/mcp-tools-showcase#mcp-tools-ecosystem-built-in-tools-any-mcp-server","content":"Since: v7.0.0 | Status: Production Ready | MCP Version: 2024-11-05","hierarchy":{"lvl0":"Features","lvl1":"MCP Tools Ecosystem - Built-in Tools + Any MCP Server","lvl2":"MCP Tools Ecosystem: Built-in Tools + Any MCP Server","lvl3":""}},
|
|
3803
3803
|
{"objectID":"a2f242bd22bfb6fb857e7dc60825acc010064d863f53ef5ec236dbb81f1a6a88","title":"Overview","url":"/docs/features/mcp-tools-showcase#overview","content":"NeuroLink's Model Context Protocol (MCP) integration provides a universal plugin system that transforms the SDK from a simple AI interface into a complete AI development platform. With 6 built-in core tools and the ability to connect any community MCP server (58+ cataloged in the server directory), you can extend AI capabilities to interact with filesystems, databases, APIs, cloud services, and custom enterprise systems.","hierarchy":{"lvl0":"Features","lvl1":"MCP Tools Ecosystem - Built-in Tools + Any MCP Server","lvl2":"Overview","lvl3":""}},
|
|
3804
3804
|
{"objectID":"6baec5fd689dfd70d9280b9efedecb44456fddef2a81d409f734d582aa0e856b","title":"What is MCP?","url":"/docs/features/mcp-tools-showcase#what-is-mcp","content":"The Model Context Protocol is an open standard (like USB-C for AI) that enables AI models to securely interact with external tools and data sources through a unified interface. Think of it as:\nFor Developers: A standardized way to connect AI to any external system\nFor AI Models: A tool registry with discoverable, executable functions\nFor Enterprises: A controlled, auditable way to extend AI capabilities","hierarchy":{"lvl0":"Features","lvl1":"MCP Tools Ecosystem - Built-in Tools + Any MCP Server","lvl2":"What is MCP?","lvl3":""}},
|
|
@@ -3807,7 +3807,7 @@
|
|
|
3807
3807
|
{"objectID":"5dfaff379ed5f587fd940c02c6fef0a40290ac8c69c7a21afc28c2b4b38bf06a","title":"Built-in Core Tools (6)","url":"/docs/features/mcp-tools-showcase#built-in-core-tools-6","content":"NeuroLink ships with 6 essential tools that require zero configuration:","hierarchy":{"lvl0":"Features","lvl1":"MCP Tools Ecosystem - Built-in Tools + Any MCP Server","lvl2":"Built-in Core Tools (6)","lvl3":""}},
|
|
3808
3808
|
{"objectID":"ef6950cf75d93d830aa0383bb531987247e826d8de7903b4d48e5a4ab550cb86","title":"1. getCurrentTime","url":"/docs/features/mcp-tools-showcase#1-getcurrenttime","content":"Purpose: Real-time clock with timezone support\n\nAuto-Available: Yes (always enabled)\n\nUse Cases:\nTimestamp generation\nTimezone conversions\nScheduling and reminders\nTime-based calculations\n\nExample:\n\nTool Schema:","hierarchy":{"lvl0":"Features","lvl1":"MCP Tools Ecosystem - Built-in Tools + Any MCP Server","lvl2":"1. getCurrentTime","lvl3":""}},
|
|
3809
3809
|
{"objectID":"0415eee591ea3bb5e8bb01bdcea857d051be08a17783ada2a3f2f3e8c9abfbac","title":"2. readFile","url":"/docs/features/mcp-tools-showcase#2-readfile","content":"Purpose: Read file contents from filesystem\n\nAuto-Available: Yes (with filesystem access)\n\nUse Cases:\nDocument analysis\nCode review\nConfiguration reading\nLog file processing\n\nExample:\n\nTool Schema:","hierarchy":{"lvl0":"Features","lvl1":"MCP Tools Ecosystem - Built-in Tools + Any MCP Server","lvl2":"2. readFile","lvl3":""}},
|
|
3810
|
-
{"objectID":"0cb0c9165418d9251e667c3cc9ffab1dc09a25dbb4360b6317d3e4fe85bae458","title":"3. writeFile","url":"/docs/features/mcp-tools-showcase#3-writefile","content":"Purpose: Write content to filesystem\n\nAuto-Available: Yes (with HITL approval recommended)\n\nUse Cases:\nGenerated content saving\nReport creation\nConfiguration updates\nCode generation output\n\nExample:\n\nTool Schema:","hierarchy":{"lvl0":"Features","lvl1":"MCP Tools Ecosystem - Built-in Tools + Any MCP Server","lvl2":"3. writeFile","lvl3":""}},
|
|
3810
|
+
{"objectID":"0cb0c9165418d9251e667c3cc9ffab1dc09a25dbb4360b6317d3e4fe85bae458","title":"3. writeFile","url":"/docs/features/mcp-tools-showcase#3-writefile","content":"Purpose: Write content to filesystem\n\nAuto-Available: Yes (with HITL approval recommended)\n\nUse Cases:\nGenerated content saving\nReport creation\nConfiguration updates\nCode generation output\n\nExample:\n\nSee the HITL guide for the approval flow.\n\nTool Schema:","hierarchy":{"lvl0":"Features","lvl1":"MCP Tools Ecosystem - Built-in Tools + Any MCP Server","lvl2":"3. writeFile","lvl3":""}},
|
|
3811
3811
|
{"objectID":"c27259323275ac78a5c96f275cba4c67336b351f10d6a5990acd9ecb33c015f4","title":"4. listDirectory","url":"/docs/features/mcp-tools-showcase#4-listdirectory","content":"Purpose: List files and directories\n\nAuto-Available: Yes (with filesystem access)\n\nUse Cases:\nProject structure analysis\nFile discovery\nDirectory traversal\nAsset inventory\n\nExample:\n\nTool Schema:","hierarchy":{"lvl0":"Features","lvl1":"MCP Tools Ecosystem - Built-in Tools + Any MCP Server","lvl2":"4. listDirectory","lvl3":""}},
|
|
3812
3812
|
{"objectID":"ea372be739ffab9dc37c0fce82830b21566da728269b630501d0755b353a2491","title":"File tool roots","url":"/docs/features/mcp-tools-showcase#file-tool-roots","content":"readFile, writeFile, listDirectory and analyzeCSV only touch paths inside their roots. By default that is the process working directory. Configure other roots per instance, and narrow them per call:\nPrecedence: per-call toolRoots, then instance tools.fileRoots, then the NEUROLINK_TOOL_ROOTS environment variable (a :-separated list; ; on Windows). A per-call root outside the instance roots is rejected, so a server that forwards caller options cannot widen file access.\nResolution: each root must be an existing directory and is resolved through symlinks once, when the request starts. A missing root rejects the call before any model request. fileRoots: [] denies all file access.\nContainment: target paths are resolved through symlinks too, and the prefix check is separator-bounded, so neither <root>/link → /etc nor a sibling such as /srv/workspace-evil gets through. A symlink that does not resolve is refused. On Linux and macOS, reads, writes and CSV parses open the checked path with O_NOFOLLOW (create mode with O_EXCL), so a link swapped in at the final path component after the check fails instead of redirecting the operation; Windows has no O_NOFOLLOW, so there only create mode carries that last-moment guarantee — the realpath check itself applies on every platform. analyzeCSV also refuses anything that is not a regular file (a FIFO, a device, a directory). listDirectory reports a symlink entry as type: \"symlink\" with the link's own metadata, never its target's. One race is not closed on any platform: a directory component swapped for a symlink between the check and the open is followed, because Node has no openat-style walk and O_NOFOLLOW covers only the final component. That needs an attacker writing into the workspace while the agent runs; if that is your threat model, isolate the process at the OS level rather than relying on this check alone. Relative paths resolve against the first root; a root of / contains every absolute path.","hierarchy":{"lvl0":"Features","lvl1":"MCP Tools Ecosystem - Built-in Tools + Any MCP Server","lvl2":"File tool roots","lvl3":""}},
|
|
3813
3813
|
{"objectID":"ad698242f08b12159d85a199152ed3aa7035bbde7fe3ba613977b8cf5371fbbd","title":"5. calculateMath","url":"/docs/features/mcp-tools-showcase#5-calculatemath","content":"Purpose: Complex mathematical calculations\n\nAuto-Available: Yes (always enabled)\n\nUse Cases:\nFinancial calculations\nStatistical analysis\nUnit conversions\nScientific computations\n\nExample:\n\nTool Schema:","hierarchy":{"lvl0":"Features","lvl1":"MCP Tools Ecosystem - Built-in Tools + Any MCP Server","lvl2":"5. calculateMath","lvl3":""}},
|
|
@@ -6236,7 +6236,7 @@
|
|
|
6236
6236
|
{"objectID":"6337b6964b5ebadd9610f93633594d912ee39f49c2ef5e1683214dce45a1aee3","title":"🧠 Decision-Only Providers","url":"/docs/getting-started/providers#decision-only-providers","content":"The providers that serve decide rather than generate/stream:\nTypeSafe, Laya, XOR,\nSubQ, Perplexity, Cloudflare Clef,\nOpenAI Decisions and ScaleDown. Each returns typed boolean/choice/score\nanswers and emits no text, so none appears in generation fallback chains or the\nhealth sweep.","hierarchy":{"lvl0":"Getting Started","lvl1":"AI Provider Guides","lvl2":"🧠 Decision-Only Providers","lvl3":""}},
|
|
6237
6237
|
{"objectID":"50860d1f7a27dbe3ad7452ad7079ea437658db372b97081d0a509429369cacc6","title":"[TypeSafe (Jev)](/docs/getting-started/providers/typesafe)","url":"/docs/getting-started/providers#typesafe-jevdocsgetting-startedproviderstypesafe","content":"Typed, calibrated judgments instead of text\n🎯 boolean / choice / score answers, each with a calibrated confidence\n⚡ Latency flat in question count — 1 question ~393 ms, 400 questions ~465 ms\n💰 ~$0.00002 per decision (~$0.042/M input, output billed at zero)\n🔌 Two transports: TypeSafe direct, or the Vercel AI Gateway\n🛡️ Fails open — with no decision provider configured, every consumer behaves exactly as before\n🔑 API key from console.typesafe.ai/keys\n🔄 Aliases: jev, typesafe-ai\n\nSetup Guide →","hierarchy":{"lvl0":"Getting Started","lvl1":"AI Provider Guides","lvl2":"[TypeSafe (Jev)](/docs/getting-started/providers/typesafe)","lvl3":""}},
|
|
6238
6238
|
{"objectID":"43b838d60f2794ce46361196d6fc8a708b3a301398dd55f2c8015d567aa21c2c","title":"[Laya](/docs/getting-started/providers/laya)","url":"/docs/getting-started/providers#layadocsgetting-startedproviderslaya","content":"Open-weights decision provider — the same typed boolean/choice/score answers as Jev, from Convai Innovations' Apache-2.0 checkpoints, at a Laya server or LiteLLM proxy route you configure\n🧭 Serves decide only; built-in features use it when its key and base URL are set and neither TYPESAFE_API_KEY nor AI_GATEWAY_API_KEY is\n📏 Refuses more than ~768 tokens of state (320 on english) before any network call, since its encoders read only 1,024 (512)\n🔌 No built-in endpoint: LAYA_BASE_URL (or credentials.laya.baseURL) names a Laya server or a LiteLLM pass-through route to one\n🔑 LAYA_API_KEY is the key that endpoint accepts; on LiteLLM, the route must be in the key's Allowed Routes\n\nSetup Guide →","hierarchy":{"lvl0":"Getting Started","lvl1":"AI Provider Guides","lvl2":"[Laya](/docs/getting-started/providers/laya)","lvl3":""}},
|
|
6239
|
-
{"objectID":"613cbeca5e8fa0bbe765b8db9ec4ed2ff76a913dd45b8dab5e2de06a6e5f19ff","title":"[XOR](/docs/getting-started/providers/xor)","url":"/docs/getting-started/providers#xordocsgetting-startedprovidersxor","content":"Open-weights decision provider — the same typed boolean/choice/score answers as Jev, from xor-
|
|
6239
|
+
{"objectID":"613cbeca5e8fa0bbe765b8db9ec4ed2ff76a913dd45b8dab5e2de06a6e5f19ff","title":"[XOR](/docs/getting-started/providers/xor)","url":"/docs/getting-started/providers#xordocsgetting-startedprovidersxor","content":"Open-weights decision provider — the same typed boolean/choice/score answers as Jev, from xor-latest (text) and xor-omni (images and video), Juspay's Apache-2.0 model, at a deployment or LiteLLM proxy route you configure\n🧭 Serves decide only; built-in features use it when its key and base URL are set and no TypeSafe key, no AI_GATEWAY_API_KEY and no Laya key and base URL is\n🖼️ Takes up to 8 images or one video with a decision on xor-omni, as a Buffer, a local file path or a data: URL; TypeSafe and Laya refuse media before any request, and Perplexity refuses a video\n📏 Refuses more than about 200,000 estimated tokens of state before any network call\n🔌 No built-in endpoint: XOR_BASE_URL (or credentials.xor.baseURL) is the origin of a deployment or of a LiteLLM route to one; requests go to <base URL>/v1/decisions\n🔑 XOR_API_KEY is the key that endpoint accepts; on LiteLLM, the key's team must allow xor-latest (and xor-omni for media)\n📦 Weights and setup: huggingface.co/juspay/xor\n\nSetup Guide →","hierarchy":{"lvl0":"Getting Started","lvl1":"AI Provider Guides","lvl2":"[XOR](/docs/getting-started/providers/xor)","lvl3":""}},
|
|
6240
6240
|
{"objectID":"9fd996aaa27fb32250d5434f0e2764d8bf348370af0e011f9e447a0fdf26e3a8","title":"[SubQ](/docs/getting-started/providers/subq)","url":"/docs/getting-started/providers#subqdocsgetting-startedproviderssubq","content":"Hosted decision provider — the same typed boolean/choice/score answers as Jev, from Subquadratic's subq-snap-preview (public preview), at https://api.subq.ai\n🧭 Serves decide only (provider id subq; the aliases subquadratic and subq-snap work too); built-in features use it when it is configured and none of TypeSafe, Laya or XOR is — it comes ahead of Perplexity and Cloudflare Clef, because its key is shared with no other provider\n🔑 SUBQ_API_KEY alone configures it (keys come from console.subq.ai, shown once); SUBQ_MODEL is optional\n🖼️ No image or video input yet: SubQ's image format is not one the decide catalog can describe, so images are refused before any request\n📏 NeuroLink reports an advisory state window (376,000 estimated tokens; SubQ's own 400 response states a maximum model length of 393,216) and enforces none; no question cap is declared\n🔌 Hosted endpoint, so no base URL is needed; SUBQ_BASE_URL (or credentials.subq.baseURL) can name another origin\n\nSetup Guide →","hierarchy":{"lvl0":"Getting Started","lvl1":"AI Provider Guides","lvl2":"[SubQ](/docs/getting-started/providers/subq)","lvl3":""}},
|
|
6241
6241
|
{"objectID":"6ab8cdd8152a0d7c9844d54b6d4eaccc905b60e79f4b28508d78d52c3cfe9470","title":"[Perplexity Decisions](/docs/getting-started/providers/perplexity-decider)","url":"/docs/getting-started/providers#perplexity-decisionsdocsgetting-startedprovidersperplexity-decider","content":"Hosted decision provider — the same typed boolean/choice/score answers as Jev, from Perplexity's pplx-decider-v1-27b, at https://api.perplexity.ai\n🧭 Serves decide only (provider id perplexity-decider, not the Sonar text provider perplexity); built-in features use it when it is configured and no TypeSafe key, no AI_GATEWAY_API_KEY, no Laya key and base URL, no XOR key and base URL and no SUBQ_API_KEY is\n🔑 PERPLEXITY_API_KEY alone configures it, and it is the same key the Perplexity text provider reads, so a key set for Sonar also lets built-in features use it when none of TypeSafe, Laya, XOR or SubQ is configured; the guide lists what each consumer then sends\n🖼️ Takes up to 8 PNG, JPEG or WebP images with a decision; no video\n💰 $0.04 per million input tokens (image tokens included), output free, as Perplexity documents it\n📏 Refuses more than about 100,000 estimated tokens of state (NeuroLink's own window; the server's ceiling is 262,144 input tokens), or more than 128 questions in a decide() call (tryDecide() splits them), before any network call. The 128-question cap, the server's token ceiling and the latency were measured on a real account in October 2026\n🔌 Hosted endpoint, so no base URL is needed; PERPLEXITY_DECIDER_BASE_URL (or credentials.perplexityDecider.baseURL) can name another origin\n\nSetup Guide →","hierarchy":{"lvl0":"Getting Started","lvl1":"AI Provider Guides","lvl2":"[Perplexity Decisions](/docs/getting-started/providers/perplexity-decider)","lvl3":""}},
|
|
6242
6242
|
{"objectID":"94b24c75db64d3f04ba04b2ee0f04ec13bc0509de0aea1fa1b3e5516dea73ea9","title":"[Cloudflare Clef](/docs/getting-started/providers/cloudflare-clef)","url":"/docs/getting-started/providers#cloudflare-clefdocsgetting-startedproviderscloudflare-clef","content":"Hosted decision provider on Workers AI — the same typed boolean/choice/score answers as Jev, from Cloudflare's clef (27B) and clef-flash (9B), at https://api.cloudflare.com/client/v4\n🧭 Serves decide only (provider id cloudflare-clef, not the Workers AI text provider cloudflare); built-in features use it only when it is configured and none of TypeSafe, Laya, XOR, SubQ or Perplexity is — it comes after those five\n🔑 CLOUDFLARE_API_KEY (Workers AI permission) and CLOUDFLARE_ACCOUNT_ID configure it, and they are the same two variables the Cloudflare text provider reads, so a pair set for that provider also lets built-in features use it when none of TypeSafe, Laya, XOR, SubQ or Perplexity is configured\n🖼️ Takes up to 4 PNG, JPEG or WebP images with a decision; no video\n💰 $0.24 per million input tokens for clef, $0.09 for clef-flash; no output price is listed on Cloudflare's pricing page\n📏 The state window changed in October 2026 (hosted service or model: unknown): until 2026-10-04 the endpoint ignored text past about 2,048 tokens without an error, and on 2026-10-07 it read states of at least 190,153 tokens (clef-flash) and 52,154 (clef); NeuroLink refuses more than 16,000 estimated tokens (digits count a token each, punctuation 0.75, emoji 3), more than 64 questions in a decide() call (tryDecide() splits them) and a request over 256,000 bytes, base64 image data included, before any network call. The state cut and the request ceiling were measured on a real account in October 2026, with the follow-up text cuts and API limits checked on both models; see the guide for the tested shapes and dates\n🔌 Hosted endpoint, so no base URL is needed; CLOUDFLARE_CLEF_BASE_URL (or credentials.cloudflareClef.baseURL) can name another base\n\nSetup Guide →","hierarchy":{"lvl0":"Getting Started","lvl1":"AI Provider Guides","lvl2":"[Cloudflare Clef](/docs/getting-started/providers/cloudflare-clef)","lvl3":""}},
|
|
@@ -7510,18 +7510,18 @@
|
|
|
7510
7510
|
{"objectID":"7bc31a9a4e8ceaa9d384ce6953e41c6991344d5affeecf269a14248d769eb2f3","title":"\"xAI account has insufficient quota\"","url":"/docs/getting-started/providers/xai#xai-account-has-insufficient-quota","content":"Top up at https://console.x.ai/.","hierarchy":{"lvl0":"Getting Started","lvl1":"xAI Grok Provider Guide","lvl2":"\"xAI account has insufficient quota\"","lvl3":""}},
|
|
7511
7511
|
{"objectID":"62c0c746ffa186a922276c344852f82e4ee3242f81c67b58a433defc4f4a4924","title":"\"Model not found\"","url":"/docs/getting-started/providers/xai#model-not-found","content":"Use one of the documented model IDs above. Custom fine-tunes are not\nexposed through the public API at this time.","hierarchy":{"lvl0":"Getting Started","lvl1":"xAI Grok Provider Guide","lvl2":"\"Model not found\"","lvl3":""}},
|
|
7512
7512
|
{"objectID":"a55b6d892c11d17b5222d76096529452815cd15809b93c491a3c484756185910","title":"See Also","url":"/docs/getting-started/providers/xai#see-also","content":"Adding a new LLM provider — internal reference for the integration pattern this provider follows\nDeepSeek Provider — sibling OpenAI-compat provider with reasoning models\nGroq Provider — sibling OpenAI-compat provider with sub-100ms inference\n\nNeed Help? Open a GitHub Discussion or issue.","hierarchy":{"lvl0":"Getting Started","lvl1":"xAI Grok Provider Guide","lvl2":"See Also","lvl3":""}},
|
|
7513
|
-
{"objectID":"03a891da2cc3529b3e4bfc042e5834454a779a2d3fa9389367ba4b3d05266871","title":"XOR Provider Guide","url":"/docs/getting-started/providers/xor","content":"XOR Provider Guide\n\nA provider of decide — the same typed boolean / choice /\nscore answers as TypeSafe's Jev and Laya, from\nJuspay's open-weights model, which also reads images and a video. It emits no\ntext at all.\n\nOverview\n\nXOR is Juspay's Apache-2.0 decision model, post-trained from Qwen3.6-35B-A3B
|
|
7513
|
+
{"objectID":"03a891da2cc3529b3e4bfc042e5834454a779a2d3fa9389367ba4b3d05266871","title":"XOR Provider Guide","url":"/docs/getting-started/providers/xor","content":"XOR Provider Guide\n\nA provider of decide — the same typed boolean / choice /\nscore answers as TypeSafe's Jev and Laya, from\nJuspay's open-weights model, which also reads images and a video. It emits no\ntext at all.\n\nOverview\n\nXOR is Juspay's Apache-2.0 decision model, post-trained from Qwen3.6-35B-A3B.\nIt is asked for by one of two aliases: xor-latest, the text model, and\nxor-omni, the multimodal one, which also reads images and a video. You send one\nstate plus named, typed questions, and optionally images or a video. XOR\nanswers every question in a single batched pass and returns a typed answer for\neach; the result's model is the id that served the request (for example\nxor-text-1), not the alias you asked for. NeuroLink calls whatever base URL\nyou configure — a deployment of the model, or a LiteLLM proxy with a route to\none. There is no built-in endpoint. The weights and setup instructions are at\nhuggingface.co/juspay/xor.\n\nKey Facts\n\n| | |\n| --------------------- | ---------------------------------------------------------------------------------------- |\n| Inference type | decide only |\n| Model | xor-latest by default, xor-omni for media; XOR_MODEL sets the name your proxy uses |\n| Media | xor-omni: up to 8 images and one video; the whole request body at most 8 MB |\n| Input window | about 200,000 estimated tokens of state |\n| Questions per request | no cap in NeuroLink; a choice or score takes 2 to 64 options |\n| Endpoint | <base URL>/v1/decisions; the base URL is required, with no default |\n| Precedence | used automatically only when TypeSafe and Laya are not configured |\n\nQuick Start\nGet an endpoint and a key\n\nRun a deployment of XOR (see\nhuggingface.co/juspay/xor), or use a\nLiteLLM proxy with a route to one. NeuroLink posts to <base URL>/v1/decisions.\nThe base URL is the origin of the deployment or of the proxy route, and a\ntrailing /v1 is accepted. It must be https://; http:// is accepted only for\nlocalhost, 127.0.0.1 and [::1], because every request carries the key and the\nstate. A deployment reachable only over plain http inside a network needs an\nhttps:// front, or a port-forward to localhost. On a LiteLLM proxy the key's team must be allowed\nthe model you ask for (xor-latest by default, xor-omni for media); otherwise the proxy answers 403\nteam_model_access_denied. A proxy may serve XOR under a name of its own: set\nXOR_MODEL to that name.\nConfigure\n\nBoth the base URL and the key are required. Set them in the environment:\n\nor in the config passed to the SDK, exactly as for any other provider. Values\npassed per call override the constructor's, which override the environment:\nUse it\n\nFrom the CLI\n\nThe CLI reads the same environment variables:\n\nImages and video\n\nXOR reads images and one video alongside the state, through the xor-omni\nmodel: name it in the request (model: \"xor-omni\", or --model xor-omni on the\nCLI), because the default, xor-latest, is the text model. TypeSafe, Laya,\nSubQ and ScaleDown do not read media, and Perplexity,\nCloudflare Clef and OpenAI Decisions\nread images but no video.\n\nFrom the CLI, pass --image <path> (repeatable) and --video <path>:\n\nThe rules:\nUp to 8 images and one video per request, in images and video.\nEach is a Buffer, a local file path or a data: URL. An http(s) URL is\n refused: NeuroLink does not fetch media for you.\nThe type comes from the bytes, not the file extension: PNG, JPEG, WebP\n and GIF images, and MP4, MOV and WebM video. NeuroLink\n sends a Buffer or a file to XOR as a data: URL. A data: URL you pass\n yourself must hold base64 image or video content, and is sent as given.\nThe whole request body may be at most 8 MB. The limit applies to the\n encoded body, so the base64 form counts, not the size of the files on disk. A\n file over the limit is refused from its size, before it is read.\nWhat can be checked locally is refused before any request, as a\n non-retryable invalid_request: a missing file, a directory, an empty Buffer\n or file, bytes that are not a recognised image or video, a remote URL or any\n other URL scheme, a string that is not a path or a data: URL, more than 8\n images, or a body over 8 MB. Bytes with the right signature that the model\n cannot decode are sent, and the server's refusal comes back as a server\n error, retried once.\nTypeSafe and Laya refuse media too, before any request, and the error\n names the providers that accept it. Perplexity, Cloudflare Clef and OpenAI\n Decisions refuse a video.\nImages and a video can be sent together (up to 8 images and one video),\n but the model does not reliably tell the two apart.\nThe result carries mediaBytes, th","hierarchy":{"lvl0":"Getting Started","lvl1":"XOR Provider Guide","lvl2":"","lvl3":""}},
|
|
7514
7514
|
{"objectID":"5ed0d5759a64d045ba6c8acb04b0b6e6fef6f00399b88df9847c053d52a8e70c","title":"XOR Provider Guide","url":"/docs/getting-started/providers/xor#xor-provider-guide","content":"A provider of decide — the same typed boolean / choice /\nscore answers as TypeSafe's Jev and Laya, from\nJuspay's open-weights model, which also reads images and a video. It emits no\ntext at all.","hierarchy":{"lvl0":"Getting Started","lvl1":"XOR Provider Guide","lvl2":"XOR Provider Guide","lvl3":""}},
|
|
7515
|
-
{"objectID":"62f1da4b03072e86ddddfcfed9098a9efa475d349ea26f88c901347eca7fc77a","title":"Overview","url":"/docs/getting-started/providers/xor#overview","content":"XOR is Juspay's Apache-2.0 decision model, post-trained from Qwen3.6-35B-A3B
|
|
7516
|
-
{"objectID":"2a68b1796658b1e42d1fb20868e2f28c9b9b13e9e83ebb2ac4411de95d15b8e3","title":"Key Facts","url":"/docs/getting-started/providers/xor#key-facts","content":"| |
|
|
7517
|
-
{"objectID":"06cdd61cf369f5af93c8e03841be4ebddcc8e1fde819b193e35a9fabfa7db51a","title":"1. Get an endpoint and a key","url":"/docs/getting-started/providers/xor#1-get-an-endpoint-and-a-key","content":"Run a deployment of XOR (see\nhuggingface.co/juspay/xor), or use a\nLiteLLM proxy with a route to one. NeuroLink posts to <base URL>/v1/
|
|
7515
|
+
{"objectID":"62f1da4b03072e86ddddfcfed9098a9efa475d349ea26f88c901347eca7fc77a","title":"Overview","url":"/docs/getting-started/providers/xor#overview","content":"XOR is Juspay's Apache-2.0 decision model, post-trained from Qwen3.6-35B-A3B.\nIt is asked for by one of two aliases: xor-latest, the text model, and\nxor-omni, the multimodal one, which also reads images and a video. You send one\nstate plus named, typed questions, and optionally images or a video. XOR\nanswers every question in a single batched pass and returns a typed answer for\neach; the result's model is the id that served the request (for example\nxor-text-1), not the alias you asked for. NeuroLink calls whatever base URL\nyou configure — a deployment of the model, or a LiteLLM proxy with a route to\none. There is no built-in endpoint. The weights and setup instructions are at\nhuggingface.co/juspay/xor.","hierarchy":{"lvl0":"Getting Started","lvl1":"XOR Provider Guide","lvl2":"Overview","lvl3":""}},
|
|
7516
|
+
{"objectID":"2a68b1796658b1e42d1fb20868e2f28c9b9b13e9e83ebb2ac4411de95d15b8e3","title":"Key Facts","url":"/docs/getting-started/providers/xor#key-facts","content":"| | |\n| --------------------- | ---------------------------------------------------------------------------------------- |\n| Inference type | decide only |\n| Model | xor-latest by default, xor-omni for media; XOR_MODEL sets the name your proxy uses |\n| Media | xor-omni: up to 8 images and one video; the whole request body at most 8 MB |\n| Input window | about 200,000 estimated tokens of state |\n| Questions per request | no cap in NeuroLink; a choice or score takes 2 to 64 options |\n| Endpoint | <base URL>/v1/decisions; the base URL is required, with no default |\n| Precedence | used automatically only when TypeSafe and Laya are not configured |","hierarchy":{"lvl0":"Getting Started","lvl1":"XOR Provider Guide","lvl2":"Key Facts","lvl3":""}},
|
|
7517
|
+
{"objectID":"06cdd61cf369f5af93c8e03841be4ebddcc8e1fde819b193e35a9fabfa7db51a","title":"1. Get an endpoint and a key","url":"/docs/getting-started/providers/xor#1-get-an-endpoint-and-a-key","content":"Run a deployment of XOR (see\nhuggingface.co/juspay/xor), or use a\nLiteLLM proxy with a route to one. NeuroLink posts to <base URL>/v1/decisions.\nThe base URL is the origin of the deployment or of the proxy route, and a\ntrailing /v1 is accepted. It must be https://; http:// is accepted only for\nlocalhost, 127.0.0.1 and [::1], because every request carries the key and the\nstate. A deployment reachable only over plain http inside a network needs an\nhttps:// front, or a port-forward to localhost. On a LiteLLM proxy the key's team must be allowed\nthe model you ask for (xor-latest by default, xor-omni for media); otherwise the proxy answers 403\nteam_model_access_denied. A proxy may serve XOR under a name of its own: set\nXOR_MODEL to that name.","hierarchy":{"lvl0":"Getting Started","lvl1":"XOR Provider Guide","lvl2":"1. Get an endpoint and a key","lvl3":""}},
|
|
7518
7518
|
{"objectID":"540db8a33720c64f9e3e59c312e3d3e2476799c726c6e5729729ecaf2bbefa05","title":"2. Configure","url":"/docs/getting-started/providers/xor#2-configure","content":"Both the base URL and the key are required. Set them in the environment:\n\nor in the config passed to the SDK, exactly as for any other provider. Values\npassed per call override the constructor's, which override the environment:","hierarchy":{"lvl0":"Getting Started","lvl1":"XOR Provider Guide","lvl2":"2. Configure","lvl3":""}},
|
|
7519
7519
|
{"objectID":"3fd4afc9a2670046c937e06586a65b3b5eadb6de1560ee1e1a3abf5f05524876","title":"From the CLI","url":"/docs/getting-started/providers/xor#from-the-cli","content":"The CLI reads the same environment variables:","hierarchy":{"lvl0":"Getting Started","lvl1":"XOR Provider Guide","lvl2":"From the CLI","lvl3":""}},
|
|
7520
|
-
{"objectID":"90a0f1f65868c0d5b68bb8fb5828a32f704d4ed3a164081275a6837b65a8e2f7","title":"Images and video","url":"/docs/getting-started/providers/xor#images-and-video","content":"XOR reads images and one video alongside the state. TypeSafe, Laya,\nSubQ and ScaleDown do not read media, and Perplexity,\nCloudflare Clef and OpenAI Decisions\nread images but no video.\n\nFrom the CLI, pass --image <path> (repeatable) and --video <path>:\n\nThe rules:\nUp to 8 images and one video per request, in images and video.\nEach is a Buffer, a local file path or a data: URL. An http(s) URL is\n refused: NeuroLink does not fetch media for you.\nThe type comes from the bytes, not the file extension: PNG, JPEG, WebP\n and GIF images, and MP4, MOV and WebM video. NeuroLink\n sends a Buffer or a file to XOR as a data: URL. A data: URL you pass\n yourself must hold base64 image or video content, and is sent as given.\nThe whole request body may be at most 8 MB. The limit applies to the\n encoded body, so the base64 form counts, not the size of the files on disk. A\n file over the limit is refused from its size, before it is read.\nWhat can be checked locally is refused before any request, as a\n non-retryable invalid_request: a missing file, a directory, an empty Buffer\n or file, bytes that are not a recognised image or video, a remote URL or any\n other URL scheme, a string that is not a path or a data: URL, more than 8\n images, or a body over 8 MB. Bytes with the right signature that the model\n cannot decode are sent, and the server's refusal comes back as a server\n error, retried once.\nTypeSafe and Laya refuse media too, before any request, and the error\n names the providers that accept it. Perplexity, Cloudflare Clef and OpenAI\n Decisions refuse a video.\nImages and a video can be sent together (up to 8 images and one video),\n but the model does not reliably tell the two apart.\nThe result carries mediaBytes, the encoded size of the media sent.
|
|
7520
|
+
{"objectID":"90a0f1f65868c0d5b68bb8fb5828a32f704d4ed3a164081275a6837b65a8e2f7","title":"Images and video","url":"/docs/getting-started/providers/xor#images-and-video","content":"XOR reads images and one video alongside the state, through the xor-omni\nmodel: name it in the request (model: \"xor-omni\", or --model xor-omni on the\nCLI), because the default, xor-latest, is the text model. TypeSafe, Laya,\nSubQ and ScaleDown do not read media, and Perplexity,\nCloudflare Clef and OpenAI Decisions\nread images but no video.\n\nFrom the CLI, pass --image <path> (repeatable) and --video <path>:\n\nThe rules:\nUp to 8 images and one video per request, in images and video.\nEach is a Buffer, a local file path or a data: URL. An http(s) URL is\n refused: NeuroLink does not fetch media for you.\nThe type comes from the bytes, not the file extension: PNG, JPEG, WebP\n and GIF images, and MP4, MOV and WebM video. NeuroLink\n sends a Buffer or a file to XOR as a data: URL. A data: URL you pass\n yourself must hold base64 image or video content, and is sent as given.\nThe whole request body may be at most 8 MB. The limit applies to the\n encoded body, so the base64 form counts, not the size of the files on disk. A\n file over the limit is refused from its size, before it is read.\nWhat can be checked locally is refused before any request, as a\n non-retryable invalid_request: a missing file, a directory, an empty Buffer\n or file, bytes that are not a recognised image or video, a remote URL or any\n other URL scheme, a string that is not a path or a data: URL, more than 8\n images, or a body over 8 MB. Bytes with the right signature that the model\n cannot decode are sent, and the server's refusal comes back as a server\n error, retried once.\nTypeSafe and Laya refuse media too, before any request, and the error\n names the providers that accept it. Perplexity, Cloudflare Clef and OpenAI\n Decisions refuse a video.\nImages and a video can be sent together (up to 8 images and one video),\n but the model does not reliably tell the two apart.\nThe result carries mediaBytes, the encoded size of the media sent.","hierarchy":{"lvl0":"Getting Started","lvl1":"XOR Provider Guide","lvl2":"Images and video","lvl3":""}},
|
|
7521
7521
|
{"objectID":"4fea1eacec247a5a95e9c0d017549cb5233da507c593a841ce0e392eb2d11e2a","title":"When NeuroLink uses it","url":"/docs/getting-started/providers/xor#when-neurolink-uses-it","content":"Every built-in consumer of decide — model routing, relevance-driven\ncompaction, tool routing and RAG planning — asks for the default decision\nprovider. That is the first one that is configured, in the environment or in the\ncredentials passed to the SDK, in the order TypeSafe, Laya, XOR,\nSubQ, Perplexity, Cloudflare Clef,\nOpenAI Decisions, then ScaleDown. TypeSafe counts with either of its keys,\nTYPESAFE_API_KEY or AI_GATEWAY_API_KEY. Laya and XOR each count only with\nboth their key and their base URL. SubQ counts with its key alone. Perplexity\ncounts with its key alone, which is shared with Perplexity's text provider. Cloudflare Clef counts only with both\nCLOUDFLARE_API_KEY and CLOUDFLARE_ACCOUNT_ID, the same two variables the\nWorkers AI text provider reads. OpenAI Decisions counts with its key alone,\nOPENAI_API_KEY, which the OpenAI chat provider reads too. ScaleDown counts with\nits key alone, SCALEDOWN_API_KEY, which no other provider reads. A caller can\nalways name XOR with provider: \"xor\". So:\nA TypeSafe key, or Laya's key and base URL, plus XOR's key and base URL:\n built-in features use TypeSafe or Laya, in that order; XOR runs only where a\n caller asks for provider: \"xor\".\nXOR's key and base URL, plus SUBQ_API_KEY: built-in features use XOR;\n SubQ runs only where a caller asks for provider: \"subq\".\nXOR's key and base URL, plus SCALEDOWN_API_KEY: built-in features use XOR;\n ScaleDown runs only where a caller asks for provider: \"scaledown\".\nXOR's key and base URL, plus a Perplexity key: built-in features use XOR;\n Perplexity runs only where a caller asks for\n provider: \"perplexity-decider\".\nXOR's key and base URL, plus CLOUDFLARE_API_KEY and\n CLOUDFLARE_ACCOUNT_ID: built-in features use XOR; Cloudflare Clef runs\n only where a caller asks for provider: \"cloudflare-clef\".\nOnly XOR's key and base URL: built-in features use XOR.\nAn XOR key with no base URL: XOR is not configured.","hierarchy":{"lvl0":"Getting Started","lvl1":"XOR Provider Guide","lvl2":"When NeuroLink uses it","lvl3":""}},
|
|
7522
7522
|
{"objectID":"20a784de9dff5b3afa1f5ee7c0c60e268a7274b7e0c2a447aca431642f8fcabc","title":"Limits","url":"/docs/getting-started/providers/xor#limits","content":"The window is large, but shared. NeuroLink allows about 200,000 estimated\ntokens of state, and refuses more before any network call, with\nmax_tokens_exceeded. The size is an estimate, not XOR's tokenizer: about four\ncharacters per token for ASCII text, and one token per character for other\nscripts, which errs toward refusing. The 200,000 figure is a conservative\ndefault under the deployment's 250,000-token prefill, and that prefill is shared\nby the state, the questions and any media.\n\nThe figures in this paragraph are measurements of one live LiteLLM route, not\nlimits of XOR: the model behind the route's name has not been confirmed as XOR,\nand its 262,144-token context length differs from the 250,000-token prefill\nabove. They were taken by sending requests to the route directly rather than\nthrough NeuroLink, which refuses a state of 1.2 million ASCII characters before\nany request, at about 315,000 estimated tokens. A state of about 215,000 tokens\n(1.2 million characters of English) was accepted, and one of about 430,000\ntokens was refused with a 500 whose text says the input is longer than the\nmodel's context length. The estimate is not exact in either direction. English\naveraged about 5.6 characters per token on the route, so the estimate\nover-counts it. Dense JSON averaged about 1.8, so the estimate under-counts it\nby more than half, and a dense state estimated under the limit can still be\nlonger than the server's context. A structured (non-string) state of 100,000\nChinese characters passed NeuroLink's local check and was refused by the\nserver, which counted it as 485,774 tokens.\n\nA state near the limit, or a lot of media, can therefore still be refused by the\nserver as too long. A 413, or a 5xx other than 503 whose message says the\ncontext was too long, arrives as max_tokens_exceeded and is not retried; every\nother reply is classified as in the Errors table below. Built-in consumers treat\na refusal as \"carry on as before\".\n\nA proxy may cap parallel requests.","hierarchy":{"lvl0":"Getting Started","lvl1":"XOR Provider Guide","lvl2":"Limits","lvl3":""}},
|
|
7523
7523
|
{"objectID":"d3945a40a2095e352b8f5f71228a59bbcb1cb60823696dbe20f3fafffe6b7c29","title":"Errors","url":"/docs/getting-started/providers/xor#errors","content":"| Reply | Kind | Retried |\n| ------------------------------------------------------------ | --------------------------------------------------------- | --------- |\n| 401 | authentication — the provider instance stops retrying | no |\n| 403 / 402 | invalid_request — fixable; the instance is not disabled | no |\n| 413, or a 5xx other than 503 saying the context was exceeded | max_tokens_exceeded | no |\n| any other 4xx (for example 422, 404) | invalid_request | no |\n| 429 | rate_limit | yes, once |\n| 503 | overloaded | yes, once |\n| other 5xx | server | yes, once |\n| state over the window (local) | max_tokens_exceeded, with no network call | no |\n| unusable media (local) | invalid_request, with no network call | no |\n| no base URL configured (local) | invalid_request, with no network call | no |\n\nA 403 or 402 is deliberately not authentication. On a LiteLLM proxy a 403\nmeans the key's team does not allow the model you asked for\n(team_model_access_denied), and\na 402 means the team has no budget. An admin can fix either, so the provider\ninstance keeps working once it is fixed and is not disabled.","hierarchy":{"lvl0":"Getting Started","lvl1":"XOR Provider Guide","lvl2":"Errors","lvl3":""}},
|
|
7524
|
-
{"objectID":"37466cda852e51cad898009d283cae74e18a20774a3ca0fad9f146e3efb8a5a9","title":"Troubleshooting","url":"/docs/getting-started/providers/xor#troubleshooting","content":"XOR requires a base URL — set XOR_BASE_URL, or pass\n credentials.xor.baseURL. There is no default endpoint.\nThe XOR base URL must not carry credentials… — the base URL has a user\n name, a password, a query string or a fragment. Set it to the origin only, for\n example https://your-proxy.example.com, and give the key through\n XOR_API_KEY or credentials.xor.apiKey.\nThe XOR base URL must start with https:// or http:// — the value has no\n scheme (for example xor.internal:8080) or uses another scheme. Add\n https://, or http:// for a server on this machine.\nThe XOR base URL must use https:// unless it points at this machine — the\n value is an http:// URL whose host is not localhost, 127.0.0.1 or [::1].\n A plain-http request would send the key and the state unencrypted. Put an\n https:// front on the deployment, or reach it through a port-forward to\n localhost.\nXOR answered with a redirect — the endpoint replied 301, 302, 307 or 308.\n The provider does not follow it and does not retry. Set the base URL to the\n address the redirect leads to.\nThe XOR base URL is not a valid absolute URL — the value cannot be\n parsed as a URL. Set it to an absolute origin.\nXOR requires an API key — set XOR_API_KEY, or pass\n credentials.xor.apiKey.\nA 401 — the endpoint rejected the key. The provider instance stops\n retrying after a rejection, so fix the key and construct a new one.\nA 403 with team_model_access_denied — the LiteLLM proxy's team for this\n key does not allow the model you asked for (XOR_MODEL, or xor-
|
|
7524
|
+
{"objectID":"37466cda852e51cad898009d283cae74e18a20774a3ca0fad9f146e3efb8a5a9","title":"Troubleshooting","url":"/docs/getting-started/providers/xor#troubleshooting","content":"XOR requires a base URL — set XOR_BASE_URL, or pass\n credentials.xor.baseURL. There is no default endpoint.\nThe XOR base URL must not carry credentials… — the base URL has a user\n name, a password, a query string or a fragment. Set it to the origin only, for\n example https://your-proxy.example.com, and give the key through\n XOR_API_KEY or credentials.xor.apiKey.\nThe XOR base URL must start with https:// or http:// — the value has no\n scheme (for example xor.internal:8080) or uses another scheme. Add\n https://, or http:// for a server on this machine.\nThe XOR base URL must use https:// unless it points at this machine — the\n value is an http:// URL whose host is not localhost, 127.0.0.1 or [::1].\n A plain-http request would send the key and the state unencrypted. Put an\n https:// front on the deployment, or reach it through a port-forward to\n localhost.\nXOR answered with a redirect — the endpoint replied 301, 302, 307 or 308.\n The provider does not follow it and does not retry. Set the base URL to the\n address the redirect leads to.\nThe XOR base URL is not a valid absolute URL — the value cannot be\n parsed as a URL. Set it to an absolute origin.\nXOR requires an API key — set XOR_API_KEY, or pass\n credentials.xor.apiKey.\nA 401 — the endpoint rejected the key. The provider instance stops\n retrying after a rejection, so fix the key and construct a new one.\nA 403 with team_model_access_denied — the LiteLLM proxy's team for this\n key does not allow the model you asked for (XOR_MODEL, or xor-latest by\n default; xor-omni for media). Add the model to the team; the instance works again without a\n restart.\nmax_tokens_exceeded — the state is over about 200,000 estimated tokens,\n or the state, the questions and the media together are more than the\n deployment's prefill. Shorten the state, or send fewer or smaller images or a\n shorter video.","hierarchy":{"lvl0":"Getting Started","lvl1":"XOR Provider Guide","lvl2":"Troubleshooting","lvl3":""}},
|
|
7525
7525
|
{"objectID":"cdd6e7c83dfa23afa5cf0bb7d23081881600f72a5ac64ca56d383736c209f285","title":"See also","url":"/docs/getting-started/providers/xor#see-also","content":"TypeSafe (Jev) Provider Guide\nLaya Provider Guide\nPerplexity Decisions Provider Guide\nCloudflare Clef Provider Guide\nSubQ Provider Guide\nOpenAI Decisions Provider Guide\nScaleDown Provider Guide\nThe decide inference type\nXOR on Hugging Face","hierarchy":{"lvl0":"Getting Started","lvl1":"XOR Provider Guide","lvl2":"See also","lvl3":""}},
|
|
7526
7526
|
{"objectID":"b62066defb7f4f21e315563cc367d3573fb4aacd3fa38685f76f1a3b110c0437","title":"Z.AI Provider Guide","url":"/docs/getting-started/providers/z-ai","content":"Z.AI Provider Guide\n\nZ.AI is a Tier-2 catalog provider: OpenAI-wire-compatible, so its entire\nintegration is one JSON file (src/lib/providers/catalog/z-ai.json) rather\nthan hand-written code. That file is the source of truth for everything on this\npage.\n\nVerification status: this entry is docs-verified only, not yet\nlive-verified. The vendor's GET https://api.z.ai/api/paas/v4/models needs\na key (it answers HTTP 401 without one), so the model ids come from Z.AI's\npublic docs and the roster has not been checked. No account was created and no\nAPI key was used to build this entry. evidence.liveMatrix is null until\nsomeone runs the live capability matrix with a real key (see\nVerification status below).\n\nKey Facts\nProvider id: z-ai (alias zai)\nProtocol: OpenAI-compatible (/chat/completions). The\n OpenAI Python SDK page\n says \"Z.AI provides interfaces compatible with OpenAI API\" and adds \"In some\n scenarios, there are still differences between Z.AI and OpenAI interfaces, but\n this does not affect overall compatibility.\"\nBase URL: https://api.z.ai/api/paas/v4 — the\n Introduction page calls it\n \"Z.ai Platform's general API endpoint\". Its warning says GLM Coding Plan users\n follow the Coding Plan tutorial to configure a dedicated endpoint, and the\n Coding Plan Endpoint Guide lists\n https://api.z.ai/api/coding/paas/v4 for OpenAI Chat Completions. This entry\n uses the general endpoint; Z_AI_BASE_URL overrides it.\nDefault model: glm-5.3 — the default of the model parameter in the\n Chat Completion reference\n and the model in its request examples\nModels in catalog: 12, curated from the 21 ids the Chat Completion\n reference lists (14 in its text-model enum, 7 in its vision-model enum). The\n nine ids left out to stay inside the 12-model cap are glm-4.5-x,\n glm-4.5-airx, glm-4.5-flash, glm-4-32b-0414-128k, glm-4.6v,\n glm-4.6v-flash, glm-4.6v-flashx, glm-4.5v and\n autoglm-phone-multilingual\nStreaming: supported — the\n Streaming Messages page\n documents stream=True with Server-Sent Events, and the Chat Completion\n reference says the Event Stream ends with a data: [DONE] message\nTool calling: model-dependent — the\n Function Calling page\n documents tools and a returned tool_calls array, and the Chat Completion\n reference says of tool_choice \"The default value is auto, and only auto is\n supported.\" For vision models it says tools are \"Only supported by\n GLM-5.3-Flash series, the GLM-4.6V series, and autoglm-phone-multilingual\"\nTools while streaming: supported (true) — the\n Thinking Mode page\n gives an Interleaved Thinking + Tool Calling example that sends tools with\n stream=True and reads tool_calls from the streamed deltas. The\n Tool Streaming Output page\n documents a separate tool_stream parameter, which this entry does not set.\n The Thinking Mode page also says \"thinking blocks should be explicitly\n preserved and returned together with the tool results.\", and its example\n appends an assistant message carrying reasoning_content and tool_calls\n before the tool message; this entry does not set\n quirks.replayReasoningContent\nStructured output: supported — the\n Structured Output page\n documents response_format set to {\"type\": \"json_object\"}. The Chat\n Completion reference lists text and json_object as the response_format\n type values, so the entry sets quirks.responseFormatDowngrade to send\n json_object for schema requests; generate({ schema }) still validates the\n result client-side. No request with json_schema was sent. The Chat\n Completion reference says of response_format \"Only text models support this\n field.\", and the\n GLM-5.3-Flash/FlashX page\n lists Structured Output among its Capabilities (\"Supports structured output\n formats such as JSON for seamless system integration.\")\nStructured output + tools together: not declared (false) — no combined\n probe was possible without credentials\nVision: glm-5.3-flash and glm-5.3-flashx — the\n GLM-5.3-Flash/FlashX page\n shows Input Modality \"Video / Image / Text / File\". The GLM-5.3 page says\n \"text-only inputs\", and the pages for the other nine catalog models show\n Input Modalities \"Text\"\nEmbeddings: not declared on this catalog entry\nThinking: not declared (false) — the entry sets none of the thinking\n or reasoning_effort request parameters. The Chat Completion reference\n documents both, and the\n GLM-5.3 page says \"GLM-5.3 always\n operates with reasoning enabled\"\nBilling: schema value free-tier, see Billing below\nKey format: none declared. The Introduction page shows the header\n Authorization: Bearer ZAI_API_KEY\n\nQuick Start\nGet an API key\nVisit: https://z.ai/manage-apikey/apikey-list — the Quick Start says to access the Z.AI Open Platform (https://z.ai/model-api) and \"Register or Login.\", then to \"Create an API Key\" in the API Keys management page and \"Copy your API Key for use.\"\nAuthentication is HTTP Bearer: the Introduction page (https://docs.z.ai/api-reference/introduction.md) shows the header Authorization: Bearer ZAIAPIKEY\n","hierarchy":{"lvl0":"Getting Started","lvl1":"Z.AI Provider Guide","lvl2":"","lvl3":""}},
|
|
7527
7527
|
{"objectID":"ca9f10745365c71403f5bcba388684ac70aeb8f48c3d7b3fac85b832a4eead37","title":"Z.AI Provider Guide","url":"/docs/getting-started/providers/z-ai#zai-provider-guide","content":"Z.AI is a Tier-2 catalog provider: OpenAI-wire-compatible, so its entire\nintegration is one JSON file (src/lib/providers/catalog/z-ai.json) rather\nthan hand-written code. That file is the source of truth for everything on this\npage.\n\nVerification status: this entry is docs-verified only, not yet\nlive-verified. The vendor's GET https://api.z.ai/api/paas/v4/models needs\na key (it answers HTTP 401 without one), so the model ids come from Z.AI's\npublic docs and the roster has not been checked. No account was created and no\nAPI key was used to build this entry. evidence.liveMatrix is null until\nsomeone runs the live capability matrix with a real key (see\nVerification status below).","hierarchy":{"lvl0":"Getting Started","lvl1":"Z.AI Provider Guide","lvl2":"Z.AI Provider Guide","lvl3":""}},
|
|
@@ -8751,7 +8751,7 @@
|
|
|
8751
8751
|
{"objectID":"60877eba17c1fe5c9fda2100a737f42fddb5c4c7083297e61a66884dbe5c326e","title":"NeuroLink","url":"/docs/","content":"🧠 NeuroLink\n The Pipe Layer of an AI Nervous System\n Provider Neurons Across Major AI Vendors | 3 Inference Types (generate · stream · decide) | Voice (TTS/STT/Realtime) | 58+ MCP Servers | HITL Security | Redis Persistence\n\nNeuroLink is the pipe layer of an AI nervous system: one interface connecting provider neurons — major AI vendors and local runtimes — to the applications that consume them. Built-in tooling and an opinionated factory architecture mean adding a new provider, or a new capability, never touches application code. NeuroLink ships as both a TypeScript SDK and a professional CLI so teams can build, operate, and iterate on AI features quickly.\n\n🧠 What is NeuroLink?\n\nNeuroLink is the pipe layer of an AI nervous system. Providers — OpenAI, Anthropic, Google, AWS, Azure, DeepSeek, NVIDIA NIM, local runtimes like Ollama and llama.cpp, and dozens more — are the neurons: each generates a different kind of intelligence, at a different cost and latency. NeuroLink is the vascular layer that carries that intelligence, as a stream, to the applications that consume it, across three inference types: generate and stream produce text, decide produces a calibrated boolean/choice/score judgment instead.\n\nExtracted from production systems at Juspay, NeuroLink provides a practical, TypeScript-first way to plug any application into that nervous system. Switch which neuron answers a request with a single parameter change — any provider you're building with, or any provider you add.\n\nWhy NeuroLink? Three genuine inference types, not one dressed up three ways — generate and stream produce text, while decide returns a typed, calibrated judgment (boolean / choice / score) with no text at all, for the routing and gating decisions the other two were never meant to make. Every neuron plugs into the same pipe. Switch providers with a single parameter change, leverage 64+ built-in tools and MCP servers, deploy with confidence using enterprise features like Redis memory and multi-provider failover, and optimize costs automatically with intelligent routing. Use it via our professional CLI or TypeScript SDK—whichever fits your workflow.\n\nWhere we're headed: We're building for the future of AI—edge-first execution and continuous streaming architectures that make AI practically free and universally available. Read our vision →\n\nGet Started in \\ Observability Guide\nServer Adapters -- Deploy NeuroLink as an HTTP API server with your framework of choice (Hono, Express, Fastify, Koa). Full CLI support with serve and server commands for foreground/background modes, route management, and OpenAPI generation. -> Server Adapters Guide\nTitle Generation Events -- Emit real-time events when conversation titles are auto-generated. Listen to conversation:titleGenerated for session tracking. -> Conversation Memory Guide\nCustom Title Prompts -- Customize conversation title generation with NEUROLINK_TITLE_PROMPT environment variable. Use ${userMessage} placeholder for dynamic prompts. -> Conversation Memory Guide\nVideo Generation -- Transform images into 8-second videos with synchronized audio using Google Veo 3.1 via Vertex AI. Supports 720p/1080p resolutions, portrait/landscape aspect ratios. -> Video Generation Guide\nImage Generation -- Generate images from text prompts using Gemini models via Vertex AI or Google AI Studio. Supports streaming mode with automatic file saving. -> Image Generation Guide\nHTTP/Streamable HTTP Transport for MCP -- Connect to remote MCP servers via HTTP with authentication headers, retry logic, and rate limiting. -> HTTP Transport Guide\nClaude Subscription (OAuth) Support -- Use your Claude Pro/Max/Team subscription with NeuroLink via OAuth authentication, no API key required. -> Subscription Guide\nGemini 3 Preview Support - Full support for gemini-3-flash-preview and gemini-3-pro-preview with extended thinking capabilities\nStructured Output with Zod Schemas -- Type-safe JSON generation with automatic validation using schema + output.format: \"json\" in generate(). -> Structured Output Guide\nCSV File Support -- Attach CSV files to prompts for AI-powered data analysis with auto-detection. -> CSV Guide\nPDF File Support -- Process PDF documents with native visual analysis for Vertex AI, Anthropic, Bedrock, AI Studio. -> PDF Guide\n50+ File Types -- Process Excel, Word, RTF, JSON, YAML, XML, HTML, SVG, Markdown, and 50+ code languages with intelligent content extraction. -> File Processors Guide\nLiteLLM Integration -- Access 100+ AI models across a broad range of AI providers through unified interface. -> Setup Guide\nSageMaker Integration -- Deploy and use custom trained models on AWS infrastructure. -> Setup Guide\nOpenRouter Integration -- Access 300+ models from OpenAI, Anthropic, Google, Meta, and more through a single unified API. -> Setup Guide\nHuman-in-the-loop workflows -- Pause generation for user approval/input before tool execution. -> HITL Guide\nGuardrails middleware -- Block PII, profanity, and unsafe cont","hierarchy":{"lvl0":"Docs","lvl1":"NeuroLink","lvl2":"","lvl3":""}},
|
|
8752
8752
|
{"objectID":"7bd402837d03dbfbb9586674bc914cfc6ee7691e33540eeabe6555363697375e","title":"🧠 What is NeuroLink?","url":"/docs/#-what-is-neurolink","content":"NeuroLink is the pipe layer of an AI nervous system. Providers — OpenAI, Anthropic, Google, AWS, Azure, DeepSeek, NVIDIA NIM, local runtimes like Ollama and llama.cpp, and dozens more — are the neurons: each generates a different kind of intelligence, at a different cost and latency. NeuroLink is the vascular layer that carries that intelligence, as a stream, to the applications that consume it, across three inference types: generate and stream produce text, decide produces a calibrated boolean/choice/score judgment instead.\n\nExtracted from production systems at Juspay, NeuroLink provides a practical, TypeScript-first way to plug any application into that nervous system. Switch which neuron answers a request with a single parameter change — any provider you're building with, or any provider you add.\n\nWhy NeuroLink? Three genuine inference types, not one dressed up three ways — generate and stream produce text, while decide returns a typed, calibrated judgment (boolean / choice / score) with no text at all, for the routing and gating decisions the other two were never meant to make. Every neuron plugs into the same pipe. Switch providers with a single parameter change, leverage 64+ built-in tools and MCP servers, deploy with confidence using enterprise features like Redis memory and multi-provider failover, and optimize costs automatically with intelligent routing. Use it via our professional CLI or TypeScript SDK—whichever fits your workflow.\n\nWhere we're headed: We're building for the future of AI—edge-first execution and continuous streaming architectures that make AI practically free and universally available. Read our vision →\n\nGet Started in \\<5 Minutes →","hierarchy":{"lvl0":"Docs","lvl1":"NeuroLink","lvl2":"🧠 What is NeuroLink?","lvl3":""}},
|
|
8753
8753
|
{"objectID":"293082e7b04b9b0eb186f10fec40eefc1996d8eab9becff9e2b428731642291f","title":"What's New (Q1 2026)","url":"/docs/#whats-new-q1-2026","content":"| Feature | Version | Description | Guide |\n| ---------------------------------- | ------- |","hierarchy":{"lvl0":"Docs","lvl1":"NeuroLink","lvl2":"What's New (Q1 2026)","lvl3":""}},
|
|
8754
|
-
{"objectID":"3e5ecc512d348470d92717ef33a2ff5067ffdd99c7ea212613df7986db133390","title":"Enterprise Security: Human-in-the-Loop (HITL)","url":"/docs/#enterprise-security-human-in-the-loop-hitl","content":"NeuroLink includes a HITL (Human-in-the-Loop) system
|
|
8754
|
+
{"objectID":"3e5ecc512d348470d92717ef33a2ff5067ffdd99c7ea212613df7986db133390","title":"Enterprise Security: Human-in-the-Loop (HITL)","url":"/docs/#enterprise-security-human-in-the-loop-hitl","content":"NeuroLink includes a HITL (Human-in-the-Loop) system that pauses a tool call until your application approves or rejects it, for high-stakes AI operations:\n\n| Capability | Description | Use Case |\n| --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------ |\n| Tool Approval Workflows | Pause tools whose name matches dangerousActions, or that a customRules condition selects, until your app answers | Financial transactions, data modifications |\n| Argument Review | A response can carry modifiedArguments and the tool runs with them. allowArgumentModification only tells your UI (allowModification); NeuroLink does not enforce it | Correcting a path or amount before it runs |\n| Timeout Policy | Reject when nobody answers (default) or auto-approve, with autoApproveExclusions for tools that always need an answer | Unattended and background runs |\n| Audit Logging | auditLogging: true writes each request and decision, with the full tool arguments, to the NeuroLink logger; it is a log, not a compliance control | Debugging and your own review records |\n\nThe Enterprise HITL Guide also sketches a larger target API (requireApproval, reviewCallback, confidenceThreshold, asynchronous review, escalation policies). None of it is implemented yet, and NeuroLink drops unknown hitl keys without an error. See #752.\n\nEnterprise HITL Guide | Quick Start","hierarchy":{"lvl0":"Docs","lvl1":"NeuroLink","lvl2":"Enterprise Security: Human-in-the-Loop (HITL)","lvl3":""}},
|
|
8755
8755
|
{"objectID":"c062d596f0f8940391d038563717712409b6055fdf70d92ab51cb35caf672663","title":"Get Started in Two Steps","url":"/docs/#get-started-in-two-steps","content":"`bash","hierarchy":{"lvl0":"Docs","lvl1":"NeuroLink","lvl2":"Get Started in Two Steps","lvl3":""}},
|
|
8756
8756
|
{"objectID":"e9e7167316a23ea5fd5db23894b2e52405ba61f5ab57cc986d155490dd325674","title":"1. Run the interactive setup wizard (select providers, validate keys)","url":"/docs/#1-run-the-interactive-setup-wizard-select-providers-validate-keys","content":"pnpm dlx @juspay/neurolink setup","hierarchy":{"lvl0":"Docs","lvl1":"NeuroLink","lvl2":"1. Run the interactive setup wizard (select providers, validate keys)","lvl3":""}},
|
|
8757
8757
|
{"objectID":"fc68ecabb9ba07088de748df52379e582eb59a0c7e3956e4ae9019b83c21bc9f","title":"2. Start generating with automatic provider selection","url":"/docs/#2-start-generating-with-automatic-provider-selection","content":"npx @juspay/neurolink generate \"Write a launch plan for multimodal chat\"\n\n\nNeed a persistent workspace? Launch loop mode with npx @juspay/neurolink loop` - Learn more →","hierarchy":{"lvl0":"Docs","lvl1":"NeuroLink","lvl2":"2. Start generating with automatic provider selection","lvl3":""}},
|