@juspay/neurolink 12.29.1 → 12.30.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 +376 -374
- package/dist/cli/factories/commandFactory.js +2 -1
- package/dist/core/baseProvider.js +1 -0
- package/dist/core/modules/MessageBuilder.js +8 -0
- package/dist/processors/media/VideoProcessor.d.ts +56 -4
- package/dist/processors/media/VideoProcessor.js +263 -19
- package/dist/providers/catalog/deepseek.json +2 -1
- package/dist/providers/catalog/loader.js +3 -0
- package/dist/providers/catalog/provider-catalog.schema.json +4 -0
- package/dist/providers/catalog/schema.d.ts +1 -0
- package/dist/providers/catalog/schema.js +1 -0
- package/dist/providers/configuredOpenAICompat.d.ts +1 -0
- package/dist/providers/configuredOpenAICompat.js +3 -0
- package/dist/providers/openaiChatCompletionsBase.d.ts +8 -0
- package/dist/providers/openaiChatCompletionsBase.js +16 -2
- package/dist/providers/openaiChatCompletionsClient.d.ts +1 -1
- package/dist/providers/openaiChatCompletionsClient.js +13 -2
- package/dist/types/file.d.ts +20 -2
- package/dist/types/generate.d.ts +20 -26
- package/dist/types/openaiCompatible.d.ts +3 -0
- package/dist/types/processor.d.ts +43 -0
- package/dist/types/providerCatalog.d.ts +5 -0
- package/dist/types/providers.d.ts +3 -0
- package/dist/types/stream.d.ts +11 -11
- package/dist/utils/fileDetector.d.ts +15 -0
- package/dist/utils/fileDetector.js +40 -7
- package/dist/utils/mediaDuration.d.ts +19 -0
- package/dist/utils/mediaDuration.js +23 -0
- package/dist/utils/messageBuilder.js +4 -15
- package/dist/utils/multimodalOptionsBuilder.d.ts +2 -0
- package/dist/utils/multimodalOptionsBuilder.js +7 -0
- package/docs-site/static/search-index.json +6 -6
- package/package.json +3 -2
|
@@ -3899,10 +3899,10 @@
|
|
|
3899
3899
|
{"objectID":"2c4c2bb10b6fea62d177994e6df1345d05606b65f8122b3c969cf214df3363f1","title":"CLI usage","url":"/docs/features/multimodal#cli-usage","content":"`bash","hierarchy":{"lvl0":"Features","lvl1":"Multimodal Capabilities Guide","lvl2":"CLI usage","lvl3":""}},
|
|
3900
3900
|
{"objectID":"915a9e9701a9e6b02890e744550ed66754549288fa044c90bd2dd873e6b48c2a","title":"Auto-detect","url":"/docs/features/multimodal#auto-detect","content":"neurolink generate \"Describe this video\" --file demo.mp4 --provider google-ai","hierarchy":{"lvl0":"Features","lvl1":"Multimodal Capabilities Guide","lvl2":"Auto-detect","lvl3":""}},
|
|
3901
3901
|
{"objectID":"12ce623ba884b34886674b24daff6ce9e58465c68dc25f4f66c01229c6855513","title":"Explicit flag","url":"/docs/features/multimodal#explicit-flag","content":"neurolink generate \"Summarise this\" --video standup.mp4 --provider vertex","hierarchy":{"lvl0":"Features","lvl1":"Multimodal Capabilities Guide","lvl2":"Explicit flag","lvl3":""}},
|
|
3902
|
-
{"objectID":"08774b3c1d8fd456cb7d64ad98281449b9271854310a9a713048ae2112572d5c","title":"Frame-extraction knobs","url":"/docs/features/multimodal#frame-extraction-knobs","content":"neurolink generate \"Describe each scene\" --file demo.mp4 \\\n --provider openai --video-frames 16 --video-quality 90 --video-format jpeg\n--transcribe-audiovideoOptions.
|
|
3902
|
+
{"objectID":"08774b3c1d8fd456cb7d64ad98281449b9271854310a9a713048ae2112572d5c","title":"Frame-extraction knobs","url":"/docs/features/multimodal#frame-extraction-knobs","content":"neurolink generate \"Describe each scene\" --file demo.mp4 \\\n --provider openai --video-frames 16 --video-quality 90 --video-format jpeg\n--transcribe-audiovideoOptions.transcribeAudiowhisper-1OPENAIAPIKEYOPENAIBASEURLSpoken Audio (transcribed)OPENAIAPIKEYNo transcript for : --transcribe-audiotranscribeAudio`.","hierarchy":{"lvl0":"Features","lvl1":"Multimodal Capabilities Guide","lvl2":"Frame-extraction knobs","lvl3":""}},
|
|
3903
3903
|
{"objectID":"d0faa964a225271bc41d6c279e3e925829ac8e8828518387c39ba60d97cd363f","title":"Asking which mechanism applies","url":"/docs/features/multimodal#asking-which-mechanism-applies","content":"The capability table is exported, so a caller can ask before sending — useful\nfor choosing a provider, or for budgeting.","hierarchy":{"lvl0":"Features","lvl1":"Multimodal Capabilities Guide","lvl2":"Asking which mechanism applies","lvl3":""}},
|
|
3904
3904
|
{"objectID":"10a8f5bf0ea5129e242eb09d5db285a4d91aac091c171050471ebd7eb528cb72","title":"Best practices","url":"/docs/features/multimodal#best-practices","content":"Ask an audio question of a Gemini provider only. Nothing on the frame\n path can hear the clip, so \"what was said\" has no answer there.\nKeep clips under 14 MB when you want native delivery. Re-encoding a\n screen recording at a lower bitrate usually gets a long clip under the\n ceiling without losing anything a model would read.\nRaise rather than for detail over time. Frames cost\n roughly 250 tokens each regardless of quality; more of them is what buys\n coverage of a clip where things change.\nLower for local runtimes. Ollama and llama.cpp hold every\n frame in the same memory as the model; four is the practical default.","hierarchy":{"lvl0":"Features","lvl1":"Multimodal Capabilities Guide","lvl2":"Best practices","lvl3":""}},
|
|
3905
|
-
{"objectID":"7bd6ebb59bff22b19f26c8c358eb7012f8a73d4f90eed575ca136f632c6f9bc6","title":"Troubleshooting","url":"/docs/features/multimodal#troubleshooting","content":"| Symptom | Cause
|
|
3905
|
+
{"objectID":"7bd6ebb59bff22b19f26c8c358eb7012f8a73d4f90eed575ca136f632c6f9bc6","title":"Troubleshooting","url":"/docs/features/multimodal#troubleshooting","content":"| Symptom | Cause | Fix |\n| --------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------- |\n| Model describes the file but not its content | No keyframes extracted — ffmpeg missing — and the provider takes frames | Install ffmpeg, or use a Gemini provider, which needs none |\n| in the logs | The clip failed the inline gate; the reason is on the same line | Shorten or re-encode it, or accept the frames |\n| Model cannot hear speech on a Gemini provider | The clip exceeded the inline ceiling and fell back to frames | Get the source under 14 MB, or pass |\n| produced no transcript | The warning names the reason: no audio track, unset, or audio over Whisper's 25 MB limit | Set , or split the recording |\n| Only the first seconds of a long clip are described | The frame budget was hit before the end | Raise ; the interval then spreads evenly across the whole clip |","hierarchy":{"lvl0":"Features","lvl1":"Multimodal Capabilities Guide","lvl2":"Troubleshooting","lvl3":""}},
|
|
3906
3906
|
{"objectID":"79318378a7df7cc816465eb447fa4bd2ba9e6344f17b0a9cf6661377bb03e7e2","title":"Combining Multiple Input Types","url":"/docs/features/multimodal#combining-multiple-input-types","content":"NeuroLink excels at combining different media types in a single request.","hierarchy":{"lvl0":"Features","lvl1":"Multimodal Capabilities Guide","lvl2":"Combining Multiple Input Types","lvl3":""}},
|
|
3907
3907
|
{"objectID":"412f09080a5801a35250df393e2e0694602d5312e2b3d1b017fe469bf9dc0474","title":"Batch with Multimodal (CLI)","url":"/docs/features/multimodal#batch-with-multimodal-cli","content":"The command supports , , , and . The file(s) are attached identically to every prompt in the batch (a one-line notice is printed to stderr, unconditionally — it is not suppressed by , so it never corrupts output written to stdout):\n\n(auto-detect) is not available in , because it collides with the positional (the prompts-list path). Use the explicit / / / flags instead.","hierarchy":{"lvl0":"Features","lvl1":"Multimodal Capabilities Guide","lvl2":"Batch with Multimodal (CLI)","lvl3":""}},
|
|
3908
3908
|
{"objectID":"66d907236327d676dbe6e05193c2793f7c5990dce2ad113cf078eb1ff4c73216","title":"File validation & troubleshooting (CLI)","url":"/docs/features/multimodal#file-validation-troubleshooting-cli","content":"Before any provider call, the CLI validates local file inputs across , , and :\nA path that points at a directory, doesn't exist, or can't be read (e.g. a permissions error) is rejected up front with a clear error and troubleshooting hints — no cryptic / deep in processing. This also applies to the prompts-list positional itself.\nA large file (images > 10 MB, CSV/PDF > 50 MB) prints a non-blocking warning to stderr. Like the batch attachment notice, this is unconditional — visible without and regardless of — and never mixes into stdout, so output stays valid JSON even when large-file warnings fire.\n\nThis runs even under and without API keys configured.","hierarchy":{"lvl0":"Features","lvl1":"Multimodal Capabilities Guide","lvl2":"File validation & troubleshooting (CLI)","lvl3":""}},
|
|
@@ -5474,7 +5474,7 @@
|
|
|
5474
5474
|
{"objectID":"a0720e2017f4d4189cdb29848c4023c40b9e66f58fca8fd88d41ce87a1ab783f","title":"Streaming WebSocket disconnects","url":"/docs/getting-started/providers/deepgram#streaming-websocket-disconnects","content":"Check that is valid and that your network allows outbound WebSocket connections to . Firewall or proxy configurations may block WebSocket upgrades.","hierarchy":{"lvl0":"Getting Started","lvl1":"Deepgram Provider Guide","lvl2":"Streaming WebSocket disconnects","lvl3":""}},
|
|
5475
5475
|
{"objectID":"27de57f1a55130cc5f2cf7e470801eff52bf6a056c6e29e62498f7a441b22a3a","title":"Diarization not appearing in results","url":"/docs/getting-started/providers/deepgram#diarization-not-appearing-in-results","content":"Diarization requires multi-speaker audio with clearly separated voices. Single-speaker audio will return no speaker labels. Also confirm is set, and that you are using a model that supports it (Nova-2 and above).","hierarchy":{"lvl0":"Getting Started","lvl1":"Deepgram Provider Guide","lvl2":"Diarization not appearing in results","lvl3":""}},
|
|
5476
5476
|
{"objectID":"b7d80419b846034a24796f9bc7f22b7458c21238354ae728c236e8c0573e5dd2","title":"See Also","url":"/docs/getting-started/providers/deepgram#see-also","content":"Audio Input (STT) Guide — complete multi-provider STT reference\nVoice Agent Guide — building full voice assistants\nOpenAI TTS Provider Guide — text-to-speech counterpart\nElevenLabs Provider Guide — alternative TTS with voice cloning\n\nNeed Help? Join the GitHub Discussions or open an issue.","hierarchy":{"lvl0":"Getting Started","lvl1":"Deepgram Provider Guide","lvl2":"See Also","lvl3":""}},
|
|
5477
|
-
{"objectID":"f0011413e792381f4d6131f700afe5f7742598666be073cf1f98530c99fd5138","title":"DeepSeek Provider Guide","url":"/docs/getting-started/providers/deepseek","content":"DeepSeek Provider Guide\n\nText and image input with DeepSeek-V4.1-Flash and DeepSeek-V4-Pro through a single API\n\nOverview\n\nDeepSeek is a Chinese AI research lab offering highly capable open-weight models via a hosted cloud API. NeuroLink wraps their OpenAI-compatible endpoint. The API serves two models:\n— DeepSeek-V4.1-Flash. Reads images as well as text.\n— DeepSeek-V4-Pro-0813. Text only.\n\nThe older ids still work as aliases of : * answers with thinking off, and * answers with thinking on and returns a reasoning trace.\n\nKey Facts\nProtocol: OpenAI-compatible ()\nDefault base URL: \nContext window: 1M tokens (1,048,576), with up to 384K (393,216) output tokens\nVision: and its aliases; not reasoningcontentdeepseek-reasoner.envdeepseek-chatdeepseek-flashdeepseek-reasonerdeepseek-flashdeepseek-flashdeepseek-v4-pro--modelmodel:GET /modelsapi.deepseek.comdeepseek-flashdeepseek-v4-prodeepseek--provider deepseekds--provider dsDEEPSEEKAPIKEYsk-DEEPSEEKMODELdeepseek-chatDEEPSEEKBASEURLhttps://api.deepseek.comdeepseek-chatdeepseek-reasonerdeepseek-flashdeepseek-v4-proDEEPSEEKAPIKEY400deepseek-chatdeepseek-reasonerdeepseek-reasonerdeepseek-flashdeepseek-v4-prodeepseek-
|
|
5477
|
+
{"objectID":"f0011413e792381f4d6131f700afe5f7742598666be073cf1f98530c99fd5138","title":"DeepSeek Provider Guide","url":"/docs/getting-started/providers/deepseek","content":"DeepSeek Provider Guide\n\nText and image input with DeepSeek-V4.1-Flash and DeepSeek-V4-Pro through a single API\n\nOverview\n\nDeepSeek is a Chinese AI research lab offering highly capable open-weight models via a hosted cloud API. NeuroLink wraps their OpenAI-compatible endpoint. The API serves two models:\n— DeepSeek-V4.1-Flash. Reads images as well as text.\n— DeepSeek-V4-Pro-0813. Text only.\n\nThe older ids still work as aliases of : * answers with thinking off, and * answers with thinking on and returns a reasoning trace.\n\nKey Facts\nProtocol: OpenAI-compatible ()\nDefault base URL: \nContext window: 1M tokens (1,048,576), with up to 384K (393,216) output tokens\nVision: and its aliases; not reasoningcontentdeepseek-reasoner.envdeepseek-chatdeepseek-flashdeepseek-reasonerdeepseek-flashdeepseek-flashdeepseek-v4-pro--modelmodel:GET /modelsapi.deepseek.comdeepseek-flashdeepseek-v4-prodeepseek--provider deepseekds--provider dsDEEPSEEKAPIKEYsk-DEEPSEEKMODELdeepseek-chatDEEPSEEKBASEURLhttps://api.deepseek.comdeepseek-chatdeepseek-reasonerdeepseek-flashdeepseek-v4-proDEEPSEEKAPIKEY400deepseek-chatdeepseek-reasonerdeepseek-reasonerdeepseek-flashdeepseek-v4-prodeepseek-chatreasoning_content400quirks.replayReasoningContentgenerate()stream()deepseek-chat` keeps thinking off.\n\nSee Also\nImplementation spec — internal wire-format details and design decisions\nOpenAI Compatible provider — generic provider for any OpenAI-compatible endpoint\nLiteLLM provider — proxy-based multi-provider access\n\nNeed Help? Join the GitHub Discussions or open an issue.","hierarchy":{"lvl0":"Getting Started","lvl1":"DeepSeek Provider Guide","lvl2":"","lvl3":""}},
|
|
5478
5478
|
{"objectID":"958538aa2497f8c0121993c79063ab03a4e9182ad54e8e826fac34ccf66059d2","title":"DeepSeek Provider Guide","url":"/docs/getting-started/providers/deepseek#deepseek-provider-guide","content":"Text and image input with DeepSeek-V4.1-Flash and DeepSeek-V4-Pro through a single API","hierarchy":{"lvl0":"Getting Started","lvl1":"DeepSeek Provider Guide","lvl2":"DeepSeek Provider Guide","lvl3":""}},
|
|
5479
5479
|
{"objectID":"c3e1684d29fb0fb80d0a6c08cccede4c72627e18920573ed08ace68662625d5e","title":"Overview","url":"/docs/getting-started/providers/deepseek#overview","content":"DeepSeek is a Chinese AI research lab offering highly capable open-weight models via a hosted cloud API. NeuroLink wraps their OpenAI-compatible endpoint. The API serves two models:\n— DeepSeek-V4.1-Flash. Reads images as well as text.\n— DeepSeek-V4-Pro-0813. Text only.\n\nThe older ids still work as aliases of : * answers with thinking off, and * answers with thinking on and returns a reasoning trace.","hierarchy":{"lvl0":"Getting Started","lvl1":"DeepSeek Provider Guide","lvl2":"Overview","lvl3":""}},
|
|
5480
5480
|
{"objectID":"90018a4be75353babd3c1ed5c9f76895280adfbeaad70cff5718ac9f60d46d88","title":"Key Facts","url":"/docs/getting-started/providers/deepseek#key-facts","content":"Protocol: OpenAI-compatible ()\nDefault base URL: \nContext window: 1M tokens (1,048,576), with up to 384K (393,216) output tokens\nVision: and its aliases; not reasoning_contentdeepseek-reasoner`)","hierarchy":{"lvl0":"Getting Started","lvl1":"DeepSeek Provider Guide","lvl2":"Key Facts","lvl3":""}},
|
|
@@ -5504,7 +5504,7 @@
|
|
|
5504
5504
|
{"objectID":"54989b947cc0840d9d58abc26fce361c1c0c678c2ebef38eb352dc221da6b43c","title":"\"DeepSeek rate limit exceeded\"","url":"/docs/getting-started/providers/deepseek#deepseek-rate-limit-exceeded","content":"Too many requests in a short window. Implement exponential backoff or reduce request concurrency. Rate limits are published in the DeepSeek API docs.","hierarchy":{"lvl0":"Getting Started","lvl1":"DeepSeek Provider Guide","lvl2":"\"DeepSeek rate limit exceeded\"","lvl3":""}},
|
|
5505
5505
|
{"objectID":"bcadc6d16aa1af4c9dd5e509db1ee7f587179ae8ca9d98e7240408c739991802","title":"\"Model not found\"","url":"/docs/getting-started/providers/deepseek#model-not-found","content":"DeepSeek answers an unknown id with and \"The supported API model names are deepseek-flash, deepseek-v4-pro\". Use one of those, or the / aliases.","hierarchy":{"lvl0":"Getting Started","lvl1":"DeepSeek Provider Guide","lvl2":"\"Model not found\"","lvl3":""}},
|
|
5506
5506
|
{"objectID":"5d6c41711a9d937d9546d0227eee7fce427c5cdff6f8d549cf4e4171ba66b5d7","title":"Slow responses with thinking on","url":"/docs/getting-started/providers/deepseek#slow-responses-with-thinking-on","content":"Expected. , and reason before answering, which adds latency. Use for latency-sensitive paths.","hierarchy":{"lvl0":"Getting Started","lvl1":"DeepSeek Provider Guide","lvl2":"Slow responses with thinking on","lvl3":""}},
|
|
5507
|
-
{"objectID":"b507cb02f53bda7fec320d54c24a3a6d33e5e17bda8fe60622265712c2e59944","title":"Tool calls failing with thinking on","url":"/docs/getting-started/providers/deepseek#tool-calls-failing-with-thinking-on","content":"DeepSeek
|
|
5507
|
+
{"objectID":"b507cb02f53bda7fec320d54c24a3a6d33e5e17bda8fe60622265712c2e59944","title":"Tool calls failing with thinking on","url":"/docs/getting-started/providers/deepseek#tool-calls-failing-with-thinking-on","content":"DeepSeek's thinking mode guide says each turn's must be sent back on every later request once tools are in play, and that the API returns otherwise. NeuroLink does this for you: the DeepSeek catalog entry sets , so both and send the reasoning back on each follow-up request. (Tested live on 2026-09-26, the API accepted follow-ups with or without it, but NeuroLink follows the documented contract.)\n\nIf a tool loop still fails, check whether you are replaying conversation history yourself without each assistant turn's reasoning. For tool-heavy workflows where you don't need the reasoning, keeps thinking off.","hierarchy":{"lvl0":"Getting Started","lvl1":"DeepSeek Provider Guide","lvl2":"Tool calls failing with thinking on","lvl3":""}},
|
|
5508
5508
|
{"objectID":"892870aad241356c56f5445ecf528a3a7b6ba11c3eedea3673715106da0ef59d","title":"See Also","url":"/docs/getting-started/providers/deepseek#see-also","content":"Implementation spec — internal wire-format details and design decisions\nOpenAI Compatible provider — generic provider for any OpenAI-compatible endpoint\nLiteLLM provider — proxy-based multi-provider access\n\nNeed Help? Join the GitHub Discussions or open an issue.","hierarchy":{"lvl0":"Getting Started","lvl1":"DeepSeek Provider Guide","lvl2":"See Also","lvl3":""}},
|
|
5509
5509
|
{"objectID":"b3dc872a8aa0c095281226e80d35c5d769d99952788bf74ad7ee9fb302df11f4","title":"ElevenLabs Music Provider Guide","url":"/docs/getting-started/providers/elevenlabs-music","content":"ElevenLabs Music Provider Guide\n\nMusic + sound-effect generation via the ElevenLabs Music / SFX API\n\nOverview\n\nElevenLabs ships music and sound-effect models\nunder the same account used for TTS. NeuroLink supports both via\n (full musical tracks) and\n (short SFX).\n\nKey Facts\nEndpoint: (and )\nAuth: header (same key as TTS)\nOutput: MP3\n\nQuick Start\nGet an API Key\n\nhttps://elevenlabs.io/app/settings/api-keys\nConfigure\nGenerate Music\n\nSound Effects\n\nCLI Usage\n\nConfiguration Reference\n\n| Environment Variable | Required | Description |\n| -------------------- | -------- | -------------- |\n| | Yes | ElevenLabs key |\n\nTroubleshooting\n— your ElevenLabs subscription has an open\n invoice. Complete payment at\n https://elevenlabs.io/app/subscription\n to re-enable the music endpoint.\n\nSee Also\nBeatoven Provider\nLyria Provider\nElevenLabs TTS","hierarchy":{"lvl0":"Getting Started","lvl1":"ElevenLabs Music Provider Guide","lvl2":"","lvl3":""}},
|
|
5510
5510
|
{"objectID":"c53d01db44f92cdf3d96fda02e6105b3c436689e2b09c49cc9819592771f88d0","title":"ElevenLabs Music Provider Guide","url":"/docs/getting-started/providers/elevenlabs-music#elevenlabs-music-provider-guide","content":"Music + sound-effect generation via the ElevenLabs Music / SFX API","hierarchy":{"lvl0":"Getting Started","lvl1":"ElevenLabs Music Provider Guide","lvl2":"ElevenLabs Music Provider Guide","lvl3":""}},
|
|
@@ -8893,10 +8893,10 @@
|
|
|
8893
8893
|
{"objectID":"dfcef07cbe4841f92c204d0ab2f64ab5bafd5cad7da138a9ff481b47b72d89b6","title":"Must remain class (12)","url":"/docs/provider-integration/migration-ledger#must-remain-class-12","content":"| Provider | Why |\n| ------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| | AWS SigV4/Converse protocol, custom loop, not OpenAI-compatible. Tier 4. |\n| | Chat portion is catalog-shaped, but embeddings, image generation, and OpenAI-specific telemetry/errors are executable behavior. |\n| | Two native protocols (Google GenAI + Anthropic-on-Vertex) and multiple modality pipelines behind one provider identity. |\n| | Native Messages API auth/message/tool semantics are executable protocol behavior. ","hierarchy":{"lvl0":"Provider Integration","lvl1":"Provider Descriptor Migration Ledger","lvl2":"Must remain class (12)","lvl3":""}},
|
|
8894
8894
|
{"objectID":"a4f69e09308f075830f2efa7c1b0126236c5ec0fc12bfe08be21764a627e47a5","title":"Must remain core class (1)","url":"/docs/provider-integration/migration-ledger#must-remain-core-class-1","content":"| Provider | Why |\n| ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| | This is the generic protocol surface itself, not a direct vendor. It should consume shared descriptor/config primitives but must never become a fixed-vendor JSON row — collapsing it into the catalog would conflate \"the adapter\" with \"an entry in the adapter's catalog.\" |","hierarchy":{"lvl0":"Provider Integration","lvl1":"Provider Descriptor Migration Ledger","lvl2":"Must remain core class (1)","lvl3":""}},
|
|
8895
8895
|
{"objectID":"235850085d9102413140920b9d5e5e2ff6113d007c865f5d78012af80fbf1843","title":"Suggested execution order","url":"/docs/provider-integration/migration-ledger#suggested-execution-order","content":"— low-risk once the conflicts above are resolved, JSON-ready-now; proves the removal path for a hand descriptor that already has a JSON twin.\n, — smallest schema extensions (few named fields), each unlocks one direct-vendor class removal.\nThree shared adapters (local-runtime, embedding-only, image-generation) — each unlocks 3 providers at once; build once, migrate three.\ndescriptor-only JSON metadata — proof of concept for moving static descriptor data out of a \"must remain class\" provider without touching its execution.\nDirect-vendor \"must remain class\" providers (, , , , , , ) get descriptor-only JSON metadata migrations, execution untouched — lower priority, cosmetic consolidation only.\nAggregators (, ), the core adapter (), and are excluded from the first-class-count migration priority entirely — the first three add no direct-vendor coverage however they're implemented, and is a -only provider with no / surface to migrate at all.","hierarchy":{"lvl0":"Provider Integration","lvl1":"Provider Descriptor Migration Ledger","lvl2":"Suggested execution order","lvl3":""}},
|
|
8896
|
-
{"objectID":"6122b2e83358a45c64da87c1ca80a2d579cdfb087a6d9dc58b1e02805296b14a","title":"OpenAI-Compatible Provider Catalog","url":"/docs/provider-integration/openai-compat-catalog","content":"OpenAI-Compatible Provider Catalog\n\nSixteen OpenAI-compatible providers — API Route, Baseten, SambaNova,\nCerebras, Groq, xAI, Together AI, Fireworks AI, Perplexity, Mistral,\nCloudflare Workers AI, GMI Cloud, Inception Labs, io.net Intelligence,\nMancer, Upstage — are registered from one JSON file each, under\n, and served by one generic class,\n\n(). Adding another provider to\nthis family means adding one JSON file — no subclass, no registry edit, no\nhand-written enum member, no test edit.\n\nThe JSON is the source of truth\n\n still exists and keeps its name and element type,\nbut it is now built by the loader ()\nfrom the JSON files rather than hand-written. Two consumers read the JSON:\nCodegen () writes the compile-time\n artifacts into marked regions — the member, the\n enum, the key — plus the generated\n index. Pre-commit and CI fail on stale output.\nThe loader builds the runtime entry; the descriptor, config options,\n context windows, pricing, vision map and model-choice tables all derive\n from it, as do the provider test suites' rows and counts.\n\nEach file is validated by a zod schema ()\nwith a mirrored for editor squiggles.\nProbe evidence (roster/auth/billing dates, live-matrix result, PR URL)\nlives in the file's block — the old\n files were folded into it.\n\nField-by-field reference and the escape hatches:\n. Design rationale and the approved rulings:\n.\n\nWhen a provider belongs in the catalog\n\nA provider belongs in the JSON catalog if it needs only:\na credential (API key, optionally an extra field like Cloudflare's account id)\na base URL (static default + optional env override, or computed from an\n extra credential field)\na default/fallback model\nerror-message classification (auth / rate-limit / invalid-model / generic)\na named, closed catalog quirk. DeepSeek is the worked example: it 400s on\n structured-output requests, so sets\n and the\n generic downgrades to before\n sending — no subclass.\n\nWhen a provider needs a dedicated subclass instead\n\nAzure OpenAI is deliberately not in the catalog because it overrides real\nrequest-shaping behavior that no named catalog quirk expresses:\nAzure OpenAI () overrides four hooks:\n (deployment-name URL routing across two Azure\n endpoint schemes), (Azure's header instead of\n ), (renames to\n for o-series/gpt-5+ deployments), and\n (Azure supports both at once).\n\nIf a future provider needs any hook beyond the 3 mandatory ones\n(, , ) or the 2\npurely-declarative optional ones (,\n) and that hook is not already a named catalog quirk, it\nneeds either a new closed quirk (the DeepSeek route) or a dedicated subclass\n(the Azure OpenAI route).\n\nError-message fidelity\n\nEach entry's is a direct, order-preserving translation of its\noriginal subclass's / ladder into rule data\n(status code and/or case-insensitive pattern), classified via\n\n(). Every bespoke message string is\npreserved verbatim — including xAI's \"top up your account\" quota URL and\nGroq's decommissioned-vs-not-found distinction — via each rule's own\n field (), with model-name\ninterpolation carried through . There is no message-wording\nregression here. Timeout classification is likewise unchanged: 15 of the 16\nproviders map to (the classifier's default),\nand Groq alone maps it to . Groq's subclass override is\npreserved verbatim via the JSON's , so no\nprovider's timeout class changed during migration.\n\nKnown pre-existing quirk this migration preserved (not fixed)\n\nMistral's provider registration passes a value to\n that does not check \n(, a bare literal), while\n for Mistral does\ncheck (falling back to ).\nEvery other catalog provider's registry default and class default agree.\nThis is expressed via the JSON's \n( only for Mistral). The JSON migration did reconcile one half of it:\n now returns the real generation default\n() rather than the registry literal — a disclosed\nbug-fix-grade delta, since the two disagreed before.","hierarchy":{"lvl0":"Provider Integration","lvl1":"OpenAI-Compatible Provider Catalog","lvl2":"","lvl3":""}},
|
|
8896
|
+
{"objectID":"6122b2e83358a45c64da87c1ca80a2d579cdfb087a6d9dc58b1e02805296b14a","title":"OpenAI-Compatible Provider Catalog","url":"/docs/provider-integration/openai-compat-catalog","content":"OpenAI-Compatible Provider Catalog\n\nSixteen OpenAI-compatible providers — API Route, Baseten, SambaNova,\nCerebras, Groq, xAI, Together AI, Fireworks AI, Perplexity, Mistral,\nCloudflare Workers AI, GMI Cloud, Inception Labs, io.net Intelligence,\nMancer, Upstage — are registered from one JSON file each, under\n, and served by one generic class,\n\n(). Adding another provider to\nthis family means adding one JSON file — no subclass, no registry edit, no\nhand-written enum member, no test edit.\n\nThe JSON is the source of truth\n\n still exists and keeps its name and element type,\nbut it is now built by the loader ()\nfrom the JSON files rather than hand-written. Two consumers read the JSON:\nCodegen () writes the compile-time\n artifacts into marked regions — the member, the\n enum, the key — plus the generated\n index. Pre-commit and CI fail on stale output.\nThe loader builds the runtime entry; the descriptor, config options,\n context windows, pricing, vision map and model-choice tables all derive\n from it, as do the provider test suites' rows and counts.\n\nEach file is validated by a zod schema ()\nwith a mirrored for editor squiggles.\nProbe evidence (roster/auth/billing dates, live-matrix result, PR URL)\nlives in the file's block — the old\n files were folded into it.\n\nField-by-field reference and the escape hatches:\n. Design rationale and the approved rulings:\n.\n\nWhen a provider belongs in the catalog\n\nA provider belongs in the JSON catalog if it needs only:\na credential (API key, optionally an extra field like Cloudflare's account id)\na base URL (static default + optional env override, or computed from an\n extra credential field)\na default/fallback model\nerror-message classification (auth / rate-limit / invalid-model / generic)\na named, closed catalog quirk. DeepSeek is the worked example: it 400s on\n structured-output requests, so sets\n and the\n generic downgrades to before\n sending — no subclass. It also sets :\n DeepSeek documents that each assistant turn's must go\n back on later requests once tools are in play, so the shared message\n converter and the streaming tool loop send it — for this quirk only, since\n strict OpenAI-compatible backends reject the unknown field.\n\nWhen a provider needs a dedicated subclass instead\n\nAzure OpenAI is deliberately not in the catalog because it overrides real\nrequest-shaping behavior that no named catalog quirk expresses:\nAzure OpenAI () overrides four hooks:\n (deployment-name URL routing across two Azure\n endpoint schemes), (Azure's header instead of\n ), (renames to\n for o-series/gpt-5+ deployments), and\n (Azure supports both at once).\n\nIf a future provider needs any hook beyond the 3 mandatory ones\n(, , ) or the 2\npurely-declarative optional ones (,\n) and that hook is not already a named catalog quirk, it\nneeds either a new closed quirk (the DeepSeek route) or a dedicated subclass\n(the Azure OpenAI route).\n\nError-message fidelity\n\nEach entry's is a direct, order-preserving translation of its\noriginal subclass's / ladder into rule data\n(status code and/or case-insensitive pattern), classified via\n\n(). Every bespoke message string is\npreserved verbatim — including xAI's \"top up your account\" quota URL and\nGroq's decommissioned-vs-not-found distinction — via each rule's own\n field (), with model-name\ninterpolation carried through . There is no message-wording\nregression here. Timeout classification is likewise unchanged: 15 of the 16\nproviders map to (the classifier's default),\nand Groq alone maps it to . Groq's subclass override is\npreserved verbatim via the JSON's , so no\nprovider's timeout class changed during migration.\n\nKnown pre-existing quirk this migration preserved (not fixed)\n\nMistral's provider registration passes a value to\n that does not check \n(, a bare literal), while\n for Mistral does\ncheck (falling back to ).\nEvery other catalog provider's registry default and class default agree.\nThis is expressed via the JSON's \n( only for Mistral). The JSON migration did reconcile one half of it:\n now returns the real generation default\n() rather than the registry literal — a disclosed\nbug-fix-grade delta, since the two disagreed before.","hierarchy":{"lvl0":"Provider Integration","lvl1":"OpenAI-Compatible Provider Catalog","lvl2":"","lvl3":""}},
|
|
8897
8897
|
{"objectID":"9a91a5b4a32a9f1e89c6a28f762c3594c4a39d96d32cc9e6e1fa0f5cb3f609e4","title":"OpenAI-Compatible Provider Catalog","url":"/docs/provider-integration/openai-compat-catalog#openai-compatible-provider-catalog","content":"Sixteen OpenAI-compatible providers — API Route, Baseten, SambaNova,\nCerebras, Groq, xAI, Together AI, Fireworks AI, Perplexity, Mistral,\nCloudflare Workers AI, GMI Cloud, Inception Labs, io.net Intelligence,\nMancer, Upstage — are registered from one JSON file each, under\n, and served by one generic class,\n\n(). Adding another provider to\nthis family means adding one JSON file — no subclass, no registry edit, no\nhand-written enum member, no test edit.","hierarchy":{"lvl0":"Provider Integration","lvl1":"OpenAI-Compatible Provider Catalog","lvl2":"OpenAI-Compatible Provider Catalog","lvl3":""}},
|
|
8898
8898
|
{"objectID":"16e60ee66171009a6638b5110cc8693f90c1a2cfde796c6932c3512d7f7421fb","title":"The JSON is the source of truth","url":"/docs/provider-integration/openai-compat-catalog#the-json-is-the-source-of-truth","content":"still exists and keeps its name and element type,\nbut it is now built by the loader ()\nfrom the JSON files rather than hand-written. Two consumers read the JSON:\nCodegen () writes the compile-time\n artifacts into marked regions — the member, the\n enum, the key — plus the generated\n index. Pre-commit and CI fail on stale output.\nThe loader builds the runtime entry; the descriptor, config options,\n context windows, pricing, vision map and model-choice tables all derive\n from it, as do the provider test suites' rows and counts.\n\nEach file is validated by a zod schema ()\nwith a mirrored for editor squiggles.\nProbe evidence (roster/auth/billing dates, live-matrix result, PR URL)\nlives in the file's block — the old\n files were folded into it.\n\nField-by-field reference and the escape hatches:\n. Design rationale and the approved rulings:\n.","hierarchy":{"lvl0":"Provider Integration","lvl1":"OpenAI-Compatible Provider Catalog","lvl2":"The JSON is the source of truth","lvl3":""}},
|
|
8899
|
-
{"objectID":"00a7366eb480e85f5377e0cb8575403e7fd9b33cc028bf95cf0fe48cc94fcea9","title":"When a provider belongs in the catalog","url":"/docs/provider-integration/openai-compat-catalog#when-a-provider-belongs-in-the-catalog","content":"A provider belongs in the JSON catalog if it needs only:\na credential (API key, optionally an extra field like Cloudflare's account id)\na base URL (static default + optional env override, or computed from an\n extra credential field)\na default/fallback model\nerror-message classification (auth / rate-limit / invalid-model / generic)\na named, closed catalog quirk. DeepSeek is the worked example: it 400s on\n structured-output requests, so sets\n and the\n generic downgrades to before\n sending — no subclass.","hierarchy":{"lvl0":"Provider Integration","lvl1":"OpenAI-Compatible Provider Catalog","lvl2":"When a provider belongs in the catalog","lvl3":""}},
|
|
8899
|
+
{"objectID":"00a7366eb480e85f5377e0cb8575403e7fd9b33cc028bf95cf0fe48cc94fcea9","title":"When a provider belongs in the catalog","url":"/docs/provider-integration/openai-compat-catalog#when-a-provider-belongs-in-the-catalog","content":"A provider belongs in the JSON catalog if it needs only:\na credential (API key, optionally an extra field like Cloudflare's account id)\na base URL (static default + optional env override, or computed from an\n extra credential field)\na default/fallback model\nerror-message classification (auth / rate-limit / invalid-model / generic)\na named, closed catalog quirk. DeepSeek is the worked example: it 400s on\n structured-output requests, so sets\n and the\n generic downgrades to before\n sending — no subclass. It also sets :\n DeepSeek documents that each assistant turn's must go\n back on later requests once tools are in play, so the shared message\n converter and the streaming tool loop send it — for this quirk only, since\n strict OpenAI-compatible backends reject the unknown field.","hierarchy":{"lvl0":"Provider Integration","lvl1":"OpenAI-Compatible Provider Catalog","lvl2":"When a provider belongs in the catalog","lvl3":""}},
|
|
8900
8900
|
{"objectID":"c2a9e3425a4cecb520467f900df8b5fa78fc4178514eba6385040bb9506e48ee","title":"When a provider needs a dedicated subclass instead","url":"/docs/provider-integration/openai-compat-catalog#when-a-provider-needs-a-dedicated-subclass-instead","content":"Azure OpenAI is deliberately not in the catalog because it overrides real\nrequest-shaping behavior that no named catalog quirk expresses:\nAzure OpenAI () overrides four hooks:\n (deployment-name URL routing across two Azure\n endpoint schemes), (Azure's header instead of\n ), (renames to\n for o-series/gpt-5+ deployments), and\n (Azure supports both at once).\n\nIf a future provider needs any hook beyond the 3 mandatory ones\n(, , ) or the 2\npurely-declarative optional ones (,\n) and that hook is not already a named catalog quirk, it\nneeds either a new closed quirk (the DeepSeek route) or a dedicated subclass\n(the Azure OpenAI route).","hierarchy":{"lvl0":"Provider Integration","lvl1":"OpenAI-Compatible Provider Catalog","lvl2":"When a provider needs a dedicated subclass instead","lvl3":""}},
|
|
8901
8901
|
{"objectID":"a5276d835ceba15da6ec36261ab78001e17f8b78ba9c8cb1c5e1282aa2f377e3","title":"Error-message fidelity","url":"/docs/provider-integration/openai-compat-catalog#error-message-fidelity","content":"Each entry's is a direct, order-preserving translation of its\noriginal subclass's / ladder into rule data\n(status code and/or case-insensitive pattern), classified via\n\n(). Every bespoke message string is\npreserved verbatim — including xAI's \"top up your account\" quota URL and\nGroq's decommissioned-vs-not-found distinction — via each rule's own\n field (), with model-name\ninterpolation carried through . There is no message-wording\nregression here. Timeout classification is likewise unchanged: 15 of the 16\nproviders map to (the classifier's default),\nand Groq alone maps it to . Groq's subclass override is\npreserved verbatim via the JSON's , so no\nprovider's timeout class changed during migration.","hierarchy":{"lvl0":"Provider Integration","lvl1":"OpenAI-Compatible Provider Catalog","lvl2":"Error-message fidelity","lvl3":""}},
|
|
8902
8902
|
{"objectID":"2a22fddc1a2c383a5e75a53e2d512d764f01ad66ab03bfe6edf12acb5d204814","title":"Known pre-existing quirk this migration preserved (not fixed)","url":"/docs/provider-integration/openai-compat-catalog#known-pre-existing-quirk-this-migration-preserved-not-fixed","content":"Mistral's provider registration passes a value to\n that does not check \n(, a bare literal), while\n for Mistral does\ncheck (falling back to ).\nEvery other catalog provider's registry default and class default agree.\nThis is expressed via the JSON's \n( only for Mistral). The JSON migration did reconcile one half of it:\n now returns the real generation default\n() rather than the registry literal — a disclosed\nbug-fix-grade delta, since the two disagreed before.","hierarchy":{"lvl0":"Provider Integration","lvl1":"OpenAI-Compatible Provider Catalog","lvl2":"Known pre-existing quirk this migration preserved (not fixed)","lvl3":""}},
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@juspay/neurolink",
|
|
3
|
-
"version": "12.
|
|
3
|
+
"version": "12.30.0",
|
|
4
4
|
"packageManager": "pnpm@10.15.1",
|
|
5
5
|
"description": "The pipe layer of an AI nervous system: one interface connecting provider neurons to your application, across three inference types — generate, stream and decide. `decide` returns typed, calibrated judgements from a non-generative model (~400ms, ~$0.00002/call) for routing, tool selection and context budgeting. MCP-native (4 transports), voice TTS/STT/realtime, RAG, agents, memory, compaction, 9 observability exporters. OpenAI · Anthropic · Gemini · Bedrock · Azure · Ollama · TypeSafe Jev and more.",
|
|
6
6
|
"author": {
|
|
@@ -248,8 +248,9 @@
|
|
|
248
248
|
"pre-push": "pnpm run check:deps && pnpm run build && pnpm run test:provider-structure && pnpm run test:model-manifests",
|
|
249
249
|
"check:all": "pnpm run lint && pnpm run format --check && pnpm run validate && pnpm run validate:commit",
|
|
250
250
|
"test:file-formats": "pnpm exec tsx test/continuous-test-suite-file-formats.ts",
|
|
251
|
-
"test:multimodal": "pnpm run test:file-formats && pnpm run test:multimodal:sdk && pnpm run test:video-native",
|
|
251
|
+
"test:multimodal": "pnpm run test:file-formats && pnpm run test:multimodal:sdk && pnpm run test:video-native && pnpm run test:video-frames",
|
|
252
252
|
"test:multimodal:sdk": "pnpm exec tsx test/continuous-test-suite-multimodal-sdk.ts",
|
|
253
|
+
"test:video-frames": "pnpm exec tsx test/continuous-test-suite-video-frames.ts",
|
|
253
254
|
"test:video-native": "pnpm exec tsx test/continuous-test-suite-video-native.ts",
|
|
254
255
|
"test:mcp-result-cache": "pnpm exec tsx test/continuous-test-suite-mcp-result-cache.ts",
|
|
255
256
|
"test:mcp-breaker-resolved-errors": "pnpm exec tsx test/continuous-test-suite-mcp-breaker-resolved-errors.ts",
|