@juspay/neurolink 12.37.4 ā 12.38.0
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 +3 -3
- package/README.md +60 -50
- package/dist/browser/neurolink.min.js +423 -423
- package/dist/cli/commands/decide.d.ts +2 -2
- package/dist/cli/commands/decide.js +22 -3
- package/dist/cli/commands/setup.js +2 -1
- package/dist/cli/factories/commandFactory.js +1 -1
- package/dist/constants/enums.d.ts +9 -0
- package/dist/constants/enums.js +10 -0
- package/dist/core/baseProvider.d.ts +10 -1
- package/dist/core/baseProvider.js +35 -7
- package/dist/factories/providerDescriptors.d.ts +2 -0
- package/dist/factories/providerDescriptors.js +52 -6
- package/dist/factories/providerRegistry.js +9 -1
- package/dist/models/manifestRegistry.js +2 -0
- package/dist/models/manifests/anthropic.js +2 -2
- package/dist/models/manifests/xor.d.ts +12 -0
- package/dist/models/manifests/xor.js +30 -0
- package/dist/models/modelRegistry.d.ts +12 -1
- package/dist/models/modelRegistry.js +57 -5
- package/dist/neurolink.js +6 -0
- package/dist/providers/amazonSagemaker.js +1 -1
- package/dist/providers/anthropic/client.js +29 -5
- package/dist/providers/anthropic/structuredOutput.d.ts +4 -1
- package/dist/providers/anthropic/structuredOutput.js +13 -5
- package/dist/providers/catalog/cerebras.json +7 -8
- package/dist/providers/catalog/fireworks.json +10 -12
- package/dist/providers/googleVertex/client.d.ts +3 -3
- package/dist/providers/googleVertex/client.js +79 -26
- package/dist/providers/laya.js +1 -19
- package/dist/providers/openaiChatCompletionsBase.js +1 -1
- package/dist/providers/systemOneDecision.d.ts +21 -2
- package/dist/providers/systemOneDecision.js +64 -4
- package/dist/providers/xor.d.ts +48 -0
- package/dist/providers/xor.js +192 -0
- package/dist/proxy/vertexAnthropicFallback.d.ts +1 -12
- package/dist/proxy/vertexAnthropicFallback.js +43 -2
- package/dist/types/classifierRouter.d.ts +5 -4
- package/dist/types/cli.d.ts +6 -2
- package/dist/types/decision.d.ts +60 -1
- package/dist/types/model.d.ts +6 -0
- package/dist/types/providers.d.ts +10 -0
- package/dist/utils/decisionMedia.d.ts +9 -0
- package/dist/utils/decisionMedia.js +160 -0
- package/dist/utils/modelChoices.js +9 -1
- package/dist/utils/providerConfig.d.ts +5 -0
- package/dist/utils/providerConfig.js +17 -0
- package/docs-site/static/search-index.json +63 -46
- package/package.json +2 -1
|
@@ -113,9 +113,9 @@
|
|
|
113
113
|
{"objectID":"b38e417fcd8ea5d3b983875efebb5b5a309883fdfe8bfdc80300e473bea5e081","title":"Gradual Adoption","url":"/docs/WORKFLOW-ENGINE-LLD#gradual-adoption","content":"Phase 1: Users can try workflows alongside existing methods\nPhase 2: Workflows become recommended for high-stakes queries\nPhase 3: Workflows are default with single-model as fallback","hierarchy":{"lvl0":"WORKFLOW ENGINE LLD","lvl1":"Workflow Engine - Low-Level Design","lvl2":"Gradual Adoption","lvl3":""}},
|
|
114
114
|
{"objectID":"2127ec4796813559375c700e37b4944f77c72f22a0410fe93bd6f5f7cff8a4c0","title":"17. Performance Benchmarks (Expected)","url":"/docs/WORKFLOW-ENGINE-LLD#17-performance-benchmarks-expected","content":"| Workflow | Models | Judge | Latency (p50) | Latency (p95) | Cost Multiplier |\n| ------------- | ------ | ----- | ------------- | ------------- | --------------- |\n| consensus-3 | 3 | 1 | 3.2s | 5.1s | 4.2x |\n| fast-fallback | 1-2 | 0 | 1.1s | 2.8s | 1.3x |\n| quality-max | 2 | 1 | 3.5s | 4.9s | 3.1x |\n| multi-judge-5 | 3 | 2 | 4.8s | 6.7s | 5.3x |","hierarchy":{"lvl0":"WORKFLOW ENGINE LLD","lvl1":"Workflow Engine - Low-Level Design","lvl2":"17. Performance Benchmarks (Expected)","lvl3":""}},
|
|
115
115
|
{"objectID":"2f54303255393f1b5c8695c6342964ce83cb786fd3ae00f535bf17c44cae16cd","title":"š Implementation Checklist","url":"/docs/WORKFLOW-ENGINE-LLD#-implementation-checklist","content":"[ ] Create src/workflow/ directory structure\n[ ] Implement types.ts with all interfaces\n[ ] Implement config.ts with Zod schemas\n[ ] Implement ensembleExecutor.ts\n[ ] Implement judgeScorer.ts\n[ ] Implement responseConditioner.ts\n[ ] Implement workflowRegistry.ts\n[ ] Implement workflowRunner.ts\n[ ] Create built-in workflows (consensus, fallback, quality-max)\n[ ] Add methods to NeuroLink class\n[ ] Export types from src/lib/index.ts\n[ ] Write unit tests (80% coverage target)\n[ ] Write integration tests\n[ ] Add JSDoc documentation\n[ ] Create user guide with examples\n[ ] Add CLI support (optional Phase 2)\n\nDocument Status: ā
Ready for Implementation \nNext Step: Code generation upon approval","hierarchy":{"lvl0":"WORKFLOW ENGINE LLD","lvl1":"Workflow Engine - Low-Level Design","lvl2":"š Implementation Checklist","lvl3":""}},
|
|
116
|
-
{"objectID":"de72b620d608319199e3abf25b54298afc8fe5f294c73c538956a2feb63fe9b1","title":"The Nervous System Model","url":"/docs/about/nervous-system-model","content":"The Nervous System Model\n\nNeuroLink is built around a biological metaphor ā not as decoration, but as a structural model that governs every architectural decision.\n\nThe Three Components\n\nNeurons ā LLM Providers\n\nNeurons are where intelligence is generated. In NeuroLink, neurons are the AI providers, including: Anthropic, OpenAI, Google (AI Studio + Vertex), AWS (Bedrock + SageMaker), Azure, Mistral, LiteLLM, OpenRouter, Ollama, Hugging Face, DeepSeek, NVIDIA NIM, LM Studio, llama.cpp, OpenAI-compatible endpoints, TypeSafe Jev and
|
|
116
|
+
{"objectID":"de72b620d608319199e3abf25b54298afc8fe5f294c73c538956a2feb63fe9b1","title":"The Nervous System Model","url":"/docs/about/nervous-system-model","content":"The Nervous System Model\n\nNeuroLink is built around a biological metaphor ā not as decoration, but as a structural model that governs every architectural decision.\n\nThe Three Components\n\nNeurons ā LLM Providers\n\nNeurons are where intelligence is generated. In NeuroLink, neurons are the AI providers, including: Anthropic, OpenAI, Google (AI Studio + Vertex), AWS (Bedrock + SageMaker), Azure, Mistral, LiteLLM, OpenRouter, Ollama, Hugging Face, DeepSeek, NVIDIA NIM, LM Studio, llama.cpp, OpenAI-compatible endpoints, TypeSafe Jev, Laya and XOR (decision-only) ā plus voice neurons (OpenAI TTS, ElevenLabs, Google TTS, Azure TTS, Whisper, Deepgram, Azure STT, Google STT), realtime neurons (OpenAI Realtime, Gemini Live), and media-generation neurons (image, video, music, avatar).\n\nEach provider is a different type of neuron ā different capabilities, different costs, different latency profiles. NeuroLink's ProviderRegistry gives you access to all of them through one interface, switchable with a single line.\n\nThe Pipe ā NeuroLink\n\nThe pipe is the vascular layer that carries streams between neurons and organs. This is NeuroLink itself.\n\nWhat the pipe does every time you call generate() or stream():\nContext Building ā RAG retrieval, memory lookup, file processing merge into the prompt\nBudget Check ā BudgetChecker validates the assembled context fits the model's window\nProvider Dispatch ā ProviderRegistry routes to the correct neuron\nStream Emission ā Tokens flow as an async iterable\nTool Interception ā When the model calls a tool, the stream pauses, MCP tool executes, result injects, stream continues\nObservability ā Every stage emits OpenTelemetry spans\n\nOrgans ā Connectors\n\nOrgans are the applications that consume the pipe. They connect to the vascular layer and open a gateway ā a specific way for people or systems to interact with AI.\n\nEvery application built on NeuroLink is an organ. Production organs today:\nAutomatic ā Shopify operations hub: address intelligence, RTO risk scoring\nTara ā Slack engineering assistant: conversational AI with MCP tool access\nYama ā Code review judge: automated PR analysis and governance\n\nWhy This Model Works\n\nThe metaphor enforces good architecture:\n\nSeparation of concerns: Neurons (generation) and organs (consumption) are completely decoupled. Changing AI provider doesn't touch the application. Changing the application doesn't touch the provider.\n\nSingle flow direction: Intelligence flows one way ā neuron ā pipe ā organ. There's no confusion about where logic lives.\n\nObservable by default: A vascular system you can't monitor is dangerous. Every stage of the pipe emits telemetry by design.\n\nComposable: Multiple organs can share the same pipe. One NeuroLink instance serves many connectors.\n\nExtending the System\n\nThe nervous system model scales in three directions:\nAdd neurons ā New AI provider? Register it in ProviderRegistry.\nExtend the pipe ā New capability (chunking strategy, reranker, compaction stage)? Add it to the pipeline.\nBuild organs ā New application? Import NeuroLink, connect to the pipe, open your gateway.\n\nSee Pipe Architecture ā for the technical implementation.","hierarchy":{"lvl0":"About","lvl1":"The Nervous System Model","lvl2":"","lvl3":""}},
|
|
117
117
|
{"objectID":"27ef114b7e0cecc6ca45dbf3e9285980b691cd27d21e1912f2a27a7f309f68fe","title":"The Nervous System Model","url":"/docs/about/nervous-system-model#the-nervous-system-model","content":"NeuroLink is built around a biological metaphor ā not as decoration, but as a structural model that governs every architectural decision.","hierarchy":{"lvl0":"About","lvl1":"The Nervous System Model","lvl2":"The Nervous System Model","lvl3":""}},
|
|
118
|
-
{"objectID":"58e5ab0de0df2a0949ae12798cd53ac3133b2c253880bcbf0c573938376fd84f","title":"Neurons ā LLM Providers","url":"/docs/about/nervous-system-model#neurons-llm-providers","content":"Neurons are where intelligence is generated. In NeuroLink, neurons are the AI providers, including: Anthropic, OpenAI, Google (AI Studio + Vertex), AWS (Bedrock + SageMaker), Azure, Mistral, LiteLLM, OpenRouter, Ollama, Hugging Face, DeepSeek, NVIDIA NIM, LM Studio, llama.cpp, OpenAI-compatible endpoints, TypeSafe Jev and
|
|
118
|
+
{"objectID":"58e5ab0de0df2a0949ae12798cd53ac3133b2c253880bcbf0c573938376fd84f","title":"Neurons ā LLM Providers","url":"/docs/about/nervous-system-model#neurons-llm-providers","content":"Neurons are where intelligence is generated. In NeuroLink, neurons are the AI providers, including: Anthropic, OpenAI, Google (AI Studio + Vertex), AWS (Bedrock + SageMaker), Azure, Mistral, LiteLLM, OpenRouter, Ollama, Hugging Face, DeepSeek, NVIDIA NIM, LM Studio, llama.cpp, OpenAI-compatible endpoints, TypeSafe Jev, Laya and XOR (decision-only) ā plus voice neurons (OpenAI TTS, ElevenLabs, Google TTS, Azure TTS, Whisper, Deepgram, Azure STT, Google STT), realtime neurons (OpenAI Realtime, Gemini Live), and media-generation neurons (image, video, music, avatar).\n\nEach provider is a different type of neuron ā different capabilities, different costs, different latency profiles. NeuroLink's ProviderRegistry gives you access to all of them through one interface, switchable with a single line.","hierarchy":{"lvl0":"About","lvl1":"The Nervous System Model","lvl2":"Neurons ā LLM Providers","lvl3":""}},
|
|
119
119
|
{"objectID":"96f94c64476fe5567b61e5374da6d1b5c5020e22654c6c082b8936ae3f72eb51","title":"The Pipe ā NeuroLink","url":"/docs/about/nervous-system-model#the-pipe-neurolink","content":"The pipe is the vascular layer that carries streams between neurons and organs. This is NeuroLink itself.\n\nWhat the pipe does every time you call generate() or stream():\nContext Building ā RAG retrieval, memory lookup, file processing merge into the prompt\nBudget Check ā BudgetChecker validates the assembled context fits the model's window\nProvider Dispatch ā ProviderRegistry routes to the correct neuron\nStream Emission ā Tokens flow as an async iterable\nTool Interception ā When the model calls a tool, the stream pauses, MCP tool executes, result injects, stream continues\nObservability ā Every stage emits OpenTelemetry spans","hierarchy":{"lvl0":"About","lvl1":"The Nervous System Model","lvl2":"The Pipe ā NeuroLink","lvl3":""}},
|
|
120
120
|
{"objectID":"1c74200e8d4572e84dca981b50bb162912b4c6700ea7495d60fe286cfb16347f","title":"Organs ā Connectors","url":"/docs/about/nervous-system-model#organs-connectors","content":"Organs are the applications that consume the pipe. They connect to the vascular layer and open a gateway ā a specific way for people or systems to interact with AI.\n\nEvery application built on NeuroLink is an organ. Production organs today:\nAutomatic ā Shopify operations hub: address intelligence, RTO risk scoring\nTara ā Slack engineering assistant: conversational AI with MCP tool access\nYama ā Code review judge: automated PR analysis and governance","hierarchy":{"lvl0":"About","lvl1":"The Nervous System Model","lvl2":"Organs ā Connectors","lvl3":""}},
|
|
121
121
|
{"objectID":"6c97c4e15e0de12e62fbb1994cc7b18328c9f2b0afa2b721d8f40f01e70d32f7","title":"Why This Model Works","url":"/docs/about/nervous-system-model#why-this-model-works","content":"The metaphor enforces good architecture:\n\nSeparation of concerns: Neurons (generation) and organs (consumption) are completely decoupled. Changing AI provider doesn't touch the application. Changing the application doesn't touch the provider.\n\nSingle flow direction: Intelligence flows one way ā neuron ā pipe ā organ. There's no confusion about where logic lives.\n\nObservable by default: A vascular system you can't monitor is dangerous. Every stage of the pipe emits telemetry by design.\n\nComposable: Multiple organs can share the same pipe. One NeuroLink instance serves many connectors.","hierarchy":{"lvl0":"About","lvl1":"The Nervous System Model","lvl2":"Why This Model Works","lvl3":""}},
|
|
@@ -781,7 +781,8 @@
|
|
|
781
781
|
{"objectID":"117773e42d8af865d4b220619b88760164a39e0e143fc65efbbb2ba3db723032","title":"stream <input> {#stream}","url":"/docs/cli/commands#stream-input-stream","content":"stream shares the same flags as generate and adds chunked output for live UIs. Evaluation results are emitted after the stream completes when --enableEvaluation is set.","hierarchy":{"lvl0":"Cli","lvl1":"CLI Command Reference","lvl2":"stream <input> {#stream}","lvl3":""}},
|
|
782
782
|
{"objectID":"112fba73837b247878d2a9e5e27da20722703f27b30aec829b7a5e7a35fa4907","title":"decide [state] {#decide}","url":"/docs/cli/commands#decide-state-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] {#decide}","lvl3":""}},
|
|
783
783
|
{"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":""}},
|
|
784
|
-
{"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
|
|
784
|
+
{"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":""}},
|
|
785
|
+
{"objectID":"a2363c0f4f7fce94452a1c2875ce15d2767aa37fd4a21a4a030393bd811191b9","title":"Ask about an image (XOR only); repeat --image for several, or use --video","url":"/docs/cli/commands#ask-about-an-image-xor-only-repeat---image-for-several-or-use---video","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. |\n| --provider | Decision provider to use: typesafe, laya or xor. Defaults to the first configured, in that order (TypeSafe, Laya, XOR). |\n| --model | Overrides the provider's configured model for this call. |\n| --image | An image for the model to read, as a file path or a data: URL. Repeat the flag for several (XOR takes up to 8). |\n| --video | One video for the model to read (MP4, MOV or WebM), as a file path or a data: URL. Prefer one kind of media per request. |\n| --timeout | Timeout in milliseconds. |\n| --format text\\|json, -f | Output format (default: text). With json, stdout carries only the resul","hierarchy":{"lvl0":"Cli","lvl1":"CLI Command Reference","lvl2":"Ask about an image (XOR only); repeat --image for several, or use --video","lvl3":""}},
|
|
785
786
|
{"objectID":"7b43d630a9f7ed5a224fe8887281efede99fe513e10cd3d1322dfb30ded920b0","title":"batch <file> {#batch}","url":"/docs/cli/commands#batch-file-batch","content":"Process multiple prompts from a file in sequence.\n\n`bash","hierarchy":{"lvl0":"Cli","lvl1":"CLI Command Reference","lvl2":"batch <file> {#batch}","lvl3":""}},
|
|
786
787
|
{"objectID":"7295bf29c7231cdfbc08cfe63fa54bdd96d158a2f3d4ffb093a8d86826c42abf","title":"Process prompts from a file","url":"/docs/cli/commands#process-prompts-from-a-file","content":"npx @juspay/neurolink batch prompts.txt","hierarchy":{"lvl0":"Cli","lvl1":"CLI Command Reference","lvl2":"Process prompts from a file","lvl3":""}},
|
|
787
788
|
{"objectID":"f5a81a31f8f017423e190eed5892ad06dbeb9bc3d55c3224a9e34909c9332aad","title":"Export results as JSON","url":"/docs/cli/commands#export-results-as-json","content":"npx @juspay/neurolink batch questions.txt --format json","hierarchy":{"lvl0":"Cli","lvl1":"CLI Command Reference","lvl2":"Export results as JSON","lvl3":""}},
|
|
@@ -2628,10 +2629,10 @@
|
|
|
2628
2629
|
{"objectID":"d90c4af28403b7660202646864195bb2ff353a7f7a29ae72f01fd8aa997a39dd","title":"The model pick faces a bar too ā but a different one","url":"/docs/features/classifier-router-jev-strategy#the-model-pick-faces-a-bar-too-but-a-different-one","content":"When the pool has more than one member, jev is also asked to choose directly:\n_\"Which of these models is the cheapest one that can still complete this\nrequest correctly?\"_ ā over\nthe rendered candidate lines.\nThat pick is reported with its own confidence, separate from the difficulty\nconfidence, and the router decides which bar applies:\n\nPicking something costlier than what the difficulty tier would have picked\non its own risks only spending more than necessary, so it clears the low\nupgrade bar. Picking something cheaper risks handing the task to a model\nthat cannot do it, so it must clear the high downgrade bar. Agreeing with the\ntier needs no bar at all. If the pick fails its bar, it is dropped ā logged as\n\"classifier pick dropped ā below its bar\" ā and the tier's own ranked list is\nused instead.\n\nThis is a genuinely different question from the difficulty asymmetry above:\nthat one asks whether the tier is trustworthy; this one asks whether the\nspecific model choice, once a tier is settled, is trustworthy ā and the two\ncan point in opposite directions (a confident-enough \"hard\" verdict whose model\npick still misses its own, stricter bar).\n\nA pick that cannot physically hold the request is not gated at all ā it is\ndropped outright, regardless of confidence, because that is a hard provider\nerror rather than a degraded answer: see\nthe catalogue's context-window filtering.\n\nThe llm strategy's picks are exempt from both bars: it reports no confidence\nfor its pick, so a bar would either always pass or always fail. Its picks are\nhonoured exactly as they were before jev existed ā imposing a bar here would\nsilently change an unrelated, already-shipped strategy.","hierarchy":{"lvl0":"Features","lvl1":"Model routing with a decision model","lvl2":"The model pick faces a bar too ā but a different one","lvl3":""}},
|
|
2629
2630
|
{"objectID":"4553a84789531ca2e1bad075175d684e27e4ab3fcbb009062048cdf11765c2fb","title":"What this is bad at","url":"/docs/features/classifier-router-jev-strategy#what-this-is-bad-at","content":"It cannot tell you why. The reason field is a debug string built from\n the numbers, not an explanation the model gave. If you need an auditable\n rationale for a routing decision, this is the wrong tool.\nA close call still routes somewhere. A 0.29 upgrade verdict and a 0.61\n downgrade verdict are both one hundredth of a point from the bar, and both\n fall all the way back to the heuristic tier rather than to \"the second most\n likely tier.\" There is no partial credit.\nThe risk question is a single boolean. It cannot express \"risky, but\n only mildly\" ā anything past 0.7 jumps straight to hard, whatever the\n actual severity.\nIt shares the base model's general limits. Literal reading, no\n arithmetic, and state relevance affecting accuracy all apply here exactly as\n described in what decide is bad at.\nThe pool still has to exist. jev chooses among what you declared (or\n what the catalogue built); it\n cannot invent a model you have no credentials for.","hierarchy":{"lvl0":"Features","lvl1":"Model routing with a decision model","lvl2":"What this is bad at","lvl3":""}},
|
|
2630
2631
|
{"objectID":"ab4d25365369a722077741378e60be6e3ef36f612ed7a85340c93cf9d47223da","title":"See also","url":"/docs/features/classifier-router-jev-strategy#see-also","content":"The decide inference type\nClassifier Router\nThe model catalogue\nPer-request context budget","hierarchy":{"lvl0":"Features","lvl1":"Model routing with a decision model","lvl2":"See also","lvl3":""}},
|
|
2631
|
-
{"objectID":"3f990fb1489f99d505b19941e00fd05b9368a5a91745c83666639aac85865343","title":"Classifier Router","url":"/docs/features/classifier-router","content":"Classifier Router\n\nStatus: Stable | Availability: SDK + CLI | Opt-in (disabled by default)\n\nOverview\n\nThe Classifier Router lets NeuroLink decide, per request, which model to use (and, optionally, which tools to expose) from a pool you declare ā routing hard/complex tasks to more capable models and easy tasks to cheaper, faster ones. You give it a pool of models; it classifies the incoming prompt and switches to the best one transparently before the call runs.\n\nIt is opt-in (classifierRouter.enabled defaults to false), fails open (any classifier/selection error leaves the call exactly as it would have been), and is fully backward compatible ā a default new NeuroLink() is unchanged.\n\nTypical use cases:\nCost optimization ā send \"hi\" to a cheap model and a multi-step architecture question to a powerful one, automatically.\nLatency optimization ā keep simple turns on fast models.\nCustom / self-hosted fleets ā route across LiteLLM, OpenAI-compatible, or Ollama models that aren't in any registry.\nPer-difficulty tool scoping ā expose fewer tools for trivial tasks.\n\nHow it works\n\nEach request flows through two stages:\nClassify ā produce a difficulty bucket (trivial | simple | moderate | hard | expert) plus optional requiredCapabilities and tool hints. Four strategies:\nauto (default): resolves to jev when
|
|
2632
|
+
{"objectID":"3f990fb1489f99d505b19941e00fd05b9368a5a91745c83666639aac85865343","title":"Classifier Router","url":"/docs/features/classifier-router","content":"Classifier Router\n\nStatus: Stable | Availability: SDK + CLI | Opt-in (disabled by default)\n\nOverview\n\nThe Classifier Router lets NeuroLink decide, per request, which model to use (and, optionally, which tools to expose) from a pool you declare ā routing hard/complex tasks to more capable models and easy tasks to cheaper, faster ones. You give it a pool of models; it classifies the incoming prompt and switches to the best one transparently before the call runs.\n\nIt is opt-in (classifierRouter.enabled defaults to false), fails open (any classifier/selection error leaves the call exactly as it would have been), and is fully backward compatible ā a default new NeuroLink() is unchanged.\n\nTypical use cases:\nCost optimization ā send \"hi\" to a cheap model and a multi-step architecture question to a powerful one, automatically.\nLatency optimization ā keep simple turns on fast models.\nCustom / self-hosted fleets ā route across LiteLLM, OpenAI-compatible, or Ollama models that aren't in any registry.\nPer-difficulty tool scoping ā expose fewer tools for trivial tasks.\n\nHow it works\n\nEach request flows through two stages:\nClassify ā produce a difficulty bucket (trivial | simple | moderate | hard | expert) plus optional requiredCapabilities and tool hints. Four strategies:\nauto (default): resolves to jev when a decision provider is configured (TYPESAFE_API_KEY, LAYA_API_KEY with LAYA_BASE_URL, or XOR_API_KEY with XOR_BASE_URL), and heuristic otherwise. Setting a key therefore upgrades routing with no code change; without one, behaviour is exactly as it was.\nheuristic: zero-cost keyword/length scoring of the prompt text. No LLM call, fully deterministic, provider-agnostic.\nllm: a cheap \"classifier model\" reads the prompt and returns a difficulty ā and, when given your pool, picks a model directly by id.\njev: a decision model (the configured decision provider ā TypeSafe's Jev by default) answers difficulty, required capabilities and the model pick in one ~400 ms request, with a calibrated confidence. Verdicts that miss the applicable confidence bar (minUpgradeConfidence 0.3 to route up, minDowngradeConfidence 0.6 to route down) fall through to the heuristic rather than acting on a guess. See the decide inference type.\nSelect ā turn that into a concrete { provider, model, region } from your pool, optionally narrowing tools.\n\nThe router runs before the provider/model is constructed (it reuses the same pre-call seam as requestRouter). It is skipped when the caller pinned both provider and model, or when a modelPool is configured (the pool owns selection).\n\nQuick start (heuristic, SDK)\n\nDefining \"which model for which case\"\n\nThe router resolves a model using the first of these that applies:\n\n| # | Mechanism | How you define it | Best for |\n| --- | ---------------------- | ---------------------------------------------------------------------------------- | ------------------------------------- |\n| 1 | LLM direct pick | classifier: \"llm\" + a description on each pool member | Custom/registry-less models; smartest |\n| 2 | tierMap | Explicit difficulty ā members map | Full, deterministic control |\n| 3 | Per-member tiers | tiers: [\"hard\",\"expert\"] on a member | Simple, explicit, generic |\n| 4 | Metadata scoring | cost / quality per member (declared, or auto-enriched from the model registry) | Known models with comparable metadata |\n\nWhen two members can't be separated (e.g. equal declared quality, or the model registry only knows both as \"high\" quality), the router keeps the declared pool order. For reliable hard-vs-easy separation, prefer mechanisms 1ā3, or give members distinct quality values.\n\nMetadata scoring rules\ntrivial / simple ā cheapest first (cost ascending)\nmoderate ā best quality ā cost\nhard / expert ā most capable first (quality descending)\n\nMembers may declare cost (relative, lower = cheaper) and quality (relative, higher = more capable). If omitted, NeuroLink tries to enrich them from its model registry; if the model is unknown (e.g. a custom LiteLLM endpoint), use mechanisms 1ā3 instead.\n\nCustom & self-hosted models (LiteLLM, OpenAI-compatible, Ollama)\n\nThese models aren't in any registry, so define routing explicitly ā both approaches are fully generic:\n\nHeuristic + tiers (deterministic, no LLM cost):\n\nLLM picks per-prompt from plain-English descriptions (most flexible):\n\nThe classifier model is shown each candidate's id (defaults to provider/model) and description, and returns the best id for the prompt. An invalid or absent pick falls back to difficulty-based selection; any classifier failure falls back to the heuristic.\n\nNarrowing tools per difficulty\n\nFilter the tool set per difficulty with toolDirectives (and/or let the LLM classifier suggest too","hierarchy":{"lvl0":"Features","lvl1":"Classifier Router","lvl2":"","lvl3":""}},
|
|
2632
2633
|
{"objectID":"b8bb35b0db438959a0a557c68b22afa16480504b96128260a8947ba3c8a81f9f","title":"Classifier Router","url":"/docs/features/classifier-router#classifier-router","content":"Status: Stable | Availability: SDK + CLI | Opt-in (disabled by default)","hierarchy":{"lvl0":"Features","lvl1":"Classifier Router","lvl2":"Classifier Router","lvl3":""}},
|
|
2633
2634
|
{"objectID":"543ddabeefd7754f6047758090a6a0ac6f517c98b9afb146645b9073ad75c5ee","title":"Overview","url":"/docs/features/classifier-router#overview","content":"The Classifier Router lets NeuroLink decide, per request, which model to use (and, optionally, which tools to expose) from a pool you declare ā routing hard/complex tasks to more capable models and easy tasks to cheaper, faster ones. You give it a pool of models; it classifies the incoming prompt and switches to the best one transparently before the call runs.\n\nIt is opt-in (classifierRouter.enabled defaults to false), fails open (any classifier/selection error leaves the call exactly as it would have been), and is fully backward compatible ā a default new NeuroLink() is unchanged.\n\nTypical use cases:\nCost optimization ā send \"hi\" to a cheap model and a multi-step architecture question to a powerful one, automatically.\nLatency optimization ā keep simple turns on fast models.\nCustom / self-hosted fleets ā route across LiteLLM, OpenAI-compatible, or Ollama models that aren't in any registry.\nPer-difficulty tool scoping ā expose fewer tools for trivial tasks.","hierarchy":{"lvl0":"Features","lvl1":"Classifier Router","lvl2":"Overview","lvl3":""}},
|
|
2634
|
-
{"objectID":"abdbdbfcfd51c6b40ef9cdf848fa23aeb87e4e4513c71572f89ee754be41d834","title":"How it works","url":"/docs/features/classifier-router#how-it-works","content":"Each request flows through two stages:\nClassify ā produce a difficulty bucket (trivial | simple | moderate | hard | expert) plus optional requiredCapabilities and tool hints. Four strategies:\nauto (default): resolves to jev when
|
|
2635
|
+
{"objectID":"abdbdbfcfd51c6b40ef9cdf848fa23aeb87e4e4513c71572f89ee754be41d834","title":"How it works","url":"/docs/features/classifier-router#how-it-works","content":"Each request flows through two stages:\nClassify ā produce a difficulty bucket (trivial | simple | moderate | hard | expert) plus optional requiredCapabilities and tool hints. Four strategies:\nauto (default): resolves to jev when a decision provider is configured (TYPESAFE_API_KEY, LAYA_API_KEY with LAYA_BASE_URL, or XOR_API_KEY with XOR_BASE_URL), and heuristic otherwise. Setting a key therefore upgrades routing with no code change; without one, behaviour is exactly as it was.\nheuristic: zero-cost keyword/length scoring of the prompt text. No LLM call, fully deterministic, provider-agnostic.\nllm: a cheap \"classifier model\" reads the prompt and returns a difficulty ā and, when given your pool, picks a model directly by id.\njev: a decision model (the configured decision provider ā TypeSafe's Jev by default) answers difficulty, required capabilities and the model pick in one ~400 ms request, with a calibrated confidence. Verdicts that miss the applicable confidence bar (minUpgradeConfidence 0.3 to route up, minDowngradeConfidence 0.6 to route down) fall through to the heuristic rather than acting on a guess. See the decide inference type.\nSelect ā turn that into a concrete { provider, model, region } from your pool, optionally narrowing tools.\n\nThe router runs before the provider/model is constructed (it reuses the same pre-call seam as requestRouter). It is skipped when the caller pinned both provider and model, or when a modelPool is configured (the pool owns selection).","hierarchy":{"lvl0":"Features","lvl1":"Classifier Router","lvl2":"How it works","lvl3":""}},
|
|
2635
2636
|
{"objectID":"08f69ffa1f39bf410a5c236efa5f21f51efc93034747ddab6d761f4b1615d7df","title":"Defining \"which model for which case\"","url":"/docs/features/classifier-router#defining-which-model-for-which-case","content":"The router resolves a model using the first of these that applies:\n\n| # | Mechanism | How you define it | Best for |\n| --- | ---------------------- | ---------------------------------------------------------------------------------- | ------------------------------------- |\n| 1 | LLM direct pick | classifier: \"llm\" + a description on each pool member | Custom/registry-less models; smartest |\n| 2 | tierMap | Explicit difficulty ā members map | Full, deterministic control |\n| 3 | Per-member tiers | tiers: [\"hard\",\"expert\"] on a member | Simple, explicit, generic |\n| 4 | Metadata scoring | cost / quality per member (declared, or auto-enriched from the model registry) | Known models with comparable metadata |\n\nWhen two members can't be separated (e.g. equal declared quality, or the model registry only knows both as \"high\" quality), the router keeps the declared pool order. For reliable hard-vs-easy separation, prefer mechanisms 1ā3, or give members distinct quality values.","hierarchy":{"lvl0":"Features","lvl1":"Classifier Router","lvl2":"Defining \"which model for which case\"","lvl3":""}},
|
|
2636
2637
|
{"objectID":"bd4863bf711f00f17fb26ea1e60a541aef1f396afc1050ee47b9e29731c90f9a","title":"Metadata scoring rules","url":"/docs/features/classifier-router#metadata-scoring-rules","content":"trivial / simple ā cheapest first (cost ascending)\nmoderate ā best quality ā cost\nhard / expert ā most capable first (quality descending)\n\nMembers may declare cost (relative, lower = cheaper) and quality (relative, higher = more capable). If omitted, NeuroLink tries to enrich them from its model registry; if the model is unknown (e.g. a custom LiteLLM endpoint), use mechanisms 1ā3 instead.","hierarchy":{"lvl0":"Features","lvl1":"Classifier Router","lvl2":"Metadata scoring rules","lvl3":""}},
|
|
2637
2638
|
{"objectID":"9e5f93906c1460117b27372537b30d578daec8b1d3fc38ecf1b0fb05c9944801","title":"Custom & self-hosted models (LiteLLM, OpenAI-compatible, Ollama)","url":"/docs/features/classifier-router#custom-self-hosted-models-litellm-openai-compatible-ollama","content":"These models aren't in any registry, so define routing explicitly ā both approaches are fully generic:\n\nHeuristic + tiers (deterministic, no LLM cost):\n\nLLM picks per-prompt from plain-English descriptions (most flexible):\n\nThe classifier model is shown each candidate's id (defaults to provider/model) and description, and returns the best id for the prompt. An invalid or absent pick falls back to difficulty-based selection; any classifier failure falls back to the heuristic.","hierarchy":{"lvl0":"Features","lvl1":"Classifier Router","lvl2":"Custom & self-hosted models (LiteLLM, OpenAI-compatible, Ollama)","lvl3":""}},
|
|
@@ -3337,16 +3338,18 @@
|
|
|
3337
3338
|
{"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":""}},
|
|
3338
3339
|
{"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":""}},
|
|
3339
3340
|
{"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":""}},
|
|
3340
|
-
{"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, calibrated 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. TypeSafe's Jev
|
|
3341
|
-
{"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, calibrated 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. TypeSafe's Jev
|
|
3342
|
-
{"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
|
|
3341
|
+
{"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, calibrated 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 and Juspay's open-weights XOR, which also reads images\nand video.\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_. It is calibrated ā derived from the distribution, not\nself-reported ā which is what makes it usable as a gate.\n\nCalibration is a property of groups of answers, not a promise about any\none. Across many answers, those scored 0.8 are right about 80% of the time.\nIt 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/systemone, and a trailing /v1 on the base URL\nis accepted. The base URL and key can equally come from the config passed to the\nSDK, new NeuroLink({ credentials: { xor: { baseURL, apiKey } } }), or per\ncall; 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-1.1, 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. XOR counts as configured only with both its key and its\nbase URL, and runs where a caller names it (provider: \"xor\") or when neither\nof the others is configured. It is the one that reads images and video; see\nImages and video and the\nXOR provider guide.\n\nThe degradation contract. resolveDefaultDecisionProvider() returns\nundefined when no decision provider has its key set, and tryDecide() returns\nnull on any failure. There is no configuration in which a missing, invalid,\nslow or unreachable decision model changes NeuroLink's observable behaviour ā\nit only ever falls back to what it did before.\n\nA credential the service does not accept disables that provider ","hierarchy":{"lvl0":"Features","lvl1":"The `decide` inference type","lvl2":"","lvl3":""}},
|
|
3342
|
+
{"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, calibrated 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 and Juspay's open-weights XOR, which also reads images\nand video.\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":""}},
|
|
3343
|
+
{"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":""}},
|
|
3343
3344
|
{"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_. It is calibrated ā derived from the distribution, not\nself-reported ā which is what makes it usable as a gate.\n\nCalibration is a property of groups of answers, not a promise about any\none. Across many answers, those scored 0.8 are right about 80% of the time.\nIt 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":""}},
|
|
3344
3345
|
{"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":""}},
|
|
3345
|
-
{"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
|
|
3346
|
+
{"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":""}},
|
|
3347
|
+
{"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/systemone, and a trailing /v1 on the base URL\nis accepted. The base URL and key can equally come from the config passed to the\nSDK, new NeuroLink({ credentials: { xor: { baseURL, apiKey } } }), or per\ncall; 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-1.1, 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. XOR counts as configured only with both its key and its\nbase URL, and runs where a caller names it (provider: \"xor\") or when neither\nof the others is configured. It is the one that reads images and video; see\nImages and video and the\nXOR provider guide.\n\nThe degradation contract. resolveDefaultDecisionProvider() returns\nundefined when no decision provider has its key set, and tryDecide() returns\nnull on any failure. There is no configuration in which a missing, invalid,\nslow or unreachable decision model changes NeuroLink's observable behaviour ā\nit only ever falls back to what it did before.\n\nA credential the service does not accept disables that provider instance rather\nthan paying a round trip on every later call to be told so again. An XOR 403 or\n402 is not that case: on a LiteLLM proxy it means the key's team lacks the model\nor the budget, which an admin can fix, so the instance is not disabled.","hierarchy":{"lvl0":"Features","lvl1":"The `decide` inference type","lvl2":"XOR, at a deployment or a LiteLLM proxy route","lvl3":""}},
|
|
3346
3348
|
{"objectID":"7990ffc08aca0afbeae4310cfdcd3758daf52da4d9edd1da90a82b683f4d7d41","title":"Two transports","url":"/docs/features/decide-inference-type#two-transports","content":"The same model is reachable two ways. Which one runs is decided once, in the\nconstructor:\n\n| | Direct | Vercel AI Gateway |\n| ------------------- | ------------------ | --------------------------------------------- |\n| Key | TYPESAFE_API_KEY | AI_GATEWAY_API_KEY |\n| Endpoint | api.typesafe.ai | ai-gateway.vercel.sh/v4/ai/evaluation-model |\n| Model named in | request body | ai-model-id header |\n| Question vocabulary | noul | boolean |\n| confidence | on each answer | on providerMetadata, not on the answer |\n| Billed by | TypeSafe | Vercel |\n\nHolding both keys keeps the direct transport, so the confidence figures a\nhost already sees do not shift underneath it when a second key appears. Both\ntransports report the vendor's calibrated confidence ā the gateway simply puts\nit somewhere else, under providerMetadata.typesafe.confidence.<questionId>,\nleaving the answer objects without one. Set TYPESAFE_TRANSPORT=gateway (or\ncredentials.typesafe.transport) to override.\n\nā ļø Read that field, not the distribution peak. It is tempting to take\nmax(probabilities) when an answer carries no confidence, and on a\nnear-certain answer the two agree. On an uncertain one they do not, and not by a\nlittle: a measured four-way choice returned probabilities\n{alpha 0.16, beta 0.28, gamma 0.33, delta 0.23} ā a peak of 0.33 against a\nreported confidence of 0.10. That gap straddles the default\nminUpgradeConfidence of 0.3, so the derived number clears a bar the real one\nfails and a near-random pick gets acted on as a confident one. The peak stays as\nthe fallback when neither source reports a confidence, and it is genuinely a\ndifferent quantity: an even distribution over N options lands near 1/N, not 0.\n\nUsage is spelled differently t","hierarchy":{"lvl0":"Features","lvl1":"The `decide` inference type","lvl2":"Two transports","lvl3":""}},
|
|
3347
3349
|
{"objectID":"e5df7db87d4cb31c67fcce769cf5a3573764cb358ed9ee4b41f7ce86cb3954b7","title":"Using it","url":"/docs/features/decide-inference-type#using-it","content":"readDecisionBoolean / readDecisionChoice / readDecisionScore validate at\nruntime and return undefined for a missing id or a mismatched type, so no\ncall site needs a type assertion.\n\nUse decide() instead of tryDecide() when you want the failure to surface;\nit throws a ProviderError whose cause carries a typed kind\n(authentication, rate_limit, max_tokens_exceeded, ā¦).","hierarchy":{"lvl0":"Features","lvl1":"The `decide` inference type","lvl2":"Using it","lvl3":""}},
|
|
3348
|
-
{"objectID":"7232a490e9e72e01dbe1a12de9470a38ed66ef91aa076b8c8cc745770eb03545","title":"From the CLI","url":"/docs/features/decide-inference-type#from-the-cli","content":"The same primitive is available as neurolink decide [state], which calls\ndecide() (not tryDecide()) and prints one line per answer:\n\nSee the CLI command reference for the full flag\nlist, including --state-file, --questions-file
|
|
3350
|
+
{"objectID":"7232a490e9e72e01dbe1a12de9470a38ed66ef91aa076b8c8cc745770eb03545","title":"From the CLI","url":"/docs/features/decide-inference-type#from-the-cli","content":"The same primitive is available as neurolink decide [state], which calls\ndecide() (not tryDecide()) and prints one line per answer:\n\nTo ask about an image or a video, add --image <path> (repeatable) or\n--video <path>; only XOR reads media:\n\nSee the CLI command reference for the full flag\nlist, including --state-file, --questions-file, --image, --video and\n--format json.","hierarchy":{"lvl0":"Features","lvl1":"The `decide` inference type","lvl2":"From the CLI","lvl3":""}},
|
|
3349
3351
|
{"objectID":"3b801c727cb399feb7390c3ad67aba9ea5f77581096bb852b7aafb87b70998aa","title":"A choice answer is also a ranking","url":"/docs/features/decide-inference-type#a-choice-answer-is-also-a-ranking","content":"readDecisionChoice returns ranked ā every option sorted by probability,\nhighest first. One choice question over N options therefore ranks all N in a\nsingle request. This is the basis for picking from a large catalogue.","hierarchy":{"lvl0":"Features","lvl1":"The `decide` inference type","lvl2":"A choice answer is also a ranking","lvl3":""}},
|
|
3352
|
+
{"objectID":"e67682840a5ce9650dba2a1d437b0dfbba456cae60fa3f607127e209bf1ec3e7","title":"Images and video","url":"/docs/features/decide-inference-type#images-and-video","content":"A decision provider whose descriptor declares media limits reads images and one\nvideo alongside state. XOR does; TypeSafe and Laya do not. Two optional fields\non the request carry them, for decide() and tryDecide() alike:\nimages ā up to 8 images, the limit XOR declares.\nvideo ā one video.\n\nEach image and the video takes the same three input forms:\na Buffer;\na local file path;\na data:image/ā¦;base64, or data:video/ā¦;base64, URL.\n\nNeuroLink identifies a Buffer or a file from its bytes, not its extension ā PNG,\nJPEG, WebP and GIF images, and MP4, MOV and WebM video ā\nand sends it as a data: URL. A data: URL you pass yourself must hold base64\nimage or video content, and is sent as given.\n\nWhat is refused. Everything NeuroLink can check is refused before any\nrequest, as a non-retryable invalid_request:\nan http(s) URL ā media is not fetched for you, so pass a Buffer, a file path\n or a data: URL;\na string that is not a file path or a data: URL, such as bare base64 or a\n URL with another scheme;\na missing file, a directory, or an empty Buffer or file;\nsomething that is not an image or a video;\nmore than 8 images;\na request body over 8 MB. The limit applies to the encoded body, so the base64\n form counts. A file over it is refused from its size, before it is read;\nany media sent to a provider that declares no media capability (TypeSafe,\n Laya). The message names the providers that accept media.\n\nImages and a video can be sent together (up to 8 images and one video), but\nthe model does not reliably tell the two apart.\n\nThe result carries mediaBytes, the encoded size of the media sent. The\ndecide spans carry decision.images.count and decision.media.bytes, and\nnever any base64. A deployment started without OPENJEV_IMAGES=1 answers 200\nand silently ignores images, which NeuroLink cannot detect; see the\nXOR provider guide.","hierarchy":{"lvl0":"Features","lvl1":"The `decide` inference type","lvl2":"Images and video","lvl3":""}},
|
|
3350
3353
|
{"objectID":"a6077cedd1ca3e03b757da9a2ef8c185a56d2f1032dd5ed43fe28bd71454836c","title":"The one rule: batch, never fan out","url":"/docs/features/decide-inference-type#the-one-rule-batch-never-fan-out","content":"This inverts the instinct you have from LLMs.\n\nQuestion count barely affects latency (measured against the live API):\n\n| questions | round trip | input tokens |\n| --------- | ---------- | ------------ |\n| 1 | 393 ms | 310 |\n| 10 | 390 ms | 481 |\n| 100 | 423 ms | 2 281 |\n| 400 | 465 ms | 8 581 |\n\n400 questions cost ~70 ms more than one. Concurrent requests, by contrast,\nqueue: ten parallel calls take ~1.4 s wall with nine landing together at the\nend, while the server's own upstream time stays flat at 64ā169 ms.\n\nSo 400 things in one request takes ~465 ms; the same 400 as separate requests\ntakes roughly a minute. Add every question you might need to the call you are\nalready making ā speculative questions are nearly free, a second round trip is\nnot.","hierarchy":{"lvl0":"Features","lvl1":"The `decide` inference type","lvl2":"The one rule: batch, never fan out","lvl3":""}},
|
|
3351
3354
|
{"objectID":"0c1ce0b91d624674d6b4cc3b1f67fad986bcdfd379812b89e121784a94408ec3","title":"Model routing","url":"/docs/features/decide-inference-type#model-routing","content":"The classifier router gains a jev\nstrategy, and its default becomes auto ā resolving to jev when a decision\nprovider is configured and heuristic when not.\n\nOne request asks for the difficulty tier, whether the task needs\nvision/tools/reasoning, whether carrying it out is risky, and which pool\nmember to use ā all at once, in ~400 ms.\n\n| | heuristic | llm | jev |\n| ---------------------- | ------------- | ------------------------------- | ---------- |\n| Added latency | 0 ms | ~1ā8 s | ~400 ms |\n| Cost per decision | none | a full LLM call | ~$0.00002 |\n| Confidence | keyword score | self-reported (defaults to 0.7) | calibrated |\n| Picks a model directly | no | yes | yes |\n\nThresholds are asymmetric, because the two mistakes do not cost the same:\nminUpgradeConfidence defaults to 0.3 (spending more on a wrong guess costs\nmoney) and minDowngradeConfidence to 0.6 (spending less on a wrong guess\nproduces a wrong answer).\n\nThe key upgrades routing; it does not switch routing on. The classifier\nrouter is still opt-in (classifierRouter.enabled) and still needs a pool,\nbecause NeuroLink cannot invent the set of models you are willing to route\nbetween. What the key changes is which classifier runs inside a router you\nalready enabled.","hierarchy":{"lvl0":"Features","lvl1":"The `decide` inference type","lvl2":"Model routing","lvl3":""}},
|
|
3352
3355
|
{"objectID":"40f783ceca290c039cce7f0199ab5758d7a0719b0a91c335c1c6e490a72b1412","title":"The model catalogue","url":"/docs/features/decide-inference-type#the-model-catalogue","content":"Enabling classifierRouter.catalog widens the routable pool beyond what you\ndeclared by hand: candidates are built from the 64-model registry (7\nproviders ā see the model catalogue\nfor which), intersected with the credentials this host actually holds, and\nranked by a deterministic formula whenever no decision provider is available\nto choose among them.\n\n| | Without catalog | With catalog.enabled |\n| -------------- | ------------------------ | ------------------------------------- |\n| Candidate pool | only the declared pool | declared pool plus registry matches |\n| Fallback pick | first pool member | tierScore()-ranked, tier-aware |\n| Cap | none needed | maxModels, default 120 |\n\nSee the model catalogue for how\ncandidates are filtered, rendered, and ranked.","hierarchy":{"lvl0":"Features","lvl1":"The `decide` inference type","lvl2":"The model catalogue","lvl3":""}},
|
|
@@ -3354,9 +3357,9 @@
|
|
|
3354
3357
|
{"objectID":"ac97e63916f0ffdf1d9befada357186f236753d40ea1f0e97bcab715e54fa7cd","title":"Relevance-driven compaction","url":"/docs/features/decide-inference-type#relevance-driven-compaction","content":"Before the existing positional compaction stages run, an optional Stage 0\nasks, per eligible message, whether the current request still needs it ā at\n~400 ms for the whole batch regardless of message count. Only plain\nuser/assistant text is eligible, the most recent messages are never\ntouched, and a message is dropped only on a confident \"no.\"\n\n| | Positional stages (1ā4) | Stage 0 (relevance) |\n| ----------------- | ---------------------------------- | ------------------------------------------------------------ |\n| Basis for keeping | position (recency) | relevance to the current request |\n| Drop granularity | whole messages / summarized ranges | whole messages |\n| Runs when | always, once over budget | decision provider configured, request known, and over budget |\n\nSee relevance-driven compaction for\nthe eligibility rules, the drop cap, and the separate summary-quality gate on\nStage 3.","hierarchy":{"lvl0":"Features","lvl1":"The `decide` inference type","lvl2":"Relevance-driven compaction","lvl3":""}},
|
|
3355
3358
|
{"objectID":"451d199b91f25696bed61dedb5ebc0465143dbf3bc350ca8a3943e622f9aedf8","title":"Tool / MCP routing","url":"/docs/features/decide-inference-type#tool-mcp-routing","content":"The shipped tool router asks a generative model for {servers: string[]} on\na 15-second budget ā a shape that cannot express uncertainty. A decision\nmodel instead asks one calibrated yes/no question per server, and a server is\nexcluded only on a confident \"no\" (minDropConfidence default 0.6), because\ndropping a needed server breaks the turn while keeping an unneeded one only\ncosts a few tokens.\n\nA measured wording change moved unrelated servers from a mean probability of\n0.31 (dropping 12 of 39 unneeded servers) to a mean of 0.03 (dropping 37 of\n39, with zero wrong drops) ā seen in\ntool / MCP routing by decision model,\nwhich also covers the exact question shape and its size guards.","hierarchy":{"lvl0":"Features","lvl1":"The `decide` inference type","lvl2":"Tool / MCP routing","lvl3":""}},
|
|
3356
3359
|
{"objectID":"b35e1ab2390a7b132037c293ecaf436f9ff9498591ccdd47b58ee0a6a95e7616","title":"RAG retrieval planning","url":"/docs/features/decide-inference-type#rag-retrieval-planning","content":"RAGPipelineConfig.decide lets each RAG query get its own topK/hybrid/\ngraph/rerank plan instead of one fixed configuration for every query. An\nexplicit per-call QueryOptions field always wins over the plan, and a\ncapability the pipeline wasn't configured with can never be switched on by\nit.\n\nSee per-query RAG retrieval planning\nfor the breadth rubric and why its confidence bar is deliberately lower than\ntool routing's or compaction's.","hierarchy":{"lvl0":"Features","lvl1":"The `decide` inference type","lvl2":"RAG retrieval planning","lvl3":""}},
|
|
3357
|
-
{"objectID":"6c0dd418b9f61219911960f90d1003a6c00c2e2cb81399ced3c885fd8209bc6e","title":"Limits and gotchas","url":"/docs/features/decide-inference-type#limits-and-gotchas","content":"Laya reads far less than Jev. About 768 tokens of state on\ntyped-decisions and multilingual, and 320 on english, auto or an\nunrecognised model name, against Jev's ~33,000. Laya's server does not refuse a\nlonger state; it answers from the first 1,024 tokens (512 on english). So the\nprovider estimates the state's size ā counting non-Latin characters at a rate\nmeasured per checkpoint ā and refuses anything over the limit locally with\nmax_tokens_exceeded, before any network call. The estimate errs toward\nrefusing.\n\nTwo separate size ceilings, both enforced:\nstate + the single longest question ⤠~33 000 tokens (measured\n exactly: 33 002 accepted, 33 003 rejected). Usually the binding one.\nstate + all questions combined ⤠~64 000 tokens.\n\nQuestions do not compete with state for the 33 K budget ā a near-ceiling\nstate plus 400 extra questions is accepted.\n\nThree different error envelopes. TypeSafe returns detail as an object for\napplication errors and as an array for schema validation; the gateway uses\nneither and returns {\"error\":{\"message\",\"type\"}}. The provider normalises all\nthree into one DecisionError. The validation shape echoes your input back,\nso it is never logged
|
|
3360
|
+
{"objectID":"6c0dd418b9f61219911960f90d1003a6c00c2e2cb81399ced3c885fd8209bc6e","title":"Limits and gotchas","url":"/docs/features/decide-inference-type#limits-and-gotchas","content":"Laya reads far less than Jev. About 768 tokens of state on\ntyped-decisions and multilingual, and 320 on english, auto or an\nunrecognised model name, against Jev's ~33,000. Laya's server does not refuse a\nlonger state; it answers from the first 1,024 tokens (512 on english). So the\nprovider estimates the state's size ā counting non-Latin characters at a rate\nmeasured per checkpoint ā and refuses anything over the limit locally with\nmax_tokens_exceeded, before any network call. The estimate errs toward\nrefusing.\n\nXOR shares one prefill between the state, the questions and any media.\nNeuroLink allows about 200,000 estimated tokens of state (about four characters\nper token for ASCII, one token per character for other scripts) and refuses more\nlocally with max_tokens_exceeded. That figure is a conservative default under\nthe deployment's 250,000-token prefill, which the questions and any images or\nvideo also draw on; it has not been measured against a live deployment. A\nrequest that passes the local check can therefore still be refused by the\nserver as too long. That arrives as max_tokens_exceeded (not retried) when\nthe status is 413 or the message says the context was too long, and otherwise as\nserver, retried once. XOR has no question cap in NeuroLink, and its server takes 2 to 255\noptions on a choice or score.\n\nTwo separate size ceilings, both enforced:\nstate + the single longest question ⤠~33 000 tokens (measured\n exactly: 33 002 accepted, 33 003 rejected). Usually the binding one.\nstate + all questions combined ⤠~64 000 tokens.\n\nQuestions do not compete with state for the 33 K budget ā a near-ceiling\nstate plus 400 extra questions is accepted.\n\nThree different error envelopes. TypeSafe returns detail as an object for\napplication errors and as an array for schema validation; the gateway uses\nneither and returns {\"error\":{\"message\",\"type\"}}. The provider normalises all\nthree into one DecisionError. The validation shape echoes your input back,\nso it is never logged o","hierarchy":{"lvl0":"Features","lvl1":"The `decide` inference type","lvl2":"Limits and gotchas","lvl3":""}},
|
|
3358
3361
|
{"objectID":"f6543a204326fbf7f27ac5c61c2f10b76f0541f3acb61eec93291921404e1a37","title":"What it is bad at","url":"/docs/features/decide-inference-type#what-it-is-bad-at","content":"\"Cannot hallucinate\" is a claim about output shape, not answer\ncorrectness: a decision model cannot return malformed JSON or an option you\ndid not offer, but it can still be wrong. TypeSafe reports ~68% accuracy on its\nown 711-case benchmark, against ~73% for a frontier model. It wins cost and\nlatency on every row and loses accuracy on every row ā so it is right for\ndecisions that are gated and reversible, and wrong for final answers.\nIt reads literally. It answers the question you wrote, not the one you\n meant. Split an ambiguous question into two and combine them in code.\nAsk about the act, not the subject. \"This task touches money\" scores high\n on ordinary code that merely concerns money. The risk question in\n classifyJev is worded to exclude writing and testing such code, precisely\n because the naive phrasing escalated everything.\nIt is not a calculator. Counting, arithmetic and date comparison are\n unreliable ā dates are read as text, not ordered quantities. A score is for\n thresholding and ranking, not for reading an exact magnitude off.\nIrrelevant state costs accuracy. Filter before sending.\nIt never explains itself. No rationale field exists, which rules it out\n where a decision must be auditable.\nOption order can matter. Test with reordered criteria if a call is close.\nDon't invert criteria. A boolean whose true description means \"no\"\n performs measurably worse.\n\nTune thresholds on your own labelled data if the decision matters, and once you\nhave, pin TYPESAFE_MODEL to a version id such as jev-1.13.0 ā jev-latest\nis an alias and can move under you, invalidating a tuned threshold silently.","hierarchy":{"lvl0":"Features","lvl1":"The `decide` inference type","lvl2":"What it is bad at","lvl3":""}},
|
|
3359
|
-
{"objectID":"f51228c123e6f86e1889f9990b2592debd24cc90c1584ad7d35d1f9a7aac8b82","title":"Adding another decision provider","url":"/docs/features/decide-inference-type#adding-another-decision-provider","content":"The decide inference type is provider-neutral by construction.
|
|
3362
|
+
{"objectID":"f51228c123e6f86e1889f9990b2592debd24cc90c1584ad7d35d1f9a7aac8b82","title":"Adding another decision provider","url":"/docs/features/decide-inference-type#adding-another-decision-provider","content":"The decide inference type is provider-neutral by construction. Another\ndecision model needs:\nAn AIProviderName member and a <Name>Models enum\n (src/lib/constants/enums.ts, outside the generated regions).\nA provider class extending BaseProvider that overrides decide() and\n implements getAISDKModel() / executeStream() as throws ā the same shape\n the embedding-only providers (voyage.ts, jina.ts) already use.\nA descriptor with inferenceKinds: [\"decide\"], no auto-select ranks, and\n healthCheck: \"env-only\". That one field is what keeps a text-less model out\n of every generation fallback chain; nothing else needs to know the provider\n by name. A provider that reads images or video also declares\n decisionLimits.media; without it, a request that carries media is refused\n before any network call.\nA registration block, a credentials slice, a manifest, and the usual Tier-3\n onboarding artifacts ā pnpm run verify:provider-onboarding enumerates them.\n\nThe Tier-2 catalog JSON path cannot be used: its schema pins tier: 2, accepts\nonly an 8-flag text-generation capability vocabulary, and requires\ndefaultMaxOutputTokens and pricingPerMTok.output ā none of which a model\nthat emits no text can honestly supply.","hierarchy":{"lvl0":"Features","lvl1":"The `decide` inference type","lvl2":"Adding another decision provider","lvl3":""}},
|
|
3360
3363
|
{"objectID":"31d00aee561a454dc5082ad8002f9dbc0e33f15463cfee1636497043c8f9ee55","title":"Testing","url":"/docs/features/decide-inference-type#testing","content":"The suite drives dist/index.js only. Live tests skip without\nTYPESAFE_API_KEY; the degradation and discriminator tests run unconditionally,\nbecause \"behaves correctly with no key\" and \"a text-less provider is unreachable\nfrom generation\" are the contracts that matter most.","hierarchy":{"lvl0":"Features","lvl1":"The `decide` inference type","lvl2":"Testing","lvl3":""}},
|
|
3361
3364
|
{"objectID":"d0993177d0de353bf96138199dbc9fad84b1bdff72bb534dc7c6a510266e3be9","title":"Embeddings","url":"/docs/features/embeddings","content":"Embeddings\n\nStatus: Stable | Availability: SDK + CLI + Server\n\nOverview\n\nEmbeddings convert text into dense numerical vectors that capture semantic meaning. Two texts with similar meanings produce vectors that are close together in the embedding space, enabling use cases like:\nSemantic search -- find documents by meaning rather than exact keyword match\nRAG pipelines -- retrieve relevant context before generating answers\nSimilarity comparison -- measure how related two pieces of text are\nClustering and classification -- group or categorize text automatically\n\nNeuroLink exposes embeddings through two provider methods (embed() and embedMany()), two server endpoints, and indirectly through the CLI's RAG commands. Every implementation calls its provider's embeddings API directly.\n\nQuick Start\n\nProvider Support\n\nFour providers implement native embedding support. All other providers throw a descriptive error when embed() or embedMany() is called (see Unsupported Providers below).\n\n| Provider | Default Model | Env Override | Dimensions |\n| ---------------- | ------------------------------ | --------------------------- | ---------- |\n| OpenAI | text-embedding-3-small | OPENAI_EMBEDDING_MODEL | 1536 |\n| Google AI Studio | gemini-embedding-001 | GOOGLE_AI_EMBEDDING_MODEL | 3072 |\n| Google Vertex | text-embedding-004 | VERTEX_EMBEDDING_MODEL | 768 |\n| Amazon Bedrock | amazon.titan-embed-text-v2:0 | BEDROCK_EMBEDDING_MODEL | 1024 |\n\nGoogle AI Studio and Google Vertex also accept GOOGLE_EMBEDDING_MODEL as a shared fallback environment variable.\n\nAmazon Bedrock also accepts AWS_EMBEDDING_MODEL as an alternative environment variable.\n\nSDK API\n\nprovider.embed(text, modelName?)\n\nGenerate an embedding vector for a single text string.\n\nParameters:\n\n| Name | Type | Required | Description |\n| ----------- | -------- | -------- | ------------------------------------------------------ |\n| text | string | Yes | The text to embed |\n| modelName | string | No | Override the default embedding model for this provider |\n\nReturns: Promise<number[]> -- the embedding vector.\n\nprovider.embedMany(texts, modelName?)\n\nGenerate embedding vectors for multiple texts in a single batch. Each provider implementation handles its own batching, so a model that imposes a batch-size limit is chunked to fit it. Amazon Bedrock processes each text individually via Promise.all because the Titan Embed API accepts one input at a time.\n\nParameters:\n\n| Name | Type | Required | Description |\n| ----------- | ---------- | -------- | ------------------------------------------------------ |\n| texts | string[] | Yes | The texts to embed |\n| modelName | string | No | Override the default embedding model for this provider |\n\nReturns: Promise<number[][]> -- one embedding vector per input text.\n\nServer API\n\nThe NeuroLink server exposes two embedding endpoints under the /api/agent route group. Both default to the openai provider when provider is omitted.\n\nPOST /api/agent/embed\n\nGenerate an embedding for a single text.\n\nRequest body:\n\n| Field | Type | Required | Description |\n| ---------- | -------- | -------- | ------------------------------------------------ |\n| text | string | Yes | Non-empty text to embed |\n| provider | string | No | Provider name (default: \"openai\") |\n| model | string | No | Embedding model name (default: provider default) |\n\nResponse (200):\n\nPOST /api/agent/embed-many\n\nGenerate embeddings for multiple texts in one request.\n\nRequest body:\n\n| Field | Type | Required | Description |\n| ---------- | ---------- | -------- | ------------------------------------------------ |\n| texts | string[] | Yes | 1 to 2048 non-empty strings |\n| provider | string | No | Provider name (default: \"openai\") |\n| model | string | No | Embedding model name (default: provider default) |\n\nResponse (200):\n\nError response (validation failure):\n\nError response (provider failure):\n\nUnsupported Providers\n\nCalling embed() or embedMany() on a provider that does not implement embeddings throws an Error with a message listing the supported providers and example models:\n\nProviders that currently do not support embeddings include: Anthropic, Mistral, LiteLLM, Ollama, Hugging Face, Azure OpenAI, and SageMaker. To generate embeddings when using one of these providers for text generation, create a second provider instance from a supported embedding provider:\n\nCLI Usage\n\nThere is no standalone neurolink embed CLI command. Embeddings are used indirectly through t","hierarchy":{"lvl0":"Features","lvl1":"Embeddings","lvl2":"","lvl3":""}},
|
|
3362
3365
|
{"objectID":"6ae9d6740816218e18c4b0d2e1948caa934bc3a0fc89b507442c1f9a3fdb0e7b","title":"Embeddings","url":"/docs/features/embeddings#embeddings","content":"Status: Stable | Availability: SDK + CLI + Server","hierarchy":{"lvl0":"Features","lvl1":"Embeddings","lvl2":"Embeddings","lvl3":""}},
|
|
@@ -3553,9 +3556,9 @@
|
|
|
3553
3556
|
{"objectID":"a6f80762fe08ca735f864be4541b6863065a0acfc5849344db2e40f38db28db3","title":"Verify file","url":"/docs/features/image-generation#verify-file","content":"file ./test-output/square.png","hierarchy":{"lvl0":"Features","lvl1":"Image Generation Streaming Guide","lvl2":"Verify file","lvl3":""}},
|
|
3554
3557
|
{"objectID":"0de2f95f5125f67748b214f7ed674edcf44078cc415fa081f6edf46428d7c65f","title":"Output: ./test-output/square.png: PNG image data, 1024 x 1024, 8-bit/color RGB","url":"/docs/features/image-generation#output-test-outputsquarepng-png-image-data-1024-x-1024-8-bitcolor-rgb","content":"`","hierarchy":{"lvl0":"Features","lvl1":"Image Generation Streaming Guide","lvl2":"Output: ./test-output/square.png: PNG image data, 1024 x 1024, 8-bit/color RGB","lvl3":""}},
|
|
3555
3558
|
{"objectID":"aa931e13d4db435aa9de30f72f599057c2977804e4316c3cb61f84d8e43fd97e","title":"Conclusion","url":"/docs/features/image-generation#conclusion","content":"NeuroLink's image generation streaming provides a unified interface for both text and image generation. The fake streaming approach ensures consistency while maintaining the benefits of streaming APIs. By following the patterns and examples in this guide, you can effectively integrate image generation into your applications.\n\nFor more information:\nAPI Reference\nProvider Comparison\nProvider Status Monitoring","hierarchy":{"lvl0":"Features","lvl1":"Image Generation Streaming Guide","lvl2":"Conclusion","lvl3":""}},
|
|
3556
|
-
{"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
|
|
3559
|
+
{"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. First provider is TypeSafe Jev; Laya, open-weights and self-hosted, and XOR, Juspay's open-weights model that also reads images and video, follow it. Fail-open: a no-op without a key. |\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). |\n| Model Catalogue | Ranks the 64-model registry as an addition to a host-declared pool, never a replacement. One choice question ranks all N candidates. |\n| Context Budget | A per-request compaction threshold derived from how much context the request actually needs. Only ever lowers the default, never raises it. |\n| Relevance Compaction | Stage 0 of the compaction pipeline: asks which earlier messages the current request still needs, plus a quality gate on the generated summary. |\n| Tool Routing with a Decision Model | One calibrated yes/no per MCP server, dropping only on a confident \"no\" ā replaces a 15s LLM call at ~400ms. |\n| RAG Retrieval Planning | Per-query topK breadth and whether to use hybrid / graph / rerank. Opt-in via RAGPipeline. |\n| Real-time Voice Services | Bidirectional realtime voice APIs ā OpenAI R","hierarchy":{"lvl0":"Features","lvl1":"Feature Guides","lvl2":"","lvl3":""}},
|
|
3557
3560
|
{"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":""}},
|
|
3558
|
-
{"objectID":"a43e81fa4a6c594f8b6b4cfc216db1356d75b3e4ebb54279dd2da7f69001d28f","title":"Latest Features (Q1 2026)","url":"/docs/features#latest-features-q1-2026","content":"| Feature | Description
|
|
3561
|
+
{"objectID":"a43e81fa4a6c594f8b6b4cfc216db1356d75b3e4ebb54279dd2da7f69001d28f","title":"Latest Features (Q1 2026)","url":"/docs/features#latest-features-q1-2026","content":"| 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. First provider is TypeSafe Jev; Laya, open-weights and self-hosted, and XOR, Juspay's open-weights model that also reads images and video, follow it. Fail-open: a no-op without a key. |\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":"Latest Features (Q1 2026)","lvl3":""}},
|
|
3559
3562
|
{"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 | Production-ready HITL with approval workflows, confidence thresholds, and enterprise patterns. |\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":""}},
|
|
3560
3563
|
{"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":""}},
|
|
3561
3564
|
{"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":""}},
|
|
@@ -4912,11 +4915,11 @@
|
|
|
4912
4915
|
{"objectID":"8bee50a94bc91cf5273efb43aa2f13a39be6cd72e048c55da55bd80bc74ce8a0","title":"Getting Help","url":"/docs/getting-started/installation#getting-help","content":"Check our Troubleshooting Guide\nReview FAQ\nSearch GitHub Issues\nCreate new issue with:\nNode.js version (node --version)\nOperating system\nError message\nSteps to reproduce","hierarchy":{"lvl0":"Getting Started","lvl1":"Installation","lvl2":"Getting Help","lvl3":""}},
|
|
4913
4916
|
{"objectID":"80210a84a233c58e9a12aa96cedd225ad03c3bfe5344b78032d691be93ae3ba0","title":"Verification Checklist","url":"/docs/getting-started/installation#verification-checklist","content":"[ ] Node.js 18+ installed\n[ ] NeuroLink package installed or accessible via npx\n[ ] API keys configured in .env file\n[ ] neurolink status shows working providers\n[ ] Basic generation command works\n[ ] TypeScript support (if needed)\n[ ] Framework integration (if applicable)","hierarchy":{"lvl0":"Getting Started","lvl1":"Installation","lvl2":"Verification Checklist","lvl3":""}},
|
|
4914
4917
|
{"objectID":"44c035a6ed0dc3b4a04ad68e17bc22de77840cb664eaee4e84f04bb8bd70caaf","title":"Next Steps","url":"/docs/getting-started/installation#next-steps","content":"Quick Start - Test your installation\nProvider Setup - Configure AI providers\nCLI Commands - Learn available commands\nExamples - See implementation patterns","hierarchy":{"lvl0":"Getting Started","lvl1":"Installation","lvl2":"Next Steps","lvl3":""}},
|
|
4915
|
-
{"objectID":"c44f69a5d19212c85a451486bef65999f3ef505311f283fa4a129d90603820ac","title":"āļø Provider Configuration Guide","url":"/docs/getting-started/provider-setup","content":"āļø Provider Configuration Guide\n\nNeuroLink supports multiple AI providers with flexible authentication methods. This guide covers complete setup for all supported providers.\n\nSupported Providers\n\nThis guide walks through full environment-variable setup for the providers below; the complete roster ā including the newer catalog providers and the embedding/media/decision-only providers ā is indexed with setup guides at Provider Guides.\n\nProviders configured in this guide\nOpenAI - GPT-4o, GPT-4o-mini, GPT-4-turbo\nAmazon Bedrock - Claude 3.7 Sonnet, Claude 3.5 Sonnet, Claude 3 Haiku\nAmazon SageMaker - Custom models deployed on SageMaker endpoints\nGoogle Vertex AI - Gemini 3 Flash/Pro (preview), Gemini 2.5 Flash, Claude 4.0 Sonnet\nGoogle AI Studio - Gemini 1.5 Pro, Gemini 2.0 Flash, Gemini 1.5 Flash\nAnthropic - Claude 4.5 Opus/Sonnet/Haiku, Claude 4.0 Opus/Sonnet, Claude 3.7 Sonnet\nAzure OpenAI - GPT-4, GPT-3.5-Turbo\nLiteLLM - 100+ models across a broad range of providers via proxy server\nHugging Face - open models served by the unified router (Llama 3.x, Qwen 2.5, DeepSeek, Mistral)\nOllama - Local AI models including Llama 2, Code Llama, Mistral, Vicuna\nOpenRouter - 300+ models from every major lab via one aggregator endpoint\nMistral AI - Mistral Tiny, Small, Medium, and Large models\nDeepSeek - deepseek-chat (V3) and deepseek-reasoner (R1)\nNVIDIA NIM - Llama 3.3 70B and 400+ catalog models via NVIDIA hosted or self-hosted NIM\nLM Studio - Any model loaded in LM Studio desktop app (local, no API key required)\nllama.cpp - Any GGUF model served by llama-server (local, no API key required)\n\nOther providers (setup guides in the Provider Guides index)\n\nOnboarded via the zero-quirk OpenAI-wire-compatible catalog (Tier 2) ā each has its own setup guide under providers/:\nGroq - LPU-accelerated inference; default openai/gpt-oss-120b\nCerebras - Wafer-scale inference; default gpt-oss-120b\nSambaNova - default Meta-Llama-3.3-70B-Instruct\nTogether AI - default meta-llama/Llama-3.3-70B-Instruct-Turbo\nFireworks AI - default accounts/fireworks/models/kimi-
|
|
4918
|
+
{"objectID":"c44f69a5d19212c85a451486bef65999f3ef505311f283fa4a129d90603820ac","title":"āļø Provider Configuration Guide","url":"/docs/getting-started/provider-setup","content":"āļø Provider Configuration Guide\n\nNeuroLink supports multiple AI providers with flexible authentication methods. This guide covers complete setup for all supported providers.\n\nSupported Providers\n\nThis guide walks through full environment-variable setup for the providers below; the complete roster ā including the newer catalog providers and the embedding/media/decision-only providers ā is indexed with setup guides at Provider Guides.\n\nProviders configured in this guide\nOpenAI - GPT-4o, GPT-4o-mini, GPT-4-turbo\nAmazon Bedrock - Claude 3.7 Sonnet, Claude 3.5 Sonnet, Claude 3 Haiku\nAmazon SageMaker - Custom models deployed on SageMaker endpoints\nGoogle Vertex AI - Gemini 3 Flash/Pro (preview), Gemini 2.5 Flash, Claude 4.0 Sonnet\nGoogle AI Studio - Gemini 1.5 Pro, Gemini 2.0 Flash, Gemini 1.5 Flash\nAnthropic - Claude 4.5 Opus/Sonnet/Haiku, Claude 4.0 Opus/Sonnet, Claude 3.7 Sonnet\nAzure OpenAI - GPT-4, GPT-3.5-Turbo\nLiteLLM - 100+ models across a broad range of providers via proxy server\nHugging Face - open models served by the unified router (Llama 3.x, Qwen 2.5, DeepSeek, Mistral)\nOllama - Local AI models including Llama 2, Code Llama, Mistral, Vicuna\nOpenRouter - 300+ models from every major lab via one aggregator endpoint\nMistral AI - Mistral Tiny, Small, Medium, and Large models\nDeepSeek - deepseek-chat (V3) and deepseek-reasoner (R1)\nNVIDIA NIM - Llama 3.3 70B and 400+ catalog models via NVIDIA hosted or self-hosted NIM\nLM Studio - Any model loaded in LM Studio desktop app (local, no API key required)\nllama.cpp - Any GGUF model served by llama-server (local, no API key required)\n\nOther providers (setup guides in the Provider Guides index)\n\nOnboarded via the zero-quirk OpenAI-wire-compatible catalog (Tier 2) ā each has its own setup guide under providers/:\nGroq - LPU-accelerated inference; default openai/gpt-oss-120b\nCerebras - Wafer-scale inference; default gpt-oss-120b\nSambaNova - default Meta-Llama-3.3-70B-Instruct\nTogether AI - default meta-llama/Llama-3.3-70B-Instruct-Turbo\nFireworks AI - default accounts/fireworks/models/kimi-k3\nPerplexity - search-augmented models; default sonar\nCloudflare Workers AI - edge inference\nxAI - Grok models; default grok-4.6\nBaseten - default zai-org/GLM-5.3-Flash (BASETEN_API_KEY)\nGMI Cloud - default MiniMaxAI/MiniMax-M3 (GMICLOUD_API_KEY)\nInception Labs - diffusion LLMs; default mercury-2 (INCEPTION_LABS_API_KEY)\nio.net Intelligence - decentralized GPU inference; default meta-llama/Llama-3.3-70B-Instruct (IO_INTELLIGENCE_API_KEY)\nMancer - default deepseek-v4-flash (MANCER_API_KEY); no tool calling\nUpstage - Solar models; default solar-pro4 (UPSTAGE_API_KEY)\nAPI Route - OpenAI-compatible passthrough; default claude-sonnet-4-6 (API_ROUTE_API_KEY)\n\nEmbedding, media-generation, and decision-only providers ā not part of generate()/stream() provider selection in the same way, but each has a setup guide:\nCohere - chat + embed-english-v3.0 embeddings + reranking\nVoyage AI - embedding-only; default voyage-3.5\nJina AI - embeddings + reranking; default jina-embeddings-v3\nReplicate, Stability AI, Ideogram, Recraft - direct image generation\nTypeSafe Jev - decision-only; serves decide(), not generate()/stream(). Set TYPESAFE_API_KEY (or AI_GATEWAY_API_KEY for the gateway transport)\nLaya - decision-only, open-weights; serves decide() on a Laya server or LiteLLM proxy route you configure. Set LAYA_API_KEY + LAYA_BASE_URL; used when TypeSafe isn't configured\nXOR - decision-only, open-weights xor-1.1; serves decide() and takes images or video. Set XOR_API_KEY + XOR_BASE_URL (XOR_MODEL is optional, default xor-1.1); used when neither TypeSafe nor Laya is configured\n\nVoice providers (TTS/STT/Realtime) are configured further down in this guide ā see OpenAI TTS onward.\n\nš° Model Availability & Cost Considerations\n\nImportant Notes:\nModel Availability: Specific models may not be available in all regions or require special access\nCost Variations: Pricing differs significantly between providers and models (e.g., Claude 3.5 Sonnet vs GPT-4o)\nRate Limits: Each provider has different rate limits and quota restrictions\nLocal vs Cloud: Ollama (local) has no per-request cost but requires hardware resources\nEnterprise Tiers: AWS Bedrock, Google Vertex AI, and Azure typically offer enterprise pricing\n\nBest Practices:\nUse new NeuroLink() with automatic provider selection for cost-optimized routing\nMonitor usage through built-in analytics to track costs\nConsider local models (Ollama) for development and testing\nCheck provider documentation for current pricing and availability\n\nš¢ Enterprise Proxy Support\n\nProviders support corporate proxy environments automatically. Simply set environment variables:\n\nNo code changes required - NeuroLink automatically detects and uses proxy settings.\n\nFor detailed proxy setup ā See Enterprise & Proxy Setup Guide\n\nOpenAI Configuration {#openai}\n\nBasic Setup\n\nOptional Configuration\n\nSupported Models\ngpt-4o (default) - Latest multimodal model\ngpt-4o-mini - Cost-effective varia","hierarchy":{"lvl0":"Getting Started","lvl1":"āļø Provider Configuration Guide","lvl2":"","lvl3":""}},
|
|
4916
4919
|
{"objectID":"44479af76ca558a6630aafa39578fb6543bd892844c3a6c5948ffd58a2d73287","title":"āļø Provider Configuration Guide","url":"/docs/getting-started/provider-setup#-provider-configuration-guide","content":"NeuroLink supports multiple AI providers with flexible authentication methods. This guide covers complete setup for all supported providers.","hierarchy":{"lvl0":"Getting Started","lvl1":"āļø Provider Configuration Guide","lvl2":"āļø Provider Configuration Guide","lvl3":""}},
|
|
4917
4920
|
{"objectID":"ed4c54afa059a89c0cb4a7815f361a50933fe695ec62b3df5a0bd4ad2e25e431","title":"Supported Providers","url":"/docs/getting-started/provider-setup#supported-providers","content":"This guide walks through full environment-variable setup for the providers below; the complete roster ā including the newer catalog providers and the embedding/media/decision-only providers ā is indexed with setup guides at Provider Guides.","hierarchy":{"lvl0":"Getting Started","lvl1":"āļø Provider Configuration Guide","lvl2":"Supported Providers","lvl3":""}},
|
|
4918
4921
|
{"objectID":"c0abb48e819713cb16c04d745137321d348118c823351fcf31ab014735dd036e","title":"Providers configured in this guide","url":"/docs/getting-started/provider-setup#providers-configured-in-this-guide","content":"OpenAI - GPT-4o, GPT-4o-mini, GPT-4-turbo\nAmazon Bedrock - Claude 3.7 Sonnet, Claude 3.5 Sonnet, Claude 3 Haiku\nAmazon SageMaker - Custom models deployed on SageMaker endpoints\nGoogle Vertex AI - Gemini 3 Flash/Pro (preview), Gemini 2.5 Flash, Claude 4.0 Sonnet\nGoogle AI Studio - Gemini 1.5 Pro, Gemini 2.0 Flash, Gemini 1.5 Flash\nAnthropic - Claude 4.5 Opus/Sonnet/Haiku, Claude 4.0 Opus/Sonnet, Claude 3.7 Sonnet\nAzure OpenAI - GPT-4, GPT-3.5-Turbo\nLiteLLM - 100+ models across a broad range of providers via proxy server\nHugging Face - open models served by the unified router (Llama 3.x, Qwen 2.5, DeepSeek, Mistral)\nOllama - Local AI models including Llama 2, Code Llama, Mistral, Vicuna\nOpenRouter - 300+ models from every major lab via one aggregator endpoint\nMistral AI - Mistral Tiny, Small, Medium, and Large models\nDeepSeek - deepseek-chat (V3) and deepseek-reasoner (R1)\nNVIDIA NIM - Llama 3.3 70B and 400+ catalog models via NVIDIA hosted or self-hosted NIM\nLM Studio - Any model loaded in LM Studio desktop app (local, no API key required)\nllama.cpp - Any GGUF model served by llama-server (local, no API key required)","hierarchy":{"lvl0":"Getting Started","lvl1":"āļø Provider Configuration Guide","lvl2":"Providers configured in this guide","lvl3":""}},
|
|
4919
|
-
{"objectID":"cc96a04c9f262c3c1f6f8b8e7c82407cc63406705250afd22947a3567e151721","title":"Other providers (setup guides in the Provider Guides index)","url":"/docs/getting-started/provider-setup#other-providers-setup-guides-in-the-provider-guides-index","content":"Onboarded via the zero-quirk OpenAI-wire-compatible catalog (Tier 2) ā each has its own setup guide under providers/:\nGroq - LPU-accelerated inference; default openai/gpt-oss-120b\nCerebras - Wafer-scale inference; default gpt-oss-120b\nSambaNova - default Meta-Llama-3.3-70B-Instruct\nTogether AI - default meta-llama/Llama-3.3-70B-Instruct-Turbo\nFireworks AI - default accounts/fireworks/models/kimi-
|
|
4922
|
+
{"objectID":"cc96a04c9f262c3c1f6f8b8e7c82407cc63406705250afd22947a3567e151721","title":"Other providers (setup guides in the Provider Guides index)","url":"/docs/getting-started/provider-setup#other-providers-setup-guides-in-the-provider-guides-index","content":"Onboarded via the zero-quirk OpenAI-wire-compatible catalog (Tier 2) ā each has its own setup guide under providers/:\nGroq - LPU-accelerated inference; default openai/gpt-oss-120b\nCerebras - Wafer-scale inference; default gpt-oss-120b\nSambaNova - default Meta-Llama-3.3-70B-Instruct\nTogether AI - default meta-llama/Llama-3.3-70B-Instruct-Turbo\nFireworks AI - default accounts/fireworks/models/kimi-k3\nPerplexity - search-augmented models; default sonar\nCloudflare Workers AI - edge inference\nxAI - Grok models; default grok-4.6\nBaseten - default zai-org/GLM-5.3-Flash (BASETEN_API_KEY)\nGMI Cloud - default MiniMaxAI/MiniMax-M3 (GMICLOUD_API_KEY)\nInception Labs - diffusion LLMs; default mercury-2 (INCEPTION_LABS_API_KEY)\nio.net Intelligence - decentralized GPU inference; default meta-llama/Llama-3.3-70B-Instruct (IO_INTELLIGENCE_API_KEY)\nMancer - default deepseek-v4-flash (MANCER_API_KEY); no tool calling\nUpstage - Solar models; default solar-pro4 (UPSTAGE_API_KEY)\nAPI Route - OpenAI-compatible passthrough; default claude-sonnet-4-6 (API_ROUTE_API_KEY)\n\nEmbedding, media-generation, and decision-only providers ā not part of generate()/stream() provider selection in the same way, but each has a setup guide:\nCohere - chat + embed-english-v3.0 embeddings + reranking\nVoyage AI - embedding-only; default voyage-3.5\nJina AI - embeddings + reranking; default jina-embeddings-v3\nReplicate, Stability AI, Ideogram, Recraft - direct image generation\nTypeSafe Jev - decision-only; serves decide(), not generate()/stream(). Set TYPESAFE_API_KEY (or AI_GATEWAY_API_KEY for the gateway transport)\nLaya - decision-only, open-weights; serves decide() on a Laya server or LiteLLM proxy route you configure. Set LAYA_API_KEY + LAYA_BASE_URL; used when TypeSafe isn't configured\nXOR - decision-only, open-weights xor-1.1; serves decide() and takes images or video. Set XOR_API_KEY + XOR_BASE_URL (XOR_MODEL is optional, default xor-1.1); used when neither TypeSafe nor Laya is configured\n\nVoice providers (T","hierarchy":{"lvl0":"Getting Started","lvl1":"āļø Provider Configuration Guide","lvl2":"Other providers (setup guides in the Provider Guides index)","lvl3":""}},
|
|
4920
4923
|
{"objectID":"d17be3311722218280d0e76731e7344c620c18f5073e07abbc826f3922db976a","title":"š° Model Availability & Cost Considerations","url":"/docs/getting-started/provider-setup#-model-availability-cost-considerations","content":"Important Notes:\nModel Availability: Specific models may not be available in all regions or require special access\nCost Variations: Pricing differs significantly between providers and models (e.g., Claude 3.5 Sonnet vs GPT-4o)\nRate Limits: Each provider has different rate limits and quota restrictions\nLocal vs Cloud: Ollama (local) has no per-request cost but requires hardware resources\nEnterprise Tiers: AWS Bedrock, Google Vertex AI, and Azure typically offer enterprise pricing\n\nBest Practices:\nUse new NeuroLink() with automatic provider selection for cost-optimized routing\nMonitor usage through built-in analytics to track costs\nConsider local models (Ollama) for development and testing\nCheck provider documentation for current pricing and availability","hierarchy":{"lvl0":"Getting Started","lvl1":"āļø Provider Configuration Guide","lvl2":"š° Model Availability & Cost Considerations","lvl3":""}},
|
|
4921
4924
|
{"objectID":"3a1bd0ccb708d37a59e2db3650f689f77fba69e91ec88142c7c9b85f1c18057d","title":"š¢ Enterprise Proxy Support","url":"/docs/getting-started/provider-setup#-enterprise-proxy-support","content":"Providers support corporate proxy environments automatically. Simply set environment variables:\n\nNo code changes required - NeuroLink automatically detects and uses proxy settings.\n\nFor detailed proxy setup ā See Enterprise & Proxy Setup Guide","hierarchy":{"lvl0":"Getting Started","lvl1":"āļø Provider Configuration Guide","lvl2":"š¢ Enterprise Proxy Support","lvl3":""}},
|
|
4922
4925
|
{"objectID":"1b0159447e4aee3ffd31efe28600cf755e4cc49d50f354e1a59d9574199213d2","title":"Supported Models","url":"/docs/getting-started/provider-setup#supported-models","content":"gpt-4o (default) - Latest multimodal model\ngpt-4o-mini - Cost-effective variant\ngpt-4-turbo - High-performance model","hierarchy":{"lvl0":"Getting Started","lvl1":"āļø Provider Configuration Guide","lvl2":"Supported Models","lvl3":""}},
|
|
@@ -5410,29 +5413,29 @@
|
|
|
5410
5413
|
{"objectID":"5303398825a285a4052490bdc1ec93aad23b25a4130aca8f58bd5bb231ea52d2","title":"PCM16 output is unplayable in audio players","url":"/docs/getting-started/providers/cartesia#pcm16-output-is-unplayable-in-audio-players","content":"pcm16 is RAW samples at 24 kHz, not a WAV file ā players need a\nheader. Either write a 44-byte WAV header yourself before the PCM data,\nor switch to format: \"wav\" which produces a complete RIFF/WAV file\nalready.","hierarchy":{"lvl0":"Getting Started","lvl1":"Cartesia TTS Provider Guide","lvl2":"PCM16 output is unplayable in audio players","lvl3":""}},
|
|
5411
5414
|
{"objectID":"b2967379807a28639cf50c9c68894b76779dba68fe6f74d6121a76ea0cdf94d3","title":"Streaming use cases","url":"/docs/getting-started/providers/cartesia#streaming-use-cases","content":"This handler is synchronous ā it waits for the full audio response. For\nsub-100 ms first-byte latency in voice-agent flows, use CartesiaStream\nin src/lib/adapters/tts/cartesiaHandler.ts directly (it's wired into\nNeuroLink's voice server). The synchronous handler is the right choice\nfor batch generation, file output, and any flow where you process the\nwhole audio buffer at once.","hierarchy":{"lvl0":"Getting Started","lvl1":"Cartesia TTS Provider Guide","lvl2":"Streaming use cases","lvl3":""}},
|
|
5412
5415
|
{"objectID":"dbb872f4bc4eb26c06d8a4ddc07f67efe59e2ea62bb9c5eda1d4df1df6b9654d","title":"See Also","url":"/docs/getting-started/providers/cartesia#see-also","content":"TTS Feature Guide ā overall TTS architecture and supported providers\nFish Audio TTS ā sibling low-cost TTS handler\nElevenLabs TTS ā sibling TTS with the largest voice library\nAdding a TTS provider ā internal reference for the integration pattern\n\nNeed Help? Open a GitHub Discussion or issue.","hierarchy":{"lvl0":"Getting Started","lvl1":"Cartesia TTS Provider Guide","lvl2":"See Also","lvl3":""}},
|
|
5413
|
-
{"objectID":"7f5abb3425169d7f2e1c11b1fbb0b6b42e3b5f13f6b5bca11f8c71d79aec7304","title":"Cerebras Provider Guide","url":"/docs/getting-started/providers/cerebras","content":"Cerebras Provider Guide\n\nThe fastest hosted generation available (~3000 tokens/s on GPT-OSS\n120B) via Cerebras' Wafer-Scale Engine ā best for throughput-hungry\nworkloads\n\nOverview\n\nCerebras serves open-weight models on its Wafer-Scale Engine (WSE), a\nsingle wafer-sized chip whose on-die memory bandwidth yields generation\nspeeds an order of magnitude above GPU clouds. NeuroLink wraps\napi.cerebras.ai/v1 (OpenAI-compatible, zero-quirk Tier 2 catalog\nentry) so the standard generate / stream contract applies.\n\nThe roster below was verified against a live authenticated /v1/models\non 2026-
|
|
5416
|
+
{"objectID":"7f5abb3425169d7f2e1c11b1fbb0b6b42e3b5f13f6b5bca11f8c71d79aec7304","title":"Cerebras Provider Guide","url":"/docs/getting-started/providers/cerebras","content":"Cerebras Provider Guide\n\nThe fastest hosted generation available (~3000 tokens/s on GPT-OSS\n120B) via Cerebras' Wafer-Scale Engine ā best for throughput-hungry\nworkloads\n\nOverview\n\nCerebras serves open-weight models on its Wafer-Scale Engine (WSE), a\nsingle wafer-sized chip whose on-die memory bandwidth yields generation\nspeeds an order of magnitude above GPU clouds. NeuroLink wraps\napi.cerebras.ai/v1 (OpenAI-compatible, zero-quirk Tier 2 catalog\nentry) so the standard generate / stream contract applies.\n\nThe roster below was verified against a live authenticated /v1/models\non 2026-09-28 ā Cerebras retires models aggressively: gemma-4-31b left\nthe roster in September 2026, and earlier llama/qwen ids return 404:\ngpt-oss-120b (default) ā OpenAI's open-weight 120B reasoning model, ~3000 tok/s\n\nThe roster also lists qwen-3.8-27b, which the catalog does not carry yet:\nno chat call has verified it.\n\nKey Facts\nProtocol: OpenAI-compatible (/v1/chat/completions)\nDefault base URL: https://api.cerebras.ai/v1\nDefault model: gpt-oss-120b\nContext window: 65K tokens on the free tier, 131K on paid tiers. NeuroLink budgets context against the 65K free-tier floor ā the\n account tier isn't knowable from the key, and compacting early on a paid\n tier is safe while overrunning a 65K window is not.\nMax output: 32K free / 40K paid\nVision: No ā gemma-4-31b, the only vision-capable model, is retired\nStreaming: Supported\nTool calling: Supported (native)\nStructured output: Supported ā but not combined with tools in one\n request: the API rejects tools + response_format together with\n 400 wrong_api_format (\"tools\" is incompatible with \"response_format\").\n NeuroLink handles this the same way as Groq: with tools active the\n schema is enforced post-hoc on the final text instead of on the wire.\nReasoning trace: gpt-oss-120b emits reasoning deltas before\n content ā see Troubleshooting for the maxTokens implication.\nBilling: no keyless free tier. Even the one-time $5 promotional\n credit requires saving a payment method (\"you won't be charged now\").\n Pay-as-you-go starts at $10.\nPricing (per million tokens, checked 2026-08-27): gpt-oss-120b\n $0.35 in / $0.75 out.\n\nQuick Start\nGet an API Key\n\nSign up at https://cloud.cerebras.ai (Google\nOAuth works), claim the $5 free credit under Billing ā Credits (a\npayment card must be saved ā no charge is made), and create an API key\n(prefix csk-).\nConfigure Environment\nGenerate Your First Response\n\nSDK Usage\n\nBasic Generation\n\nStreaming\n\nTool Calling\n\nStructured Output\n\nCombining schema with active tools works, but the schema is enforced\npost-hoc rather than on the wire (see Key Facts) ā expect\nstructuredData to be best-effort in that combination, exactly as with\nGroq.\n\nPer-Call Credentials\n\nCLI Usage\n\nProvider Aliases\n\n| Alias | Example |\n| ---------- | --------------------- |\n| cerebras | --provider cerebras |\n\nConfiguration Reference\n\n| Environment Variable | Required | Default | Description |\n| -------------------- | -------- | ---------------------------- | ---------------- |\n| CEREBRAS_API_KEY | Yes | ā | Cerebras API key |\n| CEREBRAS_MODEL | No | gpt-oss-120b | Default model |\n| CEREBRAS_BASE_URL | No | https://api.cerebras.ai/v1 | Base URL |\n\nFeature Support Matrix\n\n| Feature | gpt-oss-120b |\n| ------------------------- | ------------ |\n| Text generation | Yes |\n| Streaming | Yes |\n| Tool calling | Yes |\n| Structured output | Yes |\n| Structured output + tools | Post-hoc |\n| Vision | No |\n| Embeddings | No |\n| Context window | 65K/131K |\n\nTroubleshooting\n\n\"Invalid Cerebras API key\"\n\nGet / rotate at https://cloud.cerebras.ai.\nA bad key returns 401 with \"code\": \"wrong_api_key\", which NeuroLink\nmaps to this message.\n\n402 payment_required on every call\n\nThe account has no balance. Cerebras has no keyless free tier: open\nBilling ā Credits ā ADD CREDITS in the console, choose \"Start with\nlimited free credits\", and save a payment card ā the $5 promo credit\nactivates with no charge. Skipping the claim step during onboarding\n(\"SKIP TO CONSOLE\") leaves the balance at $0.00.\n\nEmpty content with small maxTokens on gpt-oss-120b\n\ngpt-oss-120b is a reasoning model: it spends its first tokens on a\nreasoning channel before emitting content. With a tight budget\n(e.g. maxTokens: 50) the entire budget goes to reasoning,\nfinish_reason is length, and content is empty. Give reasoning\nprompts a few hundred tokens of headroom.\n\n404 \"model not found\" for llama/qwen models\n\nThose models are retired, and so is gemma-4-31b. The catalog carries\ngpt-oss-120b only ā verify the live roster with an authenticated\nGET https://api.cerebras.ai/v1/models.\n\nSee Also\nGroq Provider ā sibling speed-focused OpenAI-compat provider\nxAI Grok Prov","hierarchy":{"lvl0":"Getting Started","lvl1":"Cerebras Provider Guide","lvl2":"","lvl3":""}},
|
|
5414
5417
|
{"objectID":"2b42e090bd80e32e95e89006b45fed37fa20315824ee536721743206419731f1","title":"Cerebras Provider Guide","url":"/docs/getting-started/providers/cerebras#cerebras-provider-guide","content":"The fastest hosted generation available (~3000 tokens/s on GPT-OSS\n120B) via Cerebras' Wafer-Scale Engine ā best for throughput-hungry\nworkloads","hierarchy":{"lvl0":"Getting Started","lvl1":"Cerebras Provider Guide","lvl2":"Cerebras Provider Guide","lvl3":""}},
|
|
5415
|
-
{"objectID":"856c92d5719d8c67da883b4fab1071e2385d3f7116f9e9f12d010871dff7509f","title":"Overview","url":"/docs/getting-started/providers/cerebras#overview","content":"Cerebras serves open-weight models on its Wafer-Scale Engine (WSE), a\nsingle wafer-sized chip whose on-die memory bandwidth yields generation\nspeeds an order of magnitude above GPU clouds. NeuroLink wraps\napi.cerebras.ai/v1 (OpenAI-compatible, zero-quirk Tier 2 catalog\nentry) so the standard generate / stream contract applies.\n\nThe roster below was verified against a live authenticated /v1/models\non 2026-
|
|
5416
|
-
{"objectID":"26ab9baccdd8cb8f22ca7cea1d6e854040bed3093d871530515de9b3f990f737","title":"Key Facts","url":"/docs/getting-started/providers/cerebras#key-facts","content":"Protocol: OpenAI-compatible (/v1/chat/completions)\nDefault base URL: https://api.cerebras.ai/v1\nDefault model: gpt-oss-120b\nContext window: 65K tokens on the free tier, 131K on paid tiers
|
|
5418
|
+
{"objectID":"856c92d5719d8c67da883b4fab1071e2385d3f7116f9e9f12d010871dff7509f","title":"Overview","url":"/docs/getting-started/providers/cerebras#overview","content":"Cerebras serves open-weight models on its Wafer-Scale Engine (WSE), a\nsingle wafer-sized chip whose on-die memory bandwidth yields generation\nspeeds an order of magnitude above GPU clouds. NeuroLink wraps\napi.cerebras.ai/v1 (OpenAI-compatible, zero-quirk Tier 2 catalog\nentry) so the standard generate / stream contract applies.\n\nThe roster below was verified against a live authenticated /v1/models\non 2026-09-28 ā Cerebras retires models aggressively: gemma-4-31b left\nthe roster in September 2026, and earlier llama/qwen ids return 404:\ngpt-oss-120b (default) ā OpenAI's open-weight 120B reasoning model, ~3000 tok/s\n\nThe roster also lists qwen-3.8-27b, which the catalog does not carry yet:\nno chat call has verified it.","hierarchy":{"lvl0":"Getting Started","lvl1":"Cerebras Provider Guide","lvl2":"Overview","lvl3":""}},
|
|
5419
|
+
{"objectID":"26ab9baccdd8cb8f22ca7cea1d6e854040bed3093d871530515de9b3f990f737","title":"Key Facts","url":"/docs/getting-started/providers/cerebras#key-facts","content":"Protocol: OpenAI-compatible (/v1/chat/completions)\nDefault base URL: https://api.cerebras.ai/v1\nDefault model: gpt-oss-120b\nContext window: 65K tokens on the free tier, 131K on paid tiers. NeuroLink budgets context against the 65K free-tier floor ā the\n account tier isn't knowable from the key, and compacting early on a paid\n tier is safe while overrunning a 65K window is not.\nMax output: 32K free / 40K paid\nVision: No ā gemma-4-31b, the only vision-capable model, is retired\nStreaming: Supported\nTool calling: Supported (native)\nStructured output: Supported ā but not combined with tools in one\n request: the API rejects tools + response_format together with\n 400 wrong_api_format (\"tools\" is incompatible with \"response_format\").\n NeuroLink handles this the same way as Groq: with tools active the\n schema is enforced post-hoc on the final text instead of on the wire.\nReasoning trace: gpt-oss-120b emits reasoning deltas before\n content ā see Troubleshooting for the maxTokens implication.\nBilling: no keyless free tier. Even the one-time $5 promotional\n credit requires saving a payment method (\"you won't be charged now\").\n Pay-as-you-go starts at $10.\nPricing (per million tokens, checked 2026-08-27): gpt-oss-120b\n $0.35 in / $0.75 out.","hierarchy":{"lvl0":"Getting Started","lvl1":"Cerebras Provider Guide","lvl2":"Key Facts","lvl3":""}},
|
|
5417
5420
|
{"objectID":"c3c043ac1f776cffba1044b19f416aafce29755534349bb92136960de36a692b","title":"1. Get an API Key","url":"/docs/getting-started/providers/cerebras#1-get-an-api-key","content":"Sign up at https://cloud.cerebras.ai (Google\nOAuth works), claim the $5 free credit under Billing ā Credits (a\npayment card must be saved ā no charge is made), and create an API key\n(prefix csk-).","hierarchy":{"lvl0":"Getting Started","lvl1":"Cerebras Provider Guide","lvl2":"1. Get an API Key","lvl3":""}},
|
|
5418
5421
|
{"objectID":"9e3b6877b6959bc93d1110ec37c7f1ce4af33285ee2a82761d36763d85be92e2","title":"2. Configure Environment","url":"/docs/getting-started/providers/cerebras#2-configure-environment","content":"`bash","hierarchy":{"lvl0":"Getting Started","lvl1":"Cerebras Provider Guide","lvl2":"2. Configure Environment","lvl3":""}},
|
|
5419
5422
|
{"objectID":"e3829cccd09bb0837aa182c1797d9b0ff9f73005068adc983f16f050b8d21599","title":"Required","url":"/docs/getting-started/providers/cerebras#required","content":"CEREBRASAPIKEY=csk-...","hierarchy":{"lvl0":"Getting Started","lvl1":"Cerebras Provider Guide","lvl2":"Required","lvl3":""}},
|
|
5420
|
-
{"objectID":"b1eea51082498c799ccf79c0e90f0879a6170984675a89934be3a4670db89de0","title":"Optional: override the default model (default: gpt-oss-120b)","url":"/docs/getting-started/providers/cerebras#optional-override-the-default-model-default-gpt-oss-120b","content":"CEREBRAS_MODEL=
|
|
5423
|
+
{"objectID":"b1eea51082498c799ccf79c0e90f0879a6170984675a89934be3a4670db89de0","title":"Optional: override the default model (default: gpt-oss-120b)","url":"/docs/getting-started/providers/cerebras#optional-override-the-default-model-default-gpt-oss-120b","content":"CEREBRAS_MODEL=gpt-oss-120b","hierarchy":{"lvl0":"Getting Started","lvl1":"Cerebras Provider Guide","lvl2":"Optional: override the default model (default: gpt-oss-120b)","lvl3":""}},
|
|
5421
5424
|
{"objectID":"962285bdf8273490f1457378d234a1ac149267b97d4525c2f24b1b4da267fe1f","title":"CEREBRAS_BASE_URL=https://api.cerebras.ai/v1","url":"/docs/getting-started/providers/cerebras#cerebras_base_urlhttpsapicerebrasaiv1","content":"`","hierarchy":{"lvl0":"Getting Started","lvl1":"Cerebras Provider Guide","lvl2":"CEREBRAS_BASE_URL=https://api.cerebras.ai/v1","lvl3":""}},
|
|
5422
5425
|
{"objectID":"dc0b39d9332b8719ec6f97b08fa67dd583fb91ea99f0690eea37525ba773c7ae","title":"Structured Output","url":"/docs/getting-started/providers/cerebras#structured-output","content":"Combining schema with active tools works, but the schema is enforced\npost-hoc rather than on the wire (see Key Facts) ā expect\nstructuredData to be best-effort in that combination, exactly as with\nGroq.","hierarchy":{"lvl0":"Getting Started","lvl1":"Cerebras Provider Guide","lvl2":"Structured Output","lvl3":""}},
|
|
5423
5426
|
{"objectID":"456b4dcb39fa485bca2687655be21a417c78bc6361c0d40f4c9c241ea439bcfb","title":"CLI Usage","url":"/docs/getting-started/providers/cerebras#cli-usage","content":"`bash","hierarchy":{"lvl0":"Getting Started","lvl1":"Cerebras Provider Guide","lvl2":"CLI Usage","lvl3":""}},
|
|
5424
5427
|
{"objectID":"4643c07beb3b8210ea91cc08e566025480892c779bef7b2c796b9c8ebaff6ce1","title":"Default model (gpt-oss-120b)","url":"/docs/getting-started/providers/cerebras#default-model-gpt-oss-120b","content":"pnpm run cli generate \"Quick question\" --provider cerebras","hierarchy":{"lvl0":"Getting Started","lvl1":"Cerebras Provider Guide","lvl2":"Default model (gpt-oss-120b)","lvl3":""}},
|
|
5425
|
-
{"objectID":"e0c763d4b5bc1fd75056c4d34a718ac6ad2e70a476fa624d205158fa731db80e","title":"Explicit model","url":"/docs/getting-started/providers/cerebras#explicit-model","content":"pnpm run cli generate \"Hi\" --provider cerebras --model
|
|
5428
|
+
{"objectID":"e0c763d4b5bc1fd75056c4d34a718ac6ad2e70a476fa624d205158fa731db80e","title":"Explicit model","url":"/docs/getting-started/providers/cerebras#explicit-model","content":"pnpm run cli generate \"Hi\" --provider cerebras --model gpt-oss-120b","hierarchy":{"lvl0":"Getting Started","lvl1":"Cerebras Provider Guide","lvl2":"Explicit model","lvl3":""}},
|
|
5426
5429
|
{"objectID":"a1cc50f0d339695a00d519964c59b8be591a987db884bbe5be1e9176df71b1cb","title":"Streaming","url":"/docs/getting-started/providers/cerebras#streaming-1","content":"pnpm run cli stream \"Count to ten\" --provider cerebras","hierarchy":{"lvl0":"Getting Started","lvl1":"Cerebras Provider Guide","lvl2":"Streaming","lvl3":""}},
|
|
5427
5430
|
{"objectID":"f92965506a689f101d827e46fd2c597bc08e2e4e4795897527ea24eae93b1599","title":"Loop / chat","url":"/docs/getting-started/providers/cerebras#loop-chat","content":"pnpm run cli loop --provider cerebras\n`","hierarchy":{"lvl0":"Getting Started","lvl1":"Cerebras Provider Guide","lvl2":"Loop / chat","lvl3":""}},
|
|
5428
5431
|
{"objectID":"00c70f016282b6122ce31ad75b96f97d6ceac48d4df583fd6f5e0e5d92ac54db","title":"Provider Aliases","url":"/docs/getting-started/providers/cerebras#provider-aliases","content":"| Alias | Example |\n| ---------- | --------------------- |\n| cerebras | --provider cerebras |","hierarchy":{"lvl0":"Getting Started","lvl1":"Cerebras Provider Guide","lvl2":"Provider Aliases","lvl3":""}},
|
|
5429
5432
|
{"objectID":"6f804eccfe08ce82b598089930b46f12be01d31332a34b8a0fdc82bf0f492fa1","title":"Configuration Reference","url":"/docs/getting-started/providers/cerebras#configuration-reference","content":"| Environment Variable | Required | Default | Description |\n| -------------------- | -------- | ---------------------------- | ---------------- |\n| CEREBRAS_API_KEY | Yes | ā | Cerebras API key |\n| CEREBRAS_MODEL | No | gpt-oss-120b | Default model |\n| CEREBRAS_BASE_URL | No | https://api.cerebras.ai/v1 | Base URL |","hierarchy":{"lvl0":"Getting Started","lvl1":"Cerebras Provider Guide","lvl2":"Configuration Reference","lvl3":""}},
|
|
5430
|
-
{"objectID":"4f11d403d24ed52edbb5f65bb14374f400a4c4f93c5cfc77031253d7f07afb70","title":"Feature Support Matrix","url":"/docs/getting-started/providers/cerebras#feature-support-matrix","content":"| Feature | gpt-oss-120b
|
|
5433
|
+
{"objectID":"4f11d403d24ed52edbb5f65bb14374f400a4c4f93c5cfc77031253d7f07afb70","title":"Feature Support Matrix","url":"/docs/getting-started/providers/cerebras#feature-support-matrix","content":"| Feature | gpt-oss-120b |\n| ------------------------- | ------------ |\n| Text generation | Yes |\n| Streaming | Yes |\n| Tool calling | Yes |\n| Structured output | Yes |\n| Structured output + tools | Post-hoc |\n| Vision | No |\n| Embeddings | No |\n| Context window | 65K/131K |","hierarchy":{"lvl0":"Getting Started","lvl1":"Cerebras Provider Guide","lvl2":"Feature Support Matrix","lvl3":""}},
|
|
5431
5434
|
{"objectID":"44d1fb37e97ca28d25351c5c9b256f6290a6893cadc0a4be56dff1a10438120a","title":"\"Invalid Cerebras API key\"","url":"/docs/getting-started/providers/cerebras#invalid-cerebras-api-key","content":"`bash","hierarchy":{"lvl0":"Getting Started","lvl1":"Cerebras Provider Guide","lvl2":"\"Invalid Cerebras API key\"","lvl3":""}},
|
|
5432
5435
|
{"objectID":"1dd703d4cc118d7afbab83843af03af9886728f3bab92272cace22e9463fa0e7","title":"and shell transcripts retain echoed values):","url":"/docs/getting-started/providers/cerebras#and-shell-transcripts-retain-echoed-values","content":"test -n \"$CEREBRASAPIKEY\" && echo \"CEREBRASAPIKEY is set\" || echo \"CEREBRASAPIKEY is missing\"\n\n\n\nGet / rotate at [https://cloud.cerebras.ai](https://cloud.cerebras.ai).\nA bad key returns 401 with \"code\": \"wrongapikey\"`, which NeuroLink\nmaps to this message.","hierarchy":{"lvl0":"Getting Started","lvl1":"Cerebras Provider Guide","lvl2":"and shell transcripts retain echoed values):","lvl3":""}},
|
|
5433
5436
|
{"objectID":"507c596f6b7d8b9e2bd492f28a01def0e63693105d3057dda54079bc94e63478","title":"402 payment_required on every call","url":"/docs/getting-started/providers/cerebras#402-payment_required-on-every-call","content":"The account has no balance. Cerebras has no keyless free tier: open\nBilling ā Credits ā ADD CREDITS in the console, choose \"Start with\nlimited free credits\", and save a payment card ā the $5 promo credit\nactivates with no charge. Skipping the claim step during onboarding\n(\"SKIP TO CONSOLE\") leaves the balance at $0.00.","hierarchy":{"lvl0":"Getting Started","lvl1":"Cerebras Provider Guide","lvl2":"402 payment_required on every call","lvl3":""}},
|
|
5434
5437
|
{"objectID":"87ba20ffd62f6d99291ed1b32232cafab1ea70cfc060f5a59ea5e374b16de169","title":"Empty content with small maxTokens on gpt-oss-120b","url":"/docs/getting-started/providers/cerebras#empty-content-with-small-maxtokens-on-gpt-oss-120b","content":"gpt-oss-120b is a reasoning model: it spends its first tokens on a\nreasoning channel before emitting content. With a tight budget\n(e.g. maxTokens: 50) the entire budget goes to reasoning,\nfinish_reason is length, and content is empty. Give reasoning\nprompts a few hundred tokens of headroom.","hierarchy":{"lvl0":"Getting Started","lvl1":"Cerebras Provider Guide","lvl2":"Empty content with small maxTokens on gpt-oss-120b","lvl3":""}},
|
|
5435
|
-
{"objectID":"12792b087dafedbd6d724cb4cfd2f5365fcea8da18d2d14493ff688b79efda80","title":"404 \"model not found\" for llama/qwen models","url":"/docs/getting-started/providers/cerebras#404-model-not-found-for-llamaqwen-models","content":"Those models are retired
|
|
5438
|
+
{"objectID":"12792b087dafedbd6d724cb4cfd2f5365fcea8da18d2d14493ff688b79efda80","title":"404 \"model not found\" for llama/qwen models","url":"/docs/getting-started/providers/cerebras#404-model-not-found-for-llamaqwen-models","content":"Those models are retired, and so is gemma-4-31b. The catalog carries\ngpt-oss-120b only ā verify the live roster with an authenticated\nGET https://api.cerebras.ai/v1/models.","hierarchy":{"lvl0":"Getting Started","lvl1":"Cerebras Provider Guide","lvl2":"404 \"model not found\" for llama/qwen models","lvl3":""}},
|
|
5436
5439
|
{"objectID":"c122483695ccba53489f6d1403f7b78fa2f9d48c9a35220e08425516b5521183","title":"See Also","url":"/docs/getting-started/providers/cerebras#see-also","content":"Groq Provider ā sibling speed-focused OpenAI-compat provider\nxAI Grok Provider ā sibling OpenAI-compat with Grok 3\nTier 2 catalog entry guide ā how this provider is wired internally\n\nNeed Help? Open a GitHub Discussion or issue.","hierarchy":{"lvl0":"Getting Started","lvl1":"Cerebras Provider Guide","lvl2":"See Also","lvl3":""}},
|
|
5437
5440
|
{"objectID":"3803b4ecde578f946b8a4fe5139e3ee640d53281541c50578e8a5d47847d5157","title":"Cloudflare Workers AI Provider Guide","url":"/docs/getting-started/providers/cloudflare","content":"Cloudflare Workers AI Provider Guide\n\nOpen-model inference at the edge via Cloudflare Workers AI\n\nOverview\n\nCloudflare Workers AI\nserves Meta Llama, Mistral, and other open models from Cloudflare's\nglobal GPU cluster. NeuroLink talks to the OpenAI-compatible endpoint.\n\nKey Facts\nProtocol: OpenAI-compatible (/v1/chat/completions)\nDefault base URL: https://api.cloudflare.com/client/v4/accounts/{accountId}/ai/v1\nDefault model: @cf/meta/llama-3.3-70b-instruct-fp8-fast\nStreaming: Yes\nTool calling: Limited (model-dependent)\n\nQuick Start\nGet Credentials\n\nYou need both:\nA Cloudflare Account ID (Cloudflare dashboard ā right sidebar)\nA Workers AI API token with the Workers AI Read & Write\n permission (Profile ā API Tokens ā Create Token)\nConfigure\nGenerate\n\nSupported Models (sample)\n\n| Model ID | Notes |\n| ------------------------------------------ | -------------- |\n| @cf/meta/llama-3.3-70b-instruct-fp8-fast | Default |\n| @cf/meta/llama-3.1-70b-instruct | Llama 3.1 70B |\n| @cf/meta/llama-3.1-8b-instruct | Fast tier |\n| @cf/meta/llama-3.2-11b-vision-instruct | Vision-capable |\n\nBrowse: https://developers.cloudflare.com/workers-ai/models\n\nCLI Usage\n\nProvider Aliases\n\n| Alias | Example |\n| ------------ | ----------------------- |\n| cloudflare | --provider cloudflare |\n| cf | --provider cf |\n\nConfiguration Reference\n\n| Environment Variable | Required | Default |\n| ----------------------- | -------- | ------------------------------------------ |\n| CLOUDFLARE_ACCOUNT_ID | Yes | ā |\n| CLOUDFLARE_API_KEY | Yes | ā |\n| CLOUDFLARE_MODEL | No | @cf/meta/llama-3.3-70b-instruct-fp8-fast |\n\nSee Also\nTogether AI Provider\nFireworks Provider","hierarchy":{"lvl0":"Getting Started","lvl1":"Cloudflare Workers AI Provider Guide","lvl2":"","lvl3":""}},
|
|
5438
5441
|
{"objectID":"aafa1a6f2adf2bacc5661cf9ccb309d1e32e300645f037c35a98217b31eb15df","title":"Cloudflare Workers AI Provider Guide","url":"/docs/getting-started/providers/cloudflare#cloudflare-workers-ai-provider-guide","content":"Open-model inference at the edge via Cloudflare Workers AI","hierarchy":{"lvl0":"Getting Started","lvl1":"Cloudflare Workers AI Provider Guide","lvl2":"Cloudflare Workers AI Provider Guide","lvl3":""}},
|
|
@@ -5566,14 +5569,14 @@
|
|
|
5566
5569
|
{"objectID":"293d0cf78c8b91321aaea4539752c75c5d23b0f630e75d8c039fa5b10759fbd8","title":"Voice not found","url":"/docs/getting-started/providers/elevenlabs#voice-not-found","content":"You passed a voice ID that does not exist in your account. List available voices to confirm:","hierarchy":{"lvl0":"Getting Started","lvl1":"ElevenLabs Provider Guide","lvl2":"Voice not found","lvl3":""}},
|
|
5567
5570
|
{"objectID":"a8f667c71e278a2fbdf507c9d16d18418a74fc97ae593129deaa675058c728f5","title":"\"Failed to get voices\"","url":"/docs/getting-started/providers/elevenlabs#failed-to-get-voices","content":"Voice discovery failed (network error or invalid key). The 5-minute cache shields against transient failures, but a hard failure at startup will propagate. Ensure ELEVENLABS_API_KEY is valid and the ElevenLabs API is reachable.","hierarchy":{"lvl0":"Getting Started","lvl1":"ElevenLabs Provider Guide","lvl2":"\"Failed to get voices\"","lvl3":""}},
|
|
5568
5571
|
{"objectID":"58ee78d9a6be3099cc23a438c6255e483cabb54fdd59e63c6d9de2a3e10068ad","title":"See Also","url":"/docs/getting-started/providers/elevenlabs#see-also","content":"TTS Integration Guide ā complete multi-provider TTS reference\nOpenAI TTS Provider Guide ā alternative TTS provider\nAudio Input (STT) ā speech-to-text counterpart\nVoice Agent Guide ā building full voice assistants\n\nNeed Help? Join the GitHub Discussions or open an issue.","hierarchy":{"lvl0":"Getting Started","lvl1":"ElevenLabs Provider Guide","lvl2":"See Also","lvl3":""}},
|
|
5569
|
-
{"objectID":"b1184b197b42e32c5be5fb34fb171453c9691187c6fd632ea6ee2ffc096329ad","title":"Fireworks AI Provider Guide","url":"/docs/getting-started/providers/fireworks","content":"Fireworks AI Provider Guide\n\nOpen-model inference tuned for low-latency production workloads\n\nOverview\n\nFireworks AI hosts
|
|
5572
|
+
{"objectID":"b1184b197b42e32c5be5fb34fb171453c9691187c6fd632ea6ee2ffc096329ad","title":"Fireworks AI Provider Guide","url":"/docs/getting-started/providers/fireworks","content":"Fireworks AI Provider Guide\n\nOpen-model inference tuned for low-latency production workloads\n\nOverview\n\nFireworks AI hosts Kimi, GPT-OSS, Qwen, GLM and\nother open models with aggressive throughput optimizations.\nNeuroLink talks to the OpenAI-compatible endpoint at api.fireworks.ai.\n\nKey Facts\nProtocol: OpenAI-compatible (/inference/v1/chat/completions)\nDefault base URL: https://api.fireworks.ai/inference/v1\nDefault model: accounts/fireworks/models/kimi-k3 (vision-capable)\nStreaming: Yes\nTool calling: Yes (model-dependent)\n\nQuick Start\nGet an API Key\n\nhttps://fireworks.ai/account/api-keys\nConfigure Environment\nGenerate\n\nSupported Models (sample)\n\n| Model ID | Vision | Notes |\n| ---------------------------------------- | ------ | ----------------------------------- |\n| accounts/fireworks/models/kimi-k3 | Yes | Default ā newest Moonshot flagship |\n| accounts/fireworks/models/gpt-oss-120b | No | Text fallback (fallbackModelName) |\n| accounts/fireworks/models/qwen3p8-max | Yes | Qwen flagship |\n| accounts/fireworks/models/glm-5p3 | No | Rejects image inputs |\n\nFireworks lists models on /models that are not deployed for serverless\nuse, so the catalog only keeps ids that answered a real chat call.\nkimi-k2p6, the default until September 2026, now returns 404\nnot deployed and is retired.\n\nBrowse: https://fireworks.ai/models\n\nCLI Usage\n\nProvider Aliases\n\n| Alias | Example |\n| ----------- | ---------------------- |\n| fireworks | --provider fireworks |\n\nConfiguration Reference\n\n| Environment Variable | Required | Default |\n| -------------------- | -------- | --------------------------------------- |\n| FIREWORKS_API_KEY | Yes | ā |\n| FIREWORKS_MODEL | No | accounts/fireworks/models/kimi-k3 |\n| FIREWORKS_BASE_URL | No | https://api.fireworks.ai/inference/v1 |\n\nTroubleshooting\nModel not found, inaccessible, and/or not deployed ā your account\n has not deployed the requested model. Check\n https://fireworks.ai/models and either\n deploy it or pick a serverless one.\n\nSee Also\nTogether AI Provider\nGroq Provider","hierarchy":{"lvl0":"Getting Started","lvl1":"Fireworks AI Provider Guide","lvl2":"","lvl3":""}},
|
|
5570
5573
|
{"objectID":"05cd5f1dffdb316d6e5f1b3ff86da591b78de22e32dc78ccf67aa1f40d59597d","title":"Fireworks AI Provider Guide","url":"/docs/getting-started/providers/fireworks#fireworks-ai-provider-guide","content":"Open-model inference tuned for low-latency production workloads","hierarchy":{"lvl0":"Getting Started","lvl1":"Fireworks AI Provider Guide","lvl2":"Fireworks AI Provider Guide","lvl3":""}},
|
|
5571
|
-
{"objectID":"ce4faa67b07a31fda18f8df2e44a84161502930a7c7bda3806406447212d3b32","title":"Overview","url":"/docs/getting-started/providers/fireworks#overview","content":"Fireworks AI hosts
|
|
5572
|
-
{"objectID":"cf82705a9b6b783a7d82e376fcee6d19120c08d1bbdf1df8b01a319dda22d70f","title":"Key Facts","url":"/docs/getting-started/providers/fireworks#key-facts","content":"Protocol: OpenAI-compatible (/inference/v1/chat/completions)\nDefault base URL: https://api.fireworks.ai/inference/v1\nDefault model: accounts/fireworks/models/
|
|
5574
|
+
{"objectID":"ce4faa67b07a31fda18f8df2e44a84161502930a7c7bda3806406447212d3b32","title":"Overview","url":"/docs/getting-started/providers/fireworks#overview","content":"Fireworks AI hosts Kimi, GPT-OSS, Qwen, GLM and\nother open models with aggressive throughput optimizations.\nNeuroLink talks to the OpenAI-compatible endpoint at api.fireworks.ai.","hierarchy":{"lvl0":"Getting Started","lvl1":"Fireworks AI Provider Guide","lvl2":"Overview","lvl3":""}},
|
|
5575
|
+
{"objectID":"cf82705a9b6b783a7d82e376fcee6d19120c08d1bbdf1df8b01a319dda22d70f","title":"Key Facts","url":"/docs/getting-started/providers/fireworks#key-facts","content":"Protocol: OpenAI-compatible (/inference/v1/chat/completions)\nDefault base URL: https://api.fireworks.ai/inference/v1\nDefault model: accounts/fireworks/models/kimi-k3 (vision-capable)\nStreaming: Yes\nTool calling: Yes (model-dependent)","hierarchy":{"lvl0":"Getting Started","lvl1":"Fireworks AI Provider Guide","lvl2":"Key Facts","lvl3":""}},
|
|
5573
5576
|
{"objectID":"2553a96780b52ca185305c8520070d1ffd546668722c2fa9dfb470e2883fa9ef","title":"1. Get an API Key","url":"/docs/getting-started/providers/fireworks#1-get-an-api-key","content":"https://fireworks.ai/account/api-keys","hierarchy":{"lvl0":"Getting Started","lvl1":"Fireworks AI Provider Guide","lvl2":"1. Get an API Key","lvl3":""}},
|
|
5574
|
-
{"objectID":"f08aab0c7818717d789d878d66a349766820749c3296c011c8c3f35782e63a12","title":"Supported Models (sample)","url":"/docs/getting-started/providers/fireworks#supported-models-sample","content":"| Model ID
|
|
5577
|
+
{"objectID":"f08aab0c7818717d789d878d66a349766820749c3296c011c8c3f35782e63a12","title":"Supported Models (sample)","url":"/docs/getting-started/providers/fireworks#supported-models-sample","content":"| Model ID | Vision | Notes |\n| ---------------------------------------- | ------ | ----------------------------------- |\n| accounts/fireworks/models/kimi-k3 | Yes | Default ā newest Moonshot flagship |\n| accounts/fireworks/models/gpt-oss-120b | No | Text fallback (fallbackModelName) |\n| accounts/fireworks/models/qwen3p8-max | Yes | Qwen flagship |\n| accounts/fireworks/models/glm-5p3 | No | Rejects image inputs |\n\nFireworks lists models on /models that are not deployed for serverless\nuse, so the catalog only keeps ids that answered a real chat call.\nkimi-k2p6, the default until September 2026, now returns 404\nnot deployed and is retired.\n\nBrowse: https://fireworks.ai/models","hierarchy":{"lvl0":"Getting Started","lvl1":"Fireworks AI Provider Guide","lvl2":"Supported Models (sample)","lvl3":""}},
|
|
5575
5578
|
{"objectID":"1c6ba5220686d63b86ed6da5aeaff8ad54a0e33503a1f3dfd9bafd095e446665","title":"Provider Aliases","url":"/docs/getting-started/providers/fireworks#provider-aliases","content":"| Alias | Example |\n| ----------- | ---------------------- |\n| fireworks | --provider fireworks |","hierarchy":{"lvl0":"Getting Started","lvl1":"Fireworks AI Provider Guide","lvl2":"Provider Aliases","lvl3":""}},
|
|
5576
|
-
{"objectID":"0fd84fcdee093aae5dd076045f0363115b84752fb19939ed867be53ec42e7c0e","title":"Configuration Reference","url":"/docs/getting-started/providers/fireworks#configuration-reference","content":"| Environment Variable | Required | Default
|
|
5579
|
+
{"objectID":"0fd84fcdee093aae5dd076045f0363115b84752fb19939ed867be53ec42e7c0e","title":"Configuration Reference","url":"/docs/getting-started/providers/fireworks#configuration-reference","content":"| Environment Variable | Required | Default |\n| -------------------- | -------- | --------------------------------------- |\n| FIREWORKS_API_KEY | Yes | ā |\n| FIREWORKS_MODEL | No | accounts/fireworks/models/kimi-k3 |\n| FIREWORKS_BASE_URL | No | https://api.fireworks.ai/inference/v1 |","hierarchy":{"lvl0":"Getting Started","lvl1":"Fireworks AI Provider Guide","lvl2":"Configuration Reference","lvl3":""}},
|
|
5577
5580
|
{"objectID":"1641ff26216c6b6cb208d2dd83700286afa7680efcbb7f24cc5d63382b705f6c","title":"Troubleshooting","url":"/docs/getting-started/providers/fireworks#troubleshooting","content":"Model not found, inaccessible, and/or not deployed ā your account\n has not deployed the requested model. Check\n https://fireworks.ai/models and either\n deploy it or pick a serverless one.","hierarchy":{"lvl0":"Getting Started","lvl1":"Fireworks AI Provider Guide","lvl2":"Troubleshooting","lvl3":""}},
|
|
5578
5581
|
{"objectID":"016bd37da784e68632e7632baf2ff92d35b9746cf85268f4e9f1007576898945","title":"See Also","url":"/docs/getting-started/providers/fireworks#see-also","content":"Together AI Provider\nGroq Provider","hierarchy":{"lvl0":"Getting Started","lvl1":"Fireworks AI Provider Guide","lvl2":"See Also","lvl3":""}},
|
|
5579
5582
|
{"objectID":"158e1aff9458883a351d80f993d03d24e7fe73c454666523ed2366580ccb5b30","title":"Fish Audio TTS Provider Guide","url":"/docs/getting-started/providers/fish-audio","content":"Fish Audio TTS Provider Guide\n\nLow-cost text-to-speech ā S2 Pro voice cloning, multilingual, ~80%\ncheaper than ElevenLabs\n\nOverview\n\nFish Audio is a low-cost TTS provider focused on voice cloning. NeuroLink\nwraps it as a TTSHandler so it slots into the same\ngenerate({ tts: { provider: \"fish-audio\" } }) flow as OpenAI / ElevenLabs / Azure / Google AI TTS.\nLatest model: s1 (default) ā best quality\nspeech-1.6, speech-1.5 ā older / cheaper models\nVoice cloning: 15s of reference audio ā custom voice id\nLanguages: 14 (English, Mandarin, Cantonese, Japanese, Korean,\n French, German, Spanish, Italian, Portuguese, Russian, Arabic, Hindi,\n Indonesian)\n\nKey Facts\nProtocol: Native REST API (POST /v1/tts)\nDefault base URL: https://api.fish.audio\nDefault model: s1\nDefault voice (reference_id): fb6c0e1ea91e427fb9a93b9bbf0a1e4d (Generic Female / English)\nMax text length: 5000 characters\nOutput formats: mp3 (default), wav, pcm16 (raw 16-bit PCM @ 44.1 kHz)\nStreaming: Not implemented in this handler (synchronous synthesis only)\n\nQuick Start\nGet an API Key\n\nSign up at https://fish.audio/ and create an API\nkey from the dashboard.\nConfigure Environment\nSynthesize Your First Audio\n\nSDK Usage\n\nBasic Synthesis (Default Voice)\n\nCustom Voice (Voice Cloning)\n\nGet a reference_id from your Fish Audio dashboard after uploading 15s\nof reference audio:\n\nTTS-Augmented LLM Response\n\nWhen useAiResponse: true, NeuroLink first calls the LLM, then\nsynthesizes the LLM output through Fish Audio:\n\nWAV / PCM16 Output\n\nPer-Call Credentials\n\nCLI Usage\n\nConfiguration Reference\n\n| Environment Variable | Required | Default | Description |\n| --------------------- | -------- | ---------------------------------- | -------------------------- |\n| FISH_AUDIO_API_KEY | Yes | ā | Fish Audio API key |\n| FISH_AUDIO_VOICE_ID | No | fb6c0e1ea91e427fb9a93b9bbf0a1e4d | Default reference_id voice |\n| FISH_AUDIO_BASE_URL | No | https://api.fish.audio | Base URL |\n\nVoice Models\n\n| Model | Notes |\n| ------------ | ------------------------------ |\n| s1 | Latest, best quality (default) |\n| speech-1.6 | Previous flagship |\n| speech-1.5 | Older / cheaper |\n\nVoices are identified by reference_id strings from the Fish library.\nBrowse and clone voices in your Fish Audio dashboard.\n\nFeature Support Matrix\n\n| Feature | Fish Audio |\n| -------------- | --------------------- |\n| Text-to-speech | Yes |\n| Voice cloning | Yes (15s reference) |\n| Multilingual | Yes (14 languages) |\n| MP3 output | Yes |\n| WAV output | Yes (44.1 kHz) |\n| PCM16 output | Yes (raw, no RIFF) |\n| OPUS output | Falls back to MP3 |\n| Streaming | No (synchronous only) |\n| getVoices() | Not implemented |\n\nTroubleshooting\n\n\"Invalid Fish Audio API key\"\n\nGet / rotate at https://fish.audio/.\n\n\"Fish Audio rate limit exceeded\"\n\nFree tier has hourly limits. Upgrade your plan or implement exponential\nbackoff. The handler maps 408 / 429 / 5xx to retriable errors.\n\n\"Fish Audio synthesis failed: 422\"\n\nUsually means the reference_id is invalid or the text is too long\n(>5000 chars). Truncate the text or check the voice id in your dashboard.\n\nAudio sounds robotic / low quality\n\nTry a higher-quality model (model: \"s1\" if you're on speech-1.5) or\nclone your own reference voice from a 15s clean audio sample. Default\nvoices are generic ā voice-cloned reference_ids almost always sound\nbetter.\n\n\"PCM16 output is unplayable in audio players\"\n\npcm16 is RAW samples, not WAV ā players need a header. To play, write\na WAV header yourself (44 bytes) before the PCM data, or use the wav\nformat which produces a complete RIFF/WAV file.\n\nSee Also\nTTS Feature Guide ā overall TTS architecture and supported providers\nElevenLabs TTS ā sibling TTS provider with the largest voice library\nOpenAI TTS ā sibling TTS provider with tts-1 / tts-1-hd\nAdding a TTS provider ā internal reference for the integration pattern\n\nNeed Help? Open a GitHub Discussion or issue.","hierarchy":{"lvl0":"Getting Started","lvl1":"Fish Audio TTS Provider Guide","lvl2":"","lvl3":""}},
|
|
@@ -5890,9 +5893,10 @@
|
|
|
5890
5893
|
{"objectID":"6ad36ba3488491bb913c7a77b86a278cc86509da88a054975bcded71f5c02130","title":"[OpenRouter](/docs/getting-started/providers/openrouter)","url":"/docs/getting-started/providers#openrouterdocsgetting-startedprovidersopenrouter","content":"300+ models from 60+ providers\nš Single API across many AI providers (Anthropic, OpenAI, Google, Meta, etc.)\nā” Automatic failover and routing\nš° Competitive pricing with cost optimization\nšÆ Zero lock-in - switch models instantly\nš Usage tracking dashboard\nš Free models available\n\nSetup Guide ā","hierarchy":{"lvl0":"Getting Started","lvl1":"AI Provider Guides","lvl2":"[OpenRouter](/docs/getting-started/providers/openrouter)","lvl3":""}},
|
|
5891
5894
|
{"objectID":"733a2fa8ea4c547cdcdf502f89f003a2208c0e5828e36e7faaaa94e0903d3d49","title":"[OpenAI Compatible](/docs/getting-started/providers/openai-compatible)","url":"/docs/getting-started/providers#openai-compatibledocsgetting-startedprovidersopenai-compatible","content":"OpenRouter, vLLM, LocalAI, and more\nš 100+ models through OpenRouter\nš» Local deployment with vLLM\nš Self-hosted with LocalAI\nš Drop-in OpenAI replacement\n\nSetup Guide ā","hierarchy":{"lvl0":"Getting Started","lvl1":"AI Provider Guides","lvl2":"[OpenAI Compatible](/docs/getting-started/providers/openai-compatible)","lvl3":""}},
|
|
5892
5895
|
{"objectID":"fc415454bfde58f3634df544ef2adb88836c75fb1344b7042af7a9d6fdfa63d4","title":"[LiteLLM](/docs/getting-started/providers/litellm)","url":"/docs/getting-started/providers#litellmdocsgetting-startedproviderslitellm","content":"100+ providers through proxy\nš Unified API for 100+ providers\nš Load balancing and fallbacks\nš° Cost tracking\nšÆ Model routing\n\nSetup Guide ā","hierarchy":{"lvl0":"Getting Started","lvl1":"AI Provider Guides","lvl2":"[LiteLLM](/docs/getting-started/providers/litellm)","lvl3":""}},
|
|
5893
|
-
{"objectID":"faae7281e5a366b4892035d92012602a9e7aaa15cc9d96556b20493e25562498","title":"š§ Decision-Only Providers {#decision-only-providers}","url":"/docs/getting-started/providers#-decision-only-providers-decision-only-providers","content":"The
|
|
5896
|
+
{"objectID":"faae7281e5a366b4892035d92012602a9e7aaa15cc9d96556b20493e25562498","title":"š§ Decision-Only Providers {#decision-only-providers}","url":"/docs/getting-started/providers#-decision-only-providers-decision-only-providers","content":"The providers that serve decide rather than generate/stream:\nTypeSafe, Laya and XOR. Each returns typed\nboolean/choice/score answers and emits no text, so none appears in\ngeneration fallback chains or the health sweep.","hierarchy":{"lvl0":"Getting Started","lvl1":"AI Provider Guides","lvl2":"š§ Decision-Only Providers {#decision-only-providers}","lvl3":""}},
|
|
5894
5897
|
{"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 key 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":""}},
|
|
5895
5898
|
{"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":""}},
|
|
5899
|
+
{"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-1.1, 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, as a Buffer, a local file path or a data: URL; TypeSafe and Laya refuse media before any request\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/systemone\nš XOR_API_KEY is the key that endpoint accepts; on LiteLLM, the key's team must allow xor-1.1\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":""}},
|
|
5896
5900
|
{"objectID":"c98403894a115164f29a019817b7f39c93b59623a9854b4575ad06bc5f597320","title":"š§© Additional Catalog Providers","url":"/docs/getting-started/providers#-additional-catalog-providers","content":"Every provider below is a Tier-2 catalog entry. Provider-specific\nbehavioural quirks may apply, so check the provider's catalog file. The whole\nintegration is one JSON file under src/lib/providers/catalog/. Each page is\ngenerated from that file, which is also what the CI onboarding gate reads.","hierarchy":{"lvl0":"Getting Started","lvl1":"AI Provider Guides","lvl2":"š§© Additional Catalog Providers","lvl3":""}},
|
|
5897
5901
|
{"objectID":"026138da0a559269ecd9f0b2ceb72d9039096e72e064142afb7bfb74a5cb7455","title":"[API Route](/docs/getting-started/providers/api-route)","url":"/docs/getting-started/providers#api-routedocsgetting-startedprovidersapi-route","content":"Claude Sonnet 4.6\nš¤ 8 models; default claude-sonnet-4-6 (1M context)\nš ļø Native tool calling + structured output together\nš³ Free tier available\nā
Roster verified 2026-09-17 (authenticated GET /v1/models)\nš API key from api-route.com\nš Aliases: apiroute\n\nSetup Guide ā","hierarchy":{"lvl0":"Getting Started","lvl1":"AI Provider Guides","lvl2":"[API Route](/docs/getting-started/providers/api-route)","lvl3":""}},
|
|
5898
5902
|
{"objectID":"85aa65949d959db077347ecf93a4c40ade9ebab4300d4d52c62c702f6929053b","title":"[Baseten](/docs/getting-started/providers/baseten)","url":"/docs/getting-started/providers#basetendocsgetting-startedprovidersbaseten","content":"GLM 5.3 Flash\nš¤ 16 models; default zai-org/GLM-5.3-Flash (1M context)\nš ļø Native tool calling + structured output together\nš³ Free tier available\nā
Roster verified 2026-09-03 (authenticated GET /v1/models)\nš API key from app.baseten.co\n\nSetup Guide ā","hierarchy":{"lvl0":"Getting Started","lvl1":"AI Provider Guides","lvl2":"[Baseten](/docs/getting-started/providers/baseten)","lvl3":""}},
|
|
@@ -5958,18 +5962,18 @@
|
|
|
5958
5962
|
{"objectID":"854699a04e9d3ed9dc4cffe1b27061afb86f27586a6f04c772e0422f7853fabb","title":"1. Get API Credentials","url":"/docs/getting-started/providers/kling#1-get-api-credentials","content":"Sign up at https://kling.ai/ and grab the Access Key\nID + Secret from the developer dashboard.","hierarchy":{"lvl0":"Getting Started","lvl1":"Kling AI Provider Guide (video)","lvl2":"1. Get API Credentials","lvl3":""}},
|
|
5959
5963
|
{"objectID":"98689360e9090383d9345a8304010c5df2f704be9a96f5c072ad789a9d9e925c","title":"Configuration Reference","url":"/docs/getting-started/providers/kling#configuration-reference","content":"| Environment Variable | Required | Description |\n| -------------------- | -------- | ---------------- |\n| KLING_ACCESS_KEY | Yes | Kling access key |\n| KLING_SECRET_KEY | Yes | Kling secret key |","hierarchy":{"lvl0":"Getting Started","lvl1":"Kling AI Provider Guide (video)","lvl2":"Configuration Reference","lvl3":""}},
|
|
5960
5964
|
{"objectID":"5c9cd37e0ed9672f02587ee6f99a2ba417aff558c2d46733b78974566b4a7a5a","title":"See Also","url":"/docs/getting-started/providers/kling#see-also","content":"Runway Provider\nVertex Veo Provider","hierarchy":{"lvl0":"Getting Started","lvl1":"Kling AI Provider Guide (video)","lvl2":"See Also","lvl3":""}},
|
|
5961
|
-
{"objectID":"6d919d5032d8bf60b8341d6b8ff90eeb0c7d2f87553ca6e6e96d08b988c7e6e9","title":"Laya Provider Guide","url":"/docs/getting-started/providers/laya","content":"Laya Provider Guide\n\
|
|
5962
|
-
{"objectID":"c57a78b27b2b64f684ee60c36022d5b19a81323647a32687608b35530b4d3ed7","title":"Laya Provider Guide","url":"/docs/getting-started/providers/laya#laya-provider-guide","content":"
|
|
5965
|
+
{"objectID":"6d919d5032d8bf60b8341d6b8ff90eeb0c7d2f87553ca6e6e96d08b988c7e6e9","title":"Laya Provider Guide","url":"/docs/getting-started/providers/laya","content":"Laya Provider Guide\n\nA provider of decide ā the same typed boolean / choice / score\nanswers as TypeSafe's Jev, from an open-weights model you can\nrun yourself. It emits no text at all.\n\nOverview\n\nLaya is Convai Innovations' Apache-2.0 \"System One\" decision model. You send\none state plus named, typed questions; an encoder answers every question in a\nsingle forward pass and returns a probability distribution for each. NeuroLink\ncalls whatever base URL you configure ā a Laya server, or a LiteLLM proxy with a\npass-through route to one. There is no built-in endpoint.\n\nKey Facts\n\n| | |\n| --------------------- | ------------------------------------------------------------------------------------------------- |\n| Inference type | decide only |\n| Checkpoints | typed-decisions (default, fine-tuned for typed decisions), multilingual, english, or auto |\n| Input window | 1,024 tokens (typed-decisions, multilingual); 512 (english) |\n| Questions per request | up to 64 |\n| Endpoint | <base URL>/predict; the base URL is required, with no default |\n| Precedence | used automatically when its key and base URL are set and no TypeSafe key is |\n\nQuick Start\nGet an endpoint and a key\n\nRun a Laya server (see below), or use a LiteLLM\nproxy with a pass-through route to one. On LiteLLM, create a virtual key and add\nthe route's /predict path (and /health, if you want to probe it) to the\nkey's Allowed Routes; a key without them is refused with a 403\nKey/team not allowed to access passthrough route.\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\nWhen NeuroLink uses it\n\nEvery 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\nthe credentials passed to the SDK ā in the order TypeSafe, Laya,\nXOR. TypeSafe has two keys, TYPESAFE_API_KEY and\nAI_GATEWAY_API_KEY (its Vercel AI Gateway route), and either one counts. Laya\ncounts only with both its key and its base URL, and so does XOR. So:\nA TypeSafe key, plus Laya's key and base URL: built-in features use\n TypeSafe; Laya runs only where a caller asks for provider: \"laya\".\nOnly Laya's key and base URL: built-in features use Laya.\nLaya's key and base URL, plus XOR's: built-in features use Laya; XOR runs\n only where a caller asks for provider: \"xor\".\nA Laya key with no base URL: Laya is not configured. Built-in features\n ignore it, and provider: \"laya\" fails with Laya requires a base URL.\nNone of TypeSafe, Laya or XOR: everything behaves exactly as it did\n without a decision model.\n\nLimits\n\nThe window is small. Laya's encoders read 1,024 tokens, and 512 on the\nenglish checkpoint, against roughly 33,000 for Jev. Part of that is reserved\nfor each question and its options, so NeuroLink allows about 768 tokens of\nstate on typed-decisions and multilingual, and 320 on english, auto and\nany model name it does not recognise. Laya's server does not refuse a longer\nstate ā it answers from the start of it and says nothing ā so NeuroLink\nrefuses it instead, before any network call, with max_tokens_exceeded.\n\nThe size is an estimate, not Laya's tokenizer: about four characters per token\nfor ASCII text, and 1.5 tokens per character for other scripts (0.6 on\nmultilingual), calibrated against a live Laya 0.3.5 server. It errs toward refusing. Built-in\nconsumers treat a refusal as \"carry on as before\", which means long-prompt\nmodel routing usually falls back to the heuristic when Laya is the only\ndecision provider.\n\nMany options degrade it. A choice's options share a fixed token budget,\nso accuracy drops past about 20 options; some Laya servers also reject a\nquestion whose options overflow the budget, as invalid_request.\n\nPick the checkpoint deliberately. Laya's own benchmark puts its general\nenglish and multilingual checkpoints close to chance on typed decisions\nwithout fine-tuning; typed-decisions is the fine-tuned one, which is why it is\nthe default.\n\nErrors\n\n| Reply | Kind | Retried |\n| ----------------------------------------------- | ------------------------------------------------------- | ------- |\n| 401 / 403 from the proxy | authentication ā the provider instance stops retrying | no |\n| 400","hierarchy":{"lvl0":"Getting Started","lvl1":"Laya Provider Guide","lvl2":"","lvl3":""}},
|
|
5966
|
+
{"objectID":"c57a78b27b2b64f684ee60c36022d5b19a81323647a32687608b35530b4d3ed7","title":"Laya Provider Guide","url":"/docs/getting-started/providers/laya#laya-provider-guide","content":"A provider of decide ā the same typed boolean / choice / score\nanswers as TypeSafe's Jev, from an open-weights model you can\nrun yourself. It emits no text at all.","hierarchy":{"lvl0":"Getting Started","lvl1":"Laya Provider Guide","lvl2":"Laya Provider Guide","lvl3":""}},
|
|
5963
5967
|
{"objectID":"969ae83c9e8333da8d49838b0595db3588d8828b67611944cd46f08435f19d97","title":"Overview","url":"/docs/getting-started/providers/laya#overview","content":"Laya is Convai Innovations' Apache-2.0 \"System One\" decision model. You send\none state plus named, typed questions; an encoder answers every question in a\nsingle forward pass and returns a probability distribution for each. NeuroLink\ncalls whatever base URL you configure ā a Laya server, or a LiteLLM proxy with a\npass-through route to one. There is no built-in endpoint.","hierarchy":{"lvl0":"Getting Started","lvl1":"Laya Provider Guide","lvl2":"Overview","lvl3":""}},
|
|
5964
5968
|
{"objectID":"acf4d054e73fb41ef18db1c578cf1beb1117c3f43b24c6743ba30a4fe6569fb7","title":"Key Facts","url":"/docs/getting-started/providers/laya#key-facts","content":"| | |\n| --------------------- | ------------------------------------------------------------------------------------------------- |\n| Inference type | decide only |\n| Checkpoints | typed-decisions (default, fine-tuned for typed decisions), multilingual, english, or auto |\n| Input window | 1,024 tokens (typed-decisions, multilingual); 512 (english) |\n| Questions per request | up to 64 |\n| Endpoint | <base URL>/predict; the base URL is required, with no default |\n| Precedence | used automatically when its key and base URL are set and no TypeSafe key is |","hierarchy":{"lvl0":"Getting Started","lvl1":"Laya Provider Guide","lvl2":"Key Facts","lvl3":""}},
|
|
5965
5969
|
{"objectID":"ae5970b1821e7485e9d952384e4d6749a99d486ea648241bcbd8a9d43579e79a","title":"1. Get an endpoint and a key","url":"/docs/getting-started/providers/laya#1-get-an-endpoint-and-a-key","content":"Run a Laya server (see below), or use a LiteLLM\nproxy with a pass-through route to one. On LiteLLM, create a virtual key and add\nthe route's /predict path (and /health, if you want to probe it) to the\nkey's Allowed Routes; a key without them is refused with a 403\nKey/team not allowed to access passthrough route.","hierarchy":{"lvl0":"Getting Started","lvl1":"Laya Provider Guide","lvl2":"1. Get an endpoint and a key","lvl3":""}},
|
|
5966
5970
|
{"objectID":"662bbcdcfe03b7cb5abd93bb0088ff4bdcd8558ad74a79d70f1f7ab36023842c","title":"2. Configure","url":"/docs/getting-started/providers/laya#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":"Laya Provider Guide","lvl2":"2. Configure","lvl3":""}},
|
|
5967
|
-
{"objectID":"c99b86a6719e50f022a261b2688e6c849e03afaed0e6e398e9353d84cbf76835","title":"When NeuroLink uses it","url":"/docs/getting-started/providers/laya#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\nthe credentials passed to the SDK ā
|
|
5971
|
+
{"objectID":"c99b86a6719e50f022a261b2688e6c849e03afaed0e6e398e9353d84cbf76835","title":"When NeuroLink uses it","url":"/docs/getting-started/providers/laya#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\nthe credentials passed to the SDK ā in the order TypeSafe, Laya,\nXOR. TypeSafe has two keys, TYPESAFE_API_KEY and\nAI_GATEWAY_API_KEY (its Vercel AI Gateway route), and either one counts. Laya\ncounts only with both its key and its base URL, and so does XOR. So:\nA TypeSafe key, plus Laya's key and base URL: built-in features use\n TypeSafe; Laya runs only where a caller asks for provider: \"laya\".\nOnly Laya's key and base URL: built-in features use Laya.\nLaya's key and base URL, plus XOR's: built-in features use Laya; XOR runs\n only where a caller asks for provider: \"xor\".\nA Laya key with no base URL: Laya is not configured. Built-in features\n ignore it, and provider: \"laya\" fails with Laya requires a base URL.\nNone of TypeSafe, Laya or XOR: everything behaves exactly as it did\n without a decision model.","hierarchy":{"lvl0":"Getting Started","lvl1":"Laya Provider Guide","lvl2":"When NeuroLink uses it","lvl3":""}},
|
|
5968
5972
|
{"objectID":"adbc69b418b48f0bcaa2ae6e9f87f6bf8efc0dea1fe0d614cc12973156148d9f","title":"Limits","url":"/docs/getting-started/providers/laya#limits","content":"The window is small. Laya's encoders read 1,024 tokens, and 512 on the\nenglish checkpoint, against roughly 33,000 for Jev. Part of that is reserved\nfor each question and its options, so NeuroLink allows about 768 tokens of\nstate on typed-decisions and multilingual, and 320 on english, auto and\nany model name it does not recognise. Laya's server does not refuse a longer\nstate ā it answers from the start of it and says nothing ā so NeuroLink\nrefuses it instead, before any network call, with max_tokens_exceeded.\n\nThe size is an estimate, not Laya's tokenizer: about four characters per token\nfor ASCII text, and 1.5 tokens per character for other scripts (0.6 on\nmultilingual), calibrated against a live Laya 0.3.5 server. It errs toward refusing. Built-in\nconsumers treat a refusal as \"carry on as before\", which means long-prompt\nmodel routing usually falls back to the heuristic when Laya is the only\ndecision provider.\n\nMany options degrade it. A choice's options share a fixed token budget,\nso accuracy drops past about 20 options; some Laya servers also reject a\nquestion whose options overflow the budget, as invalid_request.\n\nPick the checkpoint deliberately. Laya's own benchmark puts its general\nenglish and multilingual checkpoints close to chance on typed decisions\nwithout fine-tuning; typed-decisions is the fine-tuned one, which is why it is\nthe default.","hierarchy":{"lvl0":"Getting Started","lvl1":"Laya Provider Guide","lvl2":"Limits","lvl3":""}},
|
|
5969
5973
|
{"objectID":"141537feff8c79df3ecbca258b80136e36da0fdeff342aa93a971be020313215","title":"Errors","url":"/docs/getting-started/providers/laya#errors","content":"| Reply | Kind | Retried |\n| ----------------------------------------------- | ------------------------------------------------------- | ------- |\n| 401 / 403 from the proxy | authentication ā the provider instance stops retrying | no |\n| 400 / 422 from Laya | invalid_request, with Laya's reason | no |\n| 413 from Laya | max_tokens_exceeded | no |\n| 429 | rate_limit | yes |\n| 503 | overloaded | yes |\n| other 5xx | server | yes |\n| more questions or state than Laya reads (local) | max_tokens_exceeded, with no network call | no |\n| no base URL configured (local) | invalid_request, with no network call | no |\n\nLiteLLM's 401 text echoes a masked copy of the rejected key and its hash; the\nprovider drops that part before the message reaches a log or an error.","hierarchy":{"lvl0":"Getting Started","lvl1":"Laya Provider Guide","lvl2":"Errors","lvl3":""}},
|
|
5970
5974
|
{"objectID":"de358abc64cad163c1666dce7b06fc5f7b3637b9568e420ceb9269a526929d54","title":"Running your own Laya server","url":"/docs/getting-started/providers/laya#running-your-own-laya-server","content":"Laya's example server exposes the same /predict route. Point\nLAYA_BASE_URL at it:","hierarchy":{"lvl0":"Getting Started","lvl1":"Laya Provider Guide","lvl2":"Running your own Laya server","lvl3":""}},
|
|
5971
5975
|
{"objectID":"e0dd67e8f79c7801d3e199dcd765a559f64a9d65d43cf1611026725a8ae1ee82","title":"Troubleshooting","url":"/docs/getting-started/providers/laya#troubleshooting","content":"Laya requires a base URL ā set LAYA_BASE_URL, or pass\n credentials.laya.baseURL. There is no default endpoint.\nAuthentication failed ā the proxy rejected the key. Check it in the\n LiteLLM Dashboard, including its Allowed Routes. The provider instance does\n not retry after a rejection.\nA 403 with error code: 1010 ā Cloudflare in front of your proxy blocked\n the client by its signature. Node's fetch is accepted; a proxy or agent that\n rewrites the user agent may not be.\nexceeded the provider's token limit ā the state is larger than Laya\n reads. Shorten it, or configure TypeSafe for long inputs.\nBuilt-in routing never uses Laya ā a TypeSafe key is also set and takes\n precedence, or Laya has no base URL.","hierarchy":{"lvl0":"Getting Started","lvl1":"Laya Provider Guide","lvl2":"Troubleshooting","lvl3":""}},
|
|
5972
|
-
{"objectID":"fb160b657869a262fd7735599ce2c2ffd49423f4a0f7c43f4ef5ee74aa4dcde5","title":"See also","url":"/docs/getting-started/providers/laya#see-also","content":"The decide inference type\nTypeSafe (Jev) Provider Guide\nLaya on GitHub","hierarchy":{"lvl0":"Getting Started","lvl1":"Laya Provider Guide","lvl2":"See also","lvl3":""}},
|
|
5976
|
+
{"objectID":"fb160b657869a262fd7735599ce2c2ffd49423f4a0f7c43f4ef5ee74aa4dcde5","title":"See also","url":"/docs/getting-started/providers/laya#see-also","content":"The decide inference type\nTypeSafe (Jev) Provider Guide\nXOR Provider Guide\nLaya on GitHub","hierarchy":{"lvl0":"Getting Started","lvl1":"Laya Provider Guide","lvl2":"See also","lvl3":""}},
|
|
5973
5977
|
{"objectID":"e3ac6498f27344d89bbe65467d6382ad117a8cdd85b1daa4ec6dafe521cc8d44","title":"LiteLLM Provider Guide","url":"/docs/getting-started/providers/litellm","content":"LiteLLM Provider Guide\n\nAccess hundreds of AI models across 100+ providers through the NeuroLink LiteLLM provider via a LiteLLM proxy server\n\nOverview\n\nNeuroLink's litellm provider connects to a LiteLLM proxy server to access hundreds of models across 100+ AI providers (OpenAI, Anthropic, Google, AWS Bedrock, Cohere, Groq, Together AI, and more) through a single OpenAI-compatible API. The proxy adds enterprise features like load balancing, fallbacks, budgets, and rate limiting on top of the connected AI providers.\n\nHow It Works\nYou run (or connect to) a LiteLLM proxy server that manages your provider API keys and model routing.\nNeuroLink's litellm provider communicates with this proxy using the OpenAI-compatible protocol.\nModels are referenced using LiteLLM's provider/model format (e.g., openai/gpt-4o-mini, anthropic/claude-3-5-sonnet-20240620).\n\nKey Benefits\n100+ Providers: Access hundreds of models across a broad range of AI providers through one interface\nUnified Model Format: Use provider/model naming across all backends\nLoad Balancing: Distribute requests across multiple providers/models\nCost Tracking: Built-in budget management and spend tracking\nFallbacks: Automatic failover when providers are down\nProxy Mode: Run as standalone proxy server for team-wide use\n\nQuick Start\nSet Up a LiteLLM Proxy Server\n\nBefore using the NeuroLink litellm provider, you need a running LiteLLM proxy. See the Setting Up LiteLLM Proxy section below for full details, or get started quickly:\nConfigure Environment Variables\n\nAdd to your .env file:\nTest the Setup\n\nEnvironment Variables\n\n| Variable | Required | Default | Description |\n| ------------------ | -------- | ----------------------- | ----------------------------------------- |\n| LITELLM_BASE_URL | No | http://localhost:4000 | URL of your LiteLLM proxy server |\n| LITELLM_API_KEY | No | sk-anything | API key for authenticating with the proxy |\n| LITELLM_MODEL | No | openai/gpt-4o-mini | Default model in provider/model format |\n\nDefault Model\n\nThe default model is openai/gpt-4o-mini (from LiteLLMModels.OPENAI_GPT_4O_MINI). Override it by setting LITELLM_MODEL in your environment or passing --model on the CLI.\n\nModel Name Format\n\nLiteLLM uses a provider/model format for model names. Examples:\n\nSee the full list at LiteLLM Supported Providers.\n\nSDK Usage\n\nBasic Usage\n\nWith a Specific Model\n\nStreaming\n\nMulti-Model Workflow\n\nCLI Usage\n\nAvailable Models\n\nThe LiteLLMModels enum provides commonly used model identifiers:\n\n| Enum Value | Model ID |\n| ------------------------------ | -------------------------------------- |\n| OPENAI_GPT_4O_MINI | openai/gpt-4o-mini |\n| OPENAI_GPT_4O | openai/gpt-4o |\n| OPENAI_GPT_5 | openai/gpt-5 |\n| ANTHROPIC_CLAUDE_SONNET_4_6 | anthropic/claude-sonnet-4-6 |\n| ANTHROPIC_CLAUDE_3_5_SONNET | anthropic/claude-3-5-sonnet-20240620 |\n| VERTEX_GEMINI_2_5_PRO | vertex_ai/gemini-2.5-pro |\n| GEMINI_2_0_FLASH | gemini/gemini-2.0-flash |\n| GROQ_LLAMA_3_1_70B_VERSATILE | groq/llama-3.1-70b-versatile |\n| MISTRAL_LARGE | mistral/mistral-large-latest |\n\nYou can also pass any model string your LiteLLM proxy is configured to serve. Use the proxy's /v1/models endpoint to discover available models dynamically.\n\nError Handling\n\nThe LiteLLM provider returns specific error types for common failure scenarios:\n\n| Error | Cause | Resolution |\n| ----------------------------- | ----------------------------------- | -------------------------------------------------------- |\n| NetworkError (ECONNREFUSED) | LiteLLM proxy server is not running | Start the proxy at the configured LITELLM_BASE_URL |\n| AuthenticationError | Invalid LITELLM_API_KEY | Check your API key matches the proxy's master key |\n| RateLimitError | Upstream rate limit exceeded | Wait and retry, or configure load balancing in the proxy |\n| InvalidModelError | Model not configured in proxy | Add the model to your LiteLLM proxy configuration |\n\nSetting Up LiteLLM Proxy\n\nThe NeuroLink litellm provider requires a running LiteLLM proxy server. This section covers how to set one up.\n\nInstall LiteLLM\n\nQuick Start (Single Model)\n\nConfiguration File (Multiple Models)\n\nCreate litellm_config.yaml:\n\nStart the proxy:\n\nLoad Balancing\n\nDistribute requests across multiple providers or API keys:\n\nAutomatic Failover\n\nConfigure fallback providers for reliability:\n\nBudget Management\n\nSet spending limits per virtual key:\n\nDocker Deployment\n\nTroubleshooting\n\nCommon Issues\n\"LiteLLM proxy server not available\"\n\nProblem: The proxy ","hierarchy":{"lvl0":"Getting Started","lvl1":"LiteLLM Provider Guide","lvl2":"","lvl3":""}},
|
|
5974
5978
|
{"objectID":"d7435a5ad9fdbf5d14349609fed469d76227dc6098228c3ec8e0c82c3d62944a","title":"LiteLLM Provider Guide","url":"/docs/getting-started/providers/litellm#litellm-provider-guide","content":"Access hundreds of AI models across 100+ providers through the NeuroLink LiteLLM provider via a LiteLLM proxy server","hierarchy":{"lvl0":"Getting Started","lvl1":"LiteLLM Provider Guide","lvl2":"LiteLLM Provider Guide","lvl3":""}},
|
|
5975
5979
|
{"objectID":"27c251c8bbd323623221b411910908f9845d9bca578eaf8a167eff42d385cc67","title":"Overview","url":"/docs/getting-started/providers/litellm#overview","content":"NeuroLink's litellm provider connects to a LiteLLM proxy server to access hundreds of models across 100+ AI providers (OpenAI, Anthropic, Google, AWS Bedrock, Cohere, Groq, Together AI, and more) through a single OpenAI-compatible API. The proxy adds enterprise features like load balancing, fallbacks, budgets, and rate limiting on top of the connected AI providers.","hierarchy":{"lvl0":"Getting Started","lvl1":"LiteLLM Provider Guide","lvl2":"Overview","lvl3":""}},
|
|
@@ -6602,10 +6606,10 @@
|
|
|
6602
6606
|
{"objectID":"14c8755cfa45311a2b8645d3729d760f513b4e768f4cbe6d75e1dcaaa68c7e94","title":"Configuration Reference","url":"/docs/getting-started/providers/together-ai#configuration-reference","content":"| Environment Variable | Required | Default |\n| -------------------- | -------- | ----------------------------------------- |\n| TOGETHER_API_KEY | Yes | ā |\n| TOGETHER_MODEL | No | meta-llama/Llama-3.3-70B-Instruct-Turbo |\n| TOGETHER_BASE_URL | No | https://api.together.xyz/v1 |","hierarchy":{"lvl0":"Getting Started","lvl1":"Together AI Provider Guide","lvl2":"Configuration Reference","lvl3":""}},
|
|
6603
6607
|
{"objectID":"73dacb114377509534778a0d5d1d386e64fe4e71f75f590903d6a5c3dda075c6","title":"Feature Support Matrix","url":"/docs/getting-started/providers/together-ai#feature-support-matrix","content":"| Feature | Support |\n| ----------------- | ----------------- |\n| Text generation | Yes |\n| Streaming | Yes |\n| Tool calling | Yes (model-dep.) |\n| Structured output | Yes (model-dep.) |\n| Vision | Yes (Llama 3.2 V) |\n| Embeddings | Limited |","hierarchy":{"lvl0":"Getting Started","lvl1":"Together AI Provider Guide","lvl2":"Feature Support Matrix","lvl3":""}},
|
|
6604
6608
|
{"objectID":"5a31d744d2d35af19cc87e27118e0d4057ab98d14fa7be6e9acb01dcbfc29f6a","title":"See Also","url":"/docs/getting-started/providers/together-ai#see-also","content":"Fireworks Provider\nGroq Provider","hierarchy":{"lvl0":"Getting Started","lvl1":"Together AI Provider Guide","lvl2":"See Also","lvl3":""}},
|
|
6605
|
-
{"objectID":"63e8301588e0fd846272e6b041d27fbe6a754543f38d949f07ce7e6f181a0ced","title":"TypeSafe (Jev) Provider Guide","url":"/docs/getting-started/providers/typesafe","content":"TypeSafe (Jev) Provider Guide\n\nOne of
|
|
6606
|
-
{"objectID":"7320dc5177f0e320fe7887f77c01c06519bb6c0ddeb8a8b38ecfa013a9363a1f","title":"TypeSafe (Jev) Provider Guide","url":"/docs/getting-started/providers/typesafe#typesafe-jev-provider-guide","content":"One of
|
|
6609
|
+
{"objectID":"63e8301588e0fd846272e6b041d27fbe6a754543f38d949f07ce7e6f181a0ced","title":"TypeSafe (Jev) Provider Guide","url":"/docs/getting-started/providers/typesafe","content":"TypeSafe (Jev) Provider Guide\n\nOne of the providers that serve decide rather than generate/stream ā\nit returns typed, calibrated judgments and emits no text at all. The others are\nLaya and XOR, open-weights models served from an endpoint\nyou configure; TypeSafe runs first when more than one is configured.\n\nOverview\n\nTypeSafe's Jev is a \"System One\" model. You send one state plus a map of\nnamed, typed questions; it returns one typed answer per question, all evaluated\nin a single parallel pass. Nothing has to be parsed back out of prose, and every\nchoice/score answer carries a calibrated confidence rather than a\nself-reported one.\n\nBecause it emits no text, generate() and stream() are not available and\ngetAISDKModel() throws ā the same shape Voyage and Jina already use for\nembedding-only providers. Its descriptor declares inferenceKinds: [\"decide\"],\nwhich keeps it out of auto-select and the health sweep, so those throws are\nunreachable in normal use.\n\nThis is not neurolink.evaluate(), which\nscores an already-generated response with RAGAS scorers. Different feature,\ndifferent word.\n\nKey Facts\nProvider id: typesafe (aliases: jev, typesafe-ai)\nInference kinds: decide only ā one of the providers that do (the others\n are Laya and XOR); TypeSafe runs first when more than one\n is configured\nTool calling: none (toolSupport: \"none\") ā a decision model calls nothing\nHealth check: env-only; it is never probed with a live generation\nDefault decide timeout: 5000 ms (timeouts.decideMs)\nLatency: flat in question count ā 1 question ~393 ms, 400 questions\n ~465 ms. Concurrent requests queue instead, so batch every question into one\n call rather than fanning out.\nCost: ~$0.042 per million input tokens, output billed at zero ā about\n $0.00002 per decision. Output tokens are reported ā measured 21 for a\n single question, converging to ~17.5 per question in a batch of eight ā they\n are simply not charged.\nAccuracy is the trade: 67.8% on TypeSafe's own 711-case benchmark against\n Opus 5's 73.1%. Right for decisions that are gated and reversible; wrong for\n final answers.\n\nQuick Start\nGet an API key\n\nCreate one at console.typesafe.ai/keys.\nConfigure\nUse it\n\ntryDecide() returns null on any failure. Use decide() when you want the\nfailure to surface; it throws a ProviderError whose cause carries a typed\nkind.\n\nFrom the CLI\n\nneurolink decide [state] calls decide() under the hood and reads\nTYPESAFE_API_KEY from the environment like every other CLI command. See the\nCLI command reference.\n\nThe degradation contract\n\nSetting the key is the entire switch, and removing it is a complete undo.\nEvery internal consumer of decide fails open: with no decision provider\nconfigured, model routing, context budgeting, relevance compaction, tool routing\nand RAG planning all behave exactly as they did before. There is no\nconfiguration in which a missing, invalid, slow or unreachable decision model\nchanges NeuroLink's observable behaviour.\n\nA credential the service does not accept disables that provider instance rather\nthan paying a round trip on every later call to be told so again.\n\nTwo transports\n\nThe same model is reachable two ways, and the choice is made once in the\nconstructor.\n\n| | Direct | Vercel AI Gateway |\n| ------------------- | ------------------- | --------------------------------------------- |\n| Key | TYPESAFE_API_KEY | AI_GATEWAY_API_KEY |\n| Endpoint | api.typesafe.ai | ai-gateway.vercel.sh/v4/ai/evaluation-model |\n| Endpoint override | TYPESAFE_BASE_URL | TYPESAFE_GATEWAY_URL |\n| Model named in | request body | ai-model-id header |\n| Question vocabulary | noul | boolean |\n| confidence | on each answer | on providerMetadata |\n| Billed by | TypeSafe | Vercel |\n\nHolding both keys keeps the direct transport, so the confidence figures a\nhost already sees do not shift underneath it when a second key appears. Force\none with TYPESAFE_TRANSPORT=direct|gateway or\ncredentials.typesafe.transport. Either endpoint can be moved without a\nrelease: credentials.typesafe.baseURL / TYPESAFE_BASE_URL for the direct\none, credentials.typesafe.gatewayURL / TYPESAFE_GATEWAY_URL for the\ngateway route.\n\nā ļø The gateway refuses every request ā free credits included ā until the\nVercel team has a credit card on file, returning 403\ncustomer_verification_required. That is an account state, not a bad key, and it\narrives before the model id is validated.\n\nFull detail, including the measured error table and why the distribution peak is\nnot a substitute for the reported confidence, is in\nThe decide inference type.\n\nWhat NeuroLink uses it for\n\n| Area | What the decision replaces ","hierarchy":{"lvl0":"Getting Started","lvl1":"TypeSafe (Jev) Provider Guide","lvl2":"","lvl3":""}},
|
|
6610
|
+
{"objectID":"7320dc5177f0e320fe7887f77c01c06519bb6c0ddeb8a8b38ecfa013a9363a1f","title":"TypeSafe (Jev) Provider Guide","url":"/docs/getting-started/providers/typesafe#typesafe-jev-provider-guide","content":"One of the providers that serve decide rather than generate/stream ā\nit returns typed, calibrated judgments and emits no text at all. The others are\nLaya and XOR, open-weights models served from an endpoint\nyou configure; TypeSafe runs first when more than one is configured.","hierarchy":{"lvl0":"Getting Started","lvl1":"TypeSafe (Jev) Provider Guide","lvl2":"TypeSafe (Jev) Provider Guide","lvl3":""}},
|
|
6607
6611
|
{"objectID":"8cc640004e04379192695b8fcd3d49552ac0f4ebd763093bc610b4c93e823fee","title":"Overview","url":"/docs/getting-started/providers/typesafe#overview","content":"TypeSafe's Jev is a \"System One\" model. You send one state plus a map of\nnamed, typed questions; it returns one typed answer per question, all evaluated\nin a single parallel pass. Nothing has to be parsed back out of prose, and every\nchoice/score answer carries a calibrated confidence rather than a\nself-reported one.\n\nBecause it emits no text, generate() and stream() are not available and\ngetAISDKModel() throws ā the same shape Voyage and Jina already use for\nembedding-only providers. Its descriptor declares inferenceKinds: [\"decide\"],\nwhich keeps it out of auto-select and the health sweep, so those throws are\nunreachable in normal use.\n\nThis is not neurolink.evaluate(), which\nscores an already-generated response with RAGAS scorers. Different feature,\ndifferent word.","hierarchy":{"lvl0":"Getting Started","lvl1":"TypeSafe (Jev) Provider Guide","lvl2":"Overview","lvl3":""}},
|
|
6608
|
-
{"objectID":"4921fe7ae1c50c817be3b7742587c455084bee9d988015cf475edd5c3c196b84","title":"Key Facts","url":"/docs/getting-started/providers/typesafe#key-facts","content":"Provider id: typesafe (aliases: jev, typesafe-ai)\nInference kinds: decide only ā one of
|
|
6612
|
+
{"objectID":"4921fe7ae1c50c817be3b7742587c455084bee9d988015cf475edd5c3c196b84","title":"Key Facts","url":"/docs/getting-started/providers/typesafe#key-facts","content":"Provider id: typesafe (aliases: jev, typesafe-ai)\nInference kinds: decide only ā one of the providers that do (the others\n are Laya and XOR); TypeSafe runs first when more than one\n is configured\nTool calling: none (toolSupport: \"none\") ā a decision model calls nothing\nHealth check: env-only; it is never probed with a live generation\nDefault decide timeout: 5000 ms (timeouts.decideMs)\nLatency: flat in question count ā 1 question ~393 ms, 400 questions\n ~465 ms. Concurrent requests queue instead, so batch every question into one\n call rather than fanning out.\nCost: ~$0.042 per million input tokens, output billed at zero ā about\n $0.00002 per decision. Output tokens are reported ā measured 21 for a\n single question, converging to ~17.5 per question in a batch of eight ā they\n are simply not charged.\nAccuracy is the trade: 67.8% on TypeSafe's own 711-case benchmark against\n Opus 5's 73.1%. Right for decisions that are gated and reversible; wrong for\n final answers.","hierarchy":{"lvl0":"Getting Started","lvl1":"TypeSafe (Jev) Provider Guide","lvl2":"Key Facts","lvl3":""}},
|
|
6609
6613
|
{"objectID":"f5f7265f7ee9ba7ead6f6016a4b9232258ffaf4256e544874d6bcca8323dbb04","title":"1. Get an API key","url":"/docs/getting-started/providers/typesafe#1-get-an-api-key","content":"Create one at console.typesafe.ai/keys.","hierarchy":{"lvl0":"Getting Started","lvl1":"TypeSafe (Jev) Provider Guide","lvl2":"1. Get an API key","lvl3":""}},
|
|
6610
6614
|
{"objectID":"a7cfa6599d9458e8c4a9bfcef1bba07a4948ebe6b0f30a1352df07a713040d8e","title":"3. Use it","url":"/docs/getting-started/providers/typesafe#3-use-it","content":"tryDecide() returns null on any failure. Use decide() when you want the\nfailure to surface; it throws a ProviderError whose cause carries a typed\nkind.","hierarchy":{"lvl0":"Getting Started","lvl1":"TypeSafe (Jev) Provider Guide","lvl2":"3. Use it","lvl3":""}},
|
|
6611
6615
|
{"objectID":"4ec7febf2956a104b0037472bab2e6c652e17df7f7cfdf69b73ebe2c5003f082","title":"From the CLI","url":"/docs/getting-started/providers/typesafe#from-the-cli","content":"neurolink decide [state] calls decide() under the hood and reads\nTYPESAFE_API_KEY from the environment like every other CLI command. See the\nCLI command reference.","hierarchy":{"lvl0":"Getting Started","lvl1":"TypeSafe (Jev) Provider Guide","lvl2":"From the CLI","lvl3":""}},
|
|
@@ -6614,7 +6618,7 @@
|
|
|
6614
6618
|
{"objectID":"ac6585086d9cf682e7b1a66265cacfd1c4e961588384fe3883636c5deb66588c","title":"What NeuroLink uses it for","url":"/docs/getting-started/providers/typesafe#what-neurolink-uses-it-for","content":"| Area | What the decision replaces |\n| ---------------------------------------------------------------- | --------------------------------------------------------------- |\n| Model routing | difficulty + capabilities + risk + model pick in one round trip |\n| Model catalogue | one choice over the registry ranks all N candidates at once |\n| Context budget | a rubric-placed scope reading lowers the compaction threshold |\n| Relevance compaction | per-message keep/drop, plus a gate on the generated summary |\n| Tool / MCP routing | one boolean per server, replacing a 15s LLM call at ~400 ms |\n| RAG retrieval | per-query topK / hybrid / graph / rerank planning |","hierarchy":{"lvl0":"Getting Started","lvl1":"TypeSafe (Jev) Provider Guide","lvl2":"What NeuroLink uses it for","lvl3":""}},
|
|
6615
6619
|
{"objectID":"04bf675bad2aeefe749c5229a396a476273c9b463d3b81a6767b9ca9357aa36d","title":"Limits and gotchas","url":"/docs/getting-started/providers/typesafe#limits-and-gotchas","content":"Two input ceilings, both enforced by the service: state plus the longest\n single question ā 33,000 tokens, and state plus all questions ā\n 64,000. Exceeding either returns max_tokens_exceeded with no message\n at all ā the provider supplies a real sentence in its place.\nBatch, never fan out. Latency is flat in question count but concurrent\n requests queue, so a second round trip costs far more than a hundred extra\n questions.\nA boolean carries no confidence of its own. Use\n decisionBooleanConfidence(p) ā distance from a coin flip, so 0.5 ā 0 and\n 0/1 ā 1.\n403 vs 401 are inverted on the direct API, and from TypeSafe's own docs: a\n missing Authorization header returns 403, an invalid key returns\nThe gateway does not share this quirk.","hierarchy":{"lvl0":"Getting Started","lvl1":"TypeSafe (Jev) Provider Guide","lvl2":"Limits and gotchas","lvl3":""}},
|
|
6616
6620
|
{"objectID":"7d7786b2749554b22a763088bb2c011be0b62bdeb53ee881e9331cf8616dffa7","title":"Troubleshooting","url":"/docs/getting-started/providers/typesafe#troubleshooting","content":"| Symptom | Cause | Fix |\n| ------------------------------------ | --------------------------------------------------------------------- | ----------------------------------------------------------------------------- |\n| tryDecide() always returns null | No key, or the key was rejected once and the instance disabled itself | Check TYPESAFE_API_KEY; construct a new instance after fixing it |\n| max_tokens_exceeded | One of the two input ceilings | Shorten state, or split questions across calls ā but prefer shrinking state |\n| 403 customer_verification_required | Gateway transport, no card on the Vercel team | Add a payment method, or use the direct transport |\n| Routing never changes | A modelPool is configured, which owns selection outright | See Provider Orchestration |","hierarchy":{"lvl0":"Getting Started","lvl1":"TypeSafe (Jev) Provider Guide","lvl2":"Troubleshooting","lvl3":""}},
|
|
6617
|
-
{"objectID":"6116c23ca86f351b03ac4844a1d76d9de849fb522ab4a03eb37f9e75017e567c","title":"See also","url":"/docs/getting-started/providers/typesafe#see-also","content":"The decide inference type ā the full reference\nModel routing with a decision model\nProvider setup overview","hierarchy":{"lvl0":"Getting Started","lvl1":"TypeSafe (Jev) Provider Guide","lvl2":"See also","lvl3":""}},
|
|
6621
|
+
{"objectID":"6116c23ca86f351b03ac4844a1d76d9de849fb522ab4a03eb37f9e75017e567c","title":"See also","url":"/docs/getting-started/providers/typesafe#see-also","content":"The decide inference type ā the full reference\nModel routing with a decision model\nXOR Provider Guide\nProvider setup overview","hierarchy":{"lvl0":"Getting Started","lvl1":"TypeSafe (Jev) Provider Guide","lvl2":"See also","lvl3":""}},
|
|
6618
6622
|
{"objectID":"2443fcfebd061a88c8cd49c76a763457814c5b8c111cc5e59bbecc601f7a48e4","title":"Upstage Provider Guide","url":"/docs/getting-started/providers/upstage","content":"Upstage Provider Guide\n\nUpstage is a Tier-2 catalog provider: OpenAI-wire-compatible with no\nbehavioural quirks, so its entire integration is one JSON file\n(src/lib/providers/catalog/upstage.json) rather than hand-written code. That\nfile is the source of truth for everything on this page.\n\nKey Facts\nProvider id: upstage (aliases: solar)\nProtocol: OpenAI-compatible (/chat/completions)\nBase URL: https://api.upstage.ai/v1\nDefault model: solar-pro4\nModels in catalog: 10\nStreaming: supported\nTool calling: supported (native)\nStructured output: supported\nEmbeddings: not supported\nBilling: free-tier\nKey format: ^up_[A-Za-z0-9]+$\n\nQuick Start\nGet an API key\nVisit: https://console.upstage.ai (Google OAuth works)\nNew accounts get a $10 sign-up credit ā no payment method required\nCreate an API key under API Keys\nSet UPSTAGE_API_KEY in your .env file\nConfigure\nUse it\n\nPer-request credentials work as they do for every provider:\n\nModels\n\n| Model | Context | Vision | $/M in Ā· out | Notes |\n| ------------------- | ------- | ------ | ------------- | ---------------------------------------------------------------------------------------------------------------------------------- |\n| solar-pro4 ā | 512K | no | $0.3 / $1.2 | Solar Pro 4; 512K context, up to 128K output tokens; agentic flagship for tool calling, terminal tasks and long-document reasoning |\n| solar-pro4-260806 | 512K | no | $0.3 / $1.2 | Pinned dated snapshot of Solar Pro 4 (2026-08-06 build) ā the id the solar-pro4 alias currently resolves to |\n| solar-pro3 | 512K | no | $0.15 / $0.6 | Solar Pro 3; drop-in replacement for Solar Pro 2 with the same API interface, throughput and latency |\n| solar-pro3-260323 | 512K | no | $0.15 / $0.6 | Pinned dated snapshot of Solar Pro 3 (2026-03-23 build) |\n| solar-pro2 | 512K | no | $0.15 / $0.6 | Solar Pro 2; 31B-parameter model with an optional Reasoning Mode |\n| solar-pro2-251215 | 512K | no | $0.15 / $0.6 | Pinned dated snapshot of Solar Pro 2 (2025-12-15 build) |\n| solar-mini | 512K | no | $0.15 / $0.15 | Solar Mini; small, fast model for lightweight reasoning and cost-efficient tasks |\n| solar-mini-250422 | 512K | no | $0.15 / $0.15 | Pinned dated snapshot of Solar Mini (2025-04-22 build) |\n| syn-pro | 512K | no | ā | Syn Pro; Upstage's Japan-focused LLM |\n| syn-pro-251021 | 512K | no | ā | Pinned dated snapshot of Syn Pro (2025-10-21 build) |\n\nFallback order when the default is unavailable: solar-pro3 ā solar-mini.\n\nVerification status\n\nTier-2 onboarding requires evidence before a provider is accepted, and\npnpm run verify:provider-onboarding gates it in CI. This is what the\ncatalog records for Upstage:\n\n| Probe | Result |\n| --------------------- | -------------------------------------------------- |\n| Roster | authenticated GET /v1/models, HTTP 200, 2026-09-03 |\n| Auth rejection | HTTP 401 invalid_api_key, 2026-09-03 |\n| Live capability sweep | not run |\n\nā ļø No live capability sweep is recorded for Upstage. The roster and auth\nbehaviour were verified against the real API on the date above, but the\ncapability flags come from the catalog declaration rather than from a\nmeasured end-to-end run. Treat them as the provider's stated behaviour.\n\nTroubleshooting\n\n| Symptom | Cause | Fix |\n| ------------------------- | ----------------------------------- | ----------------------------------------------------------------- |\n| Invalid Upstage API key | UPSTAGE_API_KEY unset or wrong | Check the key at https://console.upstage.ai/api-keys |\n| Model not found | The roster changed since 2026-09-03 | Pick a current id; catalog providers retire models without notice |\n\nSee also\nProvider setup overview\nAll providers\nTier-2 onboarding ā how this provider's JSON becomes a working integration\nProvider feature compatibility","hierarchy":{"lvl0":"Getting Started","lvl1":"Upstage Provider Guide","lvl2":"","lvl3":""}},
|
|
6619
6623
|
{"objectID":"03b6cdcebbf2c863f6151797d7668071da64e9297473a90b067f5c51c41106af","title":"Upstage Provider Guide","url":"/docs/getting-started/providers/upstage#upstage-provider-guide","content":"Upstage is a Tier-2 catalog provider: OpenAI-wire-compatible with no\nbehavioural quirks, so its entire integration is one JSON file\n(src/lib/providers/catalog/upstage.json) rather than hand-written code. That\nfile is the source of truth for everything on this page.","hierarchy":{"lvl0":"Getting Started","lvl1":"Upstage Provider Guide","lvl2":"Upstage Provider Guide","lvl3":""}},
|
|
6620
6624
|
{"objectID":"c3c82295fc441c294c98d109c3542f6a41d32d7576fd531fddc6983a93b0f452","title":"Key Facts","url":"/docs/getting-started/providers/upstage#key-facts","content":"Provider id: upstage (aliases: solar)\nProtocol: OpenAI-compatible (/chat/completions)\nBase URL: https://api.upstage.ai/v1\nDefault model: solar-pro4\nModels in catalog: 10\nStreaming: supported\nTool calling: supported (native)\nStructured output: supported\nEmbeddings: not supported\nBilling: free-tier\nKey format: ^up_[A-Za-z0-9]+$","hierarchy":{"lvl0":"Getting Started","lvl1":"Upstage Provider Guide","lvl2":"Key Facts","lvl3":""}},
|
|
@@ -6672,6 +6676,19 @@
|
|
|
6672
6676
|
{"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":""}},
|
|
6673
6677
|
{"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":""}},
|
|
6674
6678
|
{"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":""}},
|
|
6679
|
+
{"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, and the one that also reads images and a video. It\nemits no text at all.\n\nOverview\n\nXOR is Juspay's Apache-2.0 decision model, post-trained from Qwen3.6-35B-A3B;\nits model id is xor-1.1. You send one state plus named, typed questions, and\noptionally images or a video. XOR answers every question in a single batched\npass and returns a typed answer for each. NeuroLink calls whatever base URL you\nconfigure ā a deployment of the model, or a LiteLLM proxy with a route to one.\nThere 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-1.1 by default; XOR_MODEL overrides it |\n| Media | 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 255 options |\n| Endpoint | <base URL>/v1/systemone; 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/systemone.\nThe base URL is the origin of the deployment or of the proxy route, and a\ntrailing /v1 is accepted. On a LiteLLM proxy the key's team must be allowed\nthe xor-1.1 model; otherwise the proxy answers 403 team_model_access_denied.\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. TypeSafe and Laya do not.\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.\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. The\n decide spans carry decision.images.count and decision.media.bytes, and\n never any base64.\n\nWhen NeuroLink uses it\n\nEvery 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. TypeSafe\ncounts with either of its keys, TYPESAFE_API_KEY or AI_GATEWAY_API_KEY. Laya\nand XOR each count only with both their key and their base URL. 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\".\nOnly XOR's key and base URL: built-in features use XOR.\nAn XOR key with no base URL: XOR is not configured. Built-in features\n ignore it, and provider: \"xor\" fails with XOR requires a base URL.\nNone of them: everything behaves exactly as it did without a ","hierarchy":{"lvl0":"Getting Started","lvl1":"XOR Provider Guide","lvl2":"","lvl3":""}},
|
|
6680
|
+
{"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, and the one that also reads images and a video. It\nemits no text at all.","hierarchy":{"lvl0":"Getting Started","lvl1":"XOR Provider Guide","lvl2":"XOR Provider Guide","lvl3":""}},
|
|
6681
|
+
{"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;\nits model id is xor-1.1. You send one state plus named, typed questions, and\noptionally images or a video. XOR answers every question in a single batched\npass and returns a typed answer for each. NeuroLink calls whatever base URL you\nconfigure ā a deployment of the model, or a LiteLLM proxy with a route to one.\nThere 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":""}},
|
|
6682
|
+
{"objectID":"2a68b1796658b1e42d1fb20868e2f28c9b9b13e9e83ebb2ac4411de95d15b8e3","title":"Key Facts","url":"/docs/getting-started/providers/xor#key-facts","content":"| | |\n| --------------------- | -------------------------------------------------------------------- |\n| Inference type | decide only |\n| Model | xor-1.1 by default; XOR_MODEL overrides it |\n| Media | 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 255 options |\n| Endpoint | <base URL>/v1/systemone; 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":""}},
|
|
6683
|
+
{"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/systemone.\nThe base URL is the origin of the deployment or of the proxy route, and a\ntrailing /v1 is accepted. On a LiteLLM proxy the key's team must be allowed\nthe xor-1.1 model; otherwise the proxy answers 403 team_model_access_denied.","hierarchy":{"lvl0":"Getting Started","lvl1":"XOR Provider Guide","lvl2":"1. Get an endpoint and a key","lvl3":""}},
|
|
6684
|
+
{"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":""}},
|
|
6685
|
+
{"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":""}},
|
|
6686
|
+
{"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 and Laya do not.\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.\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. The\n decide spans carry decision.images.count and decision.media.bytes, and\n never any base64.","hierarchy":{"lvl0":"Getting Started","lvl1":"XOR Provider Guide","lvl2":"Images and video","lvl3":""}},
|
|
6687
|
+
{"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. TypeSafe\ncounts with either of its keys, TYPESAFE_API_KEY or AI_GATEWAY_API_KEY. Laya\nand XOR each count only with both their key and their base URL. 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\".\nOnly XOR's key and base URL: built-in features use XOR.\nAn XOR key with no base URL: XOR is not configured. Built-in features\n ignore it, and provider: \"xor\" fails with XOR requires a base URL.\nNone of them: everything behaves exactly as it did without a decision\n model.","hierarchy":{"lvl0":"Getting Started","lvl1":"XOR Provider Guide","lvl2":"When NeuroLink uses it","lvl3":""}},
|
|
6688
|
+
{"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. It has not been measured against a\nlive deployment. A state near the limit, or a lot of media, can therefore still\nbe refused by the server as too long. That arrives as max_tokens_exceeded\n(not retried) when the status is 413 or the message says the context was too\nlong, and otherwise as server (retried once). Built-in consumers treat a\nrefusal as \"carry on as before\".\n\nNo question cap. NeuroLink sets none. A choice or score takes 2 to 255\noptions, which the server enforces.\n\nThe default timeout is 5 seconds. Override it per call with timeoutMs, or\nwith --timeout on the CLI.","hierarchy":{"lvl0":"Getting Started","lvl1":"XOR Provider Guide","lvl2":"Limits","lvl3":""}},
|
|
6689
|
+
{"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 xor-1.1 (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. A 401 does disable\nthe instance: it stops sending requests after the first rejection, b","hierarchy":{"lvl0":"Getting Started","lvl1":"XOR Provider Guide","lvl2":"Errors","lvl3":""}},
|
|
6690
|
+
{"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://.\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 xor-1.1. Add the model to the team; the instance works\n again without a 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.\nImages seem to be ignored ā a deployment started without\n OPENJEV_IMAGES=1 answers 200 and silently ignores images, and NeuroLink\n cannot detect that. Send a red image and a blue image and check that the two\n answers differ. Video is not affected.\nBuilt-in routing never uses XOR ā a TypeSafe key, or Laya's key and base\n URL, is also set and takes precedence, or XOR has no base URL.","hierarchy":{"lvl0":"Getting Started","lvl1":"XOR Provider Guide","lvl2":"Troubleshooting","lvl3":""}},
|
|
6691
|
+
{"objectID":"cdd6e7c83dfa23afa5cf0bb7d23081881600f72a5ac64ca56d383736c209f285","title":"See also","url":"/docs/getting-started/providers/xor#see-also","content":"TypeSafe (Jev) Provider Guide\nLaya Provider Guide\nThe decide inference type\nXOR on Hugging Face","hierarchy":{"lvl0":"Getting Started","lvl1":"XOR Provider Guide","lvl2":"See also","lvl3":""}},
|
|
6675
6692
|
{"objectID":"0c175302ade6fc9bb2fdcbec7c1755487a460af75262d0690986771926f57eff","title":"Quick Start","url":"/docs/getting-started/quick-start","content":"{JSON.stringify({\n \"@context\": \"https://schema.org\",\n \"@type\": \"HowTo\",\n \"name\": \"Quick Start with NeuroLink AI Streaming SDK\",\n \"description\": \"Stream AI responses in real-time in under 2 minutes\",\n \"totalTime\": \"PT2M\",\n \"step\": [\n { \"@type\": \"HowToStep\", \"position\": 1, \"name\": \"Install NeuroLink\", \"text\": \"Run: npm install @juspay/neurolink\" },\n { \"@type\": \"HowToStep\", \"position\": 2, \"name\": \"Configure provider\", \"text\": \"Set your API key as an environment variable\" },\n { \"@type\": \"HowToStep\", \"position\": 3, \"name\": \"Stream your first response\", \"text\": \"Use neurolink.stream() with your prompt and provider\" }\n ]\n })}\n\nQuick Start\n\nGet NeuroLink running in under 2 minutes with this quick start guide.\n\nš Prerequisites\nNode.js 18+\nnpm/pnpm/yarn package manager\nAPI key for at least one AI provider (we recommend starting with Google AI Studio - it has a free tier)\n\nā” 1-Minute Setup\n\nOption 1: CLI Usage (No Installation)\n\nOption 2: SDK Installation\n\nWrite Once, Run Anywhere\n\nNeuroLink's power is in its provider-agnostic design. Write your code once, and NeuroLink automatically uses the best available provider. If your primary provider fails, it seamlessly falls back to another, ensuring your application remains robust.\n\nš Get API Keys\n\nGoogle AI Studio (Free Tier Available)\nVisit Google AI Studio\nSign in with your Google account\nClick \"Get API Key\"\nCreate a new API key\nCopy and use: export GOOGLE_AI_API_KEY=\"AIza-your-key\"\n\nOther Providers\nOpenAI: platform.openai.com\nAnthropic: console.anthropic.com\nLiteLLM: Access 100+ models through one proxy server (requires setup)\nOllama: Local installation, no API key needed\n\nā
Verify Setup\n\nšÆ Next Steps\nProvider Setup - Configure multiple AI providers\nCLI Loop Sessions - Try persistent interactive mode with memory\nCLI Commands - Learn all available commands\nSDK Reference - Integrate into your applications\nExamples - See practical implementations\n\nLatest Features:\nMultimodal Chat - Add images to your prompts\nPPT Generation - Generate PowerPoint presentations\nAuto Evaluation - Quality scoring for responses\nGuardrails - Content filtering and safety\n\nš Need Help?\nNot working? Check our Troubleshooting Guide\nQuestions? See our FAQ\nIssues? Report on GitHub","hierarchy":{"lvl0":"Getting Started","lvl1":"Quick Start","lvl2":"","lvl3":""}},
|
|
6676
6693
|
{"objectID":"b0e8d27136dab32d81f5b9c53bdf83445794816e45d9ff63408060133bc900a6","title":"Quick Start","url":"/docs/getting-started/quick-start#quick-start","content":"Get NeuroLink running in under 2 minutes with this quick start guide.","hierarchy":{"lvl0":"Getting Started","lvl1":"Quick Start","lvl2":"Quick Start","lvl3":""}},
|
|
6677
6694
|
{"objectID":"a2687d86ecdb83c7819bfdbc797d6c1cf8b8648f676945716697e1b7267b1866","title":"š Prerequisites","url":"/docs/getting-started/quick-start#-prerequisites","content":"Node.js 18+\nnpm/pnpm/yarn package manager\nAPI key for at least one AI provider (we recommend starting with Google AI Studio - it has a free tier)","hierarchy":{"lvl0":"Getting Started","lvl1":"Quick Start","lvl2":"š Prerequisites","lvl3":""}},
|
|
@@ -7885,7 +7902,7 @@
|
|
|
7885
7902
|
{"objectID":"95f574ed3e7979eee5be188ccd16efb2639e30e8258e55366d7ccd344bbc3126","title":"Related Documentation","url":"/docs/implementation-guides/14-rag-document-processing#related-documentation","content":"Vector Store Integrations\nEvaluation and Scoring\nMaster Implementation Guide","hierarchy":{"lvl0":"Implementation Guides","lvl1":"RAG Document Processing - Implementation Guide","lvl2":"Related Documentation","lvl3":""}},
|
|
7886
7903
|
{"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 Tools | 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 conten","hierarchy":{"lvl0":"Docs","lvl1":"NeuroLink","lvl2":"","lvl3":""}},
|
|
7887
7904
|
{"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":""}},
|
|
7888
|
-
{"objectID":"293082e7b04b9b0eb186f10fec40eefc1996d8eab9becff9e2b428731642291f","title":"What's New (Q1 2026)","url":"/docs/#whats-new-q1-2026","content":"| Feature | Version | Description
|
|
7905
|
+
{"objectID":"293082e7b04b9b0eb186f10fec40eefc1996d8eab9becff9e2b428731642291f","title":"What's New (Q1 2026)","url":"/docs/#whats-new-q1-2026","content":"| Feature | Version | Description | Guide |\n| ---------------------------------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| decide Inference Type | next | A third inference type alongside generate/stream: typed, calibrated boolean/choice/score judgments in one parallel pass, ~400ms and ~$0.00002 per decision. First provider is TypeSafe Jev; Laya, an open-weights model you run yourself, and XOR, Juspay's open-weights model, follow it. Fail-open ā a no-op without a key. | Decide Guide \\| TypeSafe Provider \\| Laya Provider \\| XOR Provider |\n| MCP Enhancements | v9.16.0 | Advanced MCP features: intelligent tool routing, result caching, request batching, tool annotations, elicitation protocol, custom server creation, multi-server management ","hierarchy":{"lvl0":"Docs","lvl1":"NeuroLink","lvl2":"What's New (Q1 2026)","lvl3":""}},
|
|
7889
7906
|
{"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 for regulated industries and high-stakes AI operations:\n\n| Capability | Description | Use Case |\n| --------------------------- | ----------------------------------------------------------------------- | ------------------------------------------ |\n| Tool Approval Workflows | Require human approval before AI executes sensitive tools | Financial transactions, data modifications |\n| Output Validation | Route AI outputs through human review pipelines | Medical diagnosis, legal documents |\n| Confidence Thresholds | Automatically trigger human review below confidence level | Critical business decisions |\n| Complete Audit Trail | Audit logging to support your compliance program (HIPAA / SOC 2 / GDPR) | Regulated industries |\n\nEnterprise HITL Guide | Quick Start","hierarchy":{"lvl0":"Docs","lvl1":"NeuroLink","lvl2":"Enterprise Security: Human-in-the-Loop (HITL)","lvl3":""}},
|
|
7890
7907
|
{"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":""}},
|
|
7891
7908
|
{"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":""}},
|
|
@@ -8937,13 +8954,13 @@
|
|
|
8937
8954
|
{"objectID":"a68c16599df99491c1e91d0857d3b92f4bd78a3caa88b6279381ff1ca665926f","title":"Tier 2 (JSON catalog) providers no longer use a manifest here","url":"/docs/provider-integration/manifests/README#tier-2-json-catalog-providers-no-longer-use-a-manifest-here","content":"As of the provider-JSON-catalog refactor, Tier 2 providers are declared\nentirely in src/lib/providers/catalog/<id>.json, validated by the zod\nschema in src/lib/providers/catalog/schema.ts. That file's evidence\nobject ā rosterVerified, addedInPR, and optionally authProbe,\nbillingProbe, liveMatrix ā carries the same onboarding evidence a\nmanifest used to hold, so a separate manifest file would just duplicate\nit. tools/verify-provider-onboarding.ts reflects this: for any provider\nwith a matching src/lib/providers/catalog/<id>.json file, the gate\nchecks that the JSON file exists, parses via the real zod schema, and\n(via that same successful parse, since both fields are non-optional in\nthe schema) carries evidence.rosterVerified and evidence.addedInPR.\n\ncerebras.json and sambanova.json ā the two manifests that used to\nlive in this directory ā were removed for this reason: both providers\nare now JSON-catalog entries, and their onboarding evidence lives in\nsrc/lib/providers/catalog/cerebras.json and\nsrc/lib/providers/catalog/sambanova.json respectively.","hierarchy":{"lvl0":"Provider Integration","lvl1":"Provider Manifests","lvl2":"Tier 2 (JSON catalog) providers no longer use a manifest here","lvl3":""}},
|
|
8938
8955
|
{"objectID":"00fb88ca42034f14d0a87eea1d06b38350fc2cb9b5bed8bb3f544f10b3cd99ab","title":"Tier 3/4 (hand-written) providers still use a manifest here","url":"/docs/provider-integration/manifests/README#tier-34-hand-written-providers-still-use-a-manifest-here","content":"A provider onboarded outside the JSON catalog ā a custom adapter (Tier 3)\nor fully custom integration (Tier 4) ā has no catalog JSON file, so\ntools/verify-provider-onboarding.ts falls back to its original\nfour-check flow for it, including a manifest at\ndocs/provider-integration/manifests/<name>.json. The shape below still\napplies to those providers.\n\nThe block is annotated JSONC for documentation purposes only ā the\n// comments and trailing comma explain each field but are not valid\nJSON. A real <provider>.json manifest file must be strict JSON: no\ncomments, no trailing commas.","hierarchy":{"lvl0":"Provider Integration","lvl1":"Provider Manifests","lvl2":"Tier 3/4 (hand-written) providers still use a manifest here","lvl3":""}},
|
|
8939
8956
|
{"objectID":"4384ec258a233739ea35584f79662d5111be0b8defd38f75a6ab8068bf3a7e30","title":"How it's checked","url":"/docs/provider-integration/manifests/README#how-its-checked","content":"pnpm run verify:provider-onboarding (tools/verify-provider-onboarding.ts)\nfails a PR that introduces a new AIProviderName member without matching\nonboarding evidence: a valid catalog JSON entry for Tier 2 providers (see\nabove), or a structurally valid manifest here for Tier 3/4 providers. It\ndoes not retroactively require either for providers that predate the gate\nā see that tool's LEGACY_PROVIDERS list.","hierarchy":{"lvl0":"Provider Integration","lvl1":"Provider Manifests","lvl2":"How it's checked","lvl3":""}},
|
|
8940
|
-
{"objectID":"c533e90a3190ff6ad955d7e0c25b0b6370956144cb2b59f1c07b4ffdb1b1e452","title":"Provider Descriptor Migration Ledger","url":"/docs/provider-integration/migration-ledger","content":"Provider Descriptor Migration Ledger\n\nInventory taken at origin/release @ 2cefa3ae4115f817f75a415b6bc70fc3ecaed2d3. TypeSafe was added afterwards (#1761) and is included below; the 25-entry count matched origin/release @ f536fd091.\n\nmistral, huggingface and deepseek have since migrated to the JSON catalog and been removed from HAND_DESCRIPTORS (#1781) ā see Migrated below ā and laya (decision-only, like TypeSafe)
|
|
8941
|
-
{"objectID":"b5d36740e9c9cb41c6ccb01db0a9fb1f9c0ac8ac59f1084b9a92332dd79c3e4d","title":"Provider Descriptor Migration Ledger","url":"/docs/provider-integration/migration-ledger#provider-descriptor-migration-ledger","content":"Inventory taken at origin/release @ 2cefa3ae4115f817f75a415b6bc70fc3ecaed2d3. TypeSafe was added afterwards (#1761) and is included below; the 25-entry count matched origin/release @ f536fd091.\n\nmistral, huggingface and deepseek have since migrated to the JSON catalog and been removed from HAND_DESCRIPTORS (#1781) ā see Migrated below ā and laya (decision-only, like TypeSafe)
|
|
8957
|
+
{"objectID":"c533e90a3190ff6ad955d7e0c25b0b6370956144cb2b59f1c07b4ffdb1b1e452","title":"Provider Descriptor Migration Ledger","url":"/docs/provider-integration/migration-ledger","content":"Provider Descriptor Migration Ledger\n\nInventory taken at origin/release @ 2cefa3ae4115f817f75a415b6bc70fc3ecaed2d3. TypeSafe was added afterwards (#1761) and is included below; the 25-entry count matched origin/release @ f536fd091.\n\nmistral, huggingface and deepseek have since migrated to the JSON catalog and been removed from HAND_DESCRIPTORS (#1781) ā see Migrated below ā and laya and xor (decision-only, like TypeSafe) were added as hand descriptors afterwards. Net effect: 25 minus the 3 migrated plus 2 (laya, xor) leaves 24 entries currently in HAND_DESCRIPTORS (src/lib/factories/providerDescriptors.ts). The category counts below (Shared adapter needed / Must remain class / Must remain core class) cover exactly those 24; the 3 migrated providers are recorded separately as done and no longer count toward \"what remains.\"\n\nThis ledger records, per provider, why it is (or isn't) a JSON-catalog migration candidate, so \"add a provider\" work doesn't re-litigate the same analysis per PR.\n\nEvery verdict allows one thing regardless of class: the static descriptor metadata (name, aliases, default model, credential env var names, setup URL) can always move into a class-backed JSON record. \"Must remain class\" means the execution ā the inference loop (generate/stream/decide, per the provider's inferenceKinds), auth, media pipelines ā cannot be reduced to declarative catalog data; it does not mean the provider is exempt from descriptor consolidation.\n\nMigrated (3)\n\nAll three ran the same class-removal path this ledger recommended below: resolve the JSON/descriptor data conflicts, then delete the hand descriptor and hand-written subclass so the provider is fully catalog-derived.\n\n| Provider | Note |\n| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n| mistral | Moved onto catalog/mistral.json. defaultModel now derives from the new optional models.registryDefaultModel field when present (only Mistral sets it), and the setupUrl/key-format/timeout/priority conflicts this ledger flagged were resolved in the JSON rather than carried forward. |\n| huggingface | Moved onto catalog/huggingface.json, which gained wire.apiKeyFallbackEnvVars (HF_TOKEN alongside HUGGINGFACE_API_KEY) and capabilities.tools: \"model-dependent\" ā the two schema gaps this ledger flagged below before the extension landed. |\n| deepseek | Moved onto catalog/deepseek.json, using the new quirks.responseFormatDowngrade: \"json-schema-to-json-object\" field (DeepSeek 400s on json_schema) instead of an executable hook ā the named-quirk approach this ledger recommended. It also sets quirks.replayReasoningContent: true. |\n\nShared adapter needed (9)\n\nThree adapter families, not nine one-off migrations:\n\nLocal-runtime adapter (ollama, lm-studio, llamacpp) ā one OpenAI-compatible local-runtime adapter with optional auth, model discovery/probe, actionable transport errors, timeout policy, optional embeddings. Vendor-specific pull/diagnostic guidance becomes adapter data.\n\nEmbedding-only adapter (voyage, jina, cohere) ā one embedding-only provider adapter parameterized by path, request shape, batch size, response-extraction/index policy, unsupported-surface messages. jina extends it with an optional rerank operation profile (don't force reranking into the boolean capability shape). cohere composes this with a generic OpenAI chat adapter (it has both /compatibility/v1 chat and native /v2/embed); preserve its batch limit and body-field quirks in the embedding profile.\n\nImage-generation adapter (stability, ideogram, recraft) ā one image-generation adapter family: explicit multipart vs JSON request profile, base64-vs-URL response profile, custom auth-header support, model-path mapping as data. SSRF and bounded-read policy remain shared mandatory behavior, not per-vendor opt-outs.\n\nMust remain class (14)\n\n| Provider | Why |\n| ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------","hierarchy":{"lvl0":"Provider Integration","lvl1":"Provider Descriptor Migration Ledger","lvl2":"","lvl3":""}},
|
|
8958
|
+
{"objectID":"b5d36740e9c9cb41c6ccb01db0a9fb1f9c0ac8ac59f1084b9a92332dd79c3e4d","title":"Provider Descriptor Migration Ledger","url":"/docs/provider-integration/migration-ledger#provider-descriptor-migration-ledger","content":"Inventory taken at origin/release @ 2cefa3ae4115f817f75a415b6bc70fc3ecaed2d3. TypeSafe was added afterwards (#1761) and is included below; the 25-entry count matched origin/release @ f536fd091.\n\nmistral, huggingface and deepseek have since migrated to the JSON catalog and been removed from HAND_DESCRIPTORS (#1781) ā see Migrated below ā and laya and xor (decision-only, like TypeSafe) were added as hand descriptors afterwards. Net effect: 25 minus the 3 migrated plus 2 (laya, xor) leaves 24 entries currently in HAND_DESCRIPTORS (src/lib/factories/providerDescriptors.ts). The category counts below (Shared adapter needed / Must remain class / Must remain core class) cover exactly those 24; the 3 migrated providers are recorded separately as done and no longer count toward \"what remains.\"\n\nThis ledger records, per provider, why it is (or isn't) a JSON-catalog migration candidate, so \"add a provider\" work doesn't re-litigate the same analysis per PR.\n\nEvery verdict allows one thing regardless of class: the static descriptor metadata (name, aliases, default model, credential env var names, setup URL) can always move into a class-backed JSON record. \"Must remain class\" means the execution ā the inference loop (generate/stream/decide, per the provider's inferenceKinds), auth, media pipelines ā cannot be reduced to declarative catalog data; it does not mean the provider is exempt from descriptor consolidation.","hierarchy":{"lvl0":"Provider Integration","lvl1":"Provider Descriptor Migration Ledger","lvl2":"Provider Descriptor Migration Ledger","lvl3":""}},
|
|
8942
8959
|
{"objectID":"fb3b171594dd4553aaf04fd301572eb1db1e459c15541867bd93a67ece8cfadb","title":"Migrated (3)","url":"/docs/provider-integration/migration-ledger#migrated-3","content":"All three ran the same class-removal path this ledger recommended below: resolve the JSON/descriptor data conflicts, then delete the hand descriptor and hand-written subclass so the provider is fully catalog-derived.\n\n| Provider | Note |\n| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n| mistral | Moved onto catalog/mistral.json. defaultModel now derives from the new optional models.registryDefaultModel field when present (only Mistral sets it), and the setupUrl/key-format/timeout/priority conflicts this ledger flagged were resolved in the JSON rather than carried forward. |\n| huggingface | Moved onto catalog/huggingface.json, which gained wire.apiKeyFallbackEnvVars (HF_TOKEN alongside HUGGINGFACE_API_KEY) and capabilities.tools: \"model-dependent\" ā the two schema gaps this ledger flagged below before the extension landed. |\n| deepseek | Moved onto catalog/deepseek.json, using the new quirks.responseFormatDowngrade: \"json-schema-to-json-object\" field (DeepSeek 400s on json_schema) instead of an executable hook ā the named-quirk approach this ledger recommended. It also sets quirks.replayReasoningContent: true. |","hierarchy":{"lvl0":"Provider Integration","lvl1":"Provider Descriptor Migration Ledger","lvl2":"Migrated (3)","lvl3":""}},
|
|
8943
8960
|
{"objectID":"cbc4193e5e9ffb4c77dd167fe137bc62cfbab5adbe808e814a374670bef12175","title":"Shared adapter needed (9)","url":"/docs/provider-integration/migration-ledger#shared-adapter-needed-9","content":"Three adapter families, not nine one-off migrations:\n\nLocal-runtime adapter (ollama, lm-studio, llamacpp) ā one OpenAI-compatible local-runtime adapter with optional auth, model discovery/probe, actionable transport errors, timeout policy, optional embeddings. Vendor-specific pull/diagnostic guidance becomes adapter data.\n\nEmbedding-only adapter (voyage, jina, cohere) ā one embedding-only provider adapter parameterized by path, request shape, batch size, response-extraction/index policy, unsupported-surface messages. jina extends it with an optional rerank operation profile (don't force reranking into the boolean capability shape). cohere composes this with a generic OpenAI chat adapter (it has both /compatibility/v1 chat and native /v2/embed); preserve its batch limit and body-field quirks in the embedding profile.\n\nImage-generation adapter (stability, ideogram, recraft) ā one image-generation adapter family: explicit multipart vs JSON request profile, base64-vs-URL response profile, custom auth-header support, model-path mapping as data. SSRF and bounded-read policy remain shared mandatory behavior, not per-vendor opt-outs.","hierarchy":{"lvl0":"Provider Integration","lvl1":"Provider Descriptor Migration Ledger","lvl2":"Shared adapter needed (9)","lvl3":""}},
|
|
8944
|
-
{"objectID":"
|
|
8961
|
+
{"objectID":"da986710e206bdfe9e761b9941c084a698a400e499994510b53989e7685fd3a6","title":"Must remain class (14)","url":"/docs/provider-integration/migration-ledger#must-remain-class-14","content":"| Provider | Why |\n| ------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| bedrock | AWS SigV4/Converse protocol, custom loop, not OpenAI-compatible. Tier 4. |\n| openai | Chat portion is catalog-shaped, but embeddings, image generation, and OpenAI-specific telemetry/errors are executable behavior. |\n| vertex | Two native protocols (Google GenAI + Anthropic-on-Vertex) and multiple modality pipelines behind one provider identity. |\n| anthropic | Native Messages API auth/message/tool semantics are executable protocol behavior.","hierarchy":{"lvl0":"Provider Integration","lvl1":"Provider Descriptor Migration Ledger","lvl2":"Must remain class (14)","lvl3":""}},
|
|
8945
8962
|
{"objectID":"a4f69e09308f075830f2efa7c1b0126236c5ec0fc12bfe08be21764a627e47a5","title":"Must remain core class (1)","url":"/docs/provider-integration/migration-ledger#must-remain-core-class-1","content":"| Provider | Why |\n| ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| openai-compatible | This is the generic protocol surface itself, not a direct vendor. It should consume shared descriptor/config primitives but must never become a fixed-vendor JSON row ā collapsing it into the catalog would conflate \"the adapter\" with \"an entry in the adapter's catalog.\" |","hierarchy":{"lvl0":"Provider Integration","lvl1":"Provider Descriptor Migration Ledger","lvl2":"Must remain core class (1)","lvl3":""}},
|
|
8946
|
-
{"objectID":"235850085d9102413140920b9d5e5e2ff6113d007c865f5d78012af80fbf1843","title":"Suggested execution order","url":"/docs/provider-integration/migration-ledger#suggested-execution-order","content":"The former steps 1ā2 below (mistral; huggingface, deepseek) are complete ā see Migrated above. What remains:\nThree shared adapters (local-runtime, embedding-only, image-generation) ā each unlocks 3 providers at once; build once, migrate three.\ngoogle-ai descriptor-only JSON metadata ā proof of concept for moving static descriptor data out of a \"must remain class\" provider without touching its execution.\nDirect-vendor \"must remain class\" providers (bedrock, openai, vertex, anthropic, azure, sagemaker, nvidia-nim) get descriptor-only JSON metadata migrations, execution untouched ā lower priority, cosmetic consolidation only.\nAggregators (litellm, openrouter), the core adapter (openai-compatible), and the decision-only providers (typesafe, laya) are excluded from the first-class-count migration priority entirely ā the first three add no direct-vendor coverage however they're implemented, and typesafe/laya are decide-only providers with no generate/stream surface to migrate at all.","hierarchy":{"lvl0":"Provider Integration","lvl1":"Provider Descriptor Migration Ledger","lvl2":"Suggested execution order","lvl3":""}},
|
|
8963
|
+
{"objectID":"235850085d9102413140920b9d5e5e2ff6113d007c865f5d78012af80fbf1843","title":"Suggested execution order","url":"/docs/provider-integration/migration-ledger#suggested-execution-order","content":"The former steps 1ā2 below (mistral; huggingface, deepseek) are complete ā see Migrated above. What remains:\nThree shared adapters (local-runtime, embedding-only, image-generation) ā each unlocks 3 providers at once; build once, migrate three.\ngoogle-ai descriptor-only JSON metadata ā proof of concept for moving static descriptor data out of a \"must remain class\" provider without touching its execution.\nDirect-vendor \"must remain class\" providers (bedrock, openai, vertex, anthropic, azure, sagemaker, nvidia-nim) get descriptor-only JSON metadata migrations, execution untouched ā lower priority, cosmetic consolidation only.\nAggregators (litellm, openrouter), the core adapter (openai-compatible), and the decision-only providers (typesafe, laya, xor) are excluded from the first-class-count migration priority entirely ā the first three add no direct-vendor coverage however they're implemented, and typesafe/laya/xor are decide-only providers with no generate/stream surface to migrate at all.","hierarchy":{"lvl0":"Provider Integration","lvl1":"Provider Descriptor Migration Ledger","lvl2":"Suggested execution order","lvl3":""}},
|
|
8947
8964
|
{"objectID":"6122b2e83358a45c64da87c1ca80a2d579cdfb087a6d9dc58b1e02805296b14a","title":"OpenAI-Compatible Provider Catalog","url":"/docs/provider-integration/openai-compat-catalog","content":"OpenAI-Compatible Provider Catalog\n\nSixteen OpenAI-compatible providers ā API Route, Baseten, SambaNova,\nCerebras, Groq, xAI, Together AI, Fireworks AI, Perplexity, Mistral,\nCloudflare Workers AI, GMI Cloud, Inception Labs, io.net Intelligence,\nMancer, Upstage ā are registered from one JSON file each, under\nsrc/lib/providers/catalog/<id>.json, and served by one generic class,\nConfiguredOpenAICompatProvider\n(src/lib/providers/configuredOpenAICompat.ts). Adding another provider to\nthis family means adding one JSON file ā no subclass, no registry edit, no\nhand-written enum member, no test edit.\n\nThe JSON is the source of truth\n\nOPENAI_COMPAT_CATALOG still exists and keeps its name and element type,\nbut it is now built by the loader (src/lib/providers/catalog/loader.ts)\nfrom the JSON files rather than hand-written. Two consumers read the JSON:\nCodegen (pnpm run codegen:catalog) writes the compile-time\n artifacts into marked regions ā the AIProviderName member, the\n <Name>Models enum, the NeurolinkCredentials key ā plus the generated\n index. Pre-commit and CI fail on stale output.\nThe loader builds the runtime entry; the descriptor, config options,\n context windows, pricing, vision map and model-choice tables all derive\n from it, as do the provider test suites' rows and counts.\n\nEach file is validated by a zod schema (src/lib/providers/catalog/schema.ts)\nwith a mirrored provider-catalog.schema.json for editor squiggles.\nProbe evidence (roster/auth/billing dates, live-matrix result, PR URL)\nlives in the file's evidence block ā the old\ndocs/provider-integration/manifests/<id>.json files were folded into it.\n\nField-by-field reference and the escape hatches:\ntiers/tier-2-catalog-entry.md. Design rationale and the approved rulings:\ndocs/superpowers/plans/2026-08-28-provider-json-catalog-spec.md.\n\nWhen a provider belongs in the catalog\n\nA provider belongs in the JSON catalog if it needs only:\na credential (API key, optionally an extra field like Cloudflare's account id)\na base URL (static default + optional env override, or computed from an\n extra credential field)\na default/fallback model\nerror-message classification (auth / rate-limit / invalid-model / generic)\na named, closed catalog quirk. DeepSeek is the worked example: it 400s on\n json_schema structured-output requests, so deepseek.json sets\n quirks.responseFormatDowngrade: \"json-schema-to-json-object\" and the\n generic ConfiguredOpenAICompatProvider downgrades to json_object before\n sending ā no subclass. It also sets quirks.replayReasoningContent: true:\n DeepSeek documents that each assistant turn's reasoning_content must go\n back on later requests once tools are in play, so the shared message\n converter and the streaming tool loop send it ā for this quirk only, since\n strict OpenAI-compatible backends reject the unknown field.\na wire-proven capability such as\n capabilities.structuredOutputWithTools. The generic provider suppresses\n response_format when tools are attached by default; an explicit true\n keeps it on the same generate() or stream() request. Set this only after\n a combined tools-plus-schema request returned successfully. Separate tool\n and structured-output probes are not evidence for the combined capability.\n A stale opt-in is still protected by the runtime conflict retry, which drops\n structured output and retries rather than losing the turn.\n\nThe currently opted-in providers are Baseten, DeepSeek, Fireworks AI, GMI\nCloud, Inception Labs, io.net Intelligence, Novita AI, Together AI, Upstage and\nxAI. API Route remains opted out because its evidence verifies the features\nseparately, not together in one request. Mistral remains opted out because its\ncombined probes returned 429 twice, not a successful capability response.\n\nWhen a provider needs a dedicated subclass instead\n\nAzure OpenAI is deliberately not in the catalog because it overrides real\nrequest-shaping behavior that no named catalog quirk expresses:\nAzure OpenAI (src/lib/providers/azureOpenai.ts) overrides four hooks:\n getChatCompletionsURL (deployment-name URL routing across two Azure\n endpoint schemes), getAuthHeaders (Azure's api-key header instead of\n Authorization: Bearer), adjustRequestBody (renames max_tokens to\n max_completion_tokens for o-series/gpt-5+ deployments), and\n suppressResponseFormatWithTools (Azure supports both at once).\n\nIf a future provider needs any hook beyond the 3 mandatory ones\n(getProviderName, getDefaultModel, formatProviderError) or the 2\npurely-declarative optional ones (getFallbackModelName,\ngetFallbackModels) and that hook is not already a named catalog quirk, it\nneeds either a new closed quirk (the DeepSeek route) or a dedicated subclass\n(the Azure OpenAI route).\n\nError-message fidelity\n\nEach entry's errorRules is a direct, order-preserving translation of its\noriginal subclass's formatProviderError if/else ladder into rule data\n(status code and/or case-insensitive pattern), classified via\nclassifyProviderError()\n(src/lib/utils/err","hierarchy":{"lvl0":"Provider Integration","lvl1":"OpenAI-Compatible Provider Catalog","lvl2":"","lvl3":""}},
|
|
8948
8965
|
{"objectID":"9a91a5b4a32a9f1e89c6a28f762c3594c4a39d96d32cc9e6e1fa0f5cb3f609e4","title":"OpenAI-Compatible Provider Catalog","url":"/docs/provider-integration/openai-compat-catalog#openai-compatible-provider-catalog","content":"Sixteen OpenAI-compatible providers ā API Route, Baseten, SambaNova,\nCerebras, Groq, xAI, Together AI, Fireworks AI, Perplexity, Mistral,\nCloudflare Workers AI, GMI Cloud, Inception Labs, io.net Intelligence,\nMancer, Upstage ā are registered from one JSON file each, under\nsrc/lib/providers/catalog/<id>.json, and served by one generic class,\nConfiguredOpenAICompatProvider\n(src/lib/providers/configuredOpenAICompat.ts). Adding another provider to\nthis family means adding one JSON file ā no subclass, no registry edit, no\nhand-written enum member, no test edit.","hierarchy":{"lvl0":"Provider Integration","lvl1":"OpenAI-Compatible Provider Catalog","lvl2":"OpenAI-Compatible Provider Catalog","lvl3":""}},
|
|
8949
8966
|
{"objectID":"16e60ee66171009a6638b5110cc8693f90c1a2cfde796c6932c3512d7f7421fb","title":"The JSON is the source of truth","url":"/docs/provider-integration/openai-compat-catalog#the-json-is-the-source-of-truth","content":"OPENAI_COMPAT_CATALOG still exists and keeps its name and element type,\nbut it is now built by the loader (src/lib/providers/catalog/loader.ts)\nfrom the JSON files rather than hand-written. Two consumers read the JSON:\nCodegen (pnpm run codegen:catalog) writes the compile-time\n artifacts into marked regions ā the AIProviderName member, the\n <Name>Models enum, the NeurolinkCredentials key ā plus the generated\n index. Pre-commit and CI fail on stale output.\nThe loader builds the runtime entry; the descriptor, config options,\n context windows, pricing, vision map and model-choice tables all derive\n from it, as do the provider test suites' rows and counts.\n\nEach file is validated by a zod schema (src/lib/providers/catalog/schema.ts)\nwith a mirrored provider-catalog.schema.json for editor squiggles.\nProbe evidence (roster/auth/billing dates, live-matrix result, PR URL)\nlives in the file's evidence block ā the old\ndocs/provider-integration/manifests/<id>.json files were folded into it.\n\nField-by-field reference and the escape hatches:\ntiers/tier-2-catalog-entry.md. Design rationale and the approved rulings:\ndocs/superpowers/plans/2026-08-28-provider-json-catalog-spec.md.","hierarchy":{"lvl0":"Provider Integration","lvl1":"OpenAI-Compatible Provider Catalog","lvl2":"The JSON is the source of truth","lvl3":""}},
|
|
@@ -9172,10 +9189,10 @@
|
|
|
9172
9189
|
{"objectID":"4578b51cac195eb59c8ac256ef9f2491197666719997b358b74e2b57b5a414fb","title":"TTS / Realtime Errors","url":"/docs/reference/error-codes#tts-realtime-errors","content":"TTSError and RealtimeError carry provider-specific messages (e.g.\nsynthesis failure, WebSocket disconnect, function-call failure). Inspect\nerror.cause for the underlying provider error.","hierarchy":{"lvl0":"Reference","lvl1":"Error Code Reference","lvl2":"TTS / Realtime Errors","lvl3":""}},
|
|
9173
9190
|
{"objectID":"3e6c6ffd80fa23ecf3686bacf0db97fb3e7e6f430e82b2523745c88e257b6c45","title":"Common Triggers","url":"/docs/reference/error-codes#common-triggers","content":"STT_INVALID_AUDIO_FORMAT is thrown by STTProcessor.transcribe()\n when options.format doesn't appear in the provider's\n getSupportedFormats() list. The CLI infers the format from the\n --input-audio file extension; the SDK requires you to pass it explicitly.\n Fix: either convert the audio to a supported format, or use a different\n STT provider. See docs/getting-started/providers/azure-speech.md for the\n Azure-MP3 case.\nSTT_AUDIO_TOO_LONG is thrown when the buffer exceeds the per-call\n maxAudioBytes limit. Default is 25 MB (matches Whisper's documented\n ceiling). Override via stt.maxAudioBytes.","hierarchy":{"lvl0":"Reference","lvl1":"Error Code Reference","lvl2":"Common Triggers","lvl3":""}},
|
|
9174
9191
|
{"objectID":"df1592c1b3ccdbed96fbbc998d2facc217e2652c2a3cbb2d630ed64f1c85fdb9","title":"Related Documentation","url":"/docs/reference/error-codes#related-documentation","content":"Troubleshooting Guide - Common issues and solutions\nConfiguration Reference - Environment variables and settings\nFAQ - Frequently asked questions\nProvider Feature Compatibility - Provider capabilities matrix","hierarchy":{"lvl0":"Reference","lvl1":"Error Code Reference","lvl2":"Related Documentation","lvl3":""}},
|
|
9175
|
-
{"objectID":"4dccb885a61a05030e1eeb0b2413af7062a282bcce434d742561026c5af1d015","title":"Frequently Asked Questions","url":"/docs/reference/faq","content":"Frequently Asked Questions\n\nCommon questions and answers about NeuroLink usage, configuration, and troubleshooting.\n\nš Getting Started\n\nQ: What is NeuroLink?\n\nA: NeuroLink is an enterprise AI development platform that provides unified access to multiple AI providers (OpenAI, Google AI, Anthropic, AWS Bedrock, etc.) through a single SDK and CLI. It includes built-in tools, analytics, evaluation capabilities, and supports the Model Context Protocol (MCP) for extended functionality.\n\nQ: Which AI providers does NeuroLink support?\n\nA: NeuroLink ships AI providers for text generation, streaming, and decision-making ā plus separate provider systems for voice and media generation. The text and multimodal providers include:\nOpenAI (GPT-4o, GPT-4.1, o3, o4-mini)\nGoogle AI Studio (Gemini 3 Flash/Pro, Gemini 2.5 Pro/Flash)\nGoogle Vertex AI (Gemini 3, Claude via Vertex)\nAnthropic (Claude Opus 4.7, Sonnet 4.6, 4.5 Opus/Sonnet/Haiku)\nAWS Bedrock (Claude, Titan, Nova models)\nAzure OpenAI (GPT models)\nHugging Face (Open source models)\nOllama (Local AI models)\nMistral AI (Mistral models)\nLiteLLM (100+ models via proxy)\nAWS SageMaker (Custom endpoints)\nOpenAI-compatible (Any OpenAI-API-compatible endpoint)\nOpenRouter (300+ models via OpenRouter)\nDeepSeek (DeepSeek V3, R1)\nNVIDIA NIM (Llama 3.3 70B, 400+ catalog models)\nLM Studio (Local models loaded in LM Studio)\nllama.cpp (Local GGUF models via llama-server)\nGroq, Cerebras, SambaNova, Together AI, Fireworks AI, Perplexity, Cloudflare Workers AI, xAI, Baseten, GMI Cloud, Inception Labs, io.net Intelligence, Mancer, Upstage, API Route (zero-quirk OpenAI-wire-compatible catalog providers)\nCohere (chat, plus embed() and reranking)\nVoyage AI, Jina AI (embedding and/or reranking only ā no chat completions)\nTypeSafe Jev, Laya (decision-only ā serve decide(), not generate()/stream(); TypeSafe first when
|
|
9192
|
+
{"objectID":"4dccb885a61a05030e1eeb0b2413af7062a282bcce434d742561026c5af1d015","title":"Frequently Asked Questions","url":"/docs/reference/faq","content":"Frequently Asked Questions\n\nCommon questions and answers about NeuroLink usage, configuration, and troubleshooting.\n\nš Getting Started\n\nQ: What is NeuroLink?\n\nA: NeuroLink is an enterprise AI development platform that provides unified access to multiple AI providers (OpenAI, Google AI, Anthropic, AWS Bedrock, etc.) through a single SDK and CLI. It includes built-in tools, analytics, evaluation capabilities, and supports the Model Context Protocol (MCP) for extended functionality.\n\nQ: Which AI providers does NeuroLink support?\n\nA: NeuroLink ships AI providers for text generation, streaming, and decision-making ā plus separate provider systems for voice and media generation. The text and multimodal providers include:\nOpenAI (GPT-4o, GPT-4.1, o3, o4-mini)\nGoogle AI Studio (Gemini 3 Flash/Pro, Gemini 2.5 Pro/Flash)\nGoogle Vertex AI (Gemini 3, Claude via Vertex)\nAnthropic (Claude Opus 4.7, Sonnet 4.6, 4.5 Opus/Sonnet/Haiku)\nAWS Bedrock (Claude, Titan, Nova models)\nAzure OpenAI (GPT models)\nHugging Face (Open source models)\nOllama (Local AI models)\nMistral AI (Mistral models)\nLiteLLM (100+ models via proxy)\nAWS SageMaker (Custom endpoints)\nOpenAI-compatible (Any OpenAI-API-compatible endpoint)\nOpenRouter (300+ models via OpenRouter)\nDeepSeek (DeepSeek V3, R1)\nNVIDIA NIM (Llama 3.3 70B, 400+ catalog models)\nLM Studio (Local models loaded in LM Studio)\nllama.cpp (Local GGUF models via llama-server)\nGroq, Cerebras, SambaNova, Together AI, Fireworks AI, Perplexity, Cloudflare Workers AI, xAI, Baseten, GMI Cloud, Inception Labs, io.net Intelligence, Mancer, Upstage, API Route (zero-quirk OpenAI-wire-compatible catalog providers)\nCohere (chat, plus embed() and reranking)\nVoyage AI, Jina AI (embedding and/or reranking only ā no chat completions)\nTypeSafe Jev, Laya, XOR (decision-only ā serve decide(), not generate()/stream(); TypeSafe first, then Laya, then XOR, when several are configured)\n\nSee Provider Setup for the complete roster with setup guides.\n\nVoice providers (a separate system from the providers above):\nOpenAI TTS (TTS-1, TTS-1-HD, GPT-4o Audio)\nElevenLabs (Multilingual v2, Turbo v2.5, Flash v2.5)\nDeepgram (Nova-3, Nova-2, Enhanced ā STT)\nAzure Speech (Azure Cognitive Services TTS + STT)\nGoogle TTS / STT (Google Cloud Speech)\nWhisper (OpenAI Whisper ā STT)\nFish Audio (TTS)\nCartesia (TTS)\nOpenAI Realtime + Gemini Live (realtime voice APIs)\n\nMedia generation providers (image / video / music / avatar) ā Kling, Runway, Replicate, Beatoven, Lyria, D-ID, HeyGen. See Media Generation for the full list.\n\nQ: Do I need to install anything?\n\nA: No installation required! You can use NeuroLink directly with npx:\n\nFor frequent use, you can install globally: npm install -g @juspay/neurolink\n\nš§ Configuration\n\nQ: How do I set up API keys?\n\nA: Create a .env file in your project directory:\n\nNeuroLink automatically loads these environment variables.\n\nQ: Can I use NeuroLink behind a corporate proxy?\n\nA: Yes! NeuroLink automatically detects and uses corporate proxy settings:\n\nNo additional configuration needed.\n\nQ: How do I configure multiple environments (dev/staging/prod)?\n\nA: Use environment-specific .env files:\n\nšÆ Usage\n\nQ: What's the difference between CLI and SDK?\n\nA:\n\n| Feature | CLI | SDK |\n| -------------------- | ---------------------------- | ------------------------- |\n| Best for | Scripts, automation, testing | Applications, integration |\n| Installation | None required (npx) | npm install required |\n| Output | Text, JSON | Native JavaScript objects |\n| Batch processing | Built-in batch command | Manual implementation |\n| Learning curve | Low | Medium |\n\nQ: How do I choose the best provider for my use case?\n\nA: NeuroLink can auto-select the best provider, or you can choose based on:\nSpeed: Google AI (fastest responses)\nCoding: Anthropic Claude (best for code analysis)\nCreative: OpenAI (best for creative content)\nCost: Google AI Studio (free tier available)\nEnterprise: AWS Bedrock or Azure OpenAI\n\nQ: Can I use multiple providers in the same application?\n\nA: Yes! You can specify different providers for different requests:\n\nš Troubleshooting\n\nQ: Why am I getting \"API key not found\" errors?\n\nA: Common solutions:\nCheck .env file exists and is in the correct directory\nVerify file format: No spaces around = signs\nCheck file permissions: .env file should be readable\nVerify key format: Keys should start with provider-specific prefixes\n\nQ: Provider status shows \"Authentication failed\" - what should I do?\n\nA:\nVerify API key is correct and hasn't expired\nCheck account status - ensure billing is set up if required\nTest API key manually:\nCheck regional restrictions - some providers have geographic limitations\n\nQ: AWS Bedrock shows \"Not Authorized\" - how do I fix this?\n\nA: AWS Bedrock requires additional setup:\nRequest model access in AWS Bedrock console\nUse full i","hierarchy":{"lvl0":"Reference","lvl1":"Frequently Asked Questions","lvl2":"","lvl3":""}},
|
|
9176
9193
|
{"objectID":"430e71707f7db7f9866d7ab0b23f14f769c4812334161d853920bf4358ad8c17","title":"Frequently Asked Questions","url":"/docs/reference/faq#frequently-asked-questions","content":"Common questions and answers about NeuroLink usage, configuration, and troubleshooting.","hierarchy":{"lvl0":"Reference","lvl1":"Frequently Asked Questions","lvl2":"Frequently Asked Questions","lvl3":""}},
|
|
9177
9194
|
{"objectID":"e9218a0cd45a1960da2da4d8d664f5a8b77494352527c7b4d1e6bc12c137400f","title":"Q: What is NeuroLink?","url":"/docs/reference/faq#q-what-is-neurolink","content":"A: NeuroLink is an enterprise AI development platform that provides unified access to multiple AI providers (OpenAI, Google AI, Anthropic, AWS Bedrock, etc.) through a single SDK and CLI. It includes built-in tools, analytics, evaluation capabilities, and supports the Model Context Protocol (MCP) for extended functionality.","hierarchy":{"lvl0":"Reference","lvl1":"Frequently Asked Questions","lvl2":"Q: What is NeuroLink?","lvl3":""}},
|
|
9178
|
-
{"objectID":"c32f5558167b5817bde6577d51c68bbce793c3118b1192fdbf6c6e5958d3faff","title":"Q: Which AI providers does NeuroLink support?","url":"/docs/reference/faq#q-which-ai-providers-does-neurolink-support","content":"A: NeuroLink ships AI providers for text generation, streaming, and decision-making ā plus separate provider systems for voice and media generation. The text and multimodal providers include:\nOpenAI (GPT-4o, GPT-4.1, o3, o4-mini)\nGoogle AI Studio (Gemini 3 Flash/Pro, Gemini 2.5 Pro/Flash)\nGoogle Vertex AI (Gemini 3, Claude via Vertex)\nAnthropic (Claude Opus 4.7, Sonnet 4.6, 4.5 Opus/Sonnet/Haiku)\nAWS Bedrock (Claude, Titan, Nova models)\nAzure OpenAI (GPT models)\nHugging Face (Open source models)\nOllama (Local AI models)\nMistral AI (Mistral models)\nLiteLLM (100+ models via proxy)\nAWS SageMaker (Custom endpoints)\nOpenAI-compatible (Any OpenAI-API-compatible endpoint)\nOpenRouter (300+ models via OpenRouter)\nDeepSeek (DeepSeek V3, R1)\nNVIDIA NIM (Llama 3.3 70B, 400+ catalog models)\nLM Studio (Local models loaded in LM Studio)\nllama.cpp (Local GGUF models via llama-server)\nGroq, Cerebras, SambaNova, Together AI, Fireworks AI, Perplexity, Cloudflare Workers AI, xAI, Baseten, GMI Cloud, Inception Labs, io.net Intelligence, Mancer, Upstage, API Route (zero-quirk OpenAI-wire-compatible catalog providers)\nCohere (chat, plus embed() and reranking)\nVoyage AI, Jina AI (embedding and/or reranking only ā no chat completions)\nTypeSafe Jev, Laya (decision-only ā serve decide(), not generate()/stream(); TypeSafe first when
|
|
9195
|
+
{"objectID":"c32f5558167b5817bde6577d51c68bbce793c3118b1192fdbf6c6e5958d3faff","title":"Q: Which AI providers does NeuroLink support?","url":"/docs/reference/faq#q-which-ai-providers-does-neurolink-support","content":"A: NeuroLink ships AI providers for text generation, streaming, and decision-making ā plus separate provider systems for voice and media generation. The text and multimodal providers include:\nOpenAI (GPT-4o, GPT-4.1, o3, o4-mini)\nGoogle AI Studio (Gemini 3 Flash/Pro, Gemini 2.5 Pro/Flash)\nGoogle Vertex AI (Gemini 3, Claude via Vertex)\nAnthropic (Claude Opus 4.7, Sonnet 4.6, 4.5 Opus/Sonnet/Haiku)\nAWS Bedrock (Claude, Titan, Nova models)\nAzure OpenAI (GPT models)\nHugging Face (Open source models)\nOllama (Local AI models)\nMistral AI (Mistral models)\nLiteLLM (100+ models via proxy)\nAWS SageMaker (Custom endpoints)\nOpenAI-compatible (Any OpenAI-API-compatible endpoint)\nOpenRouter (300+ models via OpenRouter)\nDeepSeek (DeepSeek V3, R1)\nNVIDIA NIM (Llama 3.3 70B, 400+ catalog models)\nLM Studio (Local models loaded in LM Studio)\nllama.cpp (Local GGUF models via llama-server)\nGroq, Cerebras, SambaNova, Together AI, Fireworks AI, Perplexity, Cloudflare Workers AI, xAI, Baseten, GMI Cloud, Inception Labs, io.net Intelligence, Mancer, Upstage, API Route (zero-quirk OpenAI-wire-compatible catalog providers)\nCohere (chat, plus embed() and reranking)\nVoyage AI, Jina AI (embedding and/or reranking only ā no chat completions)\nTypeSafe Jev, Laya, XOR (decision-only ā serve decide(), not generate()/stream(); TypeSafe first, then Laya, then XOR, when several are configured)\n\nSee Provider Setup for the complete roster with setup guides.\n\nVoice providers (a separate system from the providers above):\nOpenAI TTS (TTS-1, TTS-1-HD, GPT-4o Audio)\nElevenLabs (Multilingual v2, Turbo v2.5, Flash v2.5)\nDeepgram (Nova-3, Nova-2, Enhanced ā STT)\nAzure Speech (Azure Cognitive Services TTS + STT)\nGoogle TTS / STT (Google Cloud Speech)\nWhisper (OpenAI Whisper ā STT)\nFish Audio (TTS)\nCartesia (TTS)\nOpenAI Realtime + Gemini Live (realtime voice APIs)\n\nMedia generation providers (image / video / music / avatar) ā Kling, Runway, Replicate, Beatoven, Lyria, D-ID, HeyGen. See Media Generation for the full ","hierarchy":{"lvl0":"Reference","lvl1":"Frequently Asked Questions","lvl2":"Q: Which AI providers does NeuroLink support?","lvl3":""}},
|
|
9179
9196
|
{"objectID":"c7da7431322332ad0e9e6439acb89a8a9f6af428d15d84c94adeb886ea4fdaab","title":"Q: Do I need to install anything?","url":"/docs/reference/faq#q-do-i-need-to-install-anything","content":"A: No installation required! You can use NeuroLink directly with npx:\n\nFor frequent use, you can install globally: npm install -g @juspay/neurolink","hierarchy":{"lvl0":"Reference","lvl1":"Frequently Asked Questions","lvl2":"Q: Do I need to install anything?","lvl3":""}},
|
|
9180
9197
|
{"objectID":"379b5c908063649275668a696f71c0e87923dd0d011f221a19a43f69a483acea","title":"Q: How do I set up API keys?","url":"/docs/reference/faq#q-how-do-i-set-up-api-keys","content":"A: Create a .env file in your project directory:\n\n`bash","hierarchy":{"lvl0":"Reference","lvl1":"Frequently Asked Questions","lvl2":"Q: How do I set up API keys?","lvl3":""}},
|
|
9181
9198
|
{"objectID":"07c128fc6b5bcea9361ff3423a97e6a5a4e85fb14571f4a5d14bcb11eb389105","title":".env file","url":"/docs/reference/faq#env-file","content":"OPENAIAPIKEY=\"sk-your-openai-key\"\nGOOGLEAIAPI_KEY=\"AIza-your-google-ai-key\"\nANTHROPICAPIKEY=\"sk-ant-your-anthropic-key\"","hierarchy":{"lvl0":"Reference","lvl1":"Frequently Asked Questions","lvl2":".env file","lvl3":""}},
|
|
@@ -10305,8 +10322,8 @@
|
|
|
10305
10322
|
{"objectID":"1a0933649d2e2a9e068e520585c510992a787eb886f8661e6da36cf83ce7e3eb","title":"Multiple inputs","url":"/docs/skills/neurolink-guide/multimodal#multiple-inputs","content":"neurolink generate \"Compare\" --image ./a.png --image ./b.png --pdf ./docs.pdf\n`","hierarchy":{"lvl0":"Skills","lvl1":"NeuroLink Multimodal Support","lvl2":"Multiple inputs","lvl3":""}},
|
|
10306
10323
|
{"objectID":"e2858a465b5d2bc8ef1db9834500597eb845bf3b40f3a0ba4b29e54033a4b23b","title":"File Size Considerations","url":"/docs/skills/neurolink-guide/multimodal#file-size-considerations","content":"| File Type | Recommended Max | Notes |\n| --------- | --------------- | -------------------- |\n| Images | 20MB | Resized if larger |\n| PDFs | 50MB | Page limit may apply |\n| CSV | 10MB | Use maxRows option |\n| Code | 100KB | Split large files |","hierarchy":{"lvl0":"Skills","lvl1":"NeuroLink Multimodal Support","lvl2":"File Size Considerations","lvl3":""}},
|
|
10307
10324
|
{"objectID":"8d5a67779513f44569761e7ea2fa399de1aafd682a08e0b14c08850f0c223cb2","title":"Next Steps","url":"/docs/skills/neurolink-guide/multimodal#next-steps","content":"MCP tools - Add external tools\nRAG integration - Document-grounded generation\nProviders - Configure vision-capable providers","hierarchy":{"lvl0":"Skills","lvl1":"NeuroLink Multimodal Support","lvl2":"Next Steps","lvl3":""}},
|
|
10308
|
-
{"objectID":"d9e19daaa21e9512ad71f1187055c474d4b51da0c78b56a197286c6403126b9a","title":"NeuroLink Provider Configuration","url":"/docs/skills/neurolink-guide/providers","content":"NeuroLink Provider Configuration\n\nNeuroLink supports many AI providers through a unified API. This page highlights the most commonly-configured text providers ā see the README provider table and the Provider Capabilities Audit for the full matrix, including newer text providers (DeepSeek, NVIDIA NIM, LM Studio, llama.cpp, plus the Tier-2 catalog providers ā Groq, Cerebras, SambaNova, Together AI, Fireworks AI, Perplexity, Cloudflare Workers AI, xAI, and more), the decision-only TypeSafe Jev and
|
|
10309
|
-
{"objectID":"b66a3f5004ec2abbc42277973845a5485480e16a3ea54ea9f31e83978a9ee521","title":"NeuroLink Provider Configuration","url":"/docs/skills/neurolink-guide/providers#neurolink-provider-configuration","content":"NeuroLink supports many AI providers through a unified API. This page highlights the most commonly-configured text providers ā see the README provider table and the Provider Capabilities Audit for the full matrix, including newer text providers (DeepSeek, NVIDIA NIM, LM Studio, llama.cpp, plus the Tier-2 catalog providers ā Groq, Cerebras, SambaNova, Together AI, Fireworks AI, Perplexity, Cloudflare Workers AI, xAI, and more), the decision-only TypeSafe Jev and
|
|
10325
|
+
{"objectID":"d9e19daaa21e9512ad71f1187055c474d4b51da0c78b56a197286c6403126b9a","title":"NeuroLink Provider Configuration","url":"/docs/skills/neurolink-guide/providers","content":"NeuroLink Provider Configuration\n\nNeuroLink supports many AI providers through a unified API. This page highlights the most commonly-configured text providers ā see the README provider table and the Provider Capabilities Audit for the full matrix, including newer text providers (DeepSeek, NVIDIA NIM, LM Studio, llama.cpp, plus the Tier-2 catalog providers ā Groq, Cerebras, SambaNova, Together AI, Fireworks AI, Perplexity, Cloudflare Workers AI, xAI, and more), the decision-only TypeSafe Jev, Laya and XOR providers (serve decide(), not generate()/stream(); TypeSafe first, then Laya, then XOR, when several are configured), and voice providers (OpenAI TTS, ElevenLabs, Deepgram, Azure Speech, Whisper, Fish Audio, Cartesia, OpenAI Realtime, Gemini Live).\n\nCommon Providers\n\n| Provider | Enum Name | Aliases | Default Model |\n| ---------------- | -------------- | -------------- | --------------------------------------- |\n| OpenAI | openai | gpt, chatgpt | gpt-4o |\n| Anthropic | anthropic | claude | claude-3-5-sonnet-20241022 |\n| Google AI Studio | google-ai | gemini, google | gemini-2.5-flash |\n| Google Vertex AI | vertex | google-vertex | gemini-2.5-flash |\n| AWS Bedrock | bedrock | aws-bedrock | anthropic.claude-3-sonnet-20240229-v1:0 |\n| Azure OpenAI | azure-openai | azure | gpt-4o |\n| Mistral AI | mistral | - | mistral-large |\n| Ollama | ollama | - | llama3 |\n| LiteLLM | litellm | - | varies |\n| AWS SageMaker | sagemaker | - | custom |\n| Hugging Face | hugging-face | hf | varies |\n| OpenRouter | openrouter | - | varies |\n| Gateway | gateway | - | varies |\n\nOpenAI\n\nAvailable Models:\ngpt-4o - Latest GPT-4 Omni\ngpt-4o-mini - Faster, cheaper\ngpt-4-turbo - GPT-4 Turbo\no1 - Reasoning model\no1-mini - Smaller reasoning model\n\nAnthropic\n\nAvailable Models:\nclaude-3-5-sonnet-20241022 - Latest Sonnet\nclaude-3-7-sonnet-20250219 - Claude 3.7 Sonnet\nclaude-3-opus-20240229 - Most capable\nclaude-3-haiku-20240307 - Fastest\n\nExtended Thinking:\n\nGoogle AI Studio\n\nAvailable Models:\ngemini-2.5-flash - Fast and capable\ngemini-2.5-pro - Most capable\ngemini-2.0-flash - Previous generation\ngemini-3-flash-preview - Preview of Gemini 3\n\nGoogle Vertex AI\n\nAvailable Models:\ngemini-3-flash - Latest Gemini 3\ngemini-3-pro - Most capable Gemini 3\ngemini-2.5-flash - Fast\ngemini-2.5-pro - Previous gen capable\n\nExtended Thinking (Gemini 3):\n\nAWS Bedrock\n\nAvailable Models:\nanthropic.claude-3-sonnet-20240229-v1:0\nanthropic.claude-3-haiku-20240307-v1:0\nanthropic.claude-3-opus-20240229-v1:0\namazon.titan-text-express-v1\namazon.nova-pro-v1:0\nmeta.llama3-70b-instruct-v1:0\n\nAzure OpenAI\n\nMistral AI\n\nAvailable Models:\nmistral-large-latest - Most capable\nmistral-small-latest - Fast\ncodestral-latest - Code specialized\nministral-8b-latest - Small\n\nOllama (Local)\n\nSetup:\n\nAvailable Models:\nllama3 - Meta Llama 3\nllama3:70b - Larger Llama 3\nmistral - Mistral 7B\ncodellama - Code specialized\nphi3 - Microsoft Phi-3\n\nLiteLLM\n\nAWS SageMaker\n\nHugging Face\n\nOpenRouter\n\nProvider Fallback\n\nConfigure automatic fallback to another provider:\n\nCheck Provider Status\n\nProvider-Specific Options\n\nTemperature and Sampling\n\nSystem Prompts\n\nVision-Capable Models\n\nNot all models support image inputs:\n\n| Provider | Vision Models |\n| --------- | --------------------- |\n| OpenAI | gpt-4o, gpt-4-turbo |\n| Anthropic | All Claude 3 models |\n| Vertex | Gemini 2.5+, Gemini 3 |\n| Google AI | Gemini 2.5+, Gemini 3 |\n| Bedrock | Claude 3 models |\n\nNext Steps\nMultimodal inputs - Work with images and documents\nMCP tools - Add external tools\nRAG integration - Document-grounded generation","hierarchy":{"lvl0":"Skills","lvl1":"NeuroLink Provider Configuration","lvl2":"","lvl3":""}},
|
|
10326
|
+
{"objectID":"b66a3f5004ec2abbc42277973845a5485480e16a3ea54ea9f31e83978a9ee521","title":"NeuroLink Provider Configuration","url":"/docs/skills/neurolink-guide/providers#neurolink-provider-configuration","content":"NeuroLink supports many AI providers through a unified API. This page highlights the most commonly-configured text providers ā see the README provider table and the Provider Capabilities Audit for the full matrix, including newer text providers (DeepSeek, NVIDIA NIM, LM Studio, llama.cpp, plus the Tier-2 catalog providers ā Groq, Cerebras, SambaNova, Together AI, Fireworks AI, Perplexity, Cloudflare Workers AI, xAI, and more), the decision-only TypeSafe Jev, Laya and XOR providers (serve decide(), not generate()/stream(); TypeSafe first, then Laya, then XOR, when several are configured), and voice providers (OpenAI TTS, ElevenLabs, Deepgram, Azure Speech, Whisper, Fish Audio, Cartesia, OpenAI Realtime, Gemini Live).","hierarchy":{"lvl0":"Skills","lvl1":"NeuroLink Provider Configuration","lvl2":"NeuroLink Provider Configuration","lvl3":""}},
|
|
10310
10327
|
{"objectID":"ca77e6781279a1e849f17c5edd76b2cc111546faa201202d3dc11820334170ce","title":"Common Providers","url":"/docs/skills/neurolink-guide/providers#common-providers","content":"| Provider | Enum Name | Aliases | Default Model |\n| ---------------- | -------------- | -------------- | --------------------------------------- |\n| OpenAI | openai | gpt, chatgpt | gpt-4o |\n| Anthropic | anthropic | claude | claude-3-5-sonnet-20241022 |\n| Google AI Studio | google-ai | gemini, google | gemini-2.5-flash |\n| Google Vertex AI | vertex | google-vertex | gemini-2.5-flash |\n| AWS Bedrock | bedrock | aws-bedrock | anthropic.claude-3-sonnet-20240229-v1:0 |\n| Azure OpenAI | azure-openai | azure | gpt-4o |\n| Mistral AI | mistral | - | mistral-large |\n| Ollama | ollama | - | llama3 |\n| LiteLLM | litellm | - | varies |\n| AWS SageMaker | sagemaker | - | custom |\n| Hugging Face | hugging-face | hf | varies |\n| OpenRouter | openrouter | - | varies |\n| Gateway | gateway | - | varies |","hierarchy":{"lvl0":"Skills","lvl1":"NeuroLink Provider Configuration","lvl2":"Common Providers","lvl3":""}},
|
|
10311
10328
|
{"objectID":"9c5370e9c625cd036ee1c3c8ba7c0bea9a5b6b68ca08ccd9c710d3e65429d843","title":"OpenAI","url":"/docs/skills/neurolink-guide/providers#openai","content":"`bash","hierarchy":{"lvl0":"Skills","lvl1":"NeuroLink Provider Configuration","lvl2":"OpenAI","lvl3":""}},
|
|
10312
10329
|
{"objectID":"fcc21bd062d4e7ab394bd0ad8a1257ec9ed367c205f68dab30479e6758c5cf20","title":"Environment","url":"/docs/skills/neurolink-guide/providers#environment","content":"OPENAIAPIKEY=sk-...\nOPENAIORGID=org-... # Optional\nOPENAIBASEURL=... # Optional, for proxies\ntypescript\nconst result = await neurolink.generate({\n input: { text: \"Hello\" },\n provider: \"openai\",\n model: \"gpt-4o\", // or gpt-4o-mini, gpt-4-turbo, o1, o1-mini\n});\n\n\n**Available Models:**\n\n- gpt-4o - Latest GPT-4 Omni\n- gpt-4o-mini - Faster, cheaper\n- gpt-4-turbo - GPT-4 Turbo\n- o1 - Reasoning model\n- o1-mini` - Smaller reasoning model","hierarchy":{"lvl0":"Skills","lvl1":"NeuroLink Provider Configuration","lvl2":"Environment","lvl3":""}},
|