@juspay/neurolink 12.48.2 → 12.49.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/dist/browser/neurolink.min.js +616 -595
- package/dist/cli/commands/serve.d.ts +0 -3
- package/dist/cli/commands/serve.js +85 -3
- package/dist/cli/commands/transcribe.d.ts +24 -0
- package/dist/cli/commands/transcribe.js +718 -0
- package/dist/cli/factories/commandFactory.d.ts +10 -0
- package/dist/cli/factories/commandFactory.js +13 -0
- package/dist/cli/parser.js +3 -0
- package/dist/factories/mediaHandlerCatalog.js +11 -9
- package/dist/factories/sttDescriptors.d.ts +63 -0
- package/dist/factories/sttDescriptors.js +286 -0
- package/dist/index.d.ts +4 -1
- package/dist/index.js +7 -1
- package/dist/neurolink.d.ts +68 -1
- package/dist/neurolink.js +202 -4
- package/dist/processors/media/AudioProcessor.d.ts +15 -56
- package/dist/processors/media/AudioProcessor.js +105 -276
- package/dist/processors/media/VideoProcessor.d.ts +3 -5
- package/dist/processors/media/VideoProcessor.js +52 -51
- package/dist/server/abstract/baseServerAdapter.d.ts +7 -0
- package/dist/server/abstract/baseServerAdapter.js +13 -1
- package/dist/server/adapters/expressAdapter.d.ts +1 -0
- package/dist/server/adapters/expressAdapter.js +48 -4
- package/dist/server/adapters/fastifyAdapter.d.ts +1 -0
- package/dist/server/adapters/fastifyAdapter.js +38 -1
- package/dist/server/adapters/honoAdapter.d.ts +1 -4
- package/dist/server/adapters/honoAdapter.js +83 -1
- package/dist/server/adapters/koaAdapter.d.ts +1 -0
- package/dist/server/adapters/koaAdapter.js +43 -0
- package/dist/server/index.d.ts +3 -2
- package/dist/server/index.js +3 -2
- package/dist/server/routes/index.d.ts +1 -0
- package/dist/server/routes/index.js +3 -0
- package/dist/server/routes/transcribeRoutes.d.ts +23 -0
- package/dist/server/routes/transcribeRoutes.js +506 -0
- package/dist/server/utils/rawBody.d.ts +32 -0
- package/dist/server/utils/rawBody.js +76 -0
- package/dist/server/utils/validation.d.ts +192 -0
- package/dist/server/utils/validation.js +100 -0
- package/dist/server/websocket/transcribeWebSocket.d.ts +42 -0
- package/dist/server/websocket/transcribeWebSocket.js +264 -0
- package/dist/types/cli.d.ts +46 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.js +1 -0
- package/dist/types/providers.d.ts +7 -1
- package/dist/types/server.d.ts +117 -1
- package/dist/types/stt.d.ts +160 -7
- package/dist/types/transcribe.d.ts +506 -0
- package/dist/types/transcribe.js +29 -0
- package/dist/utils/speakerTurns.d.ts +28 -0
- package/dist/utils/speakerTurns.js +93 -0
- package/dist/utils/sttProcessor.d.ts +20 -2
- package/dist/utils/sttProcessor.js +73 -5
- package/dist/voice/correction/dictionary.d.ts +49 -0
- package/dist/voice/correction/dictionary.js +134 -0
- package/dist/voice/correction/guard.d.ts +35 -0
- package/dist/voice/correction/guard.js +161 -0
- package/dist/voice/correction/index.d.ts +47 -0
- package/dist/voice/correction/index.js +211 -0
- package/dist/voice/correction/rewrite.d.ts +92 -0
- package/dist/voice/correction/rewrite.js +322 -0
- package/dist/voice/errors.d.ts +15 -0
- package/dist/voice/errors.js +45 -0
- package/dist/voice/index.d.ts +20 -2
- package/dist/voice/index.js +75 -9
- package/dist/voice/providers/AzureSTT.d.ts +10 -7
- package/dist/voice/providers/AzureSTT.js +23 -75
- package/dist/voice/providers/DeepgramSTT.d.ts +17 -2
- package/dist/voice/providers/DeepgramSTT.js +109 -13
- package/dist/voice/providers/ElevenLabsSTT.d.ts +12 -2
- package/dist/voice/providers/ElevenLabsSTT.js +34 -8
- package/dist/voice/providers/GoogleSTT.d.ts +10 -8
- package/dist/voice/providers/GoogleSTT.js +21 -75
- package/dist/voice/providers/OpenAISTT.d.ts +30 -9
- package/dist/voice/providers/OpenAISTT.js +196 -21
- package/dist/voice/providers/WhistleSTT.d.ts +87 -0
- package/dist/voice/providers/WhistleSTT.js +313 -0
- package/dist/voice/streaming/chunkedStreamAdapter.d.ts +19 -0
- package/dist/voice/streaming/chunkedStreamAdapter.js +519 -0
- package/dist/voice/streaming/endpointer.d.ts +81 -0
- package/dist/voice/streaming/endpointer.js +247 -0
- package/dist/voice/streaming/localAgreement.d.ts +30 -0
- package/dist/voice/streaming/localAgreement.js +44 -0
- package/dist/voice/sttEnvCredentials.d.ts +12 -0
- package/dist/voice/sttEnvCredentials.js +12 -0
- package/dist/voice/transcribe.d.ts +47 -0
- package/dist/voice/transcribe.js +519 -0
- package/dist/voice/transcribeStream.d.ts +4 -0
- package/dist/voice/transcribeStream.js +584 -0
- package/dist/voice/whistle/assets.d.ts +47 -0
- package/dist/voice/whistle/assets.js +270 -0
- package/dist/voice/whistle/audio.d.ts +32 -0
- package/dist/voice/whistle/audio.js +267 -0
- package/dist/voice/whistle/engine.d.ts +32 -0
- package/dist/voice/whistle/engine.js +193 -0
- package/dist/voice/whistle/worker.d.ts +18 -0
- package/dist/voice/whistle/worker.js +294 -0
- package/docs-site/static/search-index.json +66 -8
- package/models/whistle/README.md +18 -0
- package/models/whistle/needle.js +2 -0
- package/models/whistle/needle.wasm +0 -0
- package/models/whistle/whistle.cact +0 -0
- package/package.json +7 -3
|
@@ -764,13 +764,13 @@
|
|
|
764
764
|
{"objectID":"ce2592c78427e67ee815e08fd87d0e4bc8ac52a89e5857166f38b4973ceb89e9","title":"cms-integration.sh - AI-powered content management","url":"/docs/cli/advanced#cms-integrationsh---ai-powered-content-management","content":"manage_content() {\n local action=\"$1\"\n local content_type=\"$2\"\n local target=\"${3:-.}\"\n\n case $action in\n \"generate\")\n echo \"📝 Generating $content_type content...\"\n\n case $content_type in\n \"blog-post\")\n npx @juspay/neurolink gen \"\n Write a professional blog post about AI development tools.\n Include: introduction, key benefits, use cases, conclusion.\n Target audience: Software developers and engineering managers.\n Tone: Professional but approachable.\n Length: 800-1000 words.\n \" --enable-evaluation \\\n --evaluation-domain \"Content Marketing Manager\" \\\n > \"$target/blog-post-$(date +%Y%m%d).md\"\n ;;\n\n \"documentation\")\n npx @juspay/neurolink gen \"\n Create comprehensive API documentation.\n Include: authentication, endpoints, examples, error handling.\n Format: OpenAPI 3.0 specification.\n \" --provider anthropic \\\n > \"$target/api-docs-$(date +%Y%m%d).yaml\"\n ;;\n\n \"social-media\")\n npx @juspay/neurolink gen \"\n Create 5 social media posts about AI automation.\n Platforms: Twitter, LinkedIn.\n Include relevant hashtags.\n Tone: Engaging and informative.\n \" > \"$target/social-content-$(date +%Y%m%d).txt\"\n ;;\n esac\n ;;\n\n \"review\")\n echo \"🔍 Reviewing existing content...\"\n find \"$target\" -name \".md\" -o -name \".txt\" | while read file; do\n npx @juspay/neurolink gen \"\n Review this content for:\nClarity and readability\nTechnical accuracy\nSEO optimization\nEngagement potential\n\n Provide specific improvement recommendations.\n \" --enable-evaluation \\\n --evaluation-domain \"Content Editor\" \\\n > \"${file%.md}-review.md\"\n done\n ;;\n esac\n}","hierarchy":{"lvl0":"Cli","lvl1":"Advanced CLI Usage","lvl2":"cms-integration.sh - AI-powered content management","lvl3":""}},
|
|
765
765
|
{"objectID":"ee431ad9bc33732c6bccc98e0897a2be670c63dc62ba36dfad460d0ba9df4356","title":"manage_content \"review\" \"\" \"./content\"","url":"/docs/cli/advanced#manage_content-review-content","content":"`\n\nThis advanced CLI usage guide provides sophisticated patterns and techniques for power users who want to maximize the capabilities of NeuroLink CLI in production environments.","hierarchy":{"lvl0":"Cli","lvl1":"Advanced CLI Usage","lvl2":"manage_content \"review\" \"\" \"./content\"","lvl3":""}},
|
|
766
766
|
{"objectID":"b5775ee8875c848b855946147ad311018f4eb603e9038728e6314fb752ef9685","title":"📚 Related Documentation","url":"/docs/cli/advanced#-related-documentation","content":"CLI Commands Reference - Complete command documentation\nCLI Examples - Practical usage examples\nEnvironment Variables - Configuration\nSDK Advanced Features - Programmatic equivalents\nTroubleshooting - Common issues","hierarchy":{"lvl0":"Cli","lvl1":"Advanced CLI Usage","lvl2":"📚 Related Documentation","lvl3":""}},
|
|
767
|
-
{"objectID":"09480712a1c1db09548ec81b738d24eb7cce5350670b9d8ef150f33341d81279","title":"CLI Command Reference","url":"/docs/cli/commands","content":"CLI Command Reference\n\nThe NeuroLink CLI mirrors the SDK. Every command shares consistent options and outputs so you can prototype in the terminal and port the workflow to code later.\n\nInstall or Run Ad-hoc\n\nCommand Map\n\n| Command
|
|
767
|
+
{"objectID":"09480712a1c1db09548ec81b738d24eb7cce5350670b9d8ef150f33341d81279","title":"CLI Command Reference","url":"/docs/cli/commands","content":"CLI Command Reference\n\nThe NeuroLink CLI mirrors the SDK. Every command shares consistent options and outputs so you can prototype in the terminal and port the workflow to code later.\n\nInstall or Run Ad-hoc\n\nCommand Map\n\n| Command | Description | Example |\n| ---------------------- | ------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------- |\n| generate / gen | One-shot content generation with optional multimodal input. | npx @juspay/neurolink generate \"Draft release notes\" --image ./before.png |\n| stream | Real-time streaming output with tool support. | npx @juspay/neurolink stream \"Narrate sprint demo\" --enableAnalytics |\n| decide [state] | Typed, calibrated judgements from a decision model (no free text). | npx @juspay/neurolink decide \"Refund request\" --questions '{\"urgent\":{\"type\":\"boolean\",\"instructions\":\"Is this urgent?\"}}' |\n| transcribe <file\\|-> | Audio to text; local engine by default, dictionary and correction. | npx @juspay/neurolink transcribe meeting.wav --format srt |\n| batch | Process multiple prompts from a file. | npx @juspay/neurolink batch prompts.txt --format json |\n| loop | Interactive session with persistent variables & memory. | npx @juspay/neurolink loop --auto-redis |\n| auth <subcommand> | Manage provider authentication (API key or OAuth). | npx @juspay/neurolink auth login anthropic --method oauth |\n| setup / s | Guided provider onboarding and validation. | npx @juspay/neurolink setup --provider openai |\n| status | Health check for configured providers. | npx @juspay/neurolink status --verbose |\n| get-best-provider | Show the best available AI provider. | npx @juspay/neurolink get-best-provider --format json |\n| models list | Inspect available models and capabilities. | npx @juspay/neurolink models list --capability vision |\n| config <subcommand> | Initialise, validate, export, or reset configuration. | npx @juspay/neurolink config validate |\n| memory <subcommand> | View, export, or clear conversation history. | npx @juspay/neurolink memory history NL_x3yr --format json |\n| mcp <subcommand> | Manage Model Context Protocol servers/tools. | npx @juspay/neurolink mcp list |\n| ollama <subcommand> | Manage Ollama local AI models. | npx @juspay/neurolink ollama list-models |\n| sagemaker <command> | Manage Amazon SageMaker endpoints and models. | npx @juspay/neurolink sagemaker status |\n| server <subcommand> | Manage NeuroLink HTTP server | npx @juspay/neurolink server start --port 3000 |\n| serve | Start server in foreground mode | npx @juspay/neurolink serve --port 3000 |\n| proxy <subcommand> | Manage the Claude multi-account proxy and its local telemetry. | npx @juspay/neurolink proxy telemetry setup |\n| rag <subcommand> | RAG document processing (chunk, index, query). | npx @juspay/neurolink rag chunk ./docs/guide.md ","hierarchy":{"lvl0":"Cli","lvl1":"CLI Command Reference","lvl2":"","lvl3":""}},
|
|
768
768
|
{"objectID":"f94196010727fad589b3435c8d55133e9a350fcdcfea6aba103c1246986694c7","title":"CLI Command Reference","url":"/docs/cli/commands#cli-command-reference","content":"The NeuroLink CLI mirrors the SDK. Every command shares consistent options and outputs so you can prototype in the terminal and port the workflow to code later.","hierarchy":{"lvl0":"Cli","lvl1":"CLI Command Reference","lvl2":"CLI Command Reference","lvl3":""}},
|
|
769
769
|
{"objectID":"b8f74eef9721f0eb2192c4b8716f6c7726cd079f85060153e441f9bfed920cac","title":"Install or Run Ad-hoc","url":"/docs/cli/commands#install-or-run-ad-hoc","content":"`bash","hierarchy":{"lvl0":"Cli","lvl1":"CLI Command Reference","lvl2":"Install or Run Ad-hoc","lvl3":""}},
|
|
770
770
|
{"objectID":"951bdd053525dc169aec35713ca187532bc8d691a25e15977e528aa73aa09f87","title":"Run without installation","url":"/docs/cli/commands#run-without-installation","content":"npx @juspay/neurolink --help","hierarchy":{"lvl0":"Cli","lvl1":"CLI Command Reference","lvl2":"Run without installation","lvl3":""}},
|
|
771
771
|
{"objectID":"f007d6256ae9ce3cd888b757374cf819d6d20a2466de5280aa882385928dfa42","title":"Install globally","url":"/docs/cli/commands#install-globally","content":"npm install -g @juspay/neurolink","hierarchy":{"lvl0":"Cli","lvl1":"CLI Command Reference","lvl2":"Install globally","lvl3":""}},
|
|
772
772
|
{"objectID":"fe8f683c688c22a4fb00ea52ec4f803cc988e40adedfb184ae651f06394d7d87","title":"Local project dependency","url":"/docs/cli/commands#local-project-dependency","content":"npm install @juspay/neurolink\n`","hierarchy":{"lvl0":"Cli","lvl1":"CLI Command Reference","lvl2":"Local project dependency","lvl3":""}},
|
|
773
|
-
{"objectID":"6d0358f7c107fa0314373826a28ae5ced11a8739cb937a2e595a91d9b60e762c","title":"Command Map","url":"/docs/cli/commands#command-map","content":"| Command
|
|
773
|
+
{"objectID":"6d0358f7c107fa0314373826a28ae5ced11a8739cb937a2e595a91d9b60e762c","title":"Command Map","url":"/docs/cli/commands#command-map","content":"| Command | Description | Example |\n| ---------------------- | ------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------- |\n| generate / gen | One-shot content generation with optional multimodal input. | npx @juspay/neurolink generate \"Draft release notes\" --image ./before.png |\n| stream | Real-time streaming output with tool support. | npx @juspay/neurolink stream \"Narrate sprint demo\" --enableAnalytics |\n| decide [state] | Typed, calibrated judgements from a decision model (no free text). | npx @juspay/neurolink decide \"Refund request\" --questions '{\"urgent\":{\"type\":\"boolean\",\"instructions\":\"Is this urgent?\"}}' |\n| transcribe <file\\|-> | Audio to text; local engine by default, dictionary and correction. | npx @juspay/neurolink transcribe meeting.wav --format srt |\n| batch | Process multiple prompts from a file. | npx @juspay/neurolink batch prompts.txt --format json |\n| loop | Interactive session with persistent variables & memory. | npx @juspay/neurolink loop --auto-redis |\n| auth <subcommand> | Manage provider authentication (API key or OAuth).","hierarchy":{"lvl0":"Cli","lvl1":"CLI Command Reference","lvl2":"Command Map","lvl3":""}},
|
|
774
774
|
{"objectID":"b149865b2facf38f974af3ecc7a0bfaee49be27a20c207ed01c32b26247fd099","title":"generate <input>","url":"/docs/cli/commands#generate","content":"Key flags:\n--provider, -p – provider slug (default auto).\n--model, -m – model name for the chosen provider.\n--image, -i – attach one or more image files/URLs for multimodal prompts.\n--pdf – attach one or more PDF files for document analysis.\n--csv, -c – attach one or more CSV files for data analysis.\n--file – attach any supported file type, auto-detected. Covers Office documents (Word .docx, Excel .xlsx/.xls, PowerPoint .pptx, RTF, OpenDocument), audio (.mp3, .wav, .m4a, … — transcribed automatically), video (.mp4, .webm, .mov, .mkv — keyframes plus metadata and any embedded subtitles), archives, JSON, YAML, XML, HTML, SVG, Markdown, and 50+ code languages. Repeatable. Not available on batch, where it would collide with the prompts-file positional — use generate or stream.\n--temperature, -t – creativity (default 0.7).\n--maxTokens, --max – response limit (default 1000).\n--system, -s – system prompt.\n--format, -f, --output-format – text (default), json, or table. With json, stdout carries only the JSON result; debug and info logs go to stderr, so the output stays parseable even with --debug.\n--output, -o – write response to file.\n--imageOutput, --image-output – custom path for generated image (default: generated-images/image-<timestamp>.png).\n--enableAnalytics / --enableEvaluation – capture metrics & quality scores.\n--evaluationDomain – domain hint for the judge model.\n--domainAware – use domain-aware evaluation (default false).\n--context – JSON string appended to analytics/evaluation context.\n--domain, -d – domain type for specialized processing: healthcare, finance, analytics, ecommerce, education, legal, technology, generic, auto.\n--disableTools – bypass MCP tools for this call.\n--timeout – seconds before aborting the request (default 120).\n--region, -r – Vertex AI region (e.g., us-central1, europe-west1, asia-northeast1).\n--debug, -v, --verbose – verbose logging and full JSON payloads.\n--quiet, -q – suppress non-essential output (default true).","hierarchy":{"lvl0":"Cli","lvl1":"CLI Command Reference","lvl2":"generate <input>","lvl3":""}},
|
|
775
775
|
{"objectID":"621800e7302c71eae24c4286bcb9e05a8e110cf656e2a2d339bd8ecbe998d32e","title":"Generate with explicit subscription tier","url":"/docs/cli/commands#generate-with-explicit-subscription-tier","content":"npx @juspay/neurolink generate \"Explain quantum computing\" \\\n --provider anthropic --subscription-tier pro","hierarchy":{"lvl0":"Cli","lvl1":"CLI Command Reference","lvl2":"Generate with explicit subscription tier","lvl3":""}},
|
|
776
776
|
{"objectID":"ad3c3b350fe961788a9aad769e12752ba4a17c25fbc14e3aeec6374cfb865d0c","title":"Generate with OAuth auth method","url":"/docs/cli/commands#generate-with-oauth-auth-method","content":"npx @juspay/neurolink generate \"Write a poem\" \\\n --provider anthropic --authMethod oauth --enableBeta","hierarchy":{"lvl0":"Cli","lvl1":"CLI Command Reference","lvl2":"Generate with OAuth auth method","lvl3":""}},
|
|
@@ -785,6 +785,12 @@
|
|
|
785
785
|
{"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":""}},
|
|
786
786
|
{"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":""}},
|
|
787
787
|
{"objectID":"bbd1f018ee4492d0ec7f492e6a84291f0eaa12b81d211cf285fe6d5ac8ed273d","title":"Ask about an image (XOR, Perplexity and Cloudflare Clef read images); repeat --image for several, or use --video (XOR)","url":"/docs/cli/commands#ask-about-an-image-xor-perplexity-and-cloudflare-clef-read-images-repeat---image-for-several-or-use---video-xor","content":"npx @juspay/neurolink decide \"What color is this?\" --provider xor \\\n --image ./photo.png \\\n --questions '{\"color\":{\"type\":\"choice\",\"instructions\":\"What color is the image?\",\"criteria\":{\"red\":\"red\",\"blue\":\"blue\"}}}'\n\n\n| Option | Description |\n| --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| state | The content to judge, as a positional argument (or use --state-file). |\n| --state-file | Path to a file holding the state (plain text or JSON). |\n| --questions | Inline JSON map of questions. Exactly one of this or --questions-file. |\n| --questions-file | Path to a JSON file holding the questions map. |\n| --provider | Decision provider to use: typesafe, laya, xor, perplexity-decider or cloudflare-clef. Defaults to the first configured, in that order (TypeSafe, Laya, XOR, Perplexity, Cloudflare Clef). |\n| --model | Overrides the provider's configured model for this call.","hierarchy":{"lvl0":"Cli","lvl1":"CLI Command Reference","lvl2":"Ask about an image (XOR, Perplexity and Cloudflare Clef read images); repeat --image for several, or use --video (XOR)","lvl3":""}},
|
|
788
|
+
{"objectID":"74ddf3bb2432e4cbdfe3a2e78aa95391bd1967ac817b4af735f337554b5b405a","title":"transcribe <file|->","url":"/docs/cli/commands#transcribe","content":"Turn audio into text — the transcribe inference type. Pass a file, or - to read the audio from stdin. With no STT provider configured, the built-in local engine (Whistle) runs on this machine with no key; set NEUROLINK_STT_PROVIDER (and that provider's key) to use another one.\n\n`bash","hierarchy":{"lvl0":"Cli","lvl1":"CLI Command Reference","lvl2":"transcribe <file|->","lvl3":""}},
|
|
789
|
+
{"objectID":"b71aa574620a9889a24a23e9d02ca657151930b6fb1754cb48144df208ef0215","title":"Plain transcription with the default engine","url":"/docs/cli/commands#plain-transcription-with-the-default-engine","content":"npx @juspay/neurolink transcribe meeting.wav","hierarchy":{"lvl0":"Cli","lvl1":"CLI Command Reference","lvl2":"Plain transcription with the default engine","lvl3":""}},
|
|
790
|
+
{"objectID":"688deed48aeb424e78413fcb7603c09c1d4bea2bc3db5c25d4fe8616a23d9a42","title":"Repair names the engine mis-hears, guarded by the decision model, then an LLM rewrite","url":"/docs/cli/commands#repair-names-the-engine-mis-hears-guarded-by-the-decision-model-then-an-llm-rewrite","content":"npx @juspay/neurolink transcribe call.mp3 \\\n --term \"Acme|akmee,ack me|the company name\" --correct","hierarchy":{"lvl0":"Cli","lvl1":"CLI Command Reference","lvl2":"Repair names the engine mis-hears, guarded by the decision model, then an LLM rewrite","lvl3":""}},
|
|
791
|
+
{"objectID":"b31b0e61a350991d17e5132d18175066de5f56dc7d988b36b8e0b5cb48508153","title":"Dictionary from a file, rewrite on a chosen text model, Indic words in Latin letters","url":"/docs/cli/commands#dictionary-from-a-file-rewrite-on-a-chosen-text-model-indic-words-in-latin-letters","content":"npx @juspay/neurolink transcribe standup.m4a --dictionary terms.json \\\n --rewrite-provider --rewrite-model --transliterate latin","hierarchy":{"lvl0":"Cli","lvl1":"CLI Command Reference","lvl2":"Dictionary from a file, rewrite on a chosen text model, Indic words in Latin letters","lvl3":""}},
|
|
792
|
+
{"objectID":"1be18d2297b7f2cbdfb3ecf6f9b69f32fa423a0940532a1c46f190b13dbc94c9","title":"Subtitles from word timings","url":"/docs/cli/commands#subtitles-from-word-timings","content":"npx @juspay/neurolink transcribe talk.wav --word-timestamps --format srt > talk.srt","hierarchy":{"lvl0":"Cli","lvl1":"CLI Command Reference","lvl2":"Subtitles from word timings","lvl3":""}},
|
|
793
|
+
{"objectID":"3d465514bba6c2bf10f077a834cdf069f92233b511715e796df6ced03cd48cf8","title":"Live text from a file or a pipe, through transcribeStream()","url":"/docs/cli/commands#live-text-from-a-file-or-a-pipe-through-transcribestream","content":"cat clip.wav | npx @juspay/neurolink transcribe - --stream\n\n\n| Option | Description |\n| ------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| file | Audio file (WAV, MP3, M4A, OGG/Opus, WebM, FLAC, MP4, raw PCM16), or - for stdin. |\n| --provider | STT provider. Default: NEUROLINKSTTPROVIDER, then the first configured one, then the local engine. |\n| --model | Model of that provider. Default: NEUROLINKSTTMODEL (only when the provider also came from the environment). |\n| --language | Language code, or auto to let the engine detect it. Default: NEUROLINKSTTLANGUAGE, else auto. |\n| --diarize | Label speakers, on providers that diarize. |\n| --word-timestamps | Request word-level timings. |\n| --prompt | Context prompt for engines that bias on one; dictionary terms are appended. |\n| --dictionary | JSON array of { \"term\", \"heardAs\", \"meaning\" } entries.","hierarchy":{"lvl0":"Cli","lvl1":"CLI Command Reference","lvl2":"Live text from a file or a pipe, through transcribeStream()","lvl3":""}},
|
|
788
794
|
{"objectID":"c8d0c91cc9a6c43b1ffaf7778b1b847d0082ea6ac5b07bef70f901690fab3f2d","title":"batch <file>","url":"/docs/cli/commands#batch","content":"Process multiple prompts from a file in sequence.\n\n`bash","hierarchy":{"lvl0":"Cli","lvl1":"CLI Command Reference","lvl2":"batch <file>","lvl3":""}},
|
|
789
795
|
{"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":""}},
|
|
790
796
|
{"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":""}},
|
|
@@ -2494,11 +2500,11 @@
|
|
|
2494
2500
|
{"objectID":"a6a33dbdaa9f09d86a62e1a043a4583f57c1ced7b2e786830b73ed431d5faa15","title":"Or run all tests","url":"/docs/examples/mcp-tool-blocking-example#or-run-all-tests","content":"pnpm test\n`","hierarchy":{"lvl0":"Examples","lvl1":"Tool Blocking Feature Example","lvl2":"Or run all tests","lvl3":""}},
|
|
2495
2501
|
{"objectID":"4063c82ce53cbddddb37aaa3f2c4e6cda3979f7c42245ab87dd1f9b32d952ebf","title":"Notes","url":"/docs/examples/mcp-tool-blocking-example#notes","content":"Blocked tools are filtered during discovery, so they won't appear in the list of available tools\nAttempts to execute blocked tools will throw an error with a clear message\nThe blockedTools array can be empty or omitted if no tools need to be blocked\nTool names are case-sensitive and must match exactly","hierarchy":{"lvl0":"Examples","lvl1":"Tool Blocking Feature Example","lvl2":"Notes","lvl3":""}},
|
|
2496
2502
|
{"objectID":"5341e63ac43674fa9af2ce7263aeda1cd91585d86e51d5d3a89b1f372e615a1c","title":"Use Cases","url":"/docs/examples/use-cases","content":"This page has moved to Real-World Use Cases.","hierarchy":{"lvl0":"Examples","lvl1":"Use Cases","lvl2":"","lvl3":""}},
|
|
2497
|
-
{"objectID":"663b4543baa0f126dd73ee25ad1e8111b108f06eec1f22e84f8cc195c99b00e8","title":"Audio Input & Transcription Guide","url":"/docs/features/audio-input","content":"Audio Input & Voice Conversations Guide\n\nNeuroLink provides comprehensive audio input capabilities, enabling real-time voice conversations with AI models. This guide covers currently available features, audio specifications, and upcoming enhancements.\n\nOverview\n\nCurrently Available\n\nNeuroLink supports the following audio capabilities today:\nReal-time voice conversations via Gemini Live (Google AI Studio)\nText-to-Speech (TTS) output via Google Cloud TTS, OpenAI TTS, ElevenLabs, and Azure TTS\nSpeech-to-Text (STT) via generate() and stream() options (Whisper/OpenAI STT, Google STT, Deepgram, Azure STT, ElevenLabs Scribe)\nWebSocket-based voice streaming for web applications\nBidirectional audio - speak and hear AI responses in real-time\n\nPlanned\n\nThe following features are planned for future releases:\nCLI commands: neurolink audio transcribe, neurolink audio analyze, neurolink audio summarize\nCLI commands: neurolink voice chat, neurolink voice demo\nCross-provider audio support (Anthropic, AWS Transcribe still planned)\nFile-based audio input processing\n\nProvider Support Matrix\n\n| Provider | Real-time Voice | TTS Output | Audio Transcription
|
|
2503
|
+
{"objectID":"663b4543baa0f126dd73ee25ad1e8111b108f06eec1f22e84f8cc195c99b00e8","title":"Audio Input & Transcription Guide","url":"/docs/features/audio-input","content":"Audio Input & Voice Conversations Guide\n\nNeuroLink provides comprehensive audio input capabilities, enabling real-time voice conversations with AI models. This guide covers currently available features, audio specifications, and upcoming enhancements.\n\nOverview\n\nCurrently Available\n\nNeuroLink supports the following audio capabilities today:\nReal-time voice conversations via Gemini Live (Google AI Studio)\nText-to-Speech (TTS) output via Google Cloud TTS, OpenAI TTS, ElevenLabs, and Azure TTS\nSpeech-to-Text (STT) via generate() and stream() options (Whisper/OpenAI STT, Google STT, Deepgram, Azure STT, ElevenLabs Scribe)\nWebSocket-based voice streaming for web applications\nBidirectional audio - speak and hear AI responses in real-time\n\nPlanned\n\nThe following features are planned for future releases:\nCLI commands: neurolink audio transcribe, neurolink audio analyze, neurolink audio summarize\nCLI commands: neurolink voice chat, neurolink voice demo\nCross-provider audio support (Anthropic, AWS Transcribe still planned)\nFile-based audio input processing\n\nProvider Support Matrix\n\n| Provider | Real-time Voice | TTS Output | Audio Transcription | Status |\n| -------------------- | --------------- | ---------- | ---------------------------- | ---------------- |\n| Google AI Studio | Yes | Yes | Yes (via Google STT) | Production Ready |\n| Google Vertex AI | Planned | Yes | Yes (via Google STT) | Available |\n| OpenAI | Planned | Yes | Yes (via Whisper/OpenAI STT) | Available |\n| Deepgram | Planned | No | Yes (speaker labels) | Available |\n| Azure | Planned | Yes | Yes (via Azure STT) | Available |\n| ElevenLabs | No | Yes | Yes (Scribe, speaker labels) | Available |\n| Self-hosted | No | No | Yes (OpenAI-compatible) | Available |\n| Anthropic | Planned | Planned | Planned | Planned |\n| AWS Bedrock | Planned | Planned | Planned | Planned |\n\nSupported Model for Real-time Voice:\n\n| Model | Provider | Capabilities |\n| ---------------------------------------------- | --------- | -------------------------------- |\n| gemini-2.5-flash-preview-native-audio-dialog | Google AI | Bidirectional audio, low latency |\n\nQuick Start: Real-Time Voice (SDK)\n\nReal-time voice conversations are available through the SDK using Gemini Live's native audio dialog model.\n\nPrerequisites\n\nBasic Real-time Voice Streaming\n\nComplete Voice Session Example\n\nQuick Start: TTS Integration\n\nNeuroLink provides Text-to-Speech output via Google Cloud TTS. TTS can be combined with any text generation.\n\nCLI Usage\n\nSDK Usage\n\nFor comprehensive TTS documentation, see the TTS Integration Guide.\n\nVoice Demo Example\n\nNeuroLink includes a complete voice demo application demonstrating real-time bidirectional audio conversations.\n\nLocation\n\nRunning the Demo\n\nThe demo will:\nStart a WebSocket server on port 5175 (or next available port)\nOpen your browser automatically to the demo interface\nAllow you to speak and receive real-time AI audio responses\n\nDemo Architecture\n\nKey Code from Voice Demo Server\n\nSpeaker Labels (Diarization)\n\nAsk for speaker labels with speakerDiarization: true (the documented alias\ndiarization: true works too). Providers that diarize: deepgram,\ngoogle-stt, elevenlabs-stt (Scribe), and any OpenAI-compatible endpoint\nthat labels its segments (see the next section). Whatever the provider,\nthe result has the same shape:\nsegments[] is a list of speaker turns: consecutive words from one\n speaker, with speaker, startTime, endTime and text.\nspeakers[] lists the distinct labels in order of first appearance.\nProviders that label words rather than segments (Deepgram, Google, Scribe)\n have their turns derived by STTProcessor, so callers never see the\n per-provider difference. A provider that returns its own speaker-labelled\n segments (the diarization sidecar) is passed through untouched.\nCLI: neurolink generate --stt --input-audio meeting.wav --stt-provider elevenlabs-stt --stt-diarize.\n\nElevenLabs Scribe (elevenlabs-stt, alias scribe) shares\nELEVENLABS_API_KEY with the TTS handler. It detects the language itself,\ntranscribes code-switched speech (Hinglish comes back romanized unless a\nlanguage: \"hi\" hint asks for Devanagari), and accepts audio or video\ncontainers. Options: model (scribe_v2 default), tagAudioEvents.\n\nSelf-hosted STT (OpenAI-compatible endpoints)\n\nThe whisper handler talks to any server that implements OpenAI's\n/audio/transcriptions — vLLM serving an ASR model such as Qwen3-ASR,\nLiteLLM, or NeuroLink's diarization sidecar (NVIDIA Nemotron-3 diarization in\nfront of a local ASR). Point it at the server and pass the model name per\n","hierarchy":{"lvl0":"Features","lvl1":"Audio Input & Transcription Guide","lvl2":"","lvl3":""}},
|
|
2498
2504
|
{"objectID":"a32f77567943264cd3a10e47531543e59494110d83eacb73e06c777b325a954d","title":"Audio Input & Voice Conversations Guide","url":"/docs/features/audio-input#audio-input-voice-conversations-guide","content":"NeuroLink provides comprehensive audio input capabilities, enabling real-time voice conversations with AI models. This guide covers currently available features, audio specifications, and upcoming enhancements.","hierarchy":{"lvl0":"Features","lvl1":"Audio Input & Transcription Guide","lvl2":"Audio Input & Voice Conversations Guide","lvl3":""}},
|
|
2499
2505
|
{"objectID":"e6130b0676f57a7cf79b67937961a503147a86874d2071c61df0cd0c5983606b","title":"Currently Available","url":"/docs/features/audio-input#currently-available","content":"NeuroLink supports the following audio capabilities today:\nReal-time voice conversations via Gemini Live (Google AI Studio)\nText-to-Speech (TTS) output via Google Cloud TTS, OpenAI TTS, ElevenLabs, and Azure TTS\nSpeech-to-Text (STT) via generate() and stream() options (Whisper/OpenAI STT, Google STT, Deepgram, Azure STT, ElevenLabs Scribe)\nWebSocket-based voice streaming for web applications\nBidirectional audio - speak and hear AI responses in real-time","hierarchy":{"lvl0":"Features","lvl1":"Audio Input & Transcription Guide","lvl2":"Currently Available","lvl3":""}},
|
|
2500
2506
|
{"objectID":"a323022725e083a1bd3cc081f0bb30671115674fd3059d81a59a1e5748bf2e40","title":"Planned","url":"/docs/features/audio-input#planned","content":"The following features are planned for future releases:\nCLI commands: neurolink audio transcribe, neurolink audio analyze, neurolink audio summarize\nCLI commands: neurolink voice chat, neurolink voice demo\nCross-provider audio support (Anthropic, AWS Transcribe still planned)\nFile-based audio input processing","hierarchy":{"lvl0":"Features","lvl1":"Audio Input & Transcription Guide","lvl2":"Planned","lvl3":""}},
|
|
2501
|
-
{"objectID":"8d491157b4f86d94b665dc67602d242028afbb11311c376e92d5fb72180b9dd2","title":"Provider Support Matrix","url":"/docs/features/audio-input#provider-support-matrix","content":"| Provider | Real-time Voice | TTS Output | Audio Transcription
|
|
2507
|
+
{"objectID":"8d491157b4f86d94b665dc67602d242028afbb11311c376e92d5fb72180b9dd2","title":"Provider Support Matrix","url":"/docs/features/audio-input#provider-support-matrix","content":"| Provider | Real-time Voice | TTS Output | Audio Transcription | Status |\n| -------------------- | --------------- | ---------- | ---------------------------- | ---------------- |\n| Google AI Studio | Yes | Yes | Yes (via Google STT) | Production Ready |\n| Google Vertex AI | Planned | Yes | Yes (via Google STT) | Available |\n| OpenAI | Planned | Yes | Yes (via Whisper/OpenAI STT) | Available |\n| Deepgram | Planned | No | Yes (speaker labels) | Available |\n| Azure | Planned | Yes | Yes (via Azure STT) | Available |\n| ElevenLabs | No | Yes | Yes (Scribe, speaker labels) | Available |\n| Self-hosted | No | No | Yes (OpenAI-compatible) | Available |\n| Anthropic | Planned | Planned | Planned | Planned |\n| AWS Bedrock | Planned | Planned | Planned | Planned |\n\nSupported Model for Real-time Voice:\n\n| Model | Provider | Capabilities |\n| ---------------------------------------------- | --------- | -------------------------------- |\n| gemini-2.5-flash-preview-native-audio-dialog | Google AI | Bidirectional audio, low latency |","hierarchy":{"lvl0":"Features","lvl1":"Audio Input & Transcription Guide","lvl2":"Provider Support Matrix","lvl3":""}},
|
|
2502
2508
|
{"objectID":"675ff9de750e2e6e6eabfd9b19d8e2107d5c403305242ddd9e306f98b799635e","title":"Quick Start: Real-Time Voice (SDK)","url":"/docs/features/audio-input#quick-start-real-time-voice-sdk","content":"Real-time voice conversations are available through the SDK using Gemini Live's native audio dialog model.","hierarchy":{"lvl0":"Features","lvl1":"Audio Input & Transcription Guide","lvl2":"Quick Start: Real-Time Voice (SDK)","lvl3":""}},
|
|
2503
2509
|
{"objectID":"19f0a0ab6d49a5c80fc761412dcedc3e85257f38aed0542bd0561f58d95febdf","title":"Prerequisites","url":"/docs/features/audio-input#prerequisites","content":"`bash","hierarchy":{"lvl0":"Features","lvl1":"Audio Input & Transcription Guide","lvl2":"Prerequisites","lvl3":""}},
|
|
2504
2510
|
{"objectID":"73a73af8929aec5bebdfa114ba2a35ba5f7d8b0c78bfbdd21131132020de7368","title":"OR","url":"/docs/features/audio-input#or","content":"`","hierarchy":{"lvl0":"Features","lvl1":"Audio Input & Transcription Guide","lvl2":"OR","lvl3":""}},
|
|
@@ -2514,6 +2520,8 @@
|
|
|
2514
2520
|
{"objectID":"017e78eebc6a69729c893274c9a30036263b3957b48abbaf03171d56490c6636","title":"Navigate to the project root","url":"/docs/features/audio-input#navigate-to-the-project-root","content":"cd /path/to/neurolink","hierarchy":{"lvl0":"Features","lvl1":"Audio Input & Transcription Guide","lvl2":"Navigate to the project root","lvl3":""}},
|
|
2515
2521
|
{"objectID":"75a8cd2dbab534bd6ded4728bbf51307b78a1839f6f4c144049d24dab3ae4b96","title":"Build the SDK first","url":"/docs/features/audio-input#build-the-sdk-first","content":"pnpm run build","hierarchy":{"lvl0":"Features","lvl1":"Audio Input & Transcription Guide","lvl2":"Build the SDK first","lvl3":""}},
|
|
2516
2522
|
{"objectID":"74e42025ad34baabfd6cde5e784309f574b3b13c2cc5d0412552cb87fcec0f58","title":"Run the demo server","url":"/docs/features/audio-input#run-the-demo-server","content":"node examples/voice-demo/server.mjs\n`\n\nThe demo will:\nStart a WebSocket server on port 5175 (or next available port)\nOpen your browser automatically to the demo interface\nAllow you to speak and receive real-time AI audio responses","hierarchy":{"lvl0":"Features","lvl1":"Audio Input & Transcription Guide","lvl2":"Run the demo server","lvl3":""}},
|
|
2523
|
+
{"objectID":"5346fe675b5248afaca8ec1f73b83d26051410c6af433b7631bbbb7927e8e4bf","title":"Speaker Labels (Diarization)","url":"/docs/features/audio-input#speaker-labels-diarization","content":"Ask for speaker labels with speakerDiarization: true (the documented alias\ndiarization: true works too). Providers that diarize: deepgram,\ngoogle-stt, elevenlabs-stt (Scribe), and any OpenAI-compatible endpoint\nthat labels its segments (see the next section). Whatever the provider,\nthe result has the same shape:\nsegments[] is a list of speaker turns: consecutive words from one\n speaker, with speaker, startTime, endTime and text.\nspeakers[] lists the distinct labels in order of first appearance.\nProviders that label words rather than segments (Deepgram, Google, Scribe)\n have their turns derived by STTProcessor, so callers never see the\n per-provider difference. A provider that returns its own speaker-labelled\n segments (the diarization sidecar) is passed through untouched.\nCLI: neurolink generate --stt --input-audio meeting.wav --stt-provider elevenlabs-stt --stt-diarize.\n\nElevenLabs Scribe (elevenlabs-stt, alias scribe) shares\nELEVENLABS_API_KEY with the TTS handler. It detects the language itself,\ntranscribes code-switched speech (Hinglish comes back romanized unless a\nlanguage: \"hi\" hint asks for Devanagari), and accepts audio or video\ncontainers. Options: model (scribe_v2 default), tagAudioEvents.","hierarchy":{"lvl0":"Features","lvl1":"Audio Input & Transcription Guide","lvl2":"Speaker Labels (Diarization)","lvl3":""}},
|
|
2524
|
+
{"objectID":"24141cb28b9fab384b193a15e7a8b43a356a049a40845aed971431cfa9902cee","title":"Self-hosted STT (OpenAI-compatible endpoints)","url":"/docs/features/audio-input#self-hosted-stt-openai-compatible-endpoints","content":"The whisper handler talks to any server that implements OpenAI's\n/audio/transcriptions — vLLM serving an ASR model such as Qwen3-ASR,\nLiteLLM, or NeuroLink's diarization sidecar (NVIDIA Nemotron-3 diarization in\nfront of a local ASR). Point it at the server and pass the model name per\ncall:\n\nOr construct the handler directly when several endpoints coexist:\n\ndiarize and max_speakers (from speakerCount) are only sent to non-OpenAI\nendpoints, because OpenAI's own API rejects unknown fields. A speaker on a\nreturned segment, and a top-level speakers[], are surfaced as-is.","hierarchy":{"lvl0":"Features","lvl1":"Audio Input & Transcription Guide","lvl2":"Self-hosted STT (OpenAI-compatible endpoints)","lvl3":""}},
|
|
2517
2525
|
{"objectID":"d38c45c3e64a598935c9183b5a97988f9cbf0bf7662eee96eadbc8e16d8218d8","title":"Input Audio Format","url":"/docs/features/audio-input#input-audio-format","content":"| Parameter | Value | Notes |\n| --------------- | ------------------- | ------------------------------------ |\n| Encoding | PCM16LE | 16-bit signed integer, little-endian |\n| Sample Rate | 16,000 Hz | 16 kHz mono |\n| Channels | 1 (mono) | Stereo not supported in Phase 1 |\n| Frame Size | 20-60ms recommended | ~320-960 samples per frame |\n| Byte Order | Little-endian | Intel/ARM standard |","hierarchy":{"lvl0":"Features","lvl1":"Audio Input & Transcription Guide","lvl2":"Input Audio Format","lvl3":""}},
|
|
2518
2526
|
{"objectID":"971b6dc610698a4f557f37772279796aad8c698ad175ce4e0331dd6843e29e21","title":"Output Audio Format","url":"/docs/features/audio-input#output-audio-format","content":"| Parameter | Value | Notes |\n| --------------- | ------------- | ------------------------------------ |\n| Encoding | PCM16LE | 16-bit signed integer, little-endian |\n| Sample Rate | 24,000 Hz | 24 kHz mono |\n| Channels | 1 (mono) | Single channel output |\n| Byte Order | Little-endian | Intel/ARM standard |","hierarchy":{"lvl0":"Features","lvl1":"Audio Input & Transcription Guide","lvl2":"Output Audio Format","lvl3":""}},
|
|
2519
2527
|
{"objectID":"7d77a11777da38abc477ca451f47b06a9e244c9134b4ae04725f6012f010813c","title":"Converting Audio Formats","url":"/docs/features/audio-input#converting-audio-formats","content":"From Float32 to PCM16LE (for input):\n\nFrom PCM16LE to Float32 (for output playback):","hierarchy":{"lvl0":"Features","lvl1":"Audio Input & Transcription Guide","lvl2":"Converting Audio Formats","lvl3":""}},
|
|
@@ -4520,6 +4528,22 @@
|
|
|
4520
4528
|
{"objectID":"19352c9bf82d208bbd76e4303e3e35ac7d4f7497562a4f1ee006d8cf1fae5f6b","title":"The wording that made this work: a measured A/B result","url":"/docs/features/tool-routing-decision-model#the-wording-that-made-this-work-a-measured-ab-result","content":"The first phrasing tried was the obvious one: \"answering this request will\nrequire calling at least one tool from this server,\" with false meaning\n\"this server is unrelated, OR the request needs no tool at all.\" Measured\nagainst a 10-request × 5-server labelled set, it separated correctly but\nweakly — unrelated servers averaged p = 0.31 and reached as high as\n0.80, so at the 0.6 drop bar only 12 of 39 unneeded servers were\nactually dropped.\n\nThree changes fixed it: naming the server explicitly, asking in the present\ntense about what carrying out the request involves rather than what\n\"will require,\" and splitting the bundled false criterion (which was\nreally two separate claims joined by \"or\") into one single claim. That\nmoved unrelated servers to a mean of p = 0.03 with a maximum of 0.35\n— 37 of 39 dropped at the same 0.6 bar, still with zero wrong drops.\n\nThe lesson generalises past this one question: a decision model reads\nliterally, and an \"or\" in a criterion is two questions wearing one coat. Each\nhalf of a compound criterion pulls the answer toward the middle whenever\nonly one half is true, which is exactly the muddy, hard-to-gate signal the\nfirst version produced.","hierarchy":{"lvl0":"Features","lvl1":"Tool / MCP routing by decision model","lvl2":"The wording that made this work: a measured A/B result","lvl3":""}},
|
|
4521
4529
|
{"objectID":"9c9af1c1ff58051674501cb10c371fdcf50758c935a2dfa168df9719969bb7af","title":"What this is bad at","url":"/docs/features/tool-routing-decision-model#what-this-is-bad-at","content":"It reasons about servers, not individual tools. The unit of decision is\n a whole MCP server; a server with twenty tools where the request needs one\n is kept or dropped as a unit, not tool-by-tool.\nThe description quality bounds the question quality. A server with no\n declared description falls back to a comma-joined list of its own tool\n names, which carries much less signal than a well-written one-line\n description — the wording fix above only helps once the server's own text\n is legible to a literal reader.\nA close call still resolves to \"keep.\" There is no partial exclusion;\n anything from a coin flip up to just under 0.6 confidence is treated\n identically to a confident true.\nIt shares the base model's general limits — literal reading, no\n arithmetic, accuracy sensitive to a noisy or oversized state — all\n described in\n what decide is bad at.\nThe query is untrusted input sent as state, and this module does not\n sanitize it. The blast radius is deliberately bounded instead: server ids\n are never read back off the wire (answers are matched by position, not by\n name), so the worst a crafted query can do is keep more already-registered\n servers than necessary — it cannot register a server that wasn't already\n configured.","hierarchy":{"lvl0":"Features","lvl1":"Tool / MCP routing by decision model","lvl2":"What this is bad at","lvl3":""}},
|
|
4522
4530
|
{"objectID":"b55a36dccb54a184ce24fa850942a8f5455cbe7f4391a23fc94f326aebeae19e","title":"See also","url":"/docs/features/tool-routing-decision-model#see-also","content":"The decide inference type\nModel routing with a decision model\nRelevance-driven compaction","hierarchy":{"lvl0":"Features","lvl1":"Tool / MCP routing by decision model","lvl2":"See also","lvl3":""}},
|
|
4531
|
+
{"objectID":"868aff1102e3175cc67c89cc4d5bc4a20b86b1666dcd8d010b976d4b16364ece","title":"The transcribe inference type","url":"/docs/features/transcribe","content":"The transcribe inference type\n\nNeuroLink has four inference types. transcribe is the one that starts from audio:\n\n| Type | Call | Produces |\n| ---------------- | --------------------------------------------------- | -------------------------------- |\n| generate | neurolink.generate() | text |\n| stream | neurolink.stream() | text, incrementally |\n| decide | neurolink.decide() | typed judgements |\n| transcribe | neurolink.transcribe() / transcribeStream() | text from audio, with timing |\n\nIt runs through any registered speech-to-text (STT) engine and adds the layers\nthat make an engine usable on real speech: a dictionary of names and\njargon, a correction pass guarded by the decision model and finished by an\nLLM rewrite, a second-opinion engine, a fallback engine for audio the\nfirst one cannot read, and client-side streaming for engines that only\ntake whole files.\n\nZero configuration. With no STT provider configured, transcribe() uses\nWhistle, the built-in local engine: it runs on this machine, needs no key\nand no network; its model files (about 18 MB) ship inside the package.\nWhistle reads English, German, French, Spanish, Italian, Dutch and Polish; for\nother languages, accents, noisy rooms or heavy jargon, configure a cloud or\nself-hosted engine, or add a dictionary and correction.\n\nSDK\n\naudio accepts bytes (Buffer, ArrayBuffer, Uint8Array), a path, a\nfile:// URL or an http(s):// URL. The container is inferred from the path\nor the bytes; pass format (\"wav\", \"mp3\", \"m4a\", \"ogg\", \"opus\",\n\"webm\", \"flac\", \"mp4\", \"pcm16\" …) for a buffer it cannot be read from.\n\nOptions\n\n| Option | Meaning |\n| ---------------- | --------------------------------------------------------------------------------------------------------------------------------- |\n| provider | STT provider name or alias. Default: NEUROLINK_STT_PROVIDER, then the first configured provider, then Whistle. |\n| model | Model of that provider. Default: NEUROLINK_STT_MODEL, only when the provider also came from the environment. |\n| language | Language code or locale, or \"auto\". Default: NEUROLINK_STT_LANGUAGE, else the engine detects it. |\n| prompt | Context prompt for engines that bias on one; dictionary terms are appended to it. |\n| diarization | Label speakers, on engines that diarize. |\n| wordTimestamps | Ask for word-level timings. |\n| dictionary | Names and jargon, see Dictionary. |\n| correction | The correction layer, see Correction. |\n| fallback | { provider, model?, when? }, see Fallback. |\n| streaming | Tuning for transcribeStream(), see Streaming. |\n| timeoutMs | Whole-call timeout. |\n| credentials | Per-call credentials; the stt slice (credentials.stt.whisper.apiKey, credentials.stt.deepgram.apiKey …) beats the env vars. |\n\nResult\n\nTranscribeResult is the engine's STTResult (text, confidence,\nlanguage, duration, words, segments, speakers, metadata) plus what\nthe layers did:\n\n| Field | Meaning |\n| ------------------ | -------------------------------------------------------------------------------------------------------- |\n| raw | The engine's text before any correction. |\n| text | The final text — the corrected text when correction changed it, else raw. |\n| corrected | Present only when correction changed the text. |\n| languageDetected | false when the engine reported a low language-detection score. |\n| languageScores | Candidate languages with the engine's own scores, where it reports them. |\n| decisions | One record per dictionary candidate: what was heard, the ter","hierarchy":{"lvl0":"Features","lvl1":"The transcribe inference type","lvl2":"","lvl3":""}},
|
|
4532
|
+
{"objectID":"022bf9f0cc0df8253fa229c043dc4762f656ee2c7d69e782484cb8425973befb","title":"The transcribe inference type","url":"/docs/features/transcribe#the-transcribe-inference-type","content":"NeuroLink has four inference types. transcribe is the one that starts from audio:\n\n| Type | Call | Produces |\n| ---------------- | --------------------------------------------------- | -------------------------------- |\n| generate | neurolink.generate() | text |\n| stream | neurolink.stream() | text, incrementally |\n| decide | neurolink.decide() | typed judgements |\n| transcribe | neurolink.transcribe() / transcribeStream() | text from audio, with timing |\n\nIt runs through any registered speech-to-text (STT) engine and adds the layers\nthat make an engine usable on real speech: a dictionary of names and\njargon, a correction pass guarded by the decision model and finished by an\nLLM rewrite, a second-opinion engine, a fallback engine for audio the\nfirst one cannot read, and client-side streaming for engines that only\ntake whole files.\n\nZero configuration. With no STT provider configured, transcribe() uses\nWhistle, the built-in local engine: it runs on this machine, needs no key\nand no network; its model files (about 18 MB) ship inside the package.\nWhistle reads English, German, French, Spanish, Italian, Dutch and Polish; for\nother languages, accents, noisy rooms or heavy jargon, configure a cloud or\nself-hosted engine, or add a dictionary and correction.","hierarchy":{"lvl0":"Features","lvl1":"The transcribe inference type","lvl2":"The transcribe inference type","lvl3":""}},
|
|
4533
|
+
{"objectID":"1894ce4204cb67336e3ed634535149704b8a702e2b0c6e8568f92a6868ca762a","title":"SDK","url":"/docs/features/transcribe#sdk","content":"audio accepts bytes (Buffer, ArrayBuffer, Uint8Array), a path, a\nfile:// URL or an http(s):// URL. The container is inferred from the path\nor the bytes; pass format (\"wav\", \"mp3\", \"m4a\", \"ogg\", \"opus\",\n\"webm\", \"flac\", \"mp4\", \"pcm16\" …) for a buffer it cannot be read from.","hierarchy":{"lvl0":"Features","lvl1":"The transcribe inference type","lvl2":"SDK","lvl3":""}},
|
|
4534
|
+
{"objectID":"73fad0a7f04adcf37c338e67523cf8f11b0c64c73078bd4e477164612f62f770","title":"Options","url":"/docs/features/transcribe#options","content":"| Option | Meaning |\n| ---------------- | --------------------------------------------------------------------------------------------------------------------------------- |\n| provider | STT provider name or alias. Default: NEUROLINK_STT_PROVIDER, then the first configured provider, then Whistle. |\n| model | Model of that provider. Default: NEUROLINK_STT_MODEL, only when the provider also came from the environment. |\n| language | Language code or locale, or \"auto\". Default: NEUROLINK_STT_LANGUAGE, else the engine detects it. |\n| prompt | Context prompt for engines that bias on one; dictionary terms are appended to it. |\n| diarization | Label speakers, on engines that diarize. |\n| wordTimestamps | Ask for word-level timings. |\n| dictionary | Names and jargon, see Dictionary. |\n| correction | The correction layer, see Correction. |\n| fallback | { provider, model?, when? }, see Fallback. |\n| streaming | Tuning for transcribeStream(), see Streaming. |\n| timeoutMs | Whole-call timeout.","hierarchy":{"lvl0":"Features","lvl1":"The transcribe inference type","lvl2":"Options","lvl3":""}},
|
|
4535
|
+
{"objectID":"25734eb9746d69fee91c94beaab37ba0433ce9d1bc944c78ac54b14ddaf10f83","title":"Result","url":"/docs/features/transcribe#result","content":"TranscribeResult is the engine's STTResult (text, confidence,\nlanguage, duration, words, segments, speakers, metadata) plus what\nthe layers did:\n\n| Field | Meaning |\n| ------------------ | -------------------------------------------------------------------------------------------------------- |\n| raw | The engine's text before any correction. |\n| text | The final text — the corrected text when correction changed it, else raw. |\n| corrected | Present only when correction changed the text. |\n| languageDetected | false when the engine reported a low language-detection score. |\n| languageScores | Candidate languages with the engine's own scores, where it reports them. |\n| decisions | One record per dictionary candidate: what was heard, the term, term or literal, and the probability. |\n| engine | { provider, model, fallbackUsed?, secondOpinion? }. |\n| timings | transcribeMs, secondOpinionMs, decideMs, rewriteMs, correctionMs, totalMs. |\n| steps | A readable trail: \"dictionary 2/2\", \"rewrite timed out · kept text\" … |","hierarchy":{"lvl0":"Features","lvl1":"The transcribe inference type","lvl2":"Result","lvl3":""}},
|
|
4536
|
+
{"objectID":"cfe99c9441a998e039ecbe92d247fb981326eb5e5a56e51aa7abb49fd4662663","title":"Providers and environment","url":"/docs/features/transcribe#providers-and-environment","content":"| Provider (aliases) | Configured by | Notes |\n| --------------------------------------------- | ------------------------------------------------------------------------------------------- | ------------------------------------------------------- |\n| whisper (openai-stt, openai-compatible) | OPENAI_STT_API_KEY or OPENAI_API_KEY; OPENAI_STT_BASE_URL for another server | Any OpenAI-compatible /audio/transcriptions endpoint. |\n| deepgram | DEEPGRAM_API_KEY | Native streaming. |\n| elevenlabs-stt (scribe, elevenlabs) | ELEVENLABS_API_KEY | |\n| google-stt | GOOGLE_API_KEY, GOOGLE_AI_API_KEY, GEMINI_API_KEY or GOOGLE_APPLICATION_CREDENTIALS | |\n| azure-stt | AZURE_SPEECH_KEY | |\n| whistle (local) | nothing | Built-in, local, always available. |\n\nThe order of that table is precedence: without provider or\nNEUROLINK_STT_PROVIDER, the first configured provider is used, and Whistle\nonly when none is.","hierarchy":{"lvl0":"Features","lvl1":"The transcribe inference type","lvl2":"Providers and environment","lvl3":""}},
|
|
4537
|
+
{"objectID":"1c83e72d0998d73b45f4a810514691aa3fb8979166eea4883ffe4bec728140d7","title":"Dictionary","url":"/docs/features/transcribe#dictionary","content":"A dictionary teaches the pipeline the words an engine cannot know — product\nnames, people's names, internal jargon — and how engines tend to mis-hear them:\n\n| Field | Required | Use |\n| --------- | -------- | ------------------------------------------------------------------------------------------------- |\n| term | yes | The correct spelling, written exactly like this in the output. |\n| heardAs | no | Mis-hearings, in any script. Each one found in a transcript becomes a candidate for replacement. |\n| meaning | no | What the term means, given to the decision model and the rewrite so they can tell term from word. |\n\nThe dictionary is used three ways: its terms are sent to engines that take a\nprompt or vocabulary, each heardAs found in the transcript becomes a\ncandidate repair, and the whole list is given to the rewrite model.","hierarchy":{"lvl0":"Features","lvl1":"The transcribe inference type","lvl2":"Dictionary","lvl3":""}},
|
|
4538
|
+
{"objectID":"bb0871357646359062274d9ec5e47b41771d77b2c86ccd2d29cf96f43a538b64","title":"Correction","url":"/docs/features/transcribe#correction","content":"Correction runs on a finished transcript (or on each final utterance when\nstreaming), in two stages:\nDictionary, guarded. Each candidate is put to the decision model as one\n question — did the speaker mean the term, or the ordinary word? — so a\n product name never rewrites the everyday word it sounds like. All\n candidates go in one tryDecide() call. With no decision provider, on a\n timeout (decideTimeoutMs, default 4000) or on any error, the dictionary is\n applied as is. guard: \"none\" always applies it.\nRewrite. A text model fixes spelling, punctuation and capitalisation,\n writes dictionary terms correctly, reconciles a second opinion and writes\n Indic-script words in Latin letters the way people type them (Hinglish,\n Tanglish …) — never translating them. transliterate: \"native\" keeps the\n original script. rewrite: false stops after the dictionary.\n\n| Option | Default | Meaning |\n| ----------------- | ----------------------------------------------------------------------------------- | -------------------------------------------------------------------------- |\n| enabled | on with a dictionary or any correction object, unless it is only rewrite: false | Run the layer at all. |\n| guard | \"decide\" | \"decide\" asks the decision model per candidate; \"none\" always applies. |\n| decideTimeoutMs | 4000 | Guard timeout. |\n| rewrite | the instance's default text provider | { provider?, model?, timeoutMs? } (timeout default 12000), or false.","hierarchy":{"lvl0":"Features","lvl1":"The transcribe inference type","lvl2":"Correction","lvl3":""}},
|
|
4539
|
+
{"objectID":"7c55169273332aab63f54e94bae343516bd630e062d60a4d427d004b72ee287e","title":"Nothing is ever dropped","url":"/docs/features/transcribe#nothing-is-ever-dropped","content":"Every layer fails open, and none may lose words:\nA rewrite that drops more than maxDropRatio of the words is discarded and\n the dictionary-applied text is kept.\nA rewrite that times out, fails or returns nothing keeps the text it was\n given.\nA guard that times out or fails applies the dictionary as is.\nWhen streaming, a final pass that returns less than the live text keeps the\n live text, and an utterance no engine could read is reported as a silence\n event with its length rather than disappearing.\nraw always holds the engine's own text, so a caller can show or diff it.\n\nEach of those outcomes is written to steps, so a degraded path is visible\nrather than silent.","hierarchy":{"lvl0":"Features","lvl1":"The transcribe inference type","lvl2":"Nothing is ever dropped","lvl3":""}},
|
|
4540
|
+
{"objectID":"c0207627f5f88b7914c2fbe84a641879ece05ae20f7e2194a9f0bc29c24cfd65","title":"Fallback and second opinion","url":"/docs/features/transcribe#fallback-and-second-opinion","content":"Fallback takes the request (or, when streaming, the utterance) when the\n primary engine cannot read it: when defaults to [\"unsure\", \"empty\"] — a\n low language-detection score, or no text — and \"error\" adds engine\n failures. engine.fallbackUsed says when it ran.\nSecond opinion runs a second engine on the same audio in parallel; the\n rewrite reconciles the two transcripts, taking each language's words from the\n engine that reads it better. When the primary reports an unsure language,\n or no text, the second opinion's text leads. With rewrite: false that is\n all it does — there is no reconciliation without the rewrite.","hierarchy":{"lvl0":"Features","lvl1":"The transcribe inference type","lvl2":"Fallback and second opinion","lvl3":""}},
|
|
4541
|
+
{"objectID":"c903ddf3ec717cab3ff063e2bbb762f634ff09b05e5199c35d95283aba82f2f6","title":"Streaming","url":"/docs/features/transcribe#streaming","content":"Engines with a native stream use it; every other engine is streamed on the\nclient by a chunked adapter (an energy gate finds utterances, the current\nutterance is re-transcribed every intervalMs, and the prefix two passes agree\non is committed). streaming.mode: \"chunked\" forces the adapter.\n\n| Event | Carries |\n| ------------ | ---------------------------------------------------------------------------------------------- |\n| interim | The utterance's current text, split into committed (stable) and tail (may still change). |\n| language | The detected language and whether the engine was sure. |\n| final | The utterance's final text, segment and words, the engine, and whether the fallback took it. |\n| correcting | Partial text of the streamed rewrite. |\n| corrected | The corrected text, its raw, decisions, steps and timings. |\n| silence | An utterance no engine could read, with its length. |\n| error | A message, and recoverable: true when the stream carries on with the next utterance. |\n\nTuning (streaming): sampleRate (16000), endSilenceMs (750), intervalMs\n(900), softCutSeconds (16), maxUtteranceSeconds (28), onsetRms (0.006),\nprerollMs (350), minSpeechMs (250).","hierarchy":{"lvl0":"Features","lvl1":"The transcribe inference type","lvl2":"Streaming","lvl3":""}},
|
|
4542
|
+
{"objectID":"dee2eadc8e2a8712fe874329eae3639423ba11bb01631e21956abde47b3c7a3f","title":"CLI","url":"/docs/features/transcribe#cli","content":"The text output is the transcript, then a dim line with the engine, the\nlanguage (detected or unsure), the audio length, each layer's time and the\nsteps. --format json prints the whole TranscribeResult (one event per line\nwith --stream); --format srt|vtt builds subtitle cues from the segments, or\nfrom the word timings. --stream decodes the file to 16 kHz mono PCM16 (WAV in\nprocess, anything else through ffmpeg) and runs it through\ntranscribeStream(). Credentials are env-only, as for every CLI command. The\nfull flag table is in the CLI reference.","hierarchy":{"lvl0":"Features","lvl1":"The transcribe inference type","lvl2":"CLI","lvl3":""}},
|
|
4543
|
+
{"objectID":"3529c7278a91963a4075c1f8b880ed143b9276ea52089e84639f7c658685bae8","title":"Server routes","url":"/docs/features/transcribe#server-routes","content":"createAllRoutes() / registerAllRoutes() mount two routes on every adapter\n(Hono, Express, Fastify, Koa); createTranscribeRoutes(basePath, options)\nmounts them on their own. Neither accepts credentials: engines use the\nserver's own configuration, and a credentials field in a body is ignored.","hierarchy":{"lvl0":"Features","lvl1":"The transcribe inference type","lvl2":"Server routes","lvl3":""}},
|
|
4544
|
+
{"objectID":"081502d8e5cd1a1c0f622a7d6118ac263dc88c9d07d8ef96402d71b4957a7172","title":"POST /api/agent/transcribe","url":"/docs/features/transcribe#post-apiagenttranscribe","content":"JSON body with exactly one audio source:\n\n| Source | Rules |\n| ----------- | ------------------------------------------------------------------------------------------------------------------------------- |\n| audio | Base64, or a data:audio/...;base64, URL. Bounded by the adapter's JSON body limit (bodyParser.jsonLimit, 10 MB by default). |\n| audioUrl | An http(s) URL the server downloads through the SSRF guard (private addresses and redirects refused), capped in size. |\n| audioPath | A path on the server. Refused by default; allowed only inside the directories in transcribe.allowedAudioRoots. |\n\nThe response is the TranscribeResult, in the adapters' usual\n{ data, metadata } envelope. Errors use the usual error shape: 400 for an\ninvalid body or an unsupported provider, language or format, 403 for a refused\naudioPath, 413 for audio over the limit, 500 for an engine failure.","hierarchy":{"lvl0":"Features","lvl1":"The transcribe inference type","lvl2":"POST /api/agent/transcribe","lvl3":""}},
|
|
4545
|
+
{"objectID":"32a917bb7037f51d56da847c36cba9409b8d0a8951cf84aa19822c24a74b8f3f","title":"POST /v1/audio/transcriptions (OpenAI-compatible)","url":"/docs/features/transcribe#post-v1audiotranscriptions-openai-compatible","content":"multipart/form-data, the way OpenAI's API takes it, so an OpenAI client\npointed at http://<host>:<port>/v1 works unchanged:\n\n| Field | Meaning |\n| --------------------------- | ----------------------------------------------------------------------------------------------------------- |\n| file | The audio (required). Its name or type sets the container. |\n| model | <provider> or <provider>/<model>. OpenAI's own model names and auto mean the server's default engine. |\n| language, prompt | As in the SDK. |\n| response_format | json ({ \"text\" }, the default), text (plain text) or verbose_json. |\n| timestamp_granularities[] | word requests word timings. |\n| temperature | Accepted and ignored. |\n| provider | Extension: the STT provider, overriding model. |\n| diarize | Extension: true labels speakers. |\n| dictionary | Extension: the dictionary as a JSON string. |\n| correct | Extension: true runs the correction layer. |\n| fallback | Extension: fallback STT provider.","hierarchy":{"lvl0":"Features","lvl1":"The transcribe inference type","lvl2":"POST /v1/audio/transcriptions (OpenAI-compatible)","lvl3":""}},
|
|
4546
|
+
{"objectID":"7f04ab4c7a4895ae38a057d50ee353f51a84b959feb713784f0779b9d0319798","title":"WebSocket /v1/audio/transcriptions/stream","url":"/docs/features/transcribe#websocket-v1audiotranscriptionsstream","content":"The route adapters do not handle WebSocket upgrades, so the streaming endpoint\nattaches to the Node HTTP server you own:\nThe first frame is text: a JSON config with the JSON route's fields\n minus the audio, plus streaming (for example { \"language\": \"auto\",\n\"streaming\": { \"sampleRate\": 16000 } }).\nThen binary frames of PCM16LE mono audio at that sample rate.\nA text frame { \"type\": \"end\" }, or closing the socket, ends the audio.\n\nThe server sends one JSON text frame per TranscribeStreamEvent and closes\nwith 1000 when the stream is done; an invalid config gets an error event and\nclose code 1008.","hierarchy":{"lvl0":"Features","lvl1":"The transcribe inference type","lvl2":"WebSocket /v1/audio/transcriptions/stream","lvl3":""}},
|
|
4523
4547
|
{"objectID":"499945493bd6604fe9de0b7511127a8f248c00e05724562e9c6c1cd6bf63aa97","title":"Text-to-Speech (TTS) Integration Guide","url":"/docs/features/tts","content":"Text-to-Speech (TTS) Integration Guide\n\nNeuroLink provides integrated Text-to-Speech (TTS) capabilities, allowing you to generate high-quality audio from text prompts or AI-generated responses. This feature is perfect for voice assistants, accessibility features, narration, podcasts, and more.\n\nOverview\n\nKey Features:\nMultiple providers - Google Cloud TTS, OpenAI TTS, ElevenLabs, Azure TTS, Fish Audio, Cartesia, and 60db\nHigh-quality voices - Neural, Wavenet, Standard, and multilingual voice types\nMultiple languages - 50+ voices across 10+ languages\nFlexible audio formats - MP3, WAV, OGG/Opus\nVoice customization - Adjust speed, pitch, and volume\nTwo synthesis modes - Direct text-to-speech OR AI response synthesis\nProduction-ready - Works with Google Cloud, OpenAI, ElevenLabs, Azure, Fish Audio, Cartesia, and 60db\n\nQuick Start\n\nInstallation\n\nTTS support is built into NeuroLink. No additional installation required.\n\nEnvironment Setup\n\nSet the appropriate environment variables for your chosen TTS provider:\n\nGoogle API Key Configuration:\n\nIf using API key authentication for Google, enable both APIs in Google Cloud Console:\nNavigate to \"APIs & Services\" > \"Credentials\"\nCreate or select your API key\nUnder \"API restrictions\", enable:\nGenerative Language API (for Gemini)\nCloud Text-to-Speech API (for TTS)\n\nBasic Usage\n\nCLI:\n\nSDK:\n\nSupported Providers\n\nTTS is available through the following providers:\n\n| Provider | Authentication | Voices / Models | Notes |\n| -------------- | ----------------------------------------------------------- | ------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| google-ai | Service Account (GOOGLE_APPLICATION_CREDENTIALS) | 50+ voices (Neural2, Wavenet, Standard) | Same auth as vertex (TTS uses Google Cloud Text-to-Speech client) |\n| vertex | Service Account (GOOGLE_APPLICATION_CREDENTIALS) | 50+ voices (Neural2, Wavenet, Standard) | Recommended for production |\n| openai-tts | API Key (OPENAI_API_KEY) | 6 voices: alloy, echo, fable, onyx, nova, shimmer; models: tts-1, tts-1-hd | Good default quality |\n| elevenlabs | API Key (ELEVENLABS_API_KEY) | Multilingual voices; model: elevenmultilingualv2 | High-quality multilingual synthesis |\n| azure-tts | API Key (AZURE_SPEECH_KEY + region AZURE_SPEECH_REGION) | Neural voices with SSML support | Enterprise-grade Azure Speech |\n| fish-audio | API Key (FISH_AUDIO_API_KEY) | 14 languages, voice cloning (15 s reference); models: s1 (default), speech-1.6, speech-1.5 | Low-cost, ~80% cheaper than ElevenLabs — see provider guide |\n| cartesia | API Key (CARTESIA_API_KEY) | Cartesia voice library, English-first; models: sonic-2 (default), sonic | Low-latency Sonic models — see provider guide. Synchronous /tts/bytes; the WebSocket streaming flow is exposed separately via CartesiaStream in the voice server. |\n| sixtydb | Workspace API key (SIXTYDB_API_KEY) | Quality and fast workspace voice catalogs | WAV or PCM16 at 24 kHz — see prov","hierarchy":{"lvl0":"Features","lvl1":"Text-to-Speech (TTS) Integration Guide","lvl2":"","lvl3":""}},
|
|
4524
4548
|
{"objectID":"9384b791f5d32ea2c126e7a7a7a8852d80e56954c061aba2d9e493b0a9c25f2b","title":"Text-to-Speech (TTS) Integration Guide","url":"/docs/features/tts#text-to-speech-tts-integration-guide","content":"NeuroLink provides integrated Text-to-Speech (TTS) capabilities, allowing you to generate high-quality audio from text prompts or AI-generated responses. This feature is perfect for voice assistants, accessibility features, narration, podcasts, and more.","hierarchy":{"lvl0":"Features","lvl1":"Text-to-Speech (TTS) Integration Guide","lvl2":"Text-to-Speech (TTS) Integration Guide","lvl3":""}},
|
|
4525
4549
|
{"objectID":"9cc14837132bc1ce344a44ef8c73aa1b77fe9b81356e3f5e565115a158d47618","title":"Overview","url":"/docs/features/tts#overview","content":"Key Features:\nMultiple providers - Google Cloud TTS, OpenAI TTS, ElevenLabs, Azure TTS, Fish Audio, Cartesia, and 60db\nHigh-quality voices - Neural, Wavenet, Standard, and multilingual voice types\nMultiple languages - 50+ voices across 10+ languages\nFlexible audio formats - MP3, WAV, OGG/Opus\nVoice customization - Adjust speed, pitch, and volume\nTwo synthesis modes - Direct text-to-speech OR AI response synthesis\nProduction-ready - Works with Google Cloud, OpenAI, ElevenLabs, Azure, Fish Audio, Cartesia, and 60db","hierarchy":{"lvl0":"Features","lvl1":"Text-to-Speech (TTS) Integration Guide","lvl2":"Overview","lvl3":""}},
|
|
@@ -4845,17 +4869,35 @@
|
|
|
4845
4869
|
{"objectID":"967b4dc5c4a65df23f4278294f9441c5a27d205a26b02a18c773327e218c2e63","title":"Supported Models","url":"/docs/getting-started/environment-variables#supported-models-12","content":"tts-1 (default) - Optimized for speed\ntts-1-hd - Optimized for audio quality","hierarchy":{"lvl0":"Getting Started","lvl1":"🔧 Environment Variables Configuration Guide","lvl2":"Supported Models","lvl3":""}},
|
|
4846
4870
|
{"objectID":"185e100a3b4e0b32579458a78f8486c9aabc327d67ab250d7f4cda82375ff014","title":"Required Variables","url":"/docs/getting-started/environment-variables#required-variables-14","content":"One key serves the elevenlabs TTS handler, the elevenlabs-stt (Scribe)\nSTT handler and elevenlabs-music.","hierarchy":{"lvl0":"Getting Started","lvl1":"🔧 Environment Variables Configuration Guide","lvl2":"Required Variables","lvl3":""}},
|
|
4847
4871
|
{"objectID":"4e82400622bb2abfeb732ebcf3cb0b55193149d88102d9ed6c7847ea64c245da","title":"Optional Variables","url":"/docs/getting-started/environment-variables#optional-variables-16","content":"`bash","hierarchy":{"lvl0":"Getting Started","lvl1":"🔧 Environment Variables Configuration Guide","lvl2":"Optional Variables","lvl3":""}},
|
|
4848
|
-
{"objectID":"6cab8f5cceb9379d1b194ee1aa79df23bfdf554c1b884793c82f646f572adaea","title":"API base URL including the /v1 prefix — for a proxy or a test stub.","url":"/docs/getting-started/environment-variables#api-base-url-including-the-v1-prefix-for-a-proxy-or-a-test-stub","content":"ELEVENLABSBASEURL=\"https://api.elevenlabs.io/v1\"
|
|
4872
|
+
{"objectID":"6cab8f5cceb9379d1b194ee1aa79df23bfdf554c1b884793c82f646f572adaea","title":"API base URL including the /v1 prefix — for a proxy or a test stub.","url":"/docs/getting-started/environment-variables#api-base-url-including-the-v1-prefix-for-a-proxy-or-a-test-stub","content":"ELEVENLABSBASEURL=\"https://api.elevenlabs.io/v1\"","hierarchy":{"lvl0":"Getting Started","lvl1":"🔧 Environment Variables Configuration Guide","lvl2":"API base URL including the /v1 prefix — for a proxy or a test stub.","lvl3":""}},
|
|
4873
|
+
{"objectID":"7958ac43b536b0aab60d228037309defd29a1248a746e88079a03b4d11e0806c","title":"for STT, so transcription can go through a different host than TTS.","url":"/docs/getting-started/environment-variables#for-stt-so-transcription-can-go-through-a-different-host-than-tts","content":"ELEVENLABSSTTBASE_URL=\"https://api.elevenlabs.io/v1\"\n`","hierarchy":{"lvl0":"Getting Started","lvl1":"🔧 Environment Variables Configuration Guide","lvl2":"for STT, so transcription can go through a different host than TTS.","lvl3":""}},
|
|
4849
4874
|
{"objectID":"712d471a61dd85b77d43664ed486e4f994254cb769334ff8be588ab27253b4b5","title":"How to Get ElevenLabs API Key","url":"/docs/getting-started/environment-variables#how-to-get-elevenlabs-api-key","content":"Visit ElevenLabs\nSign up or log in to your account\nNavigate to Profile → API Key\nCopy the key","hierarchy":{"lvl0":"Getting Started","lvl1":"🔧 Environment Variables Configuration Guide","lvl2":"How to Get ElevenLabs API Key","lvl3":""}},
|
|
4850
4875
|
{"objectID":"8a691f68a37b176e79af81531236feaf5a09e66aa6ad53cf417b1f841145ee93","title":"Supported Models","url":"/docs/getting-started/environment-variables#supported-models-13","content":"eleven_multilingual_v2 (default) - Best quality, 29 languages\neleven_v3 - Most expressive, 70+ languages, accepts language\neleven_turbo_v2_5 - Low-latency streaming, 32 languages, accepts language\neleven_flash_v2_5 - Fastest, suitable for real-time use, accepts language\neleven_flash_v2, eleven_turbo_v2, eleven_monolingual_v1 - English variants\nSTT: scribe_v2 (default), scribe_v2_medical; scribe_v1 and scribe_v1_experimental are deprecated\n\nSee the ElevenLabs provider guide\nfor formats (Opus 48 kHz for ogg/opus), speed clamping, retries and the\nScribe STT options.","hierarchy":{"lvl0":"Getting Started","lvl1":"🔧 Environment Variables Configuration Guide","lvl2":"Supported Models","lvl3":""}},
|
|
4876
|
+
{"objectID":"41a0a0548820563db26fdc455f54323fdff3c188c0f268ff9891bc56806e0f7e","title":"Optional Variables","url":"/docs/getting-started/environment-variables#optional-variables-17","content":"`bash","hierarchy":{"lvl0":"Getting Started","lvl1":"🔧 Environment Variables Configuration Guide","lvl2":"Optional Variables","lvl3":""}},
|
|
4877
|
+
{"objectID":"f0d931ab4c105a1e0342680e637bdc72206493c1df31b12bfe9790b0878f4445","title":"stream uses the same host on the WebSocket scheme (https → wss).","url":"/docs/getting-started/environment-variables#stream-uses-the-same-host-on-the-websocket-scheme-https-wss","content":"DEEPGRAMBASEURL=\"https://api.deepgram.com/v1\"\n`","hierarchy":{"lvl0":"Getting Started","lvl1":"🔧 Environment Variables Configuration Guide","lvl2":"stream uses the same host on the WebSocket scheme (https → wss).","lvl3":""}},
|
|
4851
4878
|
{"objectID":"9129ffd649ccffb4b060645ec37e6d3fc8d82f8a2a9bd7c017fb0f0b55353973","title":"How to Get Deepgram API Key","url":"/docs/getting-started/environment-variables#how-to-get-deepgram-api-key","content":"Visit Deepgram Console\nSign up or log in to your account\nNavigate to API Keys\nClick Create a New API Key\nCopy the key","hierarchy":{"lvl0":"Getting Started","lvl1":"🔧 Environment Variables Configuration Guide","lvl2":"How to Get Deepgram API Key","lvl3":""}},
|
|
4852
|
-
{"objectID":"68132ecc90d03a81b52c2efbc9cc986bcd0d639606e64874b1d1e5f0e2321d7d","title":"Supported Models","url":"/docs/getting-started/environment-variables#supported-models-14","content":"nova-
|
|
4879
|
+
{"objectID":"68132ecc90d03a81b52c2efbc9cc986bcd0d639606e64874b1d1e5f0e2321d7d","title":"Supported Models","url":"/docs/getting-started/environment-variables#supported-models-14","content":"nova-2 (default) - High accuracy, broad language support\nnova-3 - Latest, highest accuracy\nbase - Balanced accuracy and speed","hierarchy":{"lvl0":"Getting Started","lvl1":"🔧 Environment Variables Configuration Guide","lvl2":"Supported Models","lvl3":""}},
|
|
4853
4880
|
{"objectID":"c2064d0829d78a9a62faf77148fdbb940768b075e7cf88ec239a35262b759ed5","title":"19. Azure Speech Services (TTS + STT)","url":"/docs/getting-started/environment-variables#19-azure-speech-services-tts-stt","content":"Azure Speech Services provides both text-to-speech and speech-to-text through Microsoft Azure Cognitive Services.","hierarchy":{"lvl0":"Getting Started","lvl1":"🔧 Environment Variables Configuration Guide","lvl2":"19. Azure Speech Services (TTS + STT)","lvl3":""}},
|
|
4854
|
-
{"objectID":"
|
|
4881
|
+
{"objectID":"962e23203c738dd77afcfaf24aa25356d707d0cc3dd90a33efada783edb66521","title":"Optional Variables","url":"/docs/getting-started/environment-variables#optional-variables-18","content":"If you also use Google STT or Gemini Live alongside Azure, set the canonical\nGoogle credentials:\n\n`bash\nGOOGLEAIAPI_KEY=\"AIza-your-google-ai-studio-key\" # canonical","hierarchy":{"lvl0":"Getting Started","lvl1":"🔧 Environment Variables Configuration Guide","lvl2":"Optional Variables","lvl3":""}},
|
|
4855
4882
|
{"objectID":"7bec731e65dbc6430ed02e8400c47ccfec5344c1af270765439efc1d73fdbb5b","title":"GOOGLE_APPLICATION_CREDENTIALS=/path/to/sa.json # service account (Google STT)","url":"/docs/getting-started/environment-variables#google_application_credentialspathtosajson-service-account-google-stt","content":"`","hierarchy":{"lvl0":"Getting Started","lvl1":"🔧 Environment Variables Configuration Guide","lvl2":"GOOGLE_APPLICATION_CREDENTIALS=/path/to/sa.json # service account (Google STT)","lvl3":""}},
|
|
4856
4883
|
{"objectID":"3f1d029c9cf99acb82aebeaf36d531ac671907399d2136e1ea5bf00e6e03ed65","title":"How to Set Up Azure Speech Services","url":"/docs/getting-started/environment-variables#how-to-set-up-azure-speech-services","content":"Sign in to Azure Portal\nCreate a Speech resource under Azure AI services\nGo to Keys and Endpoint in your Speech resource\nCopy Key 1 and note the Location/Region\nSet AZURE_SPEECH_KEY and AZURE_SPEECH_REGION","hierarchy":{"lvl0":"Getting Started","lvl1":"🔧 Environment Variables Configuration Guide","lvl2":"How to Set Up Azure Speech Services","lvl3":""}},
|
|
4857
4884
|
{"objectID":"07e8bb77fbafe3f5877f90d12e04d98d34a4f9111b78f48572155d30f373fd07","title":"Supported Capabilities","url":"/docs/getting-started/environment-variables#supported-capabilities","content":"TTS: Azure Neural TTS with 400+ voices across 140+ languages\nSTT: Azure Speech-to-Text with real-time and batch transcription","hierarchy":{"lvl0":"Getting Started","lvl1":"🔧 Environment Variables Configuration Guide","lvl2":"Supported Capabilities","lvl3":""}},
|
|
4858
4885
|
{"objectID":"c53eccf13792005e069376eccf85e3dc483b48245d1967dcca484df60b6b7922","title":"Environment Variables Reference","url":"/docs/getting-started/environment-variables#environment-variables-reference-2","content":"| Variable | Required | Default | Description |\n| --------------------- | -------- | ------- | --------------------------------------------------- |\n| AZURE_SPEECH_KEY | ✅ | - | Azure Speech Services API key |\n| AZURE_SPEECH_REGION | ✅ | - | Azure region (e.g., eastus, westeurope) |\n| GOOGLE_AI_API_KEY | ❌ | - | Canonical Google API key (Google STT / Gemini Live) |\n| GEMINI_API_KEY | ❌ | - | Accepted alias for GOOGLE_AI_API_KEY |\n| GOOGLE_API_KEY | ❌ | - | Legacy alias for GOOGLE_AI_API_KEY |\n| ELEVENLABS_API_KEY | ❌ | - | ElevenLabs key, if using ElevenLabs alongside |\n| DEEPGRAM_API_KEY | ❌ | - | Deepgram key, if using Deepgram alongside |","hierarchy":{"lvl0":"Getting Started","lvl1":"🔧 Environment Variables Configuration Guide","lvl2":"Environment Variables Reference","lvl3":""}},
|
|
4886
|
+
{"objectID":"d42f6d5898f10e6d7410e66651ec961f084d87ede15a986d21cfaff18af7ff5b","title":"20. Speech-to-Text: transcribe() and the built-in Whistle engine","url":"/docs/getting-started/environment-variables#20-speech-to-text-transcribe-and-the-built-in-whistle-engine","content":"neurolink.transcribe(), neurolink.transcribeStream(), the\nneurolink transcribe CLI command, the transcription server routes and audio\nattached to generate() all choose their engine the same way:\nNEUROLINK_STT_PROVIDER, when it names a known STT provider, alias or named\n endpoint (an unknown name is logged and ignored);\notherwise the first configured provider in descriptor order — whisper\n (OpenAI-compatible), deepgram, elevenlabs-stt, google-stt,\n azure-stt — configured by the keys in sections 1, 17, 18 and 19 above;\notherwise Whistle, the built-in local engine, which needs no key.","hierarchy":{"lvl0":"Getting Started","lvl1":"🔧 Environment Variables Configuration Guide","lvl2":"20. Speech-to-Text: transcribe() and the built-in Whistle engine","lvl3":""}},
|
|
4887
|
+
{"objectID":"898a6061dd9a2d929484be906c3796feeaeeb1e71ed44ba99ad0cc02e113a3a1","title":"Engine selection","url":"/docs/getting-started/environment-variables#engine-selection","content":"`bash","hierarchy":{"lvl0":"Getting Started","lvl1":"🔧 Environment Variables Configuration Guide","lvl2":"Engine selection","lvl3":""}},
|
|
4888
|
+
{"objectID":"c3c40970a593ca9499120f6dfddd7afec758f4e07f5ff8e0d66b3bd0dd80566b","title":"azure-stt, whistle, or a NEUROLINK_STT_ENDPOINTS name).","url":"/docs/getting-started/environment-variables#azure-stt-whistle-or-a-neurolink_stt_endpoints-name","content":"NEUROLINKSTTPROVIDER=\"deepgram\"","hierarchy":{"lvl0":"Getting Started","lvl1":"🔧 Environment Variables Configuration Guide","lvl2":"azure-stt, whistle, or a NEUROLINK_STT_ENDPOINTS name).","lvl3":""}},
|
|
4889
|
+
{"objectID":"70c5a32532c3a317f8b97b46fb9e828e5c17b0783677177b51af61046b98454d","title":"Not applied to a provider named explicitly in a call or with --provider.","url":"/docs/getting-started/environment-variables#not-applied-to-a-provider-named-explicitly-in-a-call-or-with---provider","content":"NEUROLINKSTTMODEL=\"nova-3\"","hierarchy":{"lvl0":"Getting Started","lvl1":"🔧 Environment Variables Configuration Guide","lvl2":"Not applied to a provider named explicitly in a call or with --provider.","lvl3":""}},
|
|
4890
|
+
{"objectID":"5ec45d322178ff0ebbd639931bac9a86d46e97add1e825eabcf5fabf105f1d09","title":"Default language code; omit it, or set \"auto\", to let the engine detect it.","url":"/docs/getting-started/environment-variables#default-language-code-omit-it-or-set-auto-to-let-the-engine-detect-it","content":"NEUROLINKSTTLANGUAGE=\"en\"\n`","hierarchy":{"lvl0":"Getting Started","lvl1":"🔧 Environment Variables Configuration Guide","lvl2":"Default language code; omit it, or set \"auto\", to let the engine detect it.","lvl3":""}},
|
|
4891
|
+
{"objectID":"ee1457f8c17966cc8236af1a93b3f9164e8030bfc61f752930a117da9650ad18","title":"OpenAI-compatible STT (whisper)","url":"/docs/getting-started/environment-variables#openai-compatible-stt-whisper","content":"`bash","hierarchy":{"lvl0":"Getting Started","lvl1":"🔧 Environment Variables Configuration Guide","lvl2":"OpenAI-compatible STT (whisper)","lvl3":""}},
|
|
4892
|
+
{"objectID":"b2677c5266ebb5cf0318fcf0df332fed3421b7acf4f7ea4c229ec6f9665e451f","title":"\"apiKey\" or no key at all.","url":"/docs/getting-started/environment-variables#apikey-or-no-key-at-all","content":"OPENAISTTAPI_KEY=\"sk-...\"","hierarchy":{"lvl0":"Getting Started","lvl1":"🔧 Environment Variables Configuration Guide","lvl2":"\"apiKey\" or no key at all.","lvl3":""}},
|
|
4893
|
+
{"objectID":"88667a8e88eefee1fe8604443f9486ca455190fd48dacf379e462872a0621282","title":"self-hosted Whisper / Qwen3-ASR wrapper). Default: https://api.openai.com/v1","url":"/docs/getting-started/environment-variables#self-hosted-whisper-qwen3-asr-wrapper-default-httpsapiopenaicomv1","content":"OPENAISTTBASE_URL=\"http://localhost:8004/v1\"\nOPENAISTTMODEL=\"whisper-1\" # default model\nOPENAISTTTIMEOUT_MS=\"120000\" # request timeout for long recordings","hierarchy":{"lvl0":"Getting Started","lvl1":"🔧 Environment Variables Configuration Guide","lvl2":"self-hosted Whisper / Qwen3-ASR wrapper). Default: https://api.openai.com/v1","lvl3":""}},
|
|
4894
|
+
{"objectID":"303dc2797a3f727fe2e1b0e9965567bef891ed18635e6720a864a133c9aa9d24","title":"name that collides with a shipped provider is ignored.","url":"/docs/getting-started/environment-variables#name-that-collides-with-a-shipped-provider-is-ignored","content":"NEUROLINKSTTENDPOINTS='{\"qwen-asr\":{\"baseURL\":\"http://gpu-box:8004/v1\",\"model\":\"qwen3-asr\"},\"indic\":{\"baseURL\":\"http://gpu-box:8006/v1\"}}'\n`","hierarchy":{"lvl0":"Getting Started","lvl1":"🔧 Environment Variables Configuration Guide","lvl2":"name that collides with a shipped provider is ignored.","lvl3":""}},
|
|
4895
|
+
{"objectID":"77213eac36b01d5852269a6c613314d116c4a21728a962b89e0ba44daa026f55","title":"Correction layer","url":"/docs/getting-started/environment-variables#correction-layer","content":"`bash","hierarchy":{"lvl0":"Getting Started","lvl1":"🔧 Environment Variables Configuration Guide","lvl2":"Correction layer","lvl3":""}},
|
|
4896
|
+
{"objectID":"7bb52ebd635e8d7f4c39b5755c3e08b29d154d0326ccee9f05e6ab81b46a086e","title":"none (a request's correction.rewrite.provider/model still wins).","url":"/docs/getting-started/environment-variables#none-a-requests-correctionrewriteprovidermodel-still-wins","content":"NEUROLINKSTTREWRITE_PROVIDER=\"openai\"\nNEUROLINKSTTREWRITE_MODEL=\"gpt-4o-mini\"\n\n\nThe dictionary guard uses whichever decide` provider is configured (see the\ndecision providers at the top of this page) and fails open without one.","hierarchy":{"lvl0":"Getting Started","lvl1":"🔧 Environment Variables Configuration Guide","lvl2":"none (a request's correction.rewrite.provider/model still wins).","lvl3":""}},
|
|
4897
|
+
{"objectID":"6428bdb4cd726fdee39cb14f1f4abad548303cda9f7dd61d40034ca0cb1d3bb8","title":"Whistle (built-in local engine)","url":"/docs/getting-started/environment-variables#whistle-built-in-local-engine","content":"Whistle runs on this machine in WebAssembly. Its three files (about 17 MB,\npinned Hugging Face revisions verified by SHA-256) ship inside the package\nunder models/whistle/, so nothing is downloaded. A download happens only\nwhen that copy is missing, into ~/.neurolink/models/whistle.\n\n`bash","hierarchy":{"lvl0":"Getting Started","lvl1":"🔧 Environment Variables Configuration Guide","lvl2":"Whistle (built-in local engine)","lvl3":""}},
|
|
4898
|
+
{"objectID":"7cec4106fed9b6b9414e6659f599c41dc840e66e84b50e9f141d771deb63c0f8","title":"package's own models/whistle, then ~/.neurolink/models/whistle.","url":"/docs/getting-started/environment-variables#packages-own-modelswhistle-then-neurolinkmodelswhistle","content":"NEUROLINKWHISTLEDIR=\"/opt/models/whistle\"\nNEUROLINKMODELDIR=\"/opt/models\" # root for local model files","hierarchy":{"lvl0":"Getting Started","lvl1":"🔧 Environment Variables Configuration Guide","lvl2":"package's own models/whistle, then ~/.neurolink/models/whistle.","lvl3":""}},
|
|
4899
|
+
{"objectID":"54460f77fd0105df8db95f2b6cb06d484494bc5573b01496a77e41114821b121","title":"With no copy anywhere Whistle then reports itself unconfigured.","url":"/docs/getting-started/environment-variables#with-no-copy-anywhere-whistle-then-reports-itself-unconfigured","content":"NEUROLINKWHISTLEAUTO_DOWNLOAD=\"0\"","hierarchy":{"lvl0":"Getting Started","lvl1":"🔧 Environment Variables Configuration Guide","lvl2":"With no copy anywhere Whistle then reports itself unconfigured.","lvl3":""}},
|
|
4900
|
+
{"objectID":"c66b6f0f387a2033db027a244b8e2cd738dbbbf956444bd49c795cf0c03b19c9","title":"request.","url":"/docs/getting-started/environment-variables#request","content":"NEUROLINKWHISTLEKEYWORDS=\"1\"\n\n\n| Variable | Default | Description |\n| --------------------------------- | -------------------------------------- | --------------------------------------------------------------------------------------------- |\n| NEUROLINKSTTPROVIDER | first configured, else Whistle | Default STT provider, alias or named endpoint |\n| NEUROLINKSTTMODEL | provider default | Model for the env-chosen provider |\n| NEUROLINKSTTLANGUAGE | auto | Default language; auto lets the engine detect |\n| NEUROLINKSTTENDPOINTS | - | JSON map of named OpenAI-compatible STT endpoints |\n| NEUROLINKSTTREWRITEPROVIDER | instance default | Text provider for the correction rewrite |\n| NEUROLINKSTTREWRITEMODEL | provider default | Model for the correction rewrite |\n| OPENAISTTAPIKEY | OPENAIAPIKEY (api.openai.com only) | Key for the OpenAI-compatible STT endpoint; a custom base URL never receives OPENAIAPIKEY |\n| OPENAISTTBASEURL | https://api.openai.com/v1 | OpenAI-compatible /audio/transcriptions base URL |\n| OPENAISTTMODEL | whisper-1 | Default model for whisper |\n| OPENAISTTTIMEOUTMS | handler default | Request timeout for whisper","hierarchy":{"lvl0":"Getting Started","lvl1":"🔧 Environment Variables Configuration Guide","lvl2":"request.","lvl3":""}},
|
|
4859
4901
|
{"objectID":"e321f630560a5f6b967367da94ea47edaec5da7b8e48d2b1ae8fe2e94f3dc1a0","title":"Complete .env File Example","url":"/docs/getting-started/environment-variables#complete-env-file-example","content":"`bash","hierarchy":{"lvl0":"Getting Started","lvl1":"🔧 Environment Variables Configuration Guide","lvl2":"Complete .env File Example","lvl3":""}},
|
|
4860
4902
|
{"objectID":"cde11770bce5a1d5e838699f8d2a13904133a5ee26bffd96fc17f1df9436a088","title":"OpenAI Configuration","url":"/docs/getting-started/environment-variables#openai-configuration","content":"OPENAIAPIKEY=\"sk-proj-your-openai-key\"\nOPENAI_MODEL=\"gpt-4o\"","hierarchy":{"lvl0":"Getting Started","lvl1":"🔧 Environment Variables Configuration Guide","lvl2":"OpenAI Configuration","lvl3":""}},
|
|
4861
4903
|
{"objectID":"d90e0ad403df3bb51afbff701aa10b83405cf4f4421d2f9c6088b5ac2e186c3b","title":"Amazon Bedrock Configuration","url":"/docs/getting-started/environment-variables#amazon-bedrock-configuration","content":"AWSACCESSKEY_ID=\"AKIA...\"\nAWSSECRETACCESS_KEY=\"your-aws-secret\"\nAWS_REGION=\"us-east-1\"\nBEDROCK_MODEL=\"arn:aws:bedrock:us-east-1::inference-profile/us.anthropic.claude-3-5-sonnet-20241022-v2:0\"","hierarchy":{"lvl0":"Getting Started","lvl1":"🔧 Environment Variables Configuration Guide","lvl2":"Amazon Bedrock Configuration","lvl3":""}},
|
|
@@ -7363,6 +7405,22 @@
|
|
|
7363
7405
|
{"objectID":"2cba90b9eaf008d0b2f80d6955bfb863e811cefdc7ffbad0924326d6b9ffb0c0","title":"Verification status","url":"/docs/getting-started/providers/wandb-inference#verification-status","content":"Tier-2 onboarding requires evidence before a provider is accepted, and\npnpm run verify:provider-onboarding gates it in CI. This is what the\ncatalog currently records for W&B Inference — docs-verified only, not\nlive-verified:\n\n| Probe | Result |\n| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n| Roster | unauthenticated GET https://api.inference.wandb.ai/v1/models answered HTTP 401 on 2026-09-29, so the roster has not been checked; model ids are taken from the models page (retrieved 2026-09-29) |\n| Public catalog cross-check | unauthenticated GET https://trace.wandb.ai/inference/catalog/models answered HTTP 200 with 47 models on 2026-09-29; the 12 catalog ids appear with lifecycleStage general-availability, and their contextWindow and price fields agree with the pricing page |\n| Billing | the usage limits page states credits \"come with","hierarchy":{"lvl0":"Getting Started","lvl1":"W&B Inference Provider Guide","lvl2":"Verification status","lvl3":""}},
|
|
7364
7406
|
{"objectID":"34b2bbefc4f61cf12928a6c488788ec71a073c6289ef8663f603feba78528a69","title":"Troubleshooting","url":"/docs/getting-started/providers/wandb-inference#troubleshooting","content":"Each row restates a vendor\nsupport article.\n\n| Symptom | Cause (vendor) | Fix (vendor) |\n| --------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- |\n| HTTP 401 \"Authentication failed\" | An API key that is \"invalid, expired, or revoked\", or an incorrect W&B project entity name or project name (401 article) | Regenerate the key from your W&B settings; check the project entity and name |\n| HTTP 402 \"You exceeded your current quota\" | No remaining credits, or the monthly spending cap was reached (402 article) | Check plan and billing details, get more credits, or increase limits |\n| HTTP 403 \"Country, region, or territory not supported\" | Access from an unsupported location, determined from the IP address of the request (403 article) | Check the geographic restrictions |\n| HTTP 403 \"The inference gateway is not enabled for your organization\" | The organization has not enabled the inference gateway (403 article) | Ask your organization's W&B administrator to enable it |\n| HTTP 404","hierarchy":{"lvl0":"Getting Started","lvl1":"W&B Inference Provider Guide","lvl2":"Troubleshooting","lvl3":""}},
|
|
7365
7407
|
{"objectID":"7b7dbebe18fd633fc38d3fd468acacbd26a835078fbe440b03163cea66b65889","title":"See also","url":"/docs/getting-started/providers/wandb-inference#see-also","content":"Provider setup overview\nAll providers\nTier-2 onboarding — how this provider's JSON becomes a working integration\nProvider feature compatibility","hierarchy":{"lvl0":"Getting Started","lvl1":"W&B Inference Provider Guide","lvl2":"See also","lvl3":""}},
|
|
7408
|
+
{"objectID":"4870ff91956d9a788eb0d08d9b945ce28aaf1c59bd5cfa1f73e14ace5e536c4c","title":"Whistle (Built-in Local STT)","url":"/docs/getting-started/providers/whistle","content":"Whistle — Built-in Local Speech-to-Text\n\nSpeech-to-text with no API key, no server and no native addon.\n\nOverview\n\nWhistle is the speech-to-text engine NeuroLink ships with. It runs Cactus's\nWhistle model (17 MB) on the Cactus \"needle\" engine, an Emscripten\nWebAssembly build, inside a Node.js worker thread on your own machine. Audio\nnever leaves the process.\n\nIt is the default STT provider when no other one is configured:\ntranscribe() uses NEUROLINK_STT_PROVIDER if set, then the first\nconfigured cloud or self-hosted provider, and falls back to Whistle, which\nneeds no credentials.\n\nKey facts\n\n| | |\n| --------------- | -------------------------------------------------------- |\n| Provider name | whistle |\n| Size on disk | ~17.9 MB (engine 1 MB + model 16.9 MB) |\n| Credentials | none |\n| Languages | English, German, French, Spanish, Italian, Dutch, Polish |\n| Streaming | native (the engine's own streaming decoder) |\n| Word timestamps | yes, with a per-word probability |\n| Diarization | no |\n| Speed | ~0.5 s of CPU per 10 s of audio on one laptop core |\n| Licence | engine and model are Apache-2.0 |\n\nFirst use\n\nThe first transcription downloads three files from pinned Hugging Face\nrevisions, checks each against a SHA-256, and writes it atomically (temporary\nfile, then rename), so an interrupted download never leaves a file that looks\ncomplete. Concurrent first calls share one download. Every later call reads\nthe files from disk, and Whistle works fully offline from then on.\n\n| File | Source |\n| -------------- | ---------------------------------------------------------- |\n| needle.js | Cactus-Compute/needle3 @ 2ae11323…, wasm/needle.js |\n| needle.wasm | Cactus-Compute/needle3 @ 2ae11323…, wasm/needle.wasm |\n| whistle.cact | Cactus-Compute/whistle @ b358ddad…, whistle.cact |\n\nTo warm up ahead of the first request (download, verify, start the worker):\n\nWhere the files live\n\nThe first of these that is set wins:\ncredentials.stt.whistle.modelDir\nNEUROLINK_WHISTLE_DIR\n$NEUROLINK_MODEL_DIR/whistle\n~/.neurolink/models/whistle\n\nAir-gapped machines\n\nSet NEUROLINK_WHISTLE_AUTO_DOWNLOAD=0 (or\ncredentials.stt.whistle.autoDownload: false) to forbid the download. If a\nfile is then missing, or does not match its hash, the call fails with an\nerror that lists each of the three files, the exact path it must be placed\nat, and the URL to fetch it from. The same error is raised when the download\nis allowed but fails (offline, proxy, HTTP error).\n\nUsage\n\nOptions\n\n| Option | Effect |\n| ---------------- | ---------------------------------------------------------------------------------------------------------------------------------- |\n| language | en de fr es it nl pl, or a locale (\"de-DE\"). \"auto\", omitted, or any other language lets the engine detect one of the seven. |\n| wordTimestamps | Return words[] with start/end (seconds) and confidence. |\n| vocabulary | Keyword biasing for names and jargon — only when model: \"whistle-keywords\" or NEUROLINK_WHISTLE_KEYWORDS=1. See below. |\n| format | Container hint for a buffer. WAV is recognised from its header whatever this says; pcm16 means raw PCM16LE mono at sampleRate. |\n| sampleRate | Rate of pcm16 input and of streamed frames. Default 16000. |\n\nResult\ntext, language (detected or requested), duration (seconds)\nconfidence — the mean per-word probability (metadata.confidenceSource:\n\"word_logprobs\"); 0 for empty text\nwords — when wordTimestamps is set\nmetadata — provider: \"whistle\", model: \"whistle\", latency (ms),\n ttftMs, decodeTps, chunks (how many ≤30 s passes the audio took)\n\nKeyword biasing\n\nThe engine can favour given words and phrases, which helps with names and\nproduct terms. It is opt-in because the decoder can loop (repeat a\nphrase) when given a long list: enable it per call with\nmodel: \"whistle-keywords\", or globally with NEUROLINK_WHISTLE_KEYWORDS=1.\nAt most 32 entries are sent; keep the list short and specific. For larger\ndictionaries, use the dictionary/correction layer of transcribe() instead,\nwhich repairs the transcript after the fact.\n\nLong audio\n\nThe engine reads at most 30 s per call. Longer audio is cut at the quietest\n20 ms frame near every 24 s mark (searching ±3 s), each piece is\ntranscribed in turn, and word times are shifted back onto the whole\nrecording. ","hierarchy":{"lvl0":"Getting Started","lvl1":"Whistle (Built-in Local STT)","lvl2":"","lvl3":""}},
|
|
7409
|
+
{"objectID":"dd22e330b5f2303f8b2a96491b84d52ba0b282749ab2aece395753b0718f42b2","title":"Whistle — Built-in Local Speech-to-Text","url":"/docs/getting-started/providers/whistle#whistle-built-in-local-speech-to-text","content":"Speech-to-text with no API key, no server and no native addon.","hierarchy":{"lvl0":"Getting Started","lvl1":"Whistle (Built-in Local STT)","lvl2":"Whistle — Built-in Local Speech-to-Text","lvl3":""}},
|
|
7410
|
+
{"objectID":"f2a4b889b0070faad6109b98b6476547d5b0d96bfb00af937da6c9cf44300a78","title":"Overview","url":"/docs/getting-started/providers/whistle#overview","content":"Whistle is the speech-to-text engine NeuroLink ships with. It runs Cactus's\nWhistle model (17 MB) on the Cactus \"needle\" engine, an Emscripten\nWebAssembly build, inside a Node.js worker thread on your own machine. Audio\nnever leaves the process.\n\nIt is the default STT provider when no other one is configured:\ntranscribe() uses NEUROLINK_STT_PROVIDER if set, then the first\nconfigured cloud or self-hosted provider, and falls back to Whistle, which\nneeds no credentials.","hierarchy":{"lvl0":"Getting Started","lvl1":"Whistle (Built-in Local STT)","lvl2":"Overview","lvl3":""}},
|
|
7411
|
+
{"objectID":"c9607794dab9c96d01877ddcffc5dbc8d44754141fa5df14a93d4bfcda707c28","title":"Key facts","url":"/docs/getting-started/providers/whistle#key-facts","content":"| | |\n| --------------- | -------------------------------------------------------- |\n| Provider name | whistle |\n| Size on disk | ~17.9 MB (engine 1 MB + model 16.9 MB) |\n| Credentials | none |\n| Languages | English, German, French, Spanish, Italian, Dutch, Polish |\n| Streaming | native (the engine's own streaming decoder) |\n| Word timestamps | yes, with a per-word probability |\n| Diarization | no |\n| Speed | ~0.5 s of CPU per 10 s of audio on one laptop core |\n| Licence | engine and model are Apache-2.0 |","hierarchy":{"lvl0":"Getting Started","lvl1":"Whistle (Built-in Local STT)","lvl2":"Key facts","lvl3":""}},
|
|
7412
|
+
{"objectID":"b0a64a87263ebfed59eb22874b50b6aa3892ecaec1a7ce0f37f7d83cc2a79a13","title":"First use","url":"/docs/getting-started/providers/whistle#first-use","content":"The first transcription downloads three files from pinned Hugging Face\nrevisions, checks each against a SHA-256, and writes it atomically (temporary\nfile, then rename), so an interrupted download never leaves a file that looks\ncomplete. Concurrent first calls share one download. Every later call reads\nthe files from disk, and Whistle works fully offline from then on.\n\n| File | Source |\n| -------------- | ---------------------------------------------------------- |\n| needle.js | Cactus-Compute/needle3 @ 2ae11323…, wasm/needle.js |\n| needle.wasm | Cactus-Compute/needle3 @ 2ae11323…, wasm/needle.wasm |\n| whistle.cact | Cactus-Compute/whistle @ b358ddad…, whistle.cact |\n\nTo warm up ahead of the first request (download, verify, start the worker):","hierarchy":{"lvl0":"Getting Started","lvl1":"Whistle (Built-in Local STT)","lvl2":"First use","lvl3":""}},
|
|
7413
|
+
{"objectID":"3bb76780214ef4bc4126644ba66210eea8ce4f08a009bcba36ec82596e4e428a","title":"Where the files live","url":"/docs/getting-started/providers/whistle#where-the-files-live","content":"The first of these that is set wins:\ncredentials.stt.whistle.modelDir\nNEUROLINK_WHISTLE_DIR\n$NEUROLINK_MODEL_DIR/whistle\n~/.neurolink/models/whistle","hierarchy":{"lvl0":"Getting Started","lvl1":"Whistle (Built-in Local STT)","lvl2":"Where the files live","lvl3":""}},
|
|
7414
|
+
{"objectID":"403513592f8e7bde9baea41cb3d2c3658e1163638dbd2665f3cf39036465944c","title":"Air-gapped machines","url":"/docs/getting-started/providers/whistle#air-gapped-machines","content":"Set NEUROLINK_WHISTLE_AUTO_DOWNLOAD=0 (or\ncredentials.stt.whistle.autoDownload: false) to forbid the download. If a\nfile is then missing, or does not match its hash, the call fails with an\nerror that lists each of the three files, the exact path it must be placed\nat, and the URL to fetch it from. The same error is raised when the download\nis allowed but fails (offline, proxy, HTTP error).","hierarchy":{"lvl0":"Getting Started","lvl1":"Whistle (Built-in Local STT)","lvl2":"Air-gapped machines","lvl3":""}},
|
|
7415
|
+
{"objectID":"582ff5ae6801c216a85c032768fc203a3ae958e232d7bacad57b81b7c89eee2a","title":"Options","url":"/docs/getting-started/providers/whistle#options","content":"| Option | Effect |\n| ---------------- | ---------------------------------------------------------------------------------------------------------------------------------- |\n| language | en de fr es it nl pl, or a locale (\"de-DE\"). \"auto\", omitted, or any other language lets the engine detect one of the seven. |\n| wordTimestamps | Return words[] with start/end (seconds) and confidence. |\n| vocabulary | Keyword biasing for names and jargon — only when model: \"whistle-keywords\" or NEUROLINK_WHISTLE_KEYWORDS=1. See below. |\n| format | Container hint for a buffer. WAV is recognised from its header whatever this says; pcm16 means raw PCM16LE mono at sampleRate. |\n| sampleRate | Rate of pcm16 input and of streamed frames. Default 16000. |","hierarchy":{"lvl0":"Getting Started","lvl1":"Whistle (Built-in Local STT)","lvl2":"Options","lvl3":""}},
|
|
7416
|
+
{"objectID":"b2c5ebfcf75bca06128dcedbd6569c3bff6bf1df8e2df91eff60fa2384f4624a","title":"Result","url":"/docs/getting-started/providers/whistle#result","content":"text, language (detected or requested), duration (seconds)\nconfidence — the mean per-word probability (metadata.confidenceSource:\n\"word_logprobs\"); 0 for empty text\nwords — when wordTimestamps is set\nmetadata — provider: \"whistle\", model: \"whistle\", latency (ms),\n ttftMs, decodeTps, chunks (how many ≤30 s passes the audio took)","hierarchy":{"lvl0":"Getting Started","lvl1":"Whistle (Built-in Local STT)","lvl2":"Result","lvl3":""}},
|
|
7417
|
+
{"objectID":"b95de9995189e90a5fb5fbcc8fc13377ebc0449729c206d1cbddbc3e9c846a1d","title":"Keyword biasing","url":"/docs/getting-started/providers/whistle#keyword-biasing","content":"The engine can favour given words and phrases, which helps with names and\nproduct terms. It is opt-in because the decoder can loop (repeat a\nphrase) when given a long list: enable it per call with\nmodel: \"whistle-keywords\", or globally with NEUROLINK_WHISTLE_KEYWORDS=1.\nAt most 32 entries are sent; keep the list short and specific. For larger\ndictionaries, use the dictionary/correction layer of transcribe() instead,\nwhich repairs the transcript after the fact.","hierarchy":{"lvl0":"Getting Started","lvl1":"Whistle (Built-in Local STT)","lvl2":"Keyword biasing","lvl3":""}},
|
|
7418
|
+
{"objectID":"18d548131d63d5bf6f2c48c12ba9632ad4efd482e0c6571213faf05ec5295ca5","title":"Long audio","url":"/docs/getting-started/providers/whistle#long-audio","content":"The engine reads at most 30 s per call. Longer audio is cut at the quietest\n20 ms frame near every 24 s mark (searching ±3 s), each piece is\ntranscribed in turn, and word times are shifted back onto the whole\nrecording. Once a language is detected in the first piece it is held for the\nrest. One request may be up to one hour long.","hierarchy":{"lvl0":"Getting Started","lvl1":"Whistle (Built-in Local STT)","lvl2":"Long audio","lvl3":""}},
|
|
7419
|
+
{"objectID":"227e33113855fae825493b60851693beeb2467f4f71008248886477e27fbbd27","title":"Streaming","url":"/docs/getting-started/providers/whistle#streaming","content":"Whistle streams natively. transcribeStream() takes PCM16LE mono frames (at\nsampleRate, default 16 kHz, any frame size), feeds the engine about a second\nat a time, and yields:\na final segment whenever the engine commits words (two consecutive\n passes agreed on them), with word timings measured from the start of the\n stream — join the finals with a space for the transcript;\nan interim segment carrying the unconfirmed tail whenever it changes.\n\nEach stream runs on a worker of its own, so it never interleaves with batch\ncalls on the same handler.","hierarchy":{"lvl0":"Getting Started","lvl1":"Whistle (Built-in Local STT)","lvl2":"Streaming","lvl3":""}},
|
|
7420
|
+
{"objectID":"c292466ae8a0e9b28914ed9e6010c07ebb8425559e229ecdd1dfe36c352b0d89","title":"Audio formats","url":"/docs/getting-started/providers/whistle#audio-formats","content":"| Format | Decoded by |\n| --------------------------------------------------------------------- | -------------- |\n| WAV — 8/16/24/32-bit PCM, 32/64-bit float, any rate and channel count | Whistle itself |\n| raw pcm16 | Whistle itself |\n| mp3, m4a, mp4, ogg, opus, webm, flac, mpeg | ffmpeg |\n\nCompressed formats need ffmpeg: FFMPEG_PATH, the optional ffmpeg-static\npackage (pnpm add ffmpeg-static), or ffmpeg on PATH. Without one, the\ncall fails with an error that names the formats Whistle can read by itself.","hierarchy":{"lvl0":"Getting Started","lvl1":"Whistle (Built-in Local STT)","lvl2":"Audio formats","lvl3":""}},
|
|
7421
|
+
{"objectID":"9429c5e0a71ffbdc447014b203905467c61b374d5583cb17a0e5cb90d96dcd93","title":"Environment variables","url":"/docs/getting-started/providers/whistle#environment-variables","content":"| Variable | Default | Meaning |\n| --------------------------------- | ------- | --------------------------------------------------------------- |\n| NEUROLINK_WHISTLE_DIR | — | Directory holding the three files |\n| NEUROLINK_MODEL_DIR | — | Parent directory for local models; Whistle uses <dir>/whistle |\n| NEUROLINK_WHISTLE_AUTO_DOWNLOAD | 1 | 0 forbids the first-use download |\n| NEUROLINK_WHISTLE_KEYWORDS | 0 | 1 enables keyword biasing from vocabulary |\n| FFMPEG_PATH | — | ffmpeg binary for compressed formats |","hierarchy":{"lvl0":"Getting Started","lvl1":"Whistle (Built-in Local STT)","lvl2":"Environment variables","lvl3":""}},
|
|
7422
|
+
{"objectID":"4b33ae49583501e03d79b64042c6a88b3e5272910a29161dcd353593af1a1424","title":"Runtime behaviour","url":"/docs/getting-started/providers/whistle#runtime-behaviour","content":"One warm worker thread per WhistleSTT instance holds the engine and the\n model (~0.2 s to start); requests are answered in order. The worker is\n unreferenced while idle, so it never keeps your process alive; call\n dispose() to stop it early.\nIf the worker crashes, the requests it held fail with an STTError, and the\n next call starts a fresh worker.","hierarchy":{"lvl0":"Getting Started","lvl1":"Whistle (Built-in Local STT)","lvl2":"Runtime behaviour","lvl3":""}},
|
|
7423
|
+
{"objectID":"4a9a4c2f798b0fcb3745e1c3d957b8e72b8ec103e51747d673f447ed1433e265","title":"Accuracy","url":"/docs/getting-started/providers/whistle#accuracy","content":"Whistle is a 17 MB model. It is accurate on clear speech in its seven\nlanguages, but it is noticeably behind cloud engines (Deepgram, ElevenLabs\nScribe, Google, Azure) and large Whisper-class models on accents,\nbackground noise, overlapping speakers, rare names and domain jargon, and it\ndoes not diarize. It is a sensible default for development, offline use and\nprivacy-sensitive audio; configure a cloud or self-hosted provider where\naccuracy matters, or add a dictionary and the correction layer of\ntranscribe().","hierarchy":{"lvl0":"Getting Started","lvl1":"Whistle (Built-in Local STT)","lvl2":"Accuracy","lvl3":""}},
|
|
7366
7424
|
{"objectID":"884ee0aaccf14df2941d0048aa7934768312271d2cfbd663d43599769dea63cc","title":"xAI Grok Provider Guide","url":"/docs/getting-started/providers/xai","content":"xAI Grok Provider Guide\n\nText + vision generation with the Grok family through a single API\n\nOverview\n\nxAI hosts Elon Musk's Grok family of models behind an OpenAI-compatible\nchat-completions endpoint. NeuroLink wraps api.x.ai/v1 so the same\ngenerate / stream contract used by every other provider works for Grok\nwithout translation.\ngrok-3 — flagship; best for complex reasoning, math, coding\ngrok-3-mini — faster + cheaper variant of Grok 3\ngrok-2-latest — previous flagship; still supported\ngrok-2-vision-latest — multimodal (text + images)\ngrok-beta — pre-release / experimental access\n\nKey Facts\nProtocol: OpenAI-compatible (/v1/chat/completions)\nDefault base URL: https://api.x.ai/v1\nDefault model: grok-3\nContext window: 131K tokens (32K on grok-2-vision-latest)\nVision: Yes — grok-2-vision-latest accepts image inputs\nStreaming: Supported\nTool calling: Supported\nReasoning trace: Not exposed (use Grok-3 for natively-strong reasoning)\n\nQuick Start\nGet an API Key\n\nSign up at https://console.x.ai/ and create an\nAPI key under API Keys.\nConfigure Environment\n\nAdd to your .env file:\nInstall NeuroLink\nGenerate Your First Response\n\nSupported Models\n\n| Model ID | Family | Context | Vision | Notes |\n| ---------------------- | ------------- | ------- | ------ | -------------------------- |\n| grok-3 | Grok 3 | 131K | No | Default; best reasoning |\n| grok-3-mini | Grok 3 Mini | 131K | No | Faster + cheaper Grok 3 |\n| grok-2-latest | Grok 2 | 131K | No | Previous flagship |\n| grok-2-vision-latest | Grok 2 Vision | 32K | Yes | Multimodal text + image |\n| grok-beta | Beta | 131K | No | Pre-release / experimental |\n\nPass any model ID via --model (CLI) or model: (SDK).\n\nSDK Usage\n\nBasic Generation\n\nVision Input (Grok 2 Vision)\n\nStreaming\n\nTool Calling\n\nPer-Call Credential Override\n\nCLI Usage\n\nBasic Commands\n\nProvider Aliases\n\n| Alias | Example |\n| ------ | ----------------- |\n| xai | --provider xai |\n| grok | --provider grok |\n\nConfiguration Reference\n\n| Environment Variable | Required | Default | Description |\n| -------------------- | -------- | --------------------- | ------------------------------- |\n| XAI_API_KEY | Yes | — | xAI API key |\n| XAI_MODEL | No | grok-3 | Default model to use |\n| XAI_BASE_URL | No | https://api.x.ai/v1 | Base URL (override for proxies) |\n\nFeature Support Matrix\n\n| Feature | grok-3 | grok-3-mini | grok-2-latest | grok-2-vision | grok-beta |\n| ----------------- | ------ | ----------- | ------------- | ------------- | --------- |\n| Text generation | Yes | Yes | Yes | Yes | Yes |\n| Streaming | Yes | Yes | Yes | Yes | Yes |\n| Tool calling | Yes | Yes | Yes | Yes | Yes |\n| Structured output | Yes | Yes | Yes | Yes | Yes |\n| Vision / images | No | No | No | Yes | No |\n| Embeddings | No | No | No | No | No |\n\nTroubleshooting\n\n\"Invalid xAI API key\"\n\nThe XAI_API_KEY is missing or incorrect.\n\nGet or rotate keys at https://console.x.ai/.\n\n\"xAI rate limit exceeded\"\n\nToo many requests in a short window. Implement exponential backoff or\nreduce concurrency. Free-tier limits are tight; consider upgrading at\nhttps://console.x.ai/.\n\n\"xAI account has insufficient quota\"\n\nTop up at https://console.x.ai/.\n\n\"Model not found\"\n\nUse one of the documented model IDs above. Custom fine-tunes are not\nexposed through the public API at this time.\n\nSee Also\nAdding 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":"","lvl3":""}},
|
|
7367
7425
|
{"objectID":"f15e86375a87a665a10229f6826884c69484bcf7465db56c3c727ea4c881b1f0","title":"xAI Grok Provider Guide","url":"/docs/getting-started/providers/xai#xai-grok-provider-guide","content":"Text + vision generation with the Grok family through a single API","hierarchy":{"lvl0":"Getting Started","lvl1":"xAI Grok Provider Guide","lvl2":"xAI Grok Provider Guide","lvl3":""}},
|
|
7368
7426
|
{"objectID":"2e8b4364c692013eea8d3358e460540319ff35697d870d50a8346b36750d539f","title":"Overview","url":"/docs/getting-started/providers/xai#overview","content":"xAI hosts Elon Musk's Grok family of models behind an OpenAI-compatible\nchat-completions endpoint. NeuroLink wraps api.x.ai/v1 so the same\ngenerate / stream contract used by every other provider works for Grok\nwithout translation.\ngrok-3 — flagship; best for complex reasoning, math, coding\ngrok-3-mini — faster + cheaper variant of Grok 3\ngrok-2-latest — previous flagship; still supported\ngrok-2-vision-latest — multimodal (text + images)\ngrok-beta — pre-release / experimental access","hierarchy":{"lvl0":"Getting Started","lvl1":"xAI Grok Provider Guide","lvl2":"Overview","lvl3":""}},
|
|
@@ -10355,7 +10413,7 @@
|
|
|
10355
10413
|
{"objectID":"ebf0e8b83f1c274852b8367930f04784c3499eb3af2bf086dc5c01462975c0c2","title":"ServerAdapterConfig","url":"/docs/reference/server-configuration#serveradapterconfig","content":"The main configuration object for server adapters.","hierarchy":{"lvl0":"Reference","lvl1":"Srvr Cofiguratio Rfrc []","lvl2":"ServerAdapterConfig","lvl3":""}},
|
|
10356
10414
|
{"objectID":"677188568d1a1f62404df0b7a4c3655f9e19f645c9918030d046d433a6429339","title":"Core Options","url":"/docs/reference/server-configuration#core-options","content":"| Option | Type | Default | Description |\n| ---------------------- | --------- | ----------- | ------------------------------------------------ |\n| port | number | 3000 | Server port to listen on |\n| host | string | \"0.0.0.0\" | Server host/interface to bind |\n| basePath | string | \"/api\" | Base path prefix for all routes |\n| timeout | number | 30000 | Request timeout in milliseconds |\n| enableMetrics | boolean | true | Enable metrics endpoint |\n| enableSwagger | boolean | false | Enable OpenAPI/Swagger documentation (see below) |\n| disableBuiltInHealth | boolean | false | Disable built-in health routes |","hierarchy":{"lvl0":"Reference","lvl1":"Srvr Cofiguratio Rfrc []","lvl2":"Core Options","lvl3":""}},
|
|
10357
10415
|
{"objectID":"679f1af42104e68e108d5e6009e16718cab67c8d2f3712b45dc516ba333b9c27","title":"OpenAPI/Swagger Documentation (enableSwagger)","url":"/docs/reference/server-configuration#openapiswagger-documentation-enableswagger","content":"When enableSwagger is set to true, the server exposes interactive API documentation endpoints:\n\n| Endpoint | Description |\n| ----------------------------- | ---------------------------------------- |\n| GET {basePath}/openapi.json | OpenAPI 3.1 specification in JSON format |\n| GET {basePath}/openapi.yaml | OpenAPI 3.1 specification in YAML format |\n| GET {basePath}/docs | Interactive Swagger UI documentation |\n\nExample URLs (with default basePath /api):\nhttp://localhost:3000/api/openapi.json\nhttp://localhost:3000/api/openapi.yaml\nhttp://localhost:3000/api/docs\n\nThe Swagger UI provides an interactive interface where you can:\nBrowse all available API endpoints\nView request/response schemas\nTest API calls directly from the browser\nDownload the OpenAPI specification\n\nSecurity Consideration: In production environments, consider disabling enableSwagger to prevent exposing internal API structure. Alternatively, protect the documentation endpoints with authentication middleware.","hierarchy":{"lvl0":"Reference","lvl1":"Srvr Cofiguratio Rfrc []","lvl2":"OpenAPI/Swagger Documentation (enableSwagger)","lvl3":""}},
|
|
10358
|
-
{"objectID":"a70d025b0c2289499401bc2bc4e8071a199c148ac4483d5a3e646d713509c2ef","title":"CORS Configuration","url":"/docs/reference/server-configuration#cors-configuration","content":"| Option | Type | Default | Description |\n| ------------- | ---------- | ------------------------------------------------------ | ---------------------------------- |\n| enabled | boolean | true | Enable CORS support |\n| origins | string[] | [\"*\"]
|
|
10416
|
+
{"objectID":"a70d025b0c2289499401bc2bc4e8071a199c148ac4483d5a3e646d713509c2ef","title":"CORS Configuration","url":"/docs/reference/server-configuration#cors-configuration","content":"| Option | Type | Default | Description |\n| ------------- | ---------- | ------------------------------------------------------ | ---------------------------------- |\n| enabled | boolean | true | Enable CORS support |\n| origins | string[] | [] | Allowed origins ([\"*\"] = any) |\n| methods | string[] | [\"GET\", \"POST\", \"PUT\", \"DELETE\", \"PATCH\", \"OPTIONS\"] | Allowed HTTP methods |\n| headers | string[] | [\"Content-Type\", \"Authorization\"] | Allowed headers |\n| credentials | boolean | false | Allow credentials |\n| maxAge | number | 86400 | Preflight cache max age in seconds |\n\nSecurity note: With no origins listed, no web page can call the server cross-origin. List the origins you serve pages from, or set [\"*\"] explicitly to allow any domain (then also set an API key). neurolink serve --cors-origin https://myapp.com does the same from the command line.","hierarchy":{"lvl0":"Reference","lvl1":"Srvr Cofiguratio Rfrc []","lvl2":"CORS Configuration","lvl3":""}},
|
|
10359
10417
|
{"objectID":"3706f16eed022d7b144945eae7c4e22925c2d8aa62896bbc81097cab7b4875e2","title":"Rate Limit Configuration","url":"/docs/reference/server-configuration#rate-limit-configuration","content":"| Option | Type | Default | Description |\n| -------------- | ---------- | ------------------------ | ------------------------------------------ |\n| enabled | boolean | true | Enable rate limiting |\n| windowMs | number | 900000 (15 min) | Time window in milliseconds |\n| maxRequests | number | 100 | Maximum requests per window |\n| message | string | \"Too many requests...\" | Error message when limit exceeded |\n| skipPaths | string[] | [] | Paths to exclude from rate limiting |\n| keyGenerator | function | IP-based | Custom function to generate rate limit key |","hierarchy":{"lvl0":"Reference","lvl1":"Srvr Cofiguratio Rfrc []","lvl2":"Rate Limit Configuration","lvl3":""}},
|
|
10360
10418
|
{"objectID":"7787f42e969a27e990c15b1b673f04d01ad837b5f49d95006f73e61b417d91a0","title":"Body Parser Configuration","url":"/docs/reference/server-configuration#body-parser-configuration","content":"| Option | Type | Default | Description |\n| ------------ | --------- | -------- | ------------------------------- |\n| enabled | boolean | true | Enable body parsing |\n| maxSize | string | \"10mb\" | Maximum body size |\n| jsonLimit | string | \"10mb\" | JSON body size limit |\n| urlEncoded | boolean | true | Enable URL-encoded body parsing |","hierarchy":{"lvl0":"Reference","lvl1":"Srvr Cofiguratio Rfrc []","lvl2":"Body Parser Configuration","lvl3":""}},
|
|
10361
10419
|
{"objectID":"7ad744b4dfda31a7010bd32f82e2b24e2ab09a16f27bd76033afb4836d9831b0","title":"Logging Configuration","url":"/docs/reference/server-configuration#logging-configuration","content":"| Option | Type | Default | Description |\n| ----------------- | --------- | -------- | ----------------------------- |\n| enabled | boolean | true | Enable request logging |\n| level | string | \"info\" | Log level |\n| includeBody | boolean | false | Include request body in logs |\n| includeResponse | boolean | false | Include response body in logs |","hierarchy":{"lvl0":"Reference","lvl1":"Srvr Cofiguratio Rfrc []","lvl2":"Logging Configuration","lvl3":""}},
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Whistle (bundled)
|
|
2
|
+
|
|
3
|
+
The files NeuroLink's built-in local speech-to-text engine needs, so that the
|
|
4
|
+
zero-config default works without any download:
|
|
5
|
+
|
|
6
|
+
| File | Source | SHA-256 (prefix) |
|
|
7
|
+
| -------------- | --------------------------------------------------------------------- | ------------------ |
|
|
8
|
+
| `needle.js` | `Cactus-Compute/needle3` @ `2ae11323dc000f5e70c49f7403efa6af12ba9e67` | `964681b2a5ec3c4d` |
|
|
9
|
+
| `needle.wasm` | `Cactus-Compute/needle3` @ `2ae11323dc000f5e70c49f7403efa6af12ba9e67` | `c43f48e11f302087` |
|
|
10
|
+
| `whistle.cact` | `Cactus-Compute/whistle` @ `b358ddadd89b7a713b5aa131f23032d3cca1b251` | `b6e02f048568ac5d` |
|
|
11
|
+
|
|
12
|
+
Both Hugging Face repositories are published under the Apache License 2.0.
|
|
13
|
+
The full hashes are pinned in `src/lib/voice/whistle/assets.ts`, which
|
|
14
|
+
verifies every file before use, here or in any other directory.
|
|
15
|
+
|
|
16
|
+
Resolution order: `credentials.stt.whistle.modelDir` / `NEUROLINK_WHISTLE_DIR`
|
|
17
|
+
→ `NEUROLINK_MODEL_DIR/whistle` → this directory → `~/.neurolink/models/whistle`
|
|
18
|
+
(where a missing file is downloaded, unless auto-download is off).
|