@juspay/neurolink 12.35.3 → 12.35.5

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.
@@ -130,7 +130,7 @@
130
130
  {"objectID":"556077ecd212a861d46a7b069bfe8243ccebb383fa394531e49c9abfafdcf890","title":"6. Observability","url":"/docs/about/pipe-architecture#6-observability","content":"Every stage emits OpenTelemetry spans. The full trace covers:\nContext build duration\nToken counts (input + output)\nTool execution times\nMemory read/write latency\nProvider-specific attributes (model, temperature, finish reason)\n\nExporters: Langfuse, OTLP, Jaeger, Zipkin, Prometheus, Datadog, NewRelic, Honeycomb, Console.","hierarchy":{"lvl0":"About","lvl1":"Pipe Architecture","lvl2":"6. Observability","lvl3":""}},
131
131
  {"objectID":"9aafb7162a034e292934afb13bd6ce2ca9177be0a13fd292a734637840f23775","title":"Key Files","url":"/docs/about/pipe-architecture#key-files","content":"| File | Purpose |\n| --------------------------------------- | -------------------------------------------- |\n| src/lib/neurolink.ts | Main SDK class — orchestrates all six stages |\n| src/lib/factories/providerRegistry.ts | Provider registration with dynamic imports |\n| src/lib/context/budgetChecker.ts | Pre-generation context budget validation |\n| src/lib/context/contextCompactor.ts | Multi-stage compaction orchestrator |\n| src/lib/mcp/toolRegistry.ts | Tool management and MCP integration |\n| src/lib/rag/ragIntegration.ts | RAG auto-pipeline setup |\n| src/lib/telemetry/ | OpenTelemetry instrumentation |","hierarchy":{"lvl0":"About","lvl1":"Pipe Architecture","lvl2":"Key Files","lvl3":""}},
132
132
  {"objectID":"a93f30940dbf4ce2d9ef1cc11bcfe70eb476e3b1e3ec734597880bbd699b5606","title":"Design Invariants","url":"/docs/about/pipe-architecture#design-invariants","content":"These never change regardless of provider, model, or connector:\nDynamic imports only — No static imports of providers in the registry (prevents circular deps)\nStream is the primitive for text — generate() is always stream collected; nothing in the text path bypasses stream(). decide() is a separate inference type that returns typed judgments and never enters this path.\nBudget checked before every text call — no generate()/stream() call without a budget check. A decide() call carries its own input ceilings instead, enforced by the provider.\nTools are always external — MCP protocol for all tool integrations, including built-ins\nMemory is scoped — Each conversation has isolated memory; no cross-contamination","hierarchy":{"lvl0":"About","lvl1":"Pipe Architecture","lvl2":"Design Invariants","lvl3":""}},
133
- {"objectID":"1083b3420d2c0db59846347281059ffb8b3de773cbdcb879b080fe6d480cd572","title":"NeuroLink Vision & Roadmap","url":"/docs/about/vision","content":"NeuroLink Vision & Roadmap\n\nThe Future of AI: Edge-first execution and continuous streaming architectures\n\n🔮 The Future of AI: Edge-First & Streaming-Native\n\nThe Fundamental Shift\n\nA fundamental transformation is happening in AI: Edge-first execution makes LLM usage practically free.\n\nAs AI models move closer to users—running on edge devices, local machines, regional infrastructure, and in-browser—the marginal cost of inference approaches zero. This isn't incremental improvement. This changes everything.\n\n🌍 Edge-First AI: Run Anywhere, Pay Nothing\n\nThe Economics of Edge AI\n\nWhen LLMs run on user devices or regional edge, compute is free. Storage is free. Inference is free.\n\nWhy This Matters\n\n| Traditional Cloud AI | Edge-First AI |\n| ------------------------------- | ------------------------ |\n| $2,000/month for 1M requests | $0/month |\n| Network latency: 200-500ms | Local latency: \\ When AI runs at the edge, the marginal cost of inference becomes zero.\nWhen streams run continuously, the marginal cost of availability becomes zero.\nWhen both are true, AI becomes as ubiquitous as electricity.\n\nWhat This Enables\nReal-Time Everything\nLive translation in conversations\nInstant code completion while typing\nReal-time fraud detection in payments\nContinuous health monitoring\nAlways-on personal assistants\nUnlimited AI Interactions\nNo per-request costs to limit usage\nExperiment freely without budget concerns\nBuild AI-first products without economic constraints\nScale to billions of requests at zero marginal cost\nPerfect Privacy\nData processing happens on user devices\nNo cloud uploads, no third-party access\nGDPR/HIPAA compliant by design\nUsers own their data completely\nGovernment/regulatory compliance automatic\nOffline Capability\nAI works without internet\nEdge models run anywhere\nResilient to network issues\nNo cloud dependencies\nWorks in remote locations\nDeveloper Freedom\nBuild without provider lock-in\nSwitch models freely (all work the same way)\nDeploy anywhere (cloud, edge, device, browser)\nOwn your infrastructure\nNo vendor dependencies\n\n🚀 How to Participate in This Future\n\nUse NeuroLink Today\n\nStart building with NeuroLink:\nQuick Start Guide - Get running in \\<5 minutes\nProvider Setup - Configure all 44 providers\nSDK Integration - Build with TypeScript\nProduction Deployment - Enterprise setup\n\nContribute to Edge & Streaming Features\n\nHelp us build the future:\nEdge Deployment Kits: CloudFlare Workers, Lambda@Edge templates\nBrowser LLM Support: WebGPU integration\nStreaming Architecture: Protocol design and implementation\nExample Applications: Showcase edge + streaming patterns\n\nContributing Guide - How to contribute\n\nShare Your Use Cases\n\nTell us how you're using NeuroLink:\nEdge deployments: What works, what doesn't\nStreaming needs: Where continuous context matters\nPrivacy requirements: Compliance and security needs\nPerformance goals: Latency and cost targets\n\nGitHub Discussions - Join the conversation\n\n🎯 Join Us in Building This Future\n\nNeuroLink started as a production tool at Juspay to solve today's AI integration problems. But we're building for tomorrow—where AI is everywhere, costs nothing, and just works.\n\nIf You Believe in This Vision:\n\n✅ Use NeuroLink today for multi-provider AI\n✅ Contribute to edge-first and streaming features\n✅ Share your use cases to help us prioritize\n✅ Join the community to shape the future of AI infrastructure\n\nThe future of AI is edge-first, streaming-native, and practically free.\n\nNeuroLink is building the infrastructure to power that future.\n\nWelcome aboard.\n\nDocument maintained by: NeuroLink Core Team\nLast updated: March 2026\nNext review: Q3 2026 (after Phase 3 planning)","hierarchy":{"lvl0":"About","lvl1":"NeuroLink Vision & Roadmap","lvl2":"","lvl3":""}},
133
+ {"objectID":"1083b3420d2c0db59846347281059ffb8b3de773cbdcb879b080fe6d480cd572","title":"NeuroLink Vision & Roadmap","url":"/docs/about/vision","content":"NeuroLink Vision & Roadmap\n\nThe Future of AI: Edge-first execution and continuous streaming architectures\n\n🔮 The Future of AI: Edge-First & Streaming-Native\n\nThe Fundamental Shift\n\nA fundamental transformation is happening in AI: Edge-first execution makes LLM usage practically free.\n\nAs AI models move closer to users—running on edge devices, local machines, regional infrastructure, and in-browser—the marginal cost of inference approaches zero. This isn't incremental improvement. This changes everything.\n\n🌍 Edge-First AI: Run Anywhere, Pay Nothing\n\nThe Economics of Edge AI\n\nWhen LLMs run on user devices or regional edge, compute is free. Storage is free. Inference is free.\n\nWhy This Matters\n\n| Traditional Cloud AI | Edge-First AI |\n| ------------------------------- | ------------------------ |\n| $2,000/month for 1M requests | $0/month |\n| Network latency: 200-500ms | Local latency: \\ When AI runs at the edge, the marginal cost of inference becomes zero.\nWhen streams run continuously, the marginal cost of availability becomes zero.\nWhen both are true, AI becomes as ubiquitous as electricity.\n\nWhat This Enables\nReal-Time Everything\nLive translation in conversations\nInstant code completion while typing\nReal-time fraud detection in payments\nContinuous health monitoring\nAlways-on personal assistants\nUnlimited AI Interactions\nNo per-request costs to limit usage\nExperiment freely without budget concerns\nBuild AI-first products without economic constraints\nScale to billions of requests at zero marginal cost\nPerfect Privacy\nData processing happens on user devices\nNo cloud uploads, no third-party access\nGDPR/HIPAA compliant by design\nUsers own their data completely\nGovernment/regulatory compliance automatic\nOffline Capability\nAI works without internet\nEdge models run anywhere\nResilient to network issues\nNo cloud dependencies\nWorks in remote locations\nDeveloper Freedom\nBuild without provider lock-in\nSwitch models freely (all work the same way)\nDeploy anywhere (cloud, edge, device, browser)\nOwn your infrastructure\nNo vendor dependencies\n\n🚀 How to Participate in This Future\n\nUse NeuroLink Today\n\nStart building with NeuroLink:\nQuick Start Guide - Get running in \\<5 minutes\nProvider Setup - Configure supported providers\nSDK Integration - Build with TypeScript\nProduction Deployment - Enterprise setup\n\nContribute to Edge & Streaming Features\n\nHelp us build the future:\nEdge Deployment Kits: CloudFlare Workers, Lambda@Edge templates\nBrowser LLM Support: WebGPU integration\nStreaming Architecture: Protocol design and implementation\nExample Applications: Showcase edge + streaming patterns\n\nContributing Guide - How to contribute\n\nShare Your Use Cases\n\nTell us how you're using NeuroLink:\nEdge deployments: What works, what doesn't\nStreaming needs: Where continuous context matters\nPrivacy requirements: Compliance and security needs\nPerformance goals: Latency and cost targets\n\nGitHub Discussions - Join the conversation\n\n🎯 Join Us in Building This Future\n\nNeuroLink started as a production tool at Juspay to solve today's AI integration problems. But we're building for tomorrow—where AI is everywhere, costs nothing, and just works.\n\nIf You Believe in This Vision:\n\n✅ Use NeuroLink today for multi-provider AI\n✅ Contribute to edge-first and streaming features\n✅ Share your use cases to help us prioritize\n✅ Join the community to shape the future of AI infrastructure\n\nThe future of AI is edge-first, streaming-native, and practically free.\n\nNeuroLink is building the infrastructure to power that future.\n\nWelcome aboard.\n\nDocument maintained by: NeuroLink Core Team\nLast updated: March 2026\nNext review: Q3 2026 (after Phase 3 planning)","hierarchy":{"lvl0":"About","lvl1":"NeuroLink Vision & Roadmap","lvl2":"","lvl3":""}},
134
134
  {"objectID":"5fcb53ab536f2cffaef276173e033cb9712a852233f3bbf6f04986ef826845db","title":"NeuroLink Vision & Roadmap","url":"/docs/about/vision#neurolink-vision-roadmap","content":"The Future of AI: Edge-first execution and continuous streaming architectures","hierarchy":{"lvl0":"About","lvl1":"NeuroLink Vision & Roadmap","lvl2":"NeuroLink Vision & Roadmap","lvl3":""}},
135
135
  {"objectID":"179ed4cfa698f5619a89e45bef29ffb3dbb0a28269b2f3e501d95b5b06144ca0","title":"The Fundamental Shift","url":"/docs/about/vision#the-fundamental-shift","content":"A fundamental transformation is happening in AI: Edge-first execution makes LLM usage practically free.\n\nAs AI models move closer to users—running on edge devices, local machines, regional infrastructure, and in-browser—the marginal cost of inference approaches zero. This isn't incremental improvement. This changes everything.","hierarchy":{"lvl0":"About","lvl1":"NeuroLink Vision & Roadmap","lvl2":"The Fundamental Shift","lvl3":""}},
136
136
  {"objectID":"2217000b17b8306979068110dadba347afaa519ac2716a3bead244060bdabade","title":"The Economics of Edge AI","url":"/docs/about/vision#the-economics-of-edge-ai","content":"When LLMs run on user devices or regional edge, compute is free. Storage is free. Inference is free.","hierarchy":{"lvl0":"About","lvl1":"NeuroLink Vision & Roadmap","lvl2":"The Economics of Edge AI","lvl3":""}},
@@ -140,7 +140,7 @@
140
140
  {"objectID":"bba7e1897313e3737e1e1d7c4285c0f0b41e1438560822e2301139f840a1f24f","title":"The Streaming Solution","url":"/docs/about/vision#the-streaming-solution","content":"Continuous Stream Model:\n\nInstead of starting fresh each time, maintain a continuous stream to your LLM that:\nRuns 24/7 on edge infrastructure (local machine, regional edge, user browser)\nMaintains perfect context across sessions (no context window limits)\nConnects/disconnects as needed (like WebSocket, but for AI)\nCosts nothing to keep alive (edge compute is free)","hierarchy":{"lvl0":"About","lvl1":"NeuroLink Vision & Roadmap","lvl2":"The Streaming Solution","lvl3":""}},
141
141
  {"objectID":"7b2c2e4083a75c704054788f25145243cae6aaa053f4dc154f93a3770a9dce22","title":"How Continuous Streams Work","url":"/docs/about/vision#how-continuous-streams-work","content":"Traditional Request/Response:\n\nContinuous Streaming (NeuroLink's Vision):","hierarchy":{"lvl0":"About","lvl1":"NeuroLink Vision & Roadmap","lvl2":"How Continuous Streams Work","lvl3":""}},
142
142
  {"objectID":"a321f88817ec635afc361ac9300f848af7c20c1a6130336b281db0c71deb4fc5","title":"Why Continuous Streams Change Everything","url":"/docs/about/vision#why-continuous-streams-change-everything","content":"| Traditional AI | Continuous Streaming AI |\n| ---------------------------------------- | ------------------------------- |\n| Cold start every request | Always warm, instant response |\n| Limited context window (200K tokens max) | Infinite context memory |\n| Expensive per-token costs | Free on edge |\n| Stateless, forgets everything | Stateful, remembers everything |\n| Batch processing | Real-time continuous processing |\n| High latency (network + cold start) | Sub-100ms responses |","hierarchy":{"lvl0":"About","lvl1":"NeuroLink Vision & Roadmap","lvl2":"Why Continuous Streams Change Everything","lvl3":""}},
143
- {"objectID":"695b825ee1abb3d7dfa8560a77b79ae0bb07ff1da80fa2bd6069445886921195","title":"Phase 1: Universal Integration ✅ COMPLETE","url":"/docs/about/vision#phase-1-universal-integration-complete","content":"Status: Complete — in production use at Juspay\n\nWhat We Built:\n✅ 44 AI providers unified under one API\n✅ Enterprise features (proxy, Redis, failover, telemetry)\n✅ SDK + CLI for any workflow\n✅ Real-time streaming with tool support\n✅ 6 built-in tools + any MCP-compliant server\n✅ Production deployment at scale (15M+ requests/month)\n\nYou can use this today.\n\nGet Started Now →","hierarchy":{"lvl0":"About","lvl1":"NeuroLink Vision & Roadmap","lvl2":"Phase 1: Universal Integration ✅ COMPLETE","lvl3":""}},
143
+ {"objectID":"695b825ee1abb3d7dfa8560a77b79ae0bb07ff1da80fa2bd6069445886921195","title":"Phase 1: Universal Integration ✅ COMPLETE","url":"/docs/about/vision#phase-1-universal-integration-complete","content":"Status: Complete — in production use at Juspay\n\nWhat We Built:\n✅ AI providers unified under one API\n✅ Enterprise features (proxy, Redis, failover, telemetry)\n✅ SDK + CLI for any workflow\n✅ Real-time streaming with tool support\n✅ 6 built-in tools + any MCP-compliant server\n✅ Production deployment at scale (15M+ requests/month)\n\nYou can use this today.\n\nGet Started Now →","hierarchy":{"lvl0":"About","lvl1":"NeuroLink Vision & Roadmap","lvl2":"Phase 1: Universal Integration ✅ COMPLETE","lvl3":""}},
144
144
  {"objectID":"03f6c09431a0abe505dab45cc757b528402676a09cb80dd3fb96c9806bafc3c7","title":"Phase 2: Edge-Native Execution 🚧 IN PROGRESS","url":"/docs/about/vision#phase-2-edge-native-execution-in-progress","content":"Goal: Make local/edge AI as easy as cloud AI\n\nWhat We're Building:\n✅ Ollama integration - Local LLMs, zero cost, complete privacy (Done)\n✅ LiteLLM proxy - 100+ models through one local endpoint (Done)\n🚧 Edge deployment kits - CloudFlare Workers, Lambda@Edge templates (In Progress)\n🚧 Browser LLM support - Run models entirely in-browser (WebGPU) (Research)\n🚧 Regional routing - Automatic provider selection based on user location (Design)\n\nTimeline: Q1-Q2 2025\n\nWhy It Matters: Every request runs \\<100ms, costs $0, never touches cloud","hierarchy":{"lvl0":"About","lvl1":"NeuroLink Vision & Roadmap","lvl2":"Phase 2: Edge-Native Execution 🚧 IN PROGRESS","lvl3":""}},
145
145
  {"objectID":"8fc5d2489aaf7a90fa71f3826e623f395c8419e877654af6d66cf3d85c376b7c","title":"Phase 3: Continuous Streaming Architecture 📋 PLANNED","url":"/docs/about/vision#phase-3-continuous-streaming-architecture-planned","content":"Goal: Long-running, stateful LLM streams with infinite context\n\nWhat We're Building:\n📋 Stream management - Connect, disconnect, reconnect to persistent streams\n📋 Infinite context - No token limits, perfect memory across sessions\n📋 Edge orchestration - Streams run on user devices or regional edge\n📋 Automatic failover - Seamless cloud fallback if edge unavailable\n📋 Multi-stream coordination - Coordinate multiple specialized streams\n\nTimeline: Q3-Q4 2025\n\nWhy It Matters: AI becomes ambient, always available, costs nothing","hierarchy":{"lvl0":"About","lvl1":"NeuroLink Vision & Roadmap","lvl2":"Phase 3: Continuous Streaming Architecture 📋 PLANNED","lvl3":""}},
146
146
  {"objectID":"3b18188089291551ff1079bc4c79b6ab38fce495ac239e65026bbcc71ad34b52","title":"Phase 4: AI-Powered Everything 🔮 FUTURE","url":"/docs/about/vision#phase-4-ai-powered-everything-future","content":"Vision: Every application has embedded AI, every user has personal AI assistants\n\nThe Future We're Building Toward:\nEvery App AI-Native: Embedded LLMs in all software\nPersonal AI Assistants: Running locally on your devices\nZero-Cost Inference: Edge execution makes AI practically free\nPerfect Memory: Continuous streams maintain infinite context\nInstant Responses: Edge compute = sub-100ms latency\nComplete Privacy: Your data never leaves your infrastructure","hierarchy":{"lvl0":"About","lvl1":"NeuroLink Vision & Roadmap","lvl2":"Phase 4: AI-Powered Everything 🔮 FUTURE","lvl3":""}},
@@ -150,14 +150,14 @@
150
150
  {"objectID":"fcb318c306ccdb9332c9f4655eca3de25327605dc0d29fef460800c222b6f12f","title":"3. Perfect Privacy","url":"/docs/about/vision#3-perfect-privacy","content":"Data processing happens on user devices\nNo cloud uploads, no third-party access\nGDPR/HIPAA compliant by design\nUsers own their data completely\nGovernment/regulatory compliance automatic","hierarchy":{"lvl0":"About","lvl1":"NeuroLink Vision & Roadmap","lvl2":"3. Perfect Privacy","lvl3":""}},
151
151
  {"objectID":"909e2fcfa686454a6e3e1cbaa3a5f82cde74701a7807c0e4990f3c612b398ac7","title":"4. Offline Capability","url":"/docs/about/vision#4-offline-capability","content":"AI works without internet\nEdge models run anywhere\nResilient to network issues\nNo cloud dependencies\nWorks in remote locations","hierarchy":{"lvl0":"About","lvl1":"NeuroLink Vision & Roadmap","lvl2":"4. Offline Capability","lvl3":""}},
152
152
  {"objectID":"666161cdb9538fbd7517167d959520f3ce418b05b58ddce7e96708f23d17d67c","title":"5. Developer Freedom","url":"/docs/about/vision#5-developer-freedom","content":"Build without provider lock-in\nSwitch models freely (all work the same way)\nDeploy anywhere (cloud, edge, device, browser)\nOwn your infrastructure\nNo vendor dependencies","hierarchy":{"lvl0":"About","lvl1":"NeuroLink Vision & Roadmap","lvl2":"5. Developer Freedom","lvl3":""}},
153
- {"objectID":"dbfd0458b9ad4cd41c504f56cf1dadb81a00fed1b6fdb1c4f711f1af0e919ebd","title":"Use NeuroLink Today","url":"/docs/about/vision#use-neurolink-today","content":"Start building with NeuroLink:\nQuick Start Guide - Get running in \\<5 minutes\nProvider Setup - Configure all 44 providers\nSDK Integration - Build with TypeScript\nProduction Deployment - Enterprise setup","hierarchy":{"lvl0":"About","lvl1":"NeuroLink Vision & Roadmap","lvl2":"Use NeuroLink Today","lvl3":""}},
153
+ {"objectID":"dbfd0458b9ad4cd41c504f56cf1dadb81a00fed1b6fdb1c4f711f1af0e919ebd","title":"Use NeuroLink Today","url":"/docs/about/vision#use-neurolink-today","content":"Start building with NeuroLink:\nQuick Start Guide - Get running in \\<5 minutes\nProvider Setup - Configure supported providers\nSDK Integration - Build with TypeScript\nProduction Deployment - Enterprise setup","hierarchy":{"lvl0":"About","lvl1":"NeuroLink Vision & Roadmap","lvl2":"Use NeuroLink Today","lvl3":""}},
154
154
  {"objectID":"9e4a88e460a6fcfe5c4a5e9cb17b9abbd1e2eb71cc9024c7b1ac1904a56e070a","title":"Contribute to Edge & Streaming Features","url":"/docs/about/vision#contribute-to-edge-streaming-features","content":"Help us build the future:\nEdge Deployment Kits: CloudFlare Workers, Lambda@Edge templates\nBrowser LLM Support: WebGPU integration\nStreaming Architecture: Protocol design and implementation\nExample Applications: Showcase edge + streaming patterns\n\nContributing Guide - How to contribute","hierarchy":{"lvl0":"About","lvl1":"NeuroLink Vision & Roadmap","lvl2":"Contribute to Edge & Streaming Features","lvl3":""}},
155
155
  {"objectID":"c47d3ea31b9350d8a7e39af83361be6a5c078cffb786893cc053a933cc4ca99b","title":"Share Your Use Cases","url":"/docs/about/vision#share-your-use-cases","content":"Tell us how you're using NeuroLink:\nEdge deployments: What works, what doesn't\nStreaming needs: Where continuous context matters\nPrivacy requirements: Compliance and security needs\nPerformance goals: Latency and cost targets\n\nGitHub Discussions - Join the conversation","hierarchy":{"lvl0":"About","lvl1":"NeuroLink Vision & Roadmap","lvl2":"Share Your Use Cases","lvl3":""}},
156
156
  {"objectID":"a01f19466002f1a4decfb4e57a7976034cd068b42a0beb84e7cbda9e6ff6cefa","title":"🎯 Join Us in Building This Future","url":"/docs/about/vision#-join-us-in-building-this-future","content":"NeuroLink started as a production tool at Juspay to solve today's AI integration problems. But we're building for tomorrow—where AI is everywhere, costs nothing, and just works.","hierarchy":{"lvl0":"About","lvl1":"NeuroLink Vision & Roadmap","lvl2":"🎯 Join Us in Building This Future","lvl3":""}},
157
157
  {"objectID":"6d274f87d0b1b39d152ef548c717b98a5ca0af1e46da78fa7976343ebc419f3a","title":"If You Believe in This Vision:","url":"/docs/about/vision#if-you-believe-in-this-vision","content":"✅ Use NeuroLink today for multi-provider AI\n✅ Contribute to edge-first and streaming features\n✅ Share your use cases to help us prioritize\n✅ Join the community to shape the future of AI infrastructure\n\nThe future of AI is edge-first, streaming-native, and practically free.\n\nNeuroLink is building the infrastructure to power that future.\n\nWelcome aboard.\n\nDocument maintained by: NeuroLink Core Team\nLast updated: March 2026\nNext review: Q3 2026 (after Phase 3 planning)","hierarchy":{"lvl0":"About","lvl1":"NeuroLink Vision & Roadmap","lvl2":"If You Believe in This Vision:","lvl3":""}},
158
- {"objectID":"2c08ee20f6c6005a0d3d88aec0910caea8b54d8f9478d1e4bf7b7e73c9bbccf9","title":"Why the NeuroLink Core Stays Thin","url":"/docs/about/why-the-core-stays-thin","content":"Why the NeuroLink Core Stays Thin\n\nBreadth without bloat: what's actually in the package, and why unused capability costs you nothing at runtime\n\nNeuroLink's pitch is breadth: one install covers 17 capability domains — providers, MCP, evals,\nRAG, observability, voice, media, workflows, and more. Breadth claims like that earn a reasonable\nreflex: \"so it's another bloated framework that drags in everything whether I need it or not.\"\nThat reflex is fair, and it's the one framework abandonments over the last two years keep citing.\nSo instead of asking you to take breadth-without-bloat on faith, here's what's actually in the\npackage and why the surface doesn't have to cost you disk space, install time, or attack surface\nyou didn't ask for.\n\nProviders load on demand, not on import\n\nNeuroLink ships 40 named provider integrations plus a generic OpenAI-compatible adapter. None\nof them run at import time. src/lib/factories/providerRegistry.ts resolves a provider name to a\ndynamic import() of that provider's module only when you actually request it — Anthropic's\nclient only loads if you call createBestAIProvider(\"anthropic\") or equivalent; Ollama, LiteLLM,\nHugging Face, Bedrock, Vertex, and the rest are each behind their own await import(\"../providers/<name>.js\")\nline, one per provider, all in that same file. Ask for OpenAI and only the OpenAI\nprovider module executes — the other 39 never get evaluated.\n\nHeavy media/document deps are optional and lazy\n\nThe 35 packages that do real work in image, video, audio, and document processing —\nsharp, ffmpeg-static/fluent-ffmpeg, pdf-parse, mammoth, exceljs,\npptxgenjs, the LiveKit voice-agent plugins, bullmq, fastify/koa/express server adapters —\nare declared in optionalDependencies, not dependencies, in package.json. Being optional means\na package manager can skip them entirely if install fails or if you opt out; being lazy on top of\nthat means the code that needs them doesn't touch them until the feature runs. sharp is a good\nexample: NeuroLink's video processor only calls (await import(\"sharp\")).default inside the\nframe-resize path (src/lib/processors/media/VideoProcessor.ts), not anywhere near startup. If you\nnever touch video, sharp's native bindings never load into your process.\n\nThe package exposes real subpath entry points, not one giant bundle\n\npackage.json's exports map lists separate entry points — ./voice, ./music, ./avatar,\n./image-gen, ./workflow, ./rag, ./files, ./processors/*, ./adapters/*, ./livekit —\nalongside the default . entry. That's what lets a bundler tree-shake: importing\n@juspay/neurolink/rag doesn't pull the voice stack into your bundle graph. The package also\ndeclares \"type\": \"module\" and a sideEffects array scoped to **/*.css plus the compiled\nvoice/music/avatar entry files — everything else is marked side-effect-free, which is the signal\nbundlers use to safely drop unused exports instead of keeping code \"just in case.\"\n\nOne interface, swappable implementations\n\nEvery provider — whether it's a first-party AI SDK wrapper or a bare HTTP client for something\nlike llama.cpp — implements the same AIProvider contract defined against BaseProvider\n(src/lib/core/baseProvider.ts). Generation, streaming, tool calls, and lifecycle hooks are all\nexpressed once, at the interface level, so adding provider #25 is additive (a new file + a new\nimport() branch in the registry), not a change to the surface every existing provider has to pay\nfor.\n\nWhere we're heavy today, honestly\n\nLazy import() stops code from running until it's needed, but it doesn't stop npm install\nfrom downloading everything in dependencies (as opposed to optionalDependencies).\n@aws-sdk/client-bedrock, @aws-sdk/client-bedrock-runtime, @aws-sdk/client-sagemaker-runtime,\n@aws-sdk/credential-provider-node, @google-cloud/vertexai, @google-cloud/text-to-speech, and\n@huggingface/inference now live in optionalDependencies — matching the treatment\nmedia/document deps already get.\n\nOptional doesn't mean skipped by default: a plain npm install still downloads all seven, same as\nit always has for sharp or pdf-parse. What optional buys you is the ability to opt out —\nnpm install --omit=optional, or an npm client falling back gracefully when one of them fails to\nbuild on an unsupported platform, drops them without breaking anything else. We verified that\ndirectly: a clean --omit=optional install still runs import('@juspay/neurolink'),\nneurolink --version, and the CLI entry point directly (node dist/cli/index.js --version)\ncorrectly, and asking for a provider whose SDK got skipped — Bedrock or SageMaker, say — fails\nwith a plain, actionable error at the moment you request that provider, not a crash at import\ntime.\n\nThat safety only holds because all seven are genuinely lazy — nothing reachable from\nimport '@juspay/neurolink' (or from the CLI's startup path) touches them at load time. Three of\nthem weren't, until the audits that found it: @google-cloud/vertexai was a top-of-file import in\nthe built-in websearchGr","hierarchy":{"lvl0":"About","lvl1":"Why the NeuroLink Core Stays Thin","lvl2":"","lvl3":""}},
158
+ {"objectID":"2c08ee20f6c6005a0d3d88aec0910caea8b54d8f9478d1e4bf7b7e73c9bbccf9","title":"Why the NeuroLink Core Stays Thin","url":"/docs/about/why-the-core-stays-thin","content":"Why the NeuroLink Core Stays Thin\n\nBreadth without bloat: what's actually in the package, and why unused capability costs you nothing at runtime\n\nNeuroLink's pitch is breadth: one install covers 17 capability domains — providers, MCP, evals,\nRAG, observability, voice, media, workflows, and more. Breadth claims like that earn a reasonable\nreflex: \"so it's another bloated framework that drags in everything whether I need it or not.\"\nThat reflex is fair, and it's the one framework abandonments over the last two years keep citing.\nSo instead of asking you to take breadth-without-bloat on faith, here's what's actually in the\npackage and why the surface doesn't have to cost you disk space, install time, or attack surface\nyou didn't ask for.\n\nProviders load on demand, not on import\n\nNeuroLink ships named provider integrations plus a generic OpenAI-compatible adapter. None\nof them run at import time. src/lib/factories/providerRegistry.ts resolves a provider name to a\ndynamic import() of that provider's module only when you actually request it — Anthropic's\nclient only loads if you call createBestAIProvider(\"anthropic\") or equivalent; Ollama, LiteLLM,\nHugging Face, Bedrock, Vertex, and the rest are each behind their own await import(\"../providers/<name>.js\")\nline, one per provider, all in that same file. Ask for OpenAI and only the OpenAI\nprovider module executes — the rest never get evaluated.\n\nHeavy media/document deps are optional and lazy\n\nThe 35 packages that do real work in image, video, audio, and document processing —\nsharp, ffmpeg-static/fluent-ffmpeg, pdf-parse, mammoth, exceljs,\npptxgenjs, the LiveKit voice-agent plugins, bullmq, fastify/koa/express server adapters —\nare declared in optionalDependencies, not dependencies, in package.json. Being optional means\na package manager can skip them entirely if install fails or if you opt out; being lazy on top of\nthat means the code that needs them doesn't touch them until the feature runs. sharp is a good\nexample: NeuroLink's video processor only calls (await import(\"sharp\")).default inside the\nframe-resize path (src/lib/processors/media/VideoProcessor.ts), not anywhere near startup. If you\nnever touch video, sharp's native bindings never load into your process.\n\nThe package exposes real subpath entry points, not one giant bundle\n\npackage.json's exports map lists separate entry points — ./voice, ./music, ./avatar,\n./image-gen, ./workflow, ./rag, ./files, ./processors/*, ./adapters/*, ./livekit —\nalongside the default . entry. That's what lets a bundler tree-shake: importing\n@juspay/neurolink/rag doesn't pull the voice stack into your bundle graph. The package also\ndeclares \"type\": \"module\" and a sideEffects array scoped to **/*.css plus the compiled\nvoice/music/avatar entry files — everything else is marked side-effect-free, which is the signal\nbundlers use to safely drop unused exports instead of keeping code \"just in case.\"\n\nOne interface, swappable implementations\n\nEvery provider — whether it's a first-party AI SDK wrapper or a bare HTTP client for something\nlike llama.cpp — implements the same AIProvider contract defined against BaseProvider\n(src/lib/core/baseProvider.ts). Generation, streaming, tool calls, and lifecycle hooks are all\nexpressed once, at the interface level, so adding provider #25 is additive (a new file + a new\nimport() branch in the registry), not a change to the surface every existing provider has to pay\nfor.\n\nWhere we're heavy today, honestly\n\nLazy import() stops code from running until it's needed, but it doesn't stop npm install\nfrom downloading everything in dependencies (as opposed to optionalDependencies).\n@aws-sdk/client-bedrock, @aws-sdk/client-bedrock-runtime, @aws-sdk/client-sagemaker-runtime,\n@aws-sdk/credential-provider-node, @google-cloud/vertexai, @google-cloud/text-to-speech, and\n@huggingface/inference now live in optionalDependencies — matching the treatment\nmedia/document deps already get.\n\nOptional doesn't mean skipped by default: a plain npm install still downloads all seven, same as\nit always has for sharp or pdf-parse. What optional buys you is the ability to opt out —\nnpm install --omit=optional, or an npm client falling back gracefully when one of them fails to\nbuild on an unsupported platform, drops them without breaking anything else. We verified that\ndirectly: a clean --omit=optional install still runs import('@juspay/neurolink'),\nneurolink --version, and the CLI entry point directly (node dist/cli/index.js --version)\ncorrectly, and asking for a provider whose SDK got skipped — Bedrock or SageMaker, say — fails\nwith a plain, actionable error at the moment you request that provider, not a crash at import\ntime.\n\nThat safety only holds because all seven are genuinely lazy — nothing reachable from\nimport '@juspay/neurolink' (or from the CLI's startup path) touches them at load time. Three of\nthem weren't, until the audits that found it: @google-cloud/vertexai was a top-of-file import in\nthe built-in websearchGrounding","hierarchy":{"lvl0":"About","lvl1":"Why the NeuroLink Core Stays Thin","lvl2":"","lvl3":""}},
159
159
  {"objectID":"aa2a97d1fbf62d32d4c2b89cedf6e8756457ec9552abdcc39df8e49353dc0a4a","title":"Why the NeuroLink Core Stays Thin","url":"/docs/about/why-the-core-stays-thin#why-the-neurolink-core-stays-thin","content":"Breadth without bloat: what's actually in the package, and why unused capability costs you nothing at runtime\n\nNeuroLink's pitch is breadth: one install covers 17 capability domains — providers, MCP, evals,\nRAG, observability, voice, media, workflows, and more. Breadth claims like that earn a reasonable\nreflex: \"so it's another bloated framework that drags in everything whether I need it or not.\"\nThat reflex is fair, and it's the one framework abandonments over the last two years keep citing.\nSo instead of asking you to take breadth-without-bloat on faith, here's what's actually in the\npackage and why the surface doesn't have to cost you disk space, install time, or attack surface\nyou didn't ask for.","hierarchy":{"lvl0":"About","lvl1":"Why the NeuroLink Core Stays Thin","lvl2":"Why the NeuroLink Core Stays Thin","lvl3":""}},
160
- {"objectID":"ea24a1ae9ea7219b37355473fc345224ee1e97305283ff930e1f36b603bb38ea","title":"Providers load on demand, not on import","url":"/docs/about/why-the-core-stays-thin#providers-load-on-demand-not-on-import","content":"NeuroLink ships 40 named provider integrations plus a generic OpenAI-compatible adapter. None\nof them run at import time. src/lib/factories/providerRegistry.ts resolves a provider name to a\ndynamic import() of that provider's module only when you actually request it — Anthropic's\nclient only loads if you call createBestAIProvider(\"anthropic\") or equivalent; Ollama, LiteLLM,\nHugging Face, Bedrock, Vertex, and the rest are each behind their own await import(\"../providers/<name>.js\")\nline, one per provider, all in that same file. Ask for OpenAI and only the OpenAI\nprovider module executes — the other 39 never get evaluated.","hierarchy":{"lvl0":"About","lvl1":"Why the NeuroLink Core Stays Thin","lvl2":"Providers load on demand, not on import","lvl3":""}},
160
+ {"objectID":"ea24a1ae9ea7219b37355473fc345224ee1e97305283ff930e1f36b603bb38ea","title":"Providers load on demand, not on import","url":"/docs/about/why-the-core-stays-thin#providers-load-on-demand-not-on-import","content":"NeuroLink ships named provider integrations plus a generic OpenAI-compatible adapter. None\nof them run at import time. src/lib/factories/providerRegistry.ts resolves a provider name to a\ndynamic import() of that provider's module only when you actually request it — Anthropic's\nclient only loads if you call createBestAIProvider(\"anthropic\") or equivalent; Ollama, LiteLLM,\nHugging Face, Bedrock, Vertex, and the rest are each behind their own await import(\"../providers/<name>.js\")\nline, one per provider, all in that same file. Ask for OpenAI and only the OpenAI\nprovider module executes — the rest never get evaluated.","hierarchy":{"lvl0":"About","lvl1":"Why the NeuroLink Core Stays Thin","lvl2":"Providers load on demand, not on import","lvl3":""}},
161
161
  {"objectID":"8d37817e98f3351bfb570122b7aeeacd5673de163c03e3fdc2249f22ba153b01","title":"Heavy media/document deps are optional and lazy","url":"/docs/about/why-the-core-stays-thin#heavy-mediadocument-deps-are-optional-and-lazy","content":"The 35 packages that do real work in image, video, audio, and document processing —\nsharp, ffmpeg-static/fluent-ffmpeg, pdf-parse, mammoth, exceljs,\npptxgenjs, the LiveKit voice-agent plugins, bullmq, fastify/koa/express server adapters —\nare declared in optionalDependencies, not dependencies, in package.json. Being optional means\na package manager can skip them entirely if install fails or if you opt out; being lazy on top of\nthat means the code that needs them doesn't touch them until the feature runs. sharp is a good\nexample: NeuroLink's video processor only calls (await import(\"sharp\")).default inside the\nframe-resize path (src/lib/processors/media/VideoProcessor.ts), not anywhere near startup. If you\nnever touch video, sharp's native bindings never load into your process.","hierarchy":{"lvl0":"About","lvl1":"Why the NeuroLink Core Stays Thin","lvl2":"Heavy media/document deps are optional and lazy","lvl3":""}},
162
162
  {"objectID":"3539bbad3542a55c88f34d80ddd1bc1fce27889c57cf8aca66e6273e6f344bba","title":"The package exposes real subpath entry points, not one giant bundle","url":"/docs/about/why-the-core-stays-thin#the-package-exposes-real-subpath-entry-points-not-one-giant-bundle","content":"package.json's exports map lists separate entry points — ./voice, ./music, ./avatar,\n./image-gen, ./workflow, ./rag, ./files, ./processors/*, ./adapters/*, ./livekit —\nalongside the default . entry. That's what lets a bundler tree-shake: importing\n@juspay/neurolink/rag doesn't pull the voice stack into your bundle graph. The package also\ndeclares \"type\": \"module\" and a sideEffects array scoped to **/*.css plus the compiled\nvoice/music/avatar entry files — everything else is marked side-effect-free, which is the signal\nbundlers use to safely drop unused exports instead of keeping code \"just in case.\"","hierarchy":{"lvl0":"About","lvl1":"Why the NeuroLink Core Stays Thin","lvl2":"The package exposes real subpath entry points, not one giant bundle","lvl3":""}},
163
163
  {"objectID":"becaa9cd1d3ca9248464018e639eac6f6c2b7cd66931086213e50c253aa4d607","title":"One interface, swappable implementations","url":"/docs/about/why-the-core-stays-thin#one-interface-swappable-implementations","content":"Every provider — whether it's a first-party AI SDK wrapper or a bare HTTP client for something\nlike llama.cpp — implements the same AIProvider contract defined against BaseProvider\n(src/lib/core/baseProvider.ts). Generation, streaming, tool calls, and lifecycle hooks are all\nexpressed once, at the interface level, so adding provider #25 is additive (a new file + a new\nimport() branch in the registry), not a change to the surface every existing provider has to pay\nfor.","hierarchy":{"lvl0":"About","lvl1":"Why the NeuroLink Core Stays Thin","lvl2":"One interface, swappable implementations","lvl3":""}},
@@ -278,15 +278,15 @@
278
278
  {"objectID":"28619badc7e577a1d29dad93c9bf86d4b36629d0dd8bc1d1ea575e0f2cf259ee","title":"Performance Optimization","url":"/docs/advanced/factory-patterns-complete-guide#performance-optimization-1","content":"Cache Domain Configurations: Reuse domain configs across requests\nMonitor Enhancement Time: Track processing time in production\nUse Batch Enhancements: Combine multiple enhancements efficiently\nEnable Analytics Selectively: Only when needed for performance","hierarchy":{"lvl0":"Advanced","lvl1":"NeuroLink Factory Patterns - Complete Implementation Guide","lvl2":"Performance Optimization","lvl3":""}},
279
279
  {"objectID":"2a3d2c26efbf8e14e257fb4ce8e6fa6e6ad7e0fb50234c9c02f6f55bc471a62f","title":"Error Handling","url":"/docs/advanced/factory-patterns-complete-guide#error-handling","content":"Always Handle Enhancement Failures: Factory patterns should never break core functionality\nLog Enhancement Metadata: Track enhancement success/failure for monitoring\nUse Validation Judiciously: Enable validation in development, consider disabling in production for performance","hierarchy":{"lvl0":"Advanced","lvl1":"NeuroLink Factory Patterns - Complete Implementation Guide","lvl2":"Error Handling","lvl3":""}},
280
280
  {"objectID":"da80621bd2c81b9846c9a688fd6d2818c15c4ac1278f0720237d3d608a283120","title":"Conclusion","url":"/docs/advanced/factory-patterns-complete-guide#conclusion","content":"The NeuroLink Factory Infrastructure provides a comprehensive, production-ready framework for domain-agnostic AI enhancement. With zero breaking changes, extensive test coverage, and flexible enhancement patterns, it enables powerful domain-specific AI interactions while maintaining the simplicity and reliability of the existing NeuroLink SDK.\n\nThe factory patterns scale from simple domain configuration to complex multi-enhancement workflows, making them suitable for any application from basic chatbots to enterprise AI systems requiring sophisticated domain expertise and analytics tracking.","hierarchy":{"lvl0":"Advanced","lvl1":"NeuroLink Factory Patterns - Complete Implementation Guide","lvl2":"Conclusion","lvl3":""}},
281
- {"objectID":"c6195d69e8507af484f7b546748ef9e24e0a3f0830b302a621078695d30554b2","title":"Factory Pattern Migration Guide","url":"/docs/advanced/factory-patterns","content":"Factory Pattern Migration Guide\n\nOverview\n\nNeuroLink has been refactored to use a unified factory pattern architecture where all providers inherit from a common BaseProvider class. This provides consistent tool support and behavior across all AI providers.\n\nWhat Changed\nUnified BaseProvider Architecture\n\nAll providers now inherit from BaseProvider, which provides:\nBuilt-in tool support (6 core tools)\nConsistent generate() and stream() methods\nAnalytics and evaluation capabilities\nStandardized error handling\nAutomatic Tool Support\n\nEvery provider automatically includes these tools:\ngetCurrentTime - Get current date and time\nreadFile - Read file contents\nlistDirectory - List directory contents\ncalculateMath - Perform calculations\nwriteFile - Write to files\nsearchFiles - Search for files by pattern\nSimplified Provider Implementation\n\nProviders no longer need to implement their own tool handling - they inherit it from BaseProvider. This means:\nNo more executeGenerate methods in individual providers\nConsistent tool behavior across all providers\nLess code duplication\n\nMigration Steps\n\nFor Users\n\nGood news! There are no breaking changes. Your existing code will continue to work exactly as before.\n\nTool Usage (No Changes Required)\n\nDisabling Tools (New Option)\n\nFor Provider Developers\n\nIf you've created custom providers, you'll need to update them to use the new pattern:\n\nBefore (Old Pattern)\n\nAfter (New Pattern)\n\nProvider Tool Support Status\n\nAfter the refactoring, here's the current status of tool support:\n\n| Provider | Status | Notes |\n| ------------ | ----------------- | ---------------------------------------------------- |\n| OpenAI | ✅ Full Support | All tools working correctly |\n| Google AI | ✅ Full Support | Excellent tool execution |\n| Anthropic | ✅ Full Support | Working after max_tokens fix |\n| Azure OpenAI | ✅ Full Support | Same as OpenAI |\n| Mistral | ✅ Full Support | Good tool support |\n| HuggingFace | ⚠️ Partial | Model sees tools but may describe instead of execute |\n| Vertex AI | ⚠️ Partial | Tools available but may not execute |\n| Ollama | ❌ Limited | Requires specific models (e.g., gemma3n) |\n| Bedrock | ✅ Full Support\\* | Requires valid AWS credentials |\n\nBenefits of the New Architecture\nConsistency: All providers behave the same way with tools\nMaintainability: Less code duplication, easier to update\nReliability: Centralized tool handling reduces bugs\nExtensibility: Easy to add new tools for all providers at once\nTesting: Simplified testing with consistent behavior\n\nCommon Issues and Solutions\n\nIssue: Provider Not Using Tools\n\nSolution: Check if your model supports function calling. Some models (especially older or smaller ones) may not support tools.\n\nIssue: HuggingFace Describing Tools Instead of Using Them\n\nSolution: This is a model limitation. Use models that support function calling:\nmistralai/Mixtral-8x7B-Instruct-v0.1\nmistralai/Mistral-7B-Instruct-v0.2\n\nIssue: Ollama Returns Empty Content\n\nSolution: Use models that support tool calling:\n\nIssue: Vertex AI Not Using Tools\n\nSolution: This may require schema formatting adjustments. The Vertex provider needs to format tools according to Google's Gemini API schema.\n\nFuture Improvements\nDynamic Tool Loading: Ability to add custom tools at runtime\nProvider-Specific Tool Formatting: Automatic adaptation of tool schemas for each provider\nTool Usage Analytics: Detailed metrics on which tools are used most\nTool Caching: Cache tool results for better performance\n\nSupport\n\nIf you encounter any issues with the migration:\nCheck the provider status documentation\nReview the provider configuration guide\nOpen an issue on GitHub with details about your use case\n\nRemember: No breaking changes! Your existing code continues to work. The factory pattern refactoring improves the internal architecture while maintaining full backward compatibility.","hierarchy":{"lvl0":"Advanced","lvl1":"Factory Pattern Migration Guide","lvl2":"","lvl3":""}},
282
- {"objectID":"e1fbb3f6c4772e0c6b8fdab79ea987445b405779abd4e704b529a1c7027733a5","title":"Overview","url":"/docs/advanced/factory-patterns#overview","content":"NeuroLink has been refactored to use a unified factory pattern architecture where all providers inherit from a common BaseProvider class. This provides consistent tool support and behavior across all AI providers.","hierarchy":{"lvl0":"Advanced","lvl1":"Factory Pattern Migration Guide","lvl2":"Overview","lvl3":""}},
283
- {"objectID":"f01f032c4a2a3ab3836f627b474c1abe402de7bf927e4d802f874143b9af4235","title":"1. Unified BaseProvider Architecture","url":"/docs/advanced/factory-patterns#1-unified-baseprovider-architecture","content":"All providers now inherit from BaseProvider, which provides:\nBuilt-in tool support (6 core tools)\nConsistent generate() and stream() methods\nAnalytics and evaluation capabilities\nStandardized error handling","hierarchy":{"lvl0":"Advanced","lvl1":"Factory Pattern Migration Guide","lvl2":"1. Unified BaseProvider Architecture","lvl3":""}},
284
- {"objectID":"cee8027d57ee843cee86a6c97eb9d046dbe7e21a69ce4b512946efc45205cc41","title":"2. Automatic Tool Support","url":"/docs/advanced/factory-patterns#2-automatic-tool-support","content":"Every provider automatically includes these tools:\ngetCurrentTime - Get current date and time\nreadFile - Read file contents\nlistDirectory - List directory contents\ncalculateMath - Perform calculations\nwriteFile - Write to files\nsearchFiles - Search for files by pattern","hierarchy":{"lvl0":"Advanced","lvl1":"Factory Pattern Migration Guide","lvl2":"2. Automatic Tool Support","lvl3":""}},
285
- {"objectID":"aa2c23eaf2b0c2e2be76dc3084b8444c0b70d366332d093c32a84e2528261082","title":"3. Simplified Provider Implementation","url":"/docs/advanced/factory-patterns#3-simplified-provider-implementation","content":"Providers no longer need to implement their own tool handling - they inherit it from BaseProvider. This means:\nNo more executeGenerate methods in individual providers\nConsistent tool behavior across all providers\nLess code duplication","hierarchy":{"lvl0":"Advanced","lvl1":"Factory Pattern Migration Guide","lvl2":"3. Simplified Provider Implementation","lvl3":""}},
281
+ {"objectID":"c6195d69e8507af484f7b546748ef9e24e0a3f0830b302a621078695d30554b2","title":"Factory Pattern Migration Guide","url":"/docs/advanced/factory-patterns","content":"Factory Pattern Migration Guide\n\nOverview\n\nNeuroLink has been refactored to use a unified factory pattern architecture where providers inherit from a common BaseProvider class. This provides consistent tool support and behavior across supported AI providers.\n\nWhat Changed\nUnified BaseProvider Architecture\n\nProviders now inherit from BaseProvider, which provides:\nBuilt-in tool support (6 core tools)\nConsistent generate() and stream() methods\nAnalytics and evaluation capabilities\nStandardized error handling\nAutomatic Tool Support\n\nProviders automatically include these tools:\ngetCurrentTime - Get current date and time\nreadFile - Read file contents\nlistDirectory - List directory contents\ncalculateMath - Perform calculations\nwriteFile - Write to files\nsearchFiles - Search for files by pattern\nSimplified Provider Implementation\n\nProviders no longer need to implement their own tool handling - they inherit it from BaseProvider. This means:\nNo more executeGenerate methods in individual providers\nConsistent tool behavior across supported providers\nLess code duplication\n\nMigration Steps\n\nFor Users\n\nGood news! There are no breaking changes. Your existing code will continue to work exactly as before.\n\nTool Usage (No Changes Required)\n\nDisabling Tools (New Option)\n\nFor Provider Developers\n\nIf you've created custom providers, you'll need to update them to use the new pattern:\n\nBefore (Old Pattern)\n\nAfter (New Pattern)\n\nProvider Tool Support Status\n\nAfter the refactoring, here's the current status of tool support:\n\n| Provider | Status | Notes |\n| ------------ | ----------------- | ---------------------------------------------------- |\n| OpenAI | ✅ Full Support | All tools working correctly |\n| Google AI | ✅ Full Support | Excellent tool execution |\n| Anthropic | ✅ Full Support | Working after max_tokens fix |\n| Azure OpenAI | ✅ Full Support | Same as OpenAI |\n| Mistral | ✅ Full Support | Good tool support |\n| HuggingFace | ⚠️ Partial | Model sees tools but may describe instead of execute |\n| Vertex AI | ⚠️ Partial | Tools available but may not execute |\n| Ollama | ❌ Limited | Requires specific models (e.g., gemma3n) |\n| Bedrock | ✅ Full Support\\* | Requires valid AWS credentials |\n\nBenefits of the New Architecture\nConsistency: Providers behave the same way with tools\nMaintainability: Less code duplication, easier to update\nReliability: Centralized tool handling reduces bugs\nExtensibility: Easy to add new tools for providers at once\nTesting: Simplified testing with consistent behavior\n\nCommon Issues and Solutions\n\nIssue: Provider Not Using Tools\n\nSolution: Check if your model supports function calling. Some models (especially older or smaller ones) may not support tools.\n\nIssue: HuggingFace Describing Tools Instead of Using Them\n\nSolution: This is a model limitation. Use models that support function calling:\nmistralai/Mixtral-8x7B-Instruct-v0.1\nmistralai/Mistral-7B-Instruct-v0.2\n\nIssue: Ollama Returns Empty Content\n\nSolution: Use models that support tool calling:\n\nIssue: Vertex AI Not Using Tools\n\nSolution: This may require schema formatting adjustments. The Vertex provider needs to format tools according to Google's Gemini API schema.\n\nFuture Improvements\nDynamic Tool Loading: Ability to add custom tools at runtime\nProvider-Specific Tool Formatting: Automatic adaptation of tool schemas for each provider\nTool Usage Analytics: Detailed metrics on which tools are used most\nTool Caching: Cache tool results for better performance\n\nSupport\n\nIf you encounter any issues with the migration:\nCheck the provider status documentation\nReview the provider configuration guide\nOpen an issue on GitHub with details about your use case\n\nRemember: No breaking changes! Your existing code continues to work. The factory pattern refactoring improves the internal architecture while maintaining full backward compatibility.","hierarchy":{"lvl0":"Advanced","lvl1":"Factory Pattern Migration Guide","lvl2":"","lvl3":""}},
282
+ {"objectID":"e1fbb3f6c4772e0c6b8fdab79ea987445b405779abd4e704b529a1c7027733a5","title":"Overview","url":"/docs/advanced/factory-patterns#overview","content":"NeuroLink has been refactored to use a unified factory pattern architecture where providers inherit from a common BaseProvider class. This provides consistent tool support and behavior across supported AI providers.","hierarchy":{"lvl0":"Advanced","lvl1":"Factory Pattern Migration Guide","lvl2":"Overview","lvl3":""}},
283
+ {"objectID":"f01f032c4a2a3ab3836f627b474c1abe402de7bf927e4d802f874143b9af4235","title":"1. Unified BaseProvider Architecture","url":"/docs/advanced/factory-patterns#1-unified-baseprovider-architecture","content":"Providers now inherit from BaseProvider, which provides:\nBuilt-in tool support (6 core tools)\nConsistent generate() and stream() methods\nAnalytics and evaluation capabilities\nStandardized error handling","hierarchy":{"lvl0":"Advanced","lvl1":"Factory Pattern Migration Guide","lvl2":"1. Unified BaseProvider Architecture","lvl3":""}},
284
+ {"objectID":"cee8027d57ee843cee86a6c97eb9d046dbe7e21a69ce4b512946efc45205cc41","title":"2. Automatic Tool Support","url":"/docs/advanced/factory-patterns#2-automatic-tool-support","content":"Providers automatically include these tools:\ngetCurrentTime - Get current date and time\nreadFile - Read file contents\nlistDirectory - List directory contents\ncalculateMath - Perform calculations\nwriteFile - Write to files\nsearchFiles - Search for files by pattern","hierarchy":{"lvl0":"Advanced","lvl1":"Factory Pattern Migration Guide","lvl2":"2. Automatic Tool Support","lvl3":""}},
285
+ {"objectID":"aa2c23eaf2b0c2e2be76dc3084b8444c0b70d366332d093c32a84e2528261082","title":"3. Simplified Provider Implementation","url":"/docs/advanced/factory-patterns#3-simplified-provider-implementation","content":"Providers no longer need to implement their own tool handling - they inherit it from BaseProvider. This means:\nNo more executeGenerate methods in individual providers\nConsistent tool behavior across supported providers\nLess code duplication","hierarchy":{"lvl0":"Advanced","lvl1":"Factory Pattern Migration Guide","lvl2":"3. Simplified Provider Implementation","lvl3":""}},
286
286
  {"objectID":"86d70d915acdc3b44f307a6b520059845be38b4e81b2e52cce24bb9abc3edc83","title":"For Users","url":"/docs/advanced/factory-patterns#for-users","content":"Good news! There are no breaking changes. Your existing code will continue to work exactly as before.","hierarchy":{"lvl0":"Advanced","lvl1":"Factory Pattern Migration Guide","lvl2":"For Users","lvl3":""}},
287
287
  {"objectID":"bc63907d67e45dc5b0bf70d6f38f067bb5f6fb78caa9dbf87a931fcb08b25876","title":"For Provider Developers","url":"/docs/advanced/factory-patterns#for-provider-developers","content":"If you've created custom providers, you'll need to update them to use the new pattern:","hierarchy":{"lvl0":"Advanced","lvl1":"Factory Pattern Migration Guide","lvl2":"For Provider Developers","lvl3":""}},
288
288
  {"objectID":"d5baf3cc166eadb899b8b3ec96343a289e6578f97cfabe10f343e97967fc781b","title":"Provider Tool Support Status","url":"/docs/advanced/factory-patterns#provider-tool-support-status","content":"After the refactoring, here's the current status of tool support:\n\n| Provider | Status | Notes |\n| ------------ | ----------------- | ---------------------------------------------------- |\n| OpenAI | ✅ Full Support | All tools working correctly |\n| Google AI | ✅ Full Support | Excellent tool execution |\n| Anthropic | ✅ Full Support | Working after max_tokens fix |\n| Azure OpenAI | ✅ Full Support | Same as OpenAI |\n| Mistral | ✅ Full Support | Good tool support |\n| HuggingFace | ⚠️ Partial | Model sees tools but may describe instead of execute |\n| Vertex AI | ⚠️ Partial | Tools available but may not execute |\n| Ollama | ❌ Limited | Requires specific models (e.g., gemma3n) |\n| Bedrock | ✅ Full Support\\* | Requires valid AWS credentials |","hierarchy":{"lvl0":"Advanced","lvl1":"Factory Pattern Migration Guide","lvl2":"Provider Tool Support Status","lvl3":""}},
289
- {"objectID":"81adf8656716613f0b16078865a8f472548c274ff61064a79ed4bd5f0864effc","title":"Benefits of the New Architecture","url":"/docs/advanced/factory-patterns#benefits-of-the-new-architecture","content":"Consistency: All providers behave the same way with tools\nMaintainability: Less code duplication, easier to update\nReliability: Centralized tool handling reduces bugs\nExtensibility: Easy to add new tools for all providers at once\nTesting: Simplified testing with consistent behavior","hierarchy":{"lvl0":"Advanced","lvl1":"Factory Pattern Migration Guide","lvl2":"Benefits of the New Architecture","lvl3":""}},
289
+ {"objectID":"81adf8656716613f0b16078865a8f472548c274ff61064a79ed4bd5f0864effc","title":"Benefits of the New Architecture","url":"/docs/advanced/factory-patterns#benefits-of-the-new-architecture","content":"Consistency: Providers behave the same way with tools\nMaintainability: Less code duplication, easier to update\nReliability: Centralized tool handling reduces bugs\nExtensibility: Easy to add new tools for providers at once\nTesting: Simplified testing with consistent behavior","hierarchy":{"lvl0":"Advanced","lvl1":"Factory Pattern Migration Guide","lvl2":"Benefits of the New Architecture","lvl3":""}},
290
290
  {"objectID":"5a00f643d737c3d5f664f4d5343612485e7cbee65a7b25ba3385f5b2dc46c2f3","title":"Issue: Provider Not Using Tools","url":"/docs/advanced/factory-patterns#issue-provider-not-using-tools","content":"Solution: Check if your model supports function calling. Some models (especially older or smaller ones) may not support tools.","hierarchy":{"lvl0":"Advanced","lvl1":"Factory Pattern Migration Guide","lvl2":"Issue: Provider Not Using Tools","lvl3":""}},
291
291
  {"objectID":"5468d676003346b5b73b22385b4ba748b49c6104f7ef79e9d741ff91992fc60a","title":"Issue: HuggingFace Describing Tools Instead of Using Them","url":"/docs/advanced/factory-patterns#issue-huggingface-describing-tools-instead-of-using-them","content":"Solution: This is a model limitation. Use models that support function calling:\nmistralai/Mixtral-8x7B-Instruct-v0.1\nmistralai/Mistral-7B-Instruct-v0.2","hierarchy":{"lvl0":"Advanced","lvl1":"Factory Pattern Migration Guide","lvl2":"Issue: HuggingFace Describing Tools Instead of Using Them","lvl3":""}},
292
292
  {"objectID":"09138271807d52bd82973c6161251f23d0d534118286a356017d87d7f64b1c6b","title":"Issue: Ollama Returns Empty Content","url":"/docs/advanced/factory-patterns#issue-ollama-returns-empty-content","content":"Solution: Use models that support tool calling:\n\n`bash","hierarchy":{"lvl0":"Advanced","lvl1":"Factory Pattern Migration Guide","lvl2":"Issue: Ollama Returns Empty Content","lvl3":""}},
@@ -520,11 +520,11 @@
520
520
  {"objectID":"8808ba67debf1606303ecc0aaa21f46aad53b23e0545e852ae816da0f8d1b70e","title":"Network Commands","url":"/docs/agents/VERIFICATION#network-commands","content":"[ ] neurolink network create - available\n[ ] neurolink network list - available\n[ ] neurolink network execute - available\n[ ] neurolink network run (alias for execute) - available\n\nSee CLI-COVERAGE.md for full flag reference and usage\nexamples.","hierarchy":{"lvl0":"Agents","lvl1":"Multi-Agent Networks Verification Checklist","lvl2":"Network Commands","lvl3":""}},
521
521
  {"objectID":"3bf417c52feb21b5fcbad8ff3162a8bae02e1245c62819c46ed375c3d373c2ee","title":"Final Verification Summary","url":"/docs/agents/VERIFICATION#final-verification-summary","content":"| Category | Method | Status |\n| -------------------- | ---------------------------------------------------- | ------ |\n| Agent Class | pnpm exec tsx test/continuous-test-suite-agents.ts | ? |\n| AgentNetwork | pnpm exec tsx test/continuous-test-suite-agents.ts | ? |\n| MessageBus | pnpm exec tsx test/continuous-test-suite-agents.ts | ? |\n| HubSpokeTopology | pnpm exec tsx test/continuous-test-suite-agents.ts | ? |\n| MeshTopology | pnpm exec tsx test/continuous-test-suite-agents.ts | ? |\n| HierarchicalTopology | pnpm exec tsx test/continuous-test-suite-agents.ts | ? |\n| CLI Commands | Manual smoke test (neurolink agent --help) | ? |\n| Integration | pnpm exec tsx test/continuous-test-suite-agents.ts | ? |","hierarchy":{"lvl0":"Agents","lvl1":"Multi-Agent Networks Verification Checklist","lvl2":"Final Verification Summary","lvl3":""}},
522
522
  {"objectID":"0e38ebba0b49d2df35a436aec7b1df78eb32193aba379664f377a9d1029ec49a","title":"Sign-Off","url":"/docs/agents/VERIFICATION#sign-off","content":"[ ] Integration tests passing\n[ ] CLI commands smoke-tested\n[ ] Performance acceptable\n[ ] Documentation complete\n\nVerified by: \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ Date: \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\","hierarchy":{"lvl0":"Agents","lvl1":"Multi-Agent Networks Verification Checklist","lvl2":"Sign-Off","lvl3":""}},
523
- {"objectID":"1dcbe493b12b60692a8a9f9e2f47b6789f2a5f0cb86b6fb64bf93493eb0d6c64","title":"🧠 AI Analysis Tools","url":"/docs/ai-analysis-tools","content":"🧠 AI Analysis Tools\n\nNeuroLink features 3 specialized AI Analysis Tools for AI optimization and workflow enhancement. These tools work seamlessly behind our factory method interface, providing enterprise-grade AI analysis capabilities.\n\n🏆 Production Status\n\nProduction Ready: 20/20 Tests Passing (100% Success Rate)\n✅ 3 AI Analysis Tools Implemented: Complete AI optimization and analysis capabilities\n✅ Enterprise Integration: Professional web interface with full API endpoints\n✅ Performance Validated: All tools execute under 1ms individually, 7 seconds total for full suite\n✅ Production Infrastructure: Rich context, permissions, error handling, comprehensive validation\n\n🔧 Available Tools\nAI Usage Analysis - analyzeAIUsage()\n\nAnalyze AI usage patterns, token consumption, and cost optimization across all providers.\n\nFeatures:\nToken Usage Analytics: Detailed breakdown by provider and time period\nCost Optimization: Identify most cost-effective providers for your workload\nUsage Patterns: Detect peak usage times and optimization opportunities\nProvider Comparison: Side-by-side cost and performance analysis\nProvider Performance Benchmarking - benchmarkProviders()\n\nAdvanced benchmarking with latency, quality, and cost metrics across all AI providers.\n\nFeatures:\nLatency Testing: Measure real response times across providers\nQuality Assessment: Evaluate output quality for different prompt types\nCost Efficiency: Calculate cost per token and value metrics\nProvider Rankings: Automatic ranking by performance criteria\nPrompt Parameter Optimization - optimizePrompt()\n\nOptimize prompt parameters (temperature, max tokens, style) for better output quality.\n\nFeatures:\nParameter Tuning: Automatic optimization of temperature, max tokens, style\nQuality Prediction: Estimate quality improvements from parameter changes\nAlternative Suggestions: Multiple parameter sets for different use cases\nStyle Optimization: Adjust parameters for specific writing styles\n\n🎯 Business Benefits\n\nCost Optimization\nProvider Cost Analysis: Identify most cost-effective providers for your workload\nUsage Pattern Insights: Detect opportunities to reduce token consumption\nBudget Planning: Predict costs based on historical usage patterns\n\nPerformance Enhancement\nReal-time Benchmarking: Continuous performance monitoring across providers\nQuality Metrics: Measure and improve output quality over time\nLatency Optimization: Choose fastest providers for time-sensitive applications\n\nParameter Intelligence\nAutomated Tuning: Remove guesswork from prompt parameter selection\nQuality Prediction: Understand impact of parameter changes before implementation\nStyle Adaptation: Optimize parameters for different content types\n\n🌐 Interactive Web Interface\n\nAll AI Analysis Tools are available through our unified demo application with professional UI:\n\nFeatures\n✅ Real-time Analysis: Interactive forms for all 3 analysis tools\n✅ API Endpoints: Full REST API at /api/ai/analyze-usage, /api/ai/benchmark-performance, /api/ai/optimize-parameters\n✅ JSON Results: Comprehensive analysis results with visual feedback\n✅ Simulation Mode: Fallback to realistic simulated responses for demonstration\n\nAPI Endpoints\n\nAnalyze AI Usage\n\nBenchmark Performance\n\nOptimize Parameters\n\n🎬 Visual Documentation\n\nScreenshots\nAI Usage Analysis Interface: Interactive form with real-time token analysis\nPerformance Benchmarking: Provider comparison with latency and quality metrics\nParameter Optimization: Prompt tuning interface with multiple suggestions\n\nDemo Videos\n\nAll analysis tools are demonstrated in our comprehensive demo videos:\nVisual Demos - Real-time analysis and optimization demonstrations\n\n🔧 Technical Implementation\n\nMCP Integration\n\nAI Analysis Tools are implemented as MCP (Model Context Protocol) tools that work internally behind our factory methods:\n\nError Handling\nGraceful Fallback: Tools fall back to simulation mode if AI providers unavailable\nComprehensive Validation: Input validation and error reporting\nProduction Logging: Detailed logging for debugging and monitoring\n\nPerformance Metrics\nTool Execution: Individual tools execute under 1ms\nSuite Execution: Complete analysis suite runs in ~7 seconds\nAPI Response: REST endpoints respond within 2-5 seconds\nError Recovery: Automatic fallback to simulation mode on provider failures\n\n🚀 Getting Started\nInstall NeuroLink: npm install @juspay/neurolink\nSet up providers: Configure at least one AI provider (see Provider Configuration) (now with authentication and model availability checks)\nTry the tools: Use factory methods or visit the demo application\nIntegrate APIs: Use REST endpoints for web applications\n\n📚 Related Documentation\nMain README - Project overview and quick start\nAI Workflow Tools - Development lifecycle tools\nMCP Foundation - Technical architecture details\nAPI Reference - Complete TypeScript API\nVisual Demos - Screenshots and videos\n\nEnterprise AI Analysis - Transform your AI development workflow with data-driven insights and optimization ","hierarchy":{"lvl0":"Ai Analysis Tools","lvl1":"🧠 AI Analysis Tools","lvl2":"","lvl3":""}},
523
+ {"objectID":"1dcbe493b12b60692a8a9f9e2f47b6789f2a5f0cb86b6fb64bf93493eb0d6c64","title":"🧠 AI Analysis Tools","url":"/docs/ai-analysis-tools","content":"🧠 AI Analysis Tools\n\nNeuroLink features 3 specialized AI Analysis Tools for AI optimization and workflow enhancement. These tools work seamlessly behind our factory method interface, providing enterprise-grade AI analysis capabilities.\n\n🏆 Production Status\n\nProduction Ready: 20/20 Tests Passing (100% Success Rate)\n✅ 3 AI Analysis Tools Implemented: Complete AI optimization and analysis capabilities\n✅ Enterprise Integration: Professional web interface with full API endpoints\n✅ Performance Validated: All tools execute under 1ms individually, 7 seconds total for full suite\n✅ Production Infrastructure: Rich context, permissions, error handling, comprehensive validation\n\n🔧 Available Tools\nAI Usage Analysis - analyzeAIUsage()\n\nAnalyze AI usage patterns, token consumption, and cost optimization across your configured providers.\n\nFeatures:\nToken Usage Analytics: Detailed breakdown by provider and time period\nCost Optimization: Identify most cost-effective providers for your workload\nUsage Patterns: Detect peak usage times and optimization opportunities\nProvider Comparison: Side-by-side cost and performance analysis\nProvider Performance Benchmarking - benchmarkProviders()\n\nAdvanced benchmarking with latency, quality, and cost metrics across configured AI providers.\n\nFeatures:\nLatency Testing: Measure real response times across providers\nQuality Assessment: Evaluate output quality for different prompt types\nCost Efficiency: Calculate cost per token and value metrics\nProvider Rankings: Automatic ranking by performance criteria\nPrompt Parameter Optimization - optimizePrompt()\n\nOptimize prompt parameters (temperature, max tokens, style) for better output quality.\n\nFeatures:\nParameter Tuning: Automatic optimization of temperature, max tokens, style\nQuality Prediction: Estimate quality improvements from parameter changes\nAlternative Suggestions: Multiple parameter sets for different use cases\nStyle Optimization: Adjust parameters for specific writing styles\n\n🎯 Business Benefits\n\nCost Optimization\nProvider Cost Analysis: Identify most cost-effective providers for your workload\nUsage Pattern Insights: Detect opportunities to reduce token consumption\nBudget Planning: Predict costs based on historical usage patterns\n\nPerformance Enhancement\nReal-time Benchmarking: Continuous performance monitoring across providers\nQuality Metrics: Measure and improve output quality over time\nLatency Optimization: Choose fastest providers for time-sensitive applications\n\nParameter Intelligence\nAutomated Tuning: Remove guesswork from prompt parameter selection\nQuality Prediction: Understand impact of parameter changes before implementation\nStyle Adaptation: Optimize parameters for different content types\n\n🌐 Interactive Web Interface\n\nAll AI Analysis Tools are available through our unified demo application with professional UI:\n\nFeatures\n✅ Real-time Analysis: Interactive forms for all 3 analysis tools\n✅ API Endpoints: Full REST API at /api/ai/analyze-usage, /api/ai/benchmark-performance, /api/ai/optimize-parameters\n✅ JSON Results: Comprehensive analysis results with visual feedback\n✅ Simulation Mode: Fallback to realistic simulated responses for demonstration\n\nAPI Endpoints\n\nAnalyze AI Usage\n\nBenchmark Performance\n\nOptimize Parameters\n\n🎬 Visual Documentation\n\nScreenshots\nAI Usage Analysis Interface: Interactive form with real-time token analysis\nPerformance Benchmarking: Provider comparison with latency and quality metrics\nParameter Optimization: Prompt tuning interface with multiple suggestions\n\nDemo Videos\n\nAll analysis tools are demonstrated in our comprehensive demo videos:\nVisual Demos - Real-time analysis and optimization demonstrations\n\n🔧 Technical Implementation\n\nMCP Integration\n\nAI Analysis Tools are implemented as MCP (Model Context Protocol) tools that work internally behind our factory methods:\n\nError Handling\nGraceful Fallback: Tools fall back to simulation mode if AI providers unavailable\nComprehensive Validation: Input validation and error reporting\nProduction Logging: Detailed logging for debugging and monitoring\n\nPerformance Metrics\nTool Execution: Individual tools execute under 1ms\nSuite Execution: Complete analysis suite runs in ~7 seconds\nAPI Response: REST endpoints respond within 2-5 seconds\nError Recovery: Automatic fallback to simulation mode on provider failures\n\n🚀 Getting Started\nInstall NeuroLink: npm install @juspay/neurolink\nSet up providers: Configure at least one AI provider (see Provider Configuration) (now with authentication and model availability checks)\nTry the tools: Use factory methods or visit the demo application\nIntegrate APIs: Use REST endpoints for web applications\n\n📚 Related Documentation\nMain README - Project overview and quick start\nAI Workflow Tools - Development lifecycle tools\nMCP Foundation - Technical architecture details\nAPI Reference - Complete TypeScript API\nVisual Demos - Screenshots and videos\n\nEnterprise AI Analysis - Transform your AI development workflow with data-driven insight","hierarchy":{"lvl0":"Ai Analysis Tools","lvl1":"🧠 AI Analysis Tools","lvl2":"","lvl3":""}},
524
524
  {"objectID":"66690692e64f192b8fce4bc12064c12cd35dcbeaf9fb1990c69ccda1b84f0a58","title":"🧠 AI Analysis Tools","url":"/docs/ai-analysis-tools#-ai-analysis-tools","content":"NeuroLink features 3 specialized AI Analysis Tools for AI optimization and workflow enhancement. These tools work seamlessly behind our factory method interface, providing enterprise-grade AI analysis capabilities.","hierarchy":{"lvl0":"Ai Analysis Tools","lvl1":"🧠 AI Analysis Tools","lvl2":"🧠 AI Analysis Tools","lvl3":""}},
525
525
  {"objectID":"ea8da74b416b1adbb43bbb8d705549eb806e256ee9a12f302e0b8812cfa100ef","title":"🏆 Production Status","url":"/docs/ai-analysis-tools#-production-status","content":"Production Ready: 20/20 Tests Passing (100% Success Rate)\n✅ 3 AI Analysis Tools Implemented: Complete AI optimization and analysis capabilities\n✅ Enterprise Integration: Professional web interface with full API endpoints\n✅ Performance Validated: All tools execute under 1ms individually, 7 seconds total for full suite\n✅ Production Infrastructure: Rich context, permissions, error handling, comprehensive validation","hierarchy":{"lvl0":"Ai Analysis Tools","lvl1":"🧠 AI Analysis Tools","lvl2":"🏆 Production Status","lvl3":""}},
526
- {"objectID":"b5bb3d3ac6141db777c7b58baac837ce10d4a35cc79794fb84a1a7c9f03c0d00","title":"1. AI Usage Analysis - analyzeAIUsage()","url":"/docs/ai-analysis-tools#1-ai-usage-analysis---analyzeaiusage","content":"Analyze AI usage patterns, token consumption, and cost optimization across all providers.\n\nFeatures:\nToken Usage Analytics: Detailed breakdown by provider and time period\nCost Optimization: Identify most cost-effective providers for your workload\nUsage Patterns: Detect peak usage times and optimization opportunities\nProvider Comparison: Side-by-side cost and performance analysis","hierarchy":{"lvl0":"Ai Analysis Tools","lvl1":"🧠 AI Analysis Tools","lvl2":"1. AI Usage Analysis - analyzeAIUsage()","lvl3":""}},
527
- {"objectID":"e56c57d9e2c4bebca178d66bdb3825da39c6a402aa5cb3e360375dca3780f568","title":"2. Provider Performance Benchmarking - benchmarkProviders()","url":"/docs/ai-analysis-tools#2-provider-performance-benchmarking---benchmarkproviders","content":"Advanced benchmarking with latency, quality, and cost metrics across all AI providers.\n\nFeatures:\nLatency Testing: Measure real response times across providers\nQuality Assessment: Evaluate output quality for different prompt types\nCost Efficiency: Calculate cost per token and value metrics\nProvider Rankings: Automatic ranking by performance criteria","hierarchy":{"lvl0":"Ai Analysis Tools","lvl1":"🧠 AI Analysis Tools","lvl2":"2. Provider Performance Benchmarking - benchmarkProviders()","lvl3":""}},
526
+ {"objectID":"b5bb3d3ac6141db777c7b58baac837ce10d4a35cc79794fb84a1a7c9f03c0d00","title":"1. AI Usage Analysis - analyzeAIUsage()","url":"/docs/ai-analysis-tools#1-ai-usage-analysis---analyzeaiusage","content":"Analyze AI usage patterns, token consumption, and cost optimization across your configured providers.\n\nFeatures:\nToken Usage Analytics: Detailed breakdown by provider and time period\nCost Optimization: Identify most cost-effective providers for your workload\nUsage Patterns: Detect peak usage times and optimization opportunities\nProvider Comparison: Side-by-side cost and performance analysis","hierarchy":{"lvl0":"Ai Analysis Tools","lvl1":"🧠 AI Analysis Tools","lvl2":"1. AI Usage Analysis - analyzeAIUsage()","lvl3":""}},
527
+ {"objectID":"e56c57d9e2c4bebca178d66bdb3825da39c6a402aa5cb3e360375dca3780f568","title":"2. Provider Performance Benchmarking - benchmarkProviders()","url":"/docs/ai-analysis-tools#2-provider-performance-benchmarking---benchmarkproviders","content":"Advanced benchmarking with latency, quality, and cost metrics across configured AI providers.\n\nFeatures:\nLatency Testing: Measure real response times across providers\nQuality Assessment: Evaluate output quality for different prompt types\nCost Efficiency: Calculate cost per token and value metrics\nProvider Rankings: Automatic ranking by performance criteria","hierarchy":{"lvl0":"Ai Analysis Tools","lvl1":"🧠 AI Analysis Tools","lvl2":"2. Provider Performance Benchmarking - benchmarkProviders()","lvl3":""}},
528
528
  {"objectID":"ccc0ec328fa4e1bf6569b75db1aab6acded275c4c3724465fdae50fb7658c641","title":"3. Prompt Parameter Optimization - optimizePrompt()","url":"/docs/ai-analysis-tools#3-prompt-parameter-optimization---optimizeprompt","content":"Optimize prompt parameters (temperature, max tokens, style) for better output quality.\n\nFeatures:\nParameter Tuning: Automatic optimization of temperature, max tokens, style\nQuality Prediction: Estimate quality improvements from parameter changes\nAlternative Suggestions: Multiple parameter sets for different use cases\nStyle Optimization: Adjust parameters for specific writing styles","hierarchy":{"lvl0":"Ai Analysis Tools","lvl1":"🧠 AI Analysis Tools","lvl2":"3. Prompt Parameter Optimization - optimizePrompt()","lvl3":""}},
529
529
  {"objectID":"b4acf2c29169709cf647011258869b62fcc281a8966741775480b1d545212969","title":"Cost Optimization","url":"/docs/ai-analysis-tools#cost-optimization","content":"Provider Cost Analysis: Identify most cost-effective providers for your workload\nUsage Pattern Insights: Detect opportunities to reduce token consumption\nBudget Planning: Predict costs based on historical usage patterns","hierarchy":{"lvl0":"Ai Analysis Tools","lvl1":"🧠 AI Analysis Tools","lvl2":"Cost Optimization","lvl3":""}},
530
530
  {"objectID":"6fa479f08fe4d34a1987229dc9244c0aea3fbeb096a2b900b7ac4de2c543ffd9","title":"Performance Enhancement","url":"/docs/ai-analysis-tools#performance-enhancement","content":"Real-time Benchmarking: Continuous performance monitoring across providers\nQuality Metrics: Measure and improve output quality over time\nLatency Optimization: Choose fastest providers for time-sensitive applications","hierarchy":{"lvl0":"Ai Analysis Tools","lvl1":"🧠 AI Analysis Tools","lvl2":"Performance Enhancement","lvl3":""}},
@@ -539,7 +539,7 @@
539
539
  {"objectID":"2d85636dfd7fae3624eb9a194ab51b1de91702965d5482f2986a28e36143cb7d","title":"Performance Metrics","url":"/docs/ai-analysis-tools#performance-metrics","content":"Tool Execution: Individual tools execute under 1ms\nSuite Execution: Complete analysis suite runs in ~7 seconds\nAPI Response: REST endpoints respond within 2-5 seconds\nError Recovery: Automatic fallback to simulation mode on provider failures","hierarchy":{"lvl0":"Ai Analysis Tools","lvl1":"🧠 AI Analysis Tools","lvl2":"Performance Metrics","lvl3":""}},
540
540
  {"objectID":"de9e31f569da491c78051955d3cb4e157104b14ead5fd10a21447a96b7e65f36","title":"🚀 Getting Started","url":"/docs/ai-analysis-tools#-getting-started","content":"Install NeuroLink: npm install @juspay/neurolink\nSet up providers: Configure at least one AI provider (see Provider Configuration) (now with authentication and model availability checks)\nTry the tools: Use factory methods or visit the demo application\nIntegrate APIs: Use REST endpoints for web applications","hierarchy":{"lvl0":"Ai Analysis Tools","lvl1":"🧠 AI Analysis Tools","lvl2":"🚀 Getting Started","lvl3":""}},
541
541
  {"objectID":"dfec0c50580feab838da9596a104c686eb1d154f090d71a99bf556dab7c7b721","title":"📚 Related Documentation","url":"/docs/ai-analysis-tools#-related-documentation","content":"Main README - Project overview and quick start\nAI Workflow Tools - Development lifecycle tools\nMCP Foundation - Technical architecture details\nAPI Reference - Complete TypeScript API\nVisual Demos - Screenshots and videos\n\nEnterprise AI Analysis - Transform your AI development workflow with data-driven insights and optimization recommendations.","hierarchy":{"lvl0":"Ai Analysis Tools","lvl1":"🧠 AI Analysis Tools","lvl2":"📚 Related Documentation","lvl3":""}},
542
- {"objectID":"0c3ca4d7eec12de7fee3b64b95a83e48bfeaac676547551c8fc6ad41ad074f0d","title":"🚀 NeuroLink AI Enhancements - Complete Documentation","url":"/docs/ai-enhancements","content":"🚀 NeuroLink AI Enhancements - Complete Documentation\n\nOverview\n\nNeuroLink v3.1.0 introduces 6 powerful AI enhancement features that transform it from a basic AI SDK into a comprehensive AI development platform with quality monitoring and analytics capabilities.\n\n🆕 New Features\nResponse Quality Evaluation ⭐\n\nAI-powered quality scoring using fast, cost-effective models to evaluate response quality on multiple dimensions.\n\nMetrics:\nRelevance (1-10): How well the response addresses the prompt\nAccuracy (1-10): Factual correctness of the information\nCompleteness (1-10): Whether the response fully answers the question\nOverall (1-10): Combined quality assessment\n\nConfiguration:\nUsage Analytics 📊\n\nComprehensive tracking of AI usage patterns, costs, and performance metrics.\n\nMetrics Captured:\nToken usage (input, output, total)\nEstimated costs (based on provider pricing)\nResponse time\nProvider and model used\nCustom context data\nTimestamp\n\nSupported Cost Estimation:\nOpenAI (GPT-4, GPT-4 Turbo, GPT-3.5 Turbo)\nAnthropic (Claude 3 Opus, Sonnet, Haiku)\nGoogle AI (Gemini Pro, Gemini 2.5 Flash)\nGeneric Context Flow 🔄\n\nPass custom context objects through the entire AI request lifecycle for domain-specific tracking and analytics.\n\nUse Cases:\nUser identification (userId, sessionId)\nDomain-specific metadata (department, project)\nRequest categorization (priority, type)\nCustom business logic data\nQuality Monitoring 📈\n\nAnalytics and evaluation data returned in response objects for user-controlled alerting and monitoring.\n\nNo External Dependencies:\nAll data stays within NeuroLink ecosystem\nUsers control what to do with the data\nNo forced external endpoints or webhooks\n\n🛠️ SDK Usage\n\nBasic Usage with Analytics\n\nUsage with Quality Evaluation\n\nCombined Analytics and Evaluation\n\n🖥️ CLI Usage\n\nAnalytics Tracking\n\nQuality Evaluation\n\nCustom Context\n\nAll Features Combined\nUniversal Evaluation System 🌐\n\nEnterprise-grade multi-provider evaluation with intelligent fallback, cost optimization, and performance tuning.\n\nKey Features:\n9 Provider Support: Google AI, OpenAI, Anthropic, Vertex, Bedrock, Azure, Ollama, Hugging Face, Mistral\nIntelligent Fallback: Automatic provider selection when primary fails\nCost Optimization: Provider-specific cost calculations and budget awareness\nPerformance Modes: Fast, balanced, and quality evaluation options\nRetry Logic: Robust error handling with exponential backoff\n\nConfiguration:\n\nUsage:\n\nCLI Usage:\nLighthouse Enhanced Evaluation 🎯\n\nDomain-aware evaluation with 6-dimensional scoring based on Lighthouse AI platform patterns.\n\nEnhanced Scoring Dimensions:\nRelevance Score (1-10): How well response addresses the prompt\nAccuracy Score (1-10): Factual correctness of information\nCompleteness Score (1-10): Whether response fully answers question\nDomain Alignment (1-10): Expertise alignment with specified domain\nTerminology Accuracy (1-10): Proper use of domain-specific terms\nTool Effectiveness (1-10): How well MCP tools were utilized\n\nAdvanced Features:\nContext Integration: Tool usage tracking and conversation history\nDomain Expertise: Specialized evaluation prompts for specific domains\nEnterprise Telemetry: Structured logging with OpenTelemetry patterns\nBackward Compatibility: Full compatibility with Universal Evaluation System\n\nCLI Usage:\n\nSDK Usage:\n\n📋 Interface Reference\n\nEnhanced TextGenerationOptions\n\nAnalyticsData Structure\n\nEvaluationData Structure\n\n🔧 Configuration\n\nEnvironment Variables\n\nCost Estimation Configuration\n\nBuilt-in pricing for major providers (updated regularly):\n\n🚀 Performance Considerations\n\nPerformance Impact\nFeatures Disabled (default): Zero overhead\nAnalytics Only: \\<5ms additional processing\nEvaluation Only: Depends on evaluation model (recommend fast models)\nBoth Enabled: Minimal combined impact\n\nCost Optimization\nAnalytics: No additional API costs (local processing)\nEvaluation: Additional API calls to evaluation model\nRecommendation: Use fast, cheap models like Gemini 2.5 Flash for evaluation\n\nScaling Recommendations\nUse analytics for all production requests\nUse evaluation for critical or customer-facing content\nImplement sampling for high-volume applications\nCache evaluation results for similar prompts\n\n🛡️ Security & Privacy\nNo External Transmission: All data stays within NeuroLink ecosystem\nUser Control: You decide what to do with analytics/evaluation data\nContext Security: Context objects support any data format you control\nProvider Security: Same security model as existing NeuroLink providers\n\n🔄 Migration Guide\n\nFrom v3.0.x to v3.1.x\n\nZero Breaking Changes! All existing code continues to work unchanged.\n\nCLI Migration\n\n📚 Examples & Use Cases\n\nCustomer Support Analytics\n\nContent Generation Pipeline\n\nCost Monitoring Dashboard\n\n🎯 Best Practices\nEnable Analytics by Default: Track all production usage\nSelective Evaluation: Use for critical or customer-facing content\nMeaningful Context: Include user/session IDs for tracking\nQuality Thresholds: Set minimum quality scores fo","hierarchy":{"lvl0":"Ai Enhancements","lvl1":"🚀 NeuroLink AI Enhancements - Complete Documentation","lvl2":"","lvl3":""}},
542
+ {"objectID":"0c3ca4d7eec12de7fee3b64b95a83e48bfeaac676547551c8fc6ad41ad074f0d","title":"🚀 NeuroLink AI Enhancements - Complete Documentation","url":"/docs/ai-enhancements","content":"🚀 NeuroLink AI Enhancements - Complete Documentation\n\nOverview\n\nNeuroLink v3.1.0 introduces 6 powerful AI enhancement features that transform it from a basic AI SDK into a comprehensive AI development platform with quality monitoring and analytics capabilities.\n\n🆕 New Features\nResponse Quality Evaluation ⭐\n\nAI-powered quality scoring using fast, cost-effective models to evaluate response quality on multiple dimensions.\n\nMetrics:\nRelevance (1-10): How well the response addresses the prompt\nAccuracy (1-10): Factual correctness of the information\nCompleteness (1-10): Whether the response fully answers the question\nOverall (1-10): Combined quality assessment\n\nConfiguration:\nUsage Analytics 📊\n\nComprehensive tracking of AI usage patterns, costs, and performance metrics.\n\nMetrics Captured:\nToken usage (input, output, total)\nEstimated costs (based on provider pricing)\nResponse time\nProvider and model used\nCustom context data\nTimestamp\n\nSupported Cost Estimation:\nOpenAI (GPT-4, GPT-4 Turbo, GPT-3.5 Turbo)\nAnthropic (Claude 3 Opus, Sonnet, Haiku)\nGoogle AI (Gemini Pro, Gemini 2.5 Flash)\nGeneric Context Flow 🔄\n\nPass custom context objects through the entire AI request lifecycle for domain-specific tracking and analytics.\n\nUse Cases:\nUser identification (userId, sessionId)\nDomain-specific metadata (department, project)\nRequest categorization (priority, type)\nCustom business logic data\nQuality Monitoring 📈\n\nAnalytics and evaluation data returned in response objects for user-controlled alerting and monitoring.\n\nNo External Dependencies:\nAll data stays within NeuroLink ecosystem\nUsers control what to do with the data\nNo forced external endpoints or webhooks\n\n🛠️ SDK Usage\n\nBasic Usage with Analytics\n\nUsage with Quality Evaluation\n\nCombined Analytics and Evaluation\n\n🖥️ CLI Usage\n\nAnalytics Tracking\n\nQuality Evaluation\n\nCustom Context\n\nAll Features Combined\nUniversal Evaluation System 🌐\n\nEnterprise-grade multi-provider evaluation with intelligent fallback, cost optimization, and performance tuning.\n\nKey Features:\nMulti-Provider Support: Google AI, OpenAI, Anthropic, Vertex, Bedrock, Azure, Ollama, Hugging Face, Mistral\nIntelligent Fallback: Automatic provider selection when primary fails\nCost Optimization: Provider-specific cost calculations and budget awareness\nPerformance Modes: Fast, balanced, and quality evaluation options\nRetry Logic: Robust error handling with exponential backoff\n\nConfiguration:\n\nUsage:\n\nCLI Usage:\nLighthouse Enhanced Evaluation 🎯\n\nDomain-aware evaluation with 6-dimensional scoring based on Lighthouse AI platform patterns.\n\nEnhanced Scoring Dimensions:\nRelevance Score (1-10): How well response addresses the prompt\nAccuracy Score (1-10): Factual correctness of information\nCompleteness Score (1-10): Whether response fully answers question\nDomain Alignment (1-10): Expertise alignment with specified domain\nTerminology Accuracy (1-10): Proper use of domain-specific terms\nTool Effectiveness (1-10): How well MCP tools were utilized\n\nAdvanced Features:\nContext Integration: Tool usage tracking and conversation history\nDomain Expertise: Specialized evaluation prompts for specific domains\nEnterprise Telemetry: Structured logging with OpenTelemetry patterns\nBackward Compatibility: Full compatibility with Universal Evaluation System\n\nCLI Usage:\n\nSDK Usage:\n\n📋 Interface Reference\n\nEnhanced TextGenerationOptions\n\nAnalyticsData Structure\n\nEvaluationData Structure\n\n🔧 Configuration\n\nEnvironment Variables\n\nCost Estimation Configuration\n\nBuilt-in pricing for major providers (updated regularly):\n\n🚀 Performance Considerations\n\nPerformance Impact\nFeatures Disabled (default): Zero overhead\nAnalytics Only: \\<5ms additional processing\nEvaluation Only: Depends on evaluation model (recommend fast models)\nBoth Enabled: Minimal combined impact\n\nCost Optimization\nAnalytics: No additional API costs (local processing)\nEvaluation: Additional API calls to evaluation model\nRecommendation: Use fast, cheap models like Gemini 2.5 Flash for evaluation\n\nScaling Recommendations\nUse analytics for all production requests\nUse evaluation for critical or customer-facing content\nImplement sampling for high-volume applications\nCache evaluation results for similar prompts\n\n🛡️ Security & Privacy\nNo External Transmission: All data stays within NeuroLink ecosystem\nUser Control: You decide what to do with analytics/evaluation data\nContext Security: Context objects support any data format you control\nProvider Security: Same security model as existing NeuroLink providers\n\n🔄 Migration Guide\n\nFrom v3.0.x to v3.1.x\n\nZero Breaking Changes! All existing code continues to work unchanged.\n\nCLI Migration\n\n📚 Examples & Use Cases\n\nCustomer Support Analytics\n\nContent Generation Pipeline\n\nCost Monitoring Dashboard\n\n🎯 Best Practices\nEnable Analytics by Default: Track all production usage\nSelective Evaluation: Use for critical or customer-facing content\nMeaningful Context: Include user/session IDs for tracking\nQuality Thresholds: Set minimum quality score","hierarchy":{"lvl0":"Ai Enhancements","lvl1":"🚀 NeuroLink AI Enhancements - Complete Documentation","lvl2":"","lvl3":""}},
543
543
  {"objectID":"512ceed0db78e7f0d674d5e37f90436adc5b945cda65d883131596e99e69a0a6","title":"Overview","url":"/docs/ai-enhancements#overview","content":"NeuroLink v3.1.0 introduces 6 powerful AI enhancement features that transform it from a basic AI SDK into a comprehensive AI development platform with quality monitoring and analytics capabilities.","hierarchy":{"lvl0":"Ai Enhancements","lvl1":"🚀 NeuroLink AI Enhancements - Complete Documentation","lvl2":"Overview","lvl3":""}},
544
544
  {"objectID":"d2122d692220c6532895d03b0cc8014c1663ff0479ac29ae7a4012c2d41eae55","title":"1. Response Quality Evaluation ⭐","url":"/docs/ai-enhancements#1-response-quality-evaluation-","content":"AI-powered quality scoring using fast, cost-effective models to evaluate response quality on multiple dimensions.\n\nMetrics:\nRelevance (1-10): How well the response addresses the prompt\nAccuracy (1-10): Factual correctness of the information\nCompleteness (1-10): Whether the response fully answers the question\nOverall (1-10): Combined quality assessment\n\nConfiguration:\n\n`bash","hierarchy":{"lvl0":"Ai Enhancements","lvl1":"🚀 NeuroLink AI Enhancements - Complete Documentation","lvl2":"1. Response Quality Evaluation ⭐","lvl3":""}},
545
545
  {"objectID":"9136704b56c2ed8a21fe9b3f36eeeecd37ea82d47ad8e42e087c3e6876baa285","title":"Optional environment variables","url":"/docs/ai-enhancements#optional-environment-variables","content":"NEUROLINKEVALUATIONMODEL=gemini-2.5-flash\nNEUROLINKEVALUATIONPROVIDER=google-ai\n`","hierarchy":{"lvl0":"Ai Enhancements","lvl1":"🚀 NeuroLink AI Enhancements - Complete Documentation","lvl2":"Optional environment variables","lvl3":""}},
@@ -557,7 +557,7 @@
557
557
  {"objectID":"4ec3cef712d6cca4a3c2482777fad60bfb686d5b4c65e8be94e8c055df8f666b","title":"Context appears in analytics data for tracking","url":"/docs/ai-enhancements#context-appears-in-analytics-data-for-tracking","content":"`","hierarchy":{"lvl0":"Ai Enhancements","lvl1":"🚀 NeuroLink AI Enhancements - Complete Documentation","lvl2":"Context appears in analytics data for tracking","lvl3":""}},
558
558
  {"objectID":"99797b075d2fa6f8219510f2bfa2c37028a1ee86c0f1690395f469dfbe3e492f","title":"All Features Combined","url":"/docs/ai-enhancements#all-features-combined","content":"`bash","hierarchy":{"lvl0":"Ai Enhancements","lvl1":"🚀 NeuroLink AI Enhancements - Complete Documentation","lvl2":"All Features Combined","lvl3":""}},
559
559
  {"objectID":"54a1be91463ed5aba200f5bcd864f4f09ef3c2691eaac2867069de2876f32252","title":"Use all enhancement features together","url":"/docs/ai-enhancements#use-all-enhancement-features-together","content":"npx @juspay/neurolink generate \"Generate marketing copy for AI product\" \\\n --enable-analytics \\\n --enable-evaluation \\\n --context '{\"campaign\":\"q1-2025\",\"target\":\"developers\",\"budget\":\"high\"}' \\\n --provider openai \\\n --temperature 0.8 \\\n --debug\n`","hierarchy":{"lvl0":"Ai Enhancements","lvl1":"🚀 NeuroLink AI Enhancements - Complete Documentation","lvl2":"Use all enhancement features together","lvl3":""}},
560
- {"objectID":"f73ce5cc4748212c04a2d0ecb918e6e913ba8b463da3666a8301dd9364ff4ae1","title":"5. Universal Evaluation System 🌐","url":"/docs/ai-enhancements#5-universal-evaluation-system-","content":"Enterprise-grade multi-provider evaluation with intelligent fallback, cost optimization, and performance tuning.\n\nKey Features:\n9 Provider Support: Google AI, OpenAI, Anthropic, Vertex, Bedrock, Azure, Ollama, Hugging Face, Mistral\nIntelligent Fallback: Automatic provider selection when primary fails\nCost Optimization: Provider-specific cost calculations and budget awareness\nPerformance Modes: Fast, balanced, and quality evaluation options\nRetry Logic: Robust error handling with exponential backoff\n\nConfiguration:\n\n`bash","hierarchy":{"lvl0":"Ai Enhancements","lvl1":"🚀 NeuroLink AI Enhancements - Complete Documentation","lvl2":"5. Universal Evaluation System 🌐","lvl3":""}},
560
+ {"objectID":"f73ce5cc4748212c04a2d0ecb918e6e913ba8b463da3666a8301dd9364ff4ae1","title":"5. Universal Evaluation System 🌐","url":"/docs/ai-enhancements#5-universal-evaluation-system-","content":"Enterprise-grade multi-provider evaluation with intelligent fallback, cost optimization, and performance tuning.\n\nKey Features:\nMulti-Provider Support: Google AI, OpenAI, Anthropic, Vertex, Bedrock, Azure, Ollama, Hugging Face, Mistral\nIntelligent Fallback: Automatic provider selection when primary fails\nCost Optimization: Provider-specific cost calculations and budget awareness\nPerformance Modes: Fast, balanced, and quality evaluation options\nRetry Logic: Robust error handling with exponential backoff\n\nConfiguration:\n\n`bash","hierarchy":{"lvl0":"Ai Enhancements","lvl1":"🚀 NeuroLink AI Enhancements - Complete Documentation","lvl2":"5. Universal Evaluation System 🌐","lvl3":""}},
561
561
  {"objectID":"c5b8c93c2a78edddf2837a27279c62d890f91fddf57ba40e54f1c5971a3d929d","title":"Primary evaluation setup","url":"/docs/ai-enhancements#primary-evaluation-setup","content":"NEUROLINKEVALUATIONPROVIDER=google-ai\nNEUROLINKEVALUATIONMODE=fast\nNEUROLINKEVALUATIONFALLBACK_ENABLED=true\nNEUROLINKEVALUATIONFALLBACK_PROVIDERS=openai,anthropic,vertex","hierarchy":{"lvl0":"Ai Enhancements","lvl1":"🚀 NeuroLink AI Enhancements - Complete Documentation","lvl2":"Primary evaluation setup","lvl3":""}},
562
562
  {"objectID":"b036f6d4fafc2138e4d4fd6f1f26e45a2fd64a7c9b1970f22b6fb4779f5728cf","title":"Cost optimization","url":"/docs/ai-enhancements#cost-optimization","content":"NEUROLINKEVALUATIONPREFER_CHEAP=true\nNEUROLINKEVALUATIONMAXCOSTPER_EVAL=0.01","hierarchy":{"lvl0":"Ai Enhancements","lvl1":"🚀 NeuroLink AI Enhancements - Complete Documentation","lvl2":"Cost optimization","lvl3":""}},
563
563
  {"objectID":"49ea85018663a897b47d6278ee3285e382241cb631986b270e86295e75d8c60d","title":"Performance tuning","url":"/docs/ai-enhancements#performance-tuning","content":"NEUROLINKEVALUATIONTIMEOUT=10000\nNEUROLINKEVALUATIONRETRY_ATTEMPTS=2\ntypescript\n// Automatic provider selection\nconst result = await sdk.generate({\n input: { text: \"Explain quantum computing\" },\n enableEvaluation: true, // Uses configured evaluation system\n});\n\n// Will try: google-ai → openai → anthropic → vertex (if primary fails)\nbash","hierarchy":{"lvl0":"Ai Enhancements","lvl1":"🚀 NeuroLink AI Enhancements - Complete Documentation","lvl2":"Performance tuning","lvl3":""}},
@@ -1522,12 +1522,12 @@
1522
1522
  {"objectID":"ffe5ad120992d05a60a13f1d04246f74a89bc13c3f737221ac91efe0a6771fb2","title":"Chain Composition","url":"/docs/cookbook/tool-chaining#chain-composition","content":"Combine multiple chains:","hierarchy":{"lvl0":"Cookbook","lvl1":"Tool Chaining with MCP","lvl2":"Chain Composition","lvl3":""}},
1523
1523
  {"objectID":"0d06f318504ca1fd2c07c38065c4267a76a8f068816f3523eb215013da736fbb","title":"Best Practices","url":"/docs/cookbook/tool-chaining#best-practices","content":"Keep chains short: 3-5 steps maximum\nValidate early: Check results at each step\nHandle errors: Define recovery strategy\nUse templates: Standardize common patterns\nLog extensively: Track chain execution\nTest chains: Verify each step independently\nDocument dependencies: Clear step relationships","hierarchy":{"lvl0":"Cookbook","lvl1":"Tool Chaining with MCP","lvl2":"Best Practices","lvl3":""}},
1524
1524
  {"objectID":"9c95df0df862fb0ef8f1783451c23f945fe97d7586ae2498f8282d9bda24cc6b","title":"See Also","url":"/docs/cookbook/tool-chaining#see-also","content":"MCP Integration Guide\nError Recovery\nBatch Processing\nSDK Custom Tools","hierarchy":{"lvl0":"Cookbook","lvl1":"Tool Chaining with MCP","lvl2":"See Also","lvl3":""}},
1525
- {"objectID":"ce868a67c39b647fa16971a2c169ecee1f02565547d5aa2b0c3c64d62d979575","title":"Visual Demos","url":"/docs/demos","content":"Visual Demos\n\nExperience NeuroLink through comprehensive visual demonstrations, screenshots, and interactive examples.\n\n🎯 What You'll See Here\n\nThis section showcases NeuroLink's capabilities through visual content, making it easy to understand features before implementation.\nScreenshots — High-quality screenshots of CLI commands, web interfaces, and development workflows.\nVideos — Video demonstrations of NeuroLink features, from basic usage to advanced integrations.\nInteractive Demo — Live web demonstration with real AI generation across any provider you've configured.\n\n🚀 Quick Preview\n\nCLI in Action\n\nThe CLI provides a professional interface with comprehensive help, auto-completion, and rich output formatting.\n\nWeb Interface\n\nThe interactive web demo showcases all features with live AI generation across multiple providers.\n\n🖥️ Featured Demonstrations\n\nCommand Line Interface\n\nCheck the status of all configured AI providers with detailed diagnostics.\n\nGenerate content with analytics and evaluation enabled.\n\nBuilt-in tools working seamlessly across all providers.\n\nWeb Applications\n\nProfessional applications for business automation and content generation.\n\nCode generation, API development, and technical documentation.\n\nContent creation, storytelling, and creative writing assistance.\n\n🎬 Video Highlights\n\nQuick Start (2 minutes)\n\n \n \n Your browser does not support the video tag.\n \n\nComplete quick start demonstration from installation to first AI generation\n\nAdvanced Features (5 minutes)\n\n \n \n Your browser does not support the video tag.\n \n\nAnalytics, evaluation, custom tools, and MCP integration showcase\n\nEnterprise Workflow (8 minutes)\n\n \n \n Your browser does not support the video tag.\n \n\nProduction deployment, monitoring, and business automation examples\n\n🌐 Interactive Demo\n\nExperience NeuroLink live without installation:\n\nVisit our Interactive Demo to try NeuroLink with real AI providers.\n\nFeatures:\nLive AI Generation - Works with any provider you've configured\nReal-time Analytics - See costs and performance\nBuilt-in Tools - Experience MCP integration\nMultiple Use Cases - Business, creative, and technical examples\n :::\n\nDemo Highlights\nNo API Keys Required - Try basic functionality immediately\nProvider Comparison - See differences between AI providers\nPerformance Metrics - Real-time response times and costs\nTool Integration - Experience built-in tools in action\n\n📱 Platform Coverage\n\nDesktop/CLI Demos\nTerminal recordings with asciinema\nStep-by-step tutorials with screenshots\nError handling demonstrations\nAdvanced workflow examples\n\nWeb Interface Demos\nResponsive design across devices\nReal-time streaming visualization\nAnalytics dashboards\nConfiguration management\n\nMobile Optimization\nTouch-friendly interfaces\nResponsive layouts for small screens\nProgressive enhancement for all devices\n\n🎨 Visual Assets\n\nAll visual content is organized and optimized for:\nHigh resolution screenshots (2x retina)\nWeb-optimized videos (WebM + MP4)\nConsistent branding across all materials\nAccessibility with alt text and captions\n\n🔗 Integration Examples\n\nDocumentation Embedding\n\nPresentation Materials\nSlide templates for talks and presentations\nLogo assets in multiple formats\nBrand guidelines for consistent usage\nSocial media preview images\n\n📊 Performance Demonstrations\n\nBefore/After Comparisons\n\nSee the impact of NeuroLink's optimizations:\n68% faster provider status checks\nReal-time streaming vs. batch processing\nCost optimization across providers\nError recovery and fallback mechanisms\n\nBenchmark Results\n\nVisual representations of:\nResponse time comparisons\nCost analysis across providers\nQuality metrics from evaluation system\nResource usage monitoring\n\n🆘 Getting Help\n\nIf you have questions about any of the demonstrations:\nTroubleshooting Guide - Common issues\nFAQ - Frequently asked questions\nGitHub Issues - Report problems\nExamples - Code implementations","hierarchy":{"lvl0":"Demos","lvl1":"Visual Demos","lvl2":"","lvl3":""}},
1525
+ {"objectID":"ce868a67c39b647fa16971a2c169ecee1f02565547d5aa2b0c3c64d62d979575","title":"Visual Demos","url":"/docs/demos","content":"Visual Demos\n\nExperience NeuroLink through comprehensive visual demonstrations, screenshots, and interactive examples.\n\n🎯 What You'll See Here\n\nThis section showcases NeuroLink's capabilities through visual content, making it easy to understand features before implementation.\nScreenshots — High-quality screenshots of CLI commands, web interfaces, and development workflows.\nVideos — Video demonstrations of NeuroLink features, from basic usage to advanced integrations.\nInteractive Demo — Live web demonstration with real AI generation across any provider you've configured.\n\n🚀 Quick Preview\n\nCLI in Action\n\nThe CLI provides a professional interface with comprehensive help, auto-completion, and rich output formatting.\n\nWeb Interface\n\nThe interactive web demo showcases all features with live AI generation across multiple providers.\n\n🖥️ Featured Demonstrations\n\nCommand Line Interface\n\nCheck the status of all configured AI providers with detailed diagnostics.\n\nGenerate content with analytics and evaluation enabled.\n\nBuilt-in tools working seamlessly across providers you've configured.\n\nWeb Applications\n\nProfessional applications for business automation and content generation.\n\nCode generation, API development, and technical documentation.\n\nContent creation, storytelling, and creative writing assistance.\n\n🎬 Video Highlights\n\nQuick Start (2 minutes)\n\n \n \n Your browser does not support the video tag.\n \n\nComplete quick start demonstration from installation to first AI generation\n\nAdvanced Features (5 minutes)\n\n \n \n Your browser does not support the video tag.\n \n\nAnalytics, evaluation, custom tools, and MCP integration showcase\n\nEnterprise Workflow (8 minutes)\n\n \n \n Your browser does not support the video tag.\n \n\nProduction deployment, monitoring, and business automation examples\n\n🌐 Interactive Demo\n\nExperience NeuroLink live without installation:\n\nVisit our Interactive Demo to try NeuroLink with real AI providers.\n\nFeatures:\nLive AI Generation - Works with any provider you've configured\nReal-time Analytics - See costs and performance\nBuilt-in Tools - Experience MCP integration\nMultiple Use Cases - Business, creative, and technical examples\n :::\n\nDemo Highlights\nNo API Keys Required - Try basic functionality immediately\nProvider Comparison - See differences between AI providers\nPerformance Metrics - Real-time response times and costs\nTool Integration - Experience built-in tools in action\n\n📱 Platform Coverage\n\nDesktop/CLI Demos\nTerminal recordings with asciinema\nStep-by-step tutorials with screenshots\nError handling demonstrations\nAdvanced workflow examples\n\nWeb Interface Demos\nResponsive design across devices\nReal-time streaming visualization\nAnalytics dashboards\nConfiguration management\n\nMobile Optimization\nTouch-friendly interfaces\nResponsive layouts for small screens\nProgressive enhancement for all devices\n\n🎨 Visual Assets\n\nAll visual content is organized and optimized for:\nHigh resolution screenshots (2x retina)\nWeb-optimized videos (WebM + MP4)\nConsistent branding across all materials\nAccessibility with alt text and captions\n\n🔗 Integration Examples\n\nDocumentation Embedding\n\nPresentation Materials\nSlide templates for talks and presentations\nLogo assets in multiple formats\nBrand guidelines for consistent usage\nSocial media preview images\n\n📊 Performance Demonstrations\n\nBefore/After Comparisons\n\nSee the impact of NeuroLink's optimizations:\n68% faster provider status checks\nReal-time streaming vs. batch processing\nCost optimization across providers\nError recovery and fallback mechanisms\n\nBenchmark Results\n\nVisual representations of:\nResponse time comparisons\nCost analysis across providers\nQuality metrics from evaluation system\nResource usage monitoring\n\n🆘 Getting Help\n\nIf you have questions about any of the demonstrations:\nTroubleshooting Guide - Common issues\nFAQ - Frequently asked questions\nGitHub Issues - Report problems\nExamples - Code implementations","hierarchy":{"lvl0":"Demos","lvl1":"Visual Demos","lvl2":"","lvl3":""}},
1526
1526
  {"objectID":"5b9d72bcd11dd53980c3f840ee6547ff637abf5efcff22d51b8d4e8837863609","title":"Visual Demos","url":"/docs/demos#visual-demos","content":"Experience NeuroLink through comprehensive visual demonstrations, screenshots, and interactive examples.","hierarchy":{"lvl0":"Demos","lvl1":"Visual Demos","lvl2":"Visual Demos","lvl3":""}},
1527
1527
  {"objectID":"2cd0ec92f9696666dd92522e9af6bcabdd217f75e09d3d67d32ce4b17d4b7051","title":"🎯 What You'll See Here","url":"/docs/demos#-what-youll-see-here","content":"This section showcases NeuroLink's capabilities through visual content, making it easy to understand features before implementation.\nScreenshots — High-quality screenshots of CLI commands, web interfaces, and development workflows.\nVideos — Video demonstrations of NeuroLink features, from basic usage to advanced integrations.\nInteractive Demo — Live web demonstration with real AI generation across any provider you've configured.","hierarchy":{"lvl0":"Demos","lvl1":"Visual Demos","lvl2":"🎯 What You'll See Here","lvl3":""}},
1528
1528
  {"objectID":"60dd215f1e5f92f6924213231a294f593310ecb1f1e98629eb1576ee0f224c2d","title":"CLI in Action","url":"/docs/demos#cli-in-action","content":"The CLI provides a professional interface with comprehensive help, auto-completion, and rich output formatting.","hierarchy":{"lvl0":"Demos","lvl1":"Visual Demos","lvl2":"CLI in Action","lvl3":""}},
1529
1529
  {"objectID":"8a6842272904028166e7bfbccf1f8f4d6d2ac2d24b1ef45828cea9d8b1961e46","title":"Web Interface","url":"/docs/demos#web-interface","content":"The interactive web demo showcases all features with live AI generation across multiple providers.","hierarchy":{"lvl0":"Demos","lvl1":"Visual Demos","lvl2":"Web Interface","lvl3":""}},
1530
- {"objectID":"266b3432614326afef40270a4a35f07b6c1a42aba348c7473a88fb88e72ac793","title":"Command Line Interface","url":"/docs/demos#command-line-interface","content":"Check the status of all configured AI providers with detailed diagnostics.\n\nGenerate content with analytics and evaluation enabled.\n\nBuilt-in tools working seamlessly across all providers.","hierarchy":{"lvl0":"Demos","lvl1":"Visual Demos","lvl2":"Command Line Interface","lvl3":""}},
1530
+ {"objectID":"266b3432614326afef40270a4a35f07b6c1a42aba348c7473a88fb88e72ac793","title":"Command Line Interface","url":"/docs/demos#command-line-interface","content":"Check the status of all configured AI providers with detailed diagnostics.\n\nGenerate content with analytics and evaluation enabled.\n\nBuilt-in tools working seamlessly across providers you've configured.","hierarchy":{"lvl0":"Demos","lvl1":"Visual Demos","lvl2":"Command Line Interface","lvl3":""}},
1531
1531
  {"objectID":"9eb1722e76764542dae18b9cc97849c96aabb420ed22f8008b9cc65305173556","title":"Web Applications","url":"/docs/demos#web-applications","content":"Professional applications for business automation and content generation.\n\nCode generation, API development, and technical documentation.\n\nContent creation, storytelling, and creative writing assistance.","hierarchy":{"lvl0":"Demos","lvl1":"Visual Demos","lvl2":"Web Applications","lvl3":""}},
1532
1532
  {"objectID":"f1c0b03a0a67602bf49a32dea7069854073bf26763951ff074414e5cee300fc5","title":"Quick Start (2 minutes)","url":"/docs/demos#quick-start-2-minutes","content":"Your browser does not support the video tag.\n \n\nComplete quick start demonstration from installation to first AI generation","hierarchy":{"lvl0":"Demos","lvl1":"Visual Demos","lvl2":"Quick Start (2 minutes)","lvl3":""}},
1533
1533
  {"objectID":"c7398c945326eb389e975f8cc68fff941bb1c33166b059fdb8bb3df6179d1f5f","title":"Advanced Features (5 minutes)","url":"/docs/demos#advanced-features-5-minutes","content":"Your browser does not support the video tag.\n \n\nAnalytics, evaluation, custom tools, and MCP integration showcase","hierarchy":{"lvl0":"Demos","lvl1":"Visual Demos","lvl2":"Advanced Features (5 minutes)","lvl3":""}},
@@ -2054,24 +2054,24 @@
2054
2054
  {"objectID":"166a9ad65e1515e9db6e67931e2910308aa192b2153625dfafbb3b9c1587ec54","title":"Conclusion","url":"/docs/development/cli-factory-impact-assessment#conclusion","content":"The Phase 1 Factory Infrastructure implementation successfully integrates with the NeuroLink CLI while maintaining 100% backward compatibility and zero breaking changes.","hierarchy":{"lvl0":"Development","lvl1":"CLI Factory Integration Impact Assessment","lvl2":"Conclusion","lvl3":""}},
2055
2055
  {"objectID":"33820fd465ea242b750f15ef7f8a6fb6f83190494901ec7149fa28bc900f3c16","title":"Key Achievements:","url":"/docs/development/cli-factory-impact-assessment#key-achievements","content":"✅ All existing CLI commands work identically \n✅ New enhancement capabilities added seamlessly \n✅ Performance impact is negligible (\\<10ms per command) \n✅ Comprehensive test coverage validates compatibility \n✅ Optional enhancement adoption path provided","hierarchy":{"lvl0":"Development","lvl1":"CLI Factory Integration Impact Assessment","lvl2":"Key Achievements:","lvl3":""}},
2056
2056
  {"objectID":"227cfa13d1bc577de415cfeabe65b8137752c4af9a3959c967b71d94ae1d232c","title":"User Benefits:","url":"/docs/development/cli-factory-impact-assessment#user-benefits","content":"Immediate: No changes required, everything works as before\nEnhanced: Optional analytics and evaluation capabilities\nFuture-ready: Foundation for advanced factory pattern features\n\nThe implementation demonstrates that sophisticated factory patterns can be integrated into existing CLI applications without disrupting user workflows while providing a foundation for powerful new capabilities.","hierarchy":{"lvl0":"Development","lvl1":"CLI Factory Integration Impact Assessment","lvl2":"User Benefits:","lvl3":""}},
2057
- {"objectID":"7653c2d9a00bf549a0ab64dca9097afd52a6915d35aed3204ab36d4beb3c2442","title":"🏭 Factory Pattern Architecture","url":"/docs/development/factory-architecture","content":"🏭 Factory Pattern Architecture\n\nUnderstanding NeuroLink's unified architecture with BaseProvider inheritance and automatic tool support.\n\n📋 Overview\n\nNeuroLink uses a Factory Pattern architecture with BaseProvider inheritance to provide consistent functionality across all AI providers. This design eliminates code duplication and ensures every provider has the same core capabilities, including built-in tool support.\n\nKey Benefits\n✅ Zero Code Duplication: Shared logic in BaseProvider\n✅ Automatic Tool Support: All providers inherit 6 built-in tools\n✅ Consistent Interface: Same methods across all providers\n✅ Easy Provider Addition: Minimal code for new providers\n✅ Centralized Updates: Fix once, apply everywhere\n\n🏗️ Architecture Components\nBaseProvider (Core Foundation)\n\nThe BaseProvider class is the foundation of all AI providers:\nProvider-Specific Implementation\n\nEach provider extends BaseProvider with minimal code:\nFactory Pattern Implementation\n\nThe factory creates providers with consistent configuration:\n\n🔧 Built-in Tool System\n\nTool Registration in BaseProvider\n\nAll providers automatically get these tools:\n\nTool Conversion for AI Models\n\nBaseProvider converts tools to provider-specific format:\n\n🌟 Factory Pattern Benefits\nConsistent Provider Creation\nEasy Provider Addition\n\nAdding a new provider requires minimal code:\nCentralized Feature Addition\n\nAdd features once in BaseProvider, all providers get them:\n\n📊 Architecture Diagram\n\n🎯 Design Principles\nSingle Responsibility\n\nEach component has one clear purpose:\nBaseProvider: Core functionality and tool management\nProvider Classes: Provider-specific API integration\nFactory: Provider instantiation\nRegistry: Provider registration and lookup\nOpen/Closed Principle\nOpen for extension: Easy to add new providers\nClosed for modification: Core logic doesn't change\nDependency Inversion\nProviders depend on BaseProvider abstraction\nHigh-level modules don't depend on low-level details\nInterface Segregation\nClean, minimal interface for each provider\nOnly implement what's needed\n\n🔄 Request Flow\n\nHere's how a request flows through the architecture:\n\n💡 Real-World Benefits\n\nBefore Factory Pattern (Old Architecture)\n\nAfter Factory Pattern (Current Architecture)\n\n🚀 Future Extensibility\n\nThe factory pattern makes it easy to add new features:\nNew Tool Categories\nProvider Capabilities\nMiddleware System\n\n📚 Code Examples\n\nCreating Providers\n\nUsing Built-in Tools\n\nExtending with Custom Tools\n\n🏆 Summary\n\nThe Factory Pattern architecture provides:\nUnified Experience: All providers work the same way\nAutomatic Tools: 6 built-in tools for every provider\nEasy Extension: Add providers with minimal code\nClean Code: No duplication, clear separation\nFuture-Proof: Easy to add new features\n\nThis architecture ensures NeuroLink remains maintainable, extensible, and consistent as new AI providers and features are added.\n\n🎥 Video Generation Handler Architecture\n\nVideo generation via Veo 3.1 follows the same factory pattern architecture with specialized handling for long-running operations.\n\nVideo Handler Implementation\n\nIntegration with BaseProvider\n\nFactory Pattern Benefits for Video Generation\nProvider-Specific Features: Video generation is only available on Vertex AI, but the architecture allows graceful handling:\nAutomatic Provider Routing: Factory can route video requests to Vertex AI:\nConsistent Error Handling: Video-specific errors follow the same pattern:\n\nArchitecture Diagram\n\nKey Design Decisions\nSeparation of Concerns: Video handler is separate from core provider logic\nExtensibility: Easy to add image generation, audio generation, etc.\nConsistent Interface: Same generate() method for text and video\nProvider-Specific Features: Only Vertex AI supports video, handled gracefully\nError Handling: Unified error codes across all features\n\nUnderstanding the architecture helps you build better AI applications! 🚀","hierarchy":{"lvl0":"Development","lvl1":"🏭 Factory Pattern Architecture","lvl2":"","lvl3":""}},
2057
+ {"objectID":"7653c2d9a00bf549a0ab64dca9097afd52a6915d35aed3204ab36d4beb3c2442","title":"🏭 Factory Pattern Architecture","url":"/docs/development/factory-architecture","content":"🏭 Factory Pattern Architecture\n\nUnderstanding NeuroLink's unified architecture with BaseProvider inheritance and automatic tool support.\n\n📋 Overview\n\nNeuroLink uses a Factory Pattern architecture with BaseProvider inheritance to provide consistent functionality across supported AI providers. This design eliminates code duplication and ensures each provider has the same core capabilities, including built-in tool support.\n\nKey Benefits\n✅ Zero Code Duplication: Shared logic in BaseProvider\n✅ Automatic Tool Support: Providers inherit 6 built-in tools\n✅ Consistent Interface: Same methods across supported providers\n✅ Easy Provider Addition: Minimal code for new providers\n✅ Centralized Updates: Fix once, apply everywhere\n\n🏗️ Architecture Components\nBaseProvider (Core Foundation)\n\nThe BaseProvider class is the foundation of all AI providers:\nProvider-Specific Implementation\n\nEach provider extends BaseProvider with minimal code:\nFactory Pattern Implementation\n\nThe factory creates providers with consistent configuration:\n\n🔧 Built-in Tool System\n\nTool Registration in BaseProvider\n\nProviders automatically get these tools:\n\nTool Conversion for AI Models\n\nBaseProvider converts tools to provider-specific format:\n\n🌟 Factory Pattern Benefits\nConsistent Provider Creation\nEasy Provider Addition\n\nAdding a new provider requires minimal code:\nCentralized Feature Addition\n\nAdd features once in BaseProvider, and providers get them:\n\n📊 Architecture Diagram\n\n🎯 Design Principles\nSingle Responsibility\n\nEach component has one clear purpose:\nBaseProvider: Core functionality and tool management\nProvider Classes: Provider-specific API integration\nFactory: Provider instantiation\nRegistry: Provider registration and lookup\nOpen/Closed Principle\nOpen for extension: Easy to add new providers\nClosed for modification: Core logic doesn't change\nDependency Inversion\nProviders depend on BaseProvider abstraction\nHigh-level modules don't depend on low-level details\nInterface Segregation\nClean, minimal interface for each provider\nOnly implement what's needed\n\n🔄 Request Flow\n\nHere's how a request flows through the architecture:\n\n💡 Real-World Benefits\n\nBefore Factory Pattern (Old Architecture)\n\nAfter Factory Pattern (Current Architecture)\n\n🚀 Future Extensibility\n\nThe factory pattern makes it easy to add new features:\nNew Tool Categories\nProvider Capabilities\nMiddleware System\n\n📚 Code Examples\n\nCreating Providers\n\nUsing Built-in Tools\n\nExtending with Custom Tools\n\n🏆 Summary\n\nThe Factory Pattern architecture provides:\nUnified Experience: Providers work the same way\nAutomatic Tools: 6 built-in tools for supported providers\nEasy Extension: Add providers with minimal code\nClean Code: No duplication, clear separation\nFuture-Proof: Easy to add new features\n\nThis architecture ensures NeuroLink remains maintainable, extensible, and consistent as new AI providers and features are added.\n\n🎥 Video Generation Handler Architecture\n\nVideo generation via Veo 3.1 follows the same factory pattern architecture with specialized handling for long-running operations.\n\nVideo Handler Implementation\n\nIntegration with BaseProvider\n\nFactory Pattern Benefits for Video Generation\nProvider-Specific Features: Video generation is only available on Vertex AI, but the architecture allows graceful handling:\nAutomatic Provider Routing: Factory can route video requests to Vertex AI:\nConsistent Error Handling: Video-specific errors follow the same pattern:\n\nArchitecture Diagram\n\nKey Design Decisions\nSeparation of Concerns: Video handler is separate from core provider logic\nExtensibility: Easy to add image generation, audio generation, etc.\nConsistent Interface: Same generate() method for text and video\nProvider-Specific Features: Only Vertex AI supports video, handled gracefully\nError Handling: Unified error codes across all features\n\nUnderstanding the architecture helps you build better AI applications! 🚀","hierarchy":{"lvl0":"Development","lvl1":"🏭 Factory Pattern Architecture","lvl2":"","lvl3":""}},
2058
2058
  {"objectID":"4a713e6b0aefc8075df59cb6e9a6c98d6ae2baf102143111fe6474a6a0cfe34a","title":"🏭 Factory Pattern Architecture","url":"/docs/development/factory-architecture#-factory-pattern-architecture","content":"Understanding NeuroLink's unified architecture with BaseProvider inheritance and automatic tool support.","hierarchy":{"lvl0":"Development","lvl1":"🏭 Factory Pattern Architecture","lvl2":"🏭 Factory Pattern Architecture","lvl3":""}},
2059
- {"objectID":"5dadb668cd312ec1f7eff140aff200a1ec9991b13768fba31f8739c10764e636","title":"📋 Overview","url":"/docs/development/factory-architecture#-overview","content":"NeuroLink uses a Factory Pattern architecture with BaseProvider inheritance to provide consistent functionality across all AI providers. This design eliminates code duplication and ensures every provider has the same core capabilities, including built-in tool support.","hierarchy":{"lvl0":"Development","lvl1":"🏭 Factory Pattern Architecture","lvl2":"📋 Overview","lvl3":""}},
2060
- {"objectID":"8e3e82d01fd07dd00dfd27095f09d4749d40b4894183667b1c37d7f96bc25dc7","title":"Key Benefits","url":"/docs/development/factory-architecture#key-benefits","content":"✅ Zero Code Duplication: Shared logic in BaseProvider\n✅ Automatic Tool Support: All providers inherit 6 built-in tools\n✅ Consistent Interface: Same methods across all providers\n✅ Easy Provider Addition: Minimal code for new providers\n✅ Centralized Updates: Fix once, apply everywhere","hierarchy":{"lvl0":"Development","lvl1":"🏭 Factory Pattern Architecture","lvl2":"Key Benefits","lvl3":""}},
2059
+ {"objectID":"5dadb668cd312ec1f7eff140aff200a1ec9991b13768fba31f8739c10764e636","title":"📋 Overview","url":"/docs/development/factory-architecture#-overview","content":"NeuroLink uses a Factory Pattern architecture with BaseProvider inheritance to provide consistent functionality across supported AI providers. This design eliminates code duplication and ensures each provider has the same core capabilities, including built-in tool support.","hierarchy":{"lvl0":"Development","lvl1":"🏭 Factory Pattern Architecture","lvl2":"📋 Overview","lvl3":""}},
2060
+ {"objectID":"8e3e82d01fd07dd00dfd27095f09d4749d40b4894183667b1c37d7f96bc25dc7","title":"Key Benefits","url":"/docs/development/factory-architecture#key-benefits","content":"✅ Zero Code Duplication: Shared logic in BaseProvider\n✅ Automatic Tool Support: Providers inherit 6 built-in tools\n✅ Consistent Interface: Same methods across supported providers\n✅ Easy Provider Addition: Minimal code for new providers\n✅ Centralized Updates: Fix once, apply everywhere","hierarchy":{"lvl0":"Development","lvl1":"🏭 Factory Pattern Architecture","lvl2":"Key Benefits","lvl3":""}},
2061
2061
  {"objectID":"7bf8f7c438d806fa65aab600e3777e1854f2248dcfa701d2acf938313260e4e5","title":"1. BaseProvider (Core Foundation)","url":"/docs/development/factory-architecture#1-baseprovider-core-foundation","content":"The BaseProvider class is the foundation of all AI providers:","hierarchy":{"lvl0":"Development","lvl1":"🏭 Factory Pattern Architecture","lvl2":"1. BaseProvider (Core Foundation)","lvl3":""}},
2062
2062
  {"objectID":"5b6ed455b31b69ad82a1ce2a4584726b502df700cf612fd32691c8f97acc4912","title":"2. Provider-Specific Implementation","url":"/docs/development/factory-architecture#2-provider-specific-implementation","content":"Each provider extends BaseProvider with minimal code:","hierarchy":{"lvl0":"Development","lvl1":"🏭 Factory Pattern Architecture","lvl2":"2. Provider-Specific Implementation","lvl3":""}},
2063
2063
  {"objectID":"653fce94fb29f8649ef07355845877b2999bf066593e94c374651a73fcee10e2","title":"3. Factory Pattern Implementation","url":"/docs/development/factory-architecture#3-factory-pattern-implementation","content":"The factory creates providers with consistent configuration:","hierarchy":{"lvl0":"Development","lvl1":"🏭 Factory Pattern Architecture","lvl2":"3. Factory Pattern Implementation","lvl3":""}},
2064
- {"objectID":"c4a2eb40e163f1fa8b9bcc90ae489c31d284692476f8bc58e8bc5537bed8d108","title":"Tool Registration in BaseProvider","url":"/docs/development/factory-architecture#tool-registration-in-baseprovider","content":"All providers automatically get these tools:","hierarchy":{"lvl0":"Development","lvl1":"🏭 Factory Pattern Architecture","lvl2":"Tool Registration in BaseProvider","lvl3":""}},
2064
+ {"objectID":"c4a2eb40e163f1fa8b9bcc90ae489c31d284692476f8bc58e8bc5537bed8d108","title":"Tool Registration in BaseProvider","url":"/docs/development/factory-architecture#tool-registration-in-baseprovider","content":"Providers automatically get these tools:","hierarchy":{"lvl0":"Development","lvl1":"🏭 Factory Pattern Architecture","lvl2":"Tool Registration in BaseProvider","lvl3":""}},
2065
2065
  {"objectID":"5601d2f077e7145f40c145ccc4cd7a37cbc20eb937578d6dfd0f1c94101377c1","title":"Tool Conversion for AI Models","url":"/docs/development/factory-architecture#tool-conversion-for-ai-models","content":"BaseProvider converts tools to provider-specific format:","hierarchy":{"lvl0":"Development","lvl1":"🏭 Factory Pattern Architecture","lvl2":"Tool Conversion for AI Models","lvl3":""}},
2066
2066
  {"objectID":"c12f4aadd63c3cf9ee33cdc74b372b6147ae4ec33440cf30805dd0dbe0b8b8e5","title":"2. Easy Provider Addition","url":"/docs/development/factory-architecture#2-easy-provider-addition","content":"Adding a new provider requires minimal code:","hierarchy":{"lvl0":"Development","lvl1":"🏭 Factory Pattern Architecture","lvl2":"2. Easy Provider Addition","lvl3":""}},
2067
- {"objectID":"860657bced1b0d8d3c72047f96649457b7ef41117b0ec0a577ea57f52140ac38","title":"3. Centralized Feature Addition","url":"/docs/development/factory-architecture#3-centralized-feature-addition","content":"Add features once in BaseProvider, all providers get them:","hierarchy":{"lvl0":"Development","lvl1":"🏭 Factory Pattern Architecture","lvl2":"3. Centralized Feature Addition","lvl3":""}},
2067
+ {"objectID":"860657bced1b0d8d3c72047f96649457b7ef41117b0ec0a577ea57f52140ac38","title":"3. Centralized Feature Addition","url":"/docs/development/factory-architecture#3-centralized-feature-addition","content":"Add features once in BaseProvider, and providers get them:","hierarchy":{"lvl0":"Development","lvl1":"🏭 Factory Pattern Architecture","lvl2":"3. Centralized Feature Addition","lvl3":""}},
2068
2068
  {"objectID":"54c23a3388f8cc3d1523c04f4171297c5dc287d4a8d9d7224e09a08e94178a5c","title":"1. Single Responsibility","url":"/docs/development/factory-architecture#1-single-responsibility","content":"Each component has one clear purpose:\nBaseProvider: Core functionality and tool management\nProvider Classes: Provider-specific API integration\nFactory: Provider instantiation\nRegistry: Provider registration and lookup","hierarchy":{"lvl0":"Development","lvl1":"🏭 Factory Pattern Architecture","lvl2":"1. Single Responsibility","lvl3":""}},
2069
2069
  {"objectID":"33c912790bc03eafdca577f8405c81b8780d011b814767b43160dff414195512","title":"2. Open/Closed Principle","url":"/docs/development/factory-architecture#2-openclosed-principle","content":"Open for extension: Easy to add new providers\nClosed for modification: Core logic doesn't change","hierarchy":{"lvl0":"Development","lvl1":"🏭 Factory Pattern Architecture","lvl2":"2. Open/Closed Principle","lvl3":""}},
2070
2070
  {"objectID":"6c25fd1ed1a24ae339cb2e2454b91787f5bef13112dfd7da5e69adbdc0399a5a","title":"3. Dependency Inversion","url":"/docs/development/factory-architecture#3-dependency-inversion","content":"Providers depend on BaseProvider abstraction\nHigh-level modules don't depend on low-level details","hierarchy":{"lvl0":"Development","lvl1":"🏭 Factory Pattern Architecture","lvl2":"3. Dependency Inversion","lvl3":""}},
2071
2071
  {"objectID":"5df1eee54967e1f5418691ef5a6390976b4c9eb9bf440af9526dbd720a52ec33","title":"4. Interface Segregation","url":"/docs/development/factory-architecture#4-interface-segregation","content":"Clean, minimal interface for each provider\nOnly implement what's needed","hierarchy":{"lvl0":"Development","lvl1":"🏭 Factory Pattern Architecture","lvl2":"4. Interface Segregation","lvl3":""}},
2072
2072
  {"objectID":"7fdfd517eeeeeab1baf449be579bf4c13ccb1c991c8827253423445c07fead94","title":"🔄 Request Flow","url":"/docs/development/factory-architecture#-request-flow","content":"Here's how a request flows through the architecture:","hierarchy":{"lvl0":"Development","lvl1":"🏭 Factory Pattern Architecture","lvl2":"🔄 Request Flow","lvl3":""}},
2073
2073
  {"objectID":"6bcbf2f37cc4e2b47f49fea1404c98c68178de1ea02f69ffded79fa087601c8a","title":"🚀 Future Extensibility","url":"/docs/development/factory-architecture#-future-extensibility","content":"The factory pattern makes it easy to add new features:","hierarchy":{"lvl0":"Development","lvl1":"🏭 Factory Pattern Architecture","lvl2":"🚀 Future Extensibility","lvl3":""}},
2074
- {"objectID":"007cbf07b462a333cece275e1c810875dd83d69ec9fe6657c4cbe6946336d5e9","title":"🏆 Summary","url":"/docs/development/factory-architecture#-summary","content":"The Factory Pattern architecture provides:\nUnified Experience: All providers work the same way\nAutomatic Tools: 6 built-in tools for every provider\nEasy Extension: Add providers with minimal code\nClean Code: No duplication, clear separation\nFuture-Proof: Easy to add new features\n\nThis architecture ensures NeuroLink remains maintainable, extensible, and consistent as new AI providers and features are added.","hierarchy":{"lvl0":"Development","lvl1":"🏭 Factory Pattern Architecture","lvl2":"🏆 Summary","lvl3":""}},
2074
+ {"objectID":"007cbf07b462a333cece275e1c810875dd83d69ec9fe6657c4cbe6946336d5e9","title":"🏆 Summary","url":"/docs/development/factory-architecture#-summary","content":"The Factory Pattern architecture provides:\nUnified Experience: Providers work the same way\nAutomatic Tools: 6 built-in tools for supported providers\nEasy Extension: Add providers with minimal code\nClean Code: No duplication, clear separation\nFuture-Proof: Easy to add new features\n\nThis architecture ensures NeuroLink remains maintainable, extensible, and consistent as new AI providers and features are added.","hierarchy":{"lvl0":"Development","lvl1":"🏭 Factory Pattern Architecture","lvl2":"🏆 Summary","lvl3":""}},
2075
2075
  {"objectID":"cf7efb25d3b7a2babf2584abb6a92798e06c9006b03567b643fdb4b282fbe41f","title":"🎥 Video Generation Handler Architecture","url":"/docs/development/factory-architecture#-video-generation-handler-architecture","content":"Video generation via Veo 3.1 follows the same factory pattern architecture with specialized handling for long-running operations.","hierarchy":{"lvl0":"Development","lvl1":"🏭 Factory Pattern Architecture","lvl2":"🎥 Video Generation Handler Architecture","lvl3":""}},
2076
2076
  {"objectID":"18e3ab07fb9afe2bb09eb6f3e0204902695fc594c24895a123a0bbec044aab5c","title":"Factory Pattern Benefits for Video Generation","url":"/docs/development/factory-architecture#factory-pattern-benefits-for-video-generation","content":"Provider-Specific Features: Video generation is only available on Vertex AI, but the architecture allows graceful handling:\nAutomatic Provider Routing: Factory can route video requests to Vertex AI:\nConsistent Error Handling: Video-specific errors follow the same pattern:","hierarchy":{"lvl0":"Development","lvl1":"🏭 Factory Pattern Architecture","lvl2":"Factory Pattern Benefits for Video Generation","lvl3":""}},
2077
2077
  {"objectID":"8ffc8d10abcc7bd7ec83d262a7379a2e2ffa95d496588f05961fec9bdeed4f1e","title":"Key Design Decisions","url":"/docs/development/factory-architecture#key-design-decisions","content":"Separation of Concerns: Video handler is separate from core provider logic\nExtensibility: Easy to add image generation, audio generation, etc.\nConsistent Interface: Same generate() method for text and video\nProvider-Specific Features: Only Vertex AI supports video, handled gracefully\nError Handling: Unified error codes across all features\n\nUnderstanding the architecture helps you build better AI applications! 🚀","hierarchy":{"lvl0":"Development","lvl1":"🏭 Factory Pattern Architecture","lvl2":"Key Design Decisions","lvl3":""}},
@@ -2252,7 +2252,7 @@
2252
2252
  {"objectID":"611da1cea62fd0b5bf313f3659615743913252c6ba487823808c87bee60efd00","title":"Never log secrets","url":"/docs/development/logging-guidelines#never-log-secrets","content":"API keys, tokens, credentials, presigned URL query strings, user prompt content\nand absolute host paths must not reach a log or a thrown error message.\nsrc/lib/utils/logSanitize.ts has the helpers, and they are the reason several\npast leaks are closed:\n\n| Helper | Use for |\n| --------------------------- | ------------------------------------------------------------------------------------------ |\n| redactUrlForError(url) | A URL in a log or error — strips query and fragment, so a presigned token cannot survive. |\n| redactUrlCredentials | A URL that may carry user:password@. |\n| redactPathFromMessage | A filesystem path in a message. |\n| sanitizeErrorCause | An error from Node/undici — these embed the full request URL or path in their own message. |\n| sanitizeHeaders | A header bag before logging it. |\n| sanitizeRecord | An arbitrary object, with string truncation. |\n| safeDebugSerialize | A large value in a debug log, length-capped. |\n| transformParamsForLogging | Tool-call parameters before logging them (this one lives in transformationUtils.ts). |\n\nThe rule for errors is the same as for logs: an error message is read by more\npeople than a log line, not fewer.","hierarchy":{"lvl0":"Development","lvl1":"Logging Guidelines","lvl2":"Never log secrets","lvl3":""}},
2253
2253
  {"objectID":"c8bf38e894176c3436e15411303845f458ecf58f7bc7da0d105ecaf057adf7f4","title":"Per-instance routing","url":"/docs/development/logging-guidelines#per-instance-routing","content":"The logger routes per instance, so a worker's onLog bridge\n(NeuroLink.createWorkerInstance({ onLog })) receives only that worker's own\nevents, not everything in the process. The SDK entry points — generate,\nstream, generateText — run their bodies inside an AsyncLocalStorage\nscope carrying the instance's id, so a log call anywhere beneath them is\nattributed without threading an instance through every call site. Two things\nsit outside the scope by construction: logs emitted while a consumer drains a\nreturned stream (iteration runs in the consumer's context), and logs emitted\noutside any call — construction, background MCP reconnects, module init —\nwhich stay unattributed rather than being charged to an arbitrary instance.\n\nWorkerInstanceOptions.onLog's JSDoc (src/lib/types/isolatedAgent.ts) is\nthe authoritative description of this behaviour; check it before relying on\nthe routing in a new integration.\n\nA process-wide sink installed with logger.setEventEmitter() still receives\neverything either way.","hierarchy":{"lvl0":"Development","lvl1":"Logging Guidelines","lvl2":"Per-instance routing","lvl3":""}},
2254
2254
  {"objectID":"fcd10d804aaa898a37f6d1303fbf6b07499f6bcd5b7e90e8f727aedec7b3f8e8","title":"Checklist for a new log call","url":"/docs/development/logging-guidelines#checklist-for-a-new-log-call","content":"Level matches the table above, and a routine branch is debug.\nMessage is a constant with a [Component] prefix; variables are in the data\n object.\nAnything expensive to build is behind logger.shouldLog(\"debug\").\nNo key, token, credential, prompt body, presigned URL or absolute host path\n in either the message or the data — run it through logSanitize.ts if in\n doubt.","hierarchy":{"lvl0":"Development","lvl1":"Logging Guidelines","lvl2":"Checklist for a new log call","lvl3":""}},
2255
- {"objectID":"b7ea7ebd627e70d0c3debd74687c71a4ad7cb1a63a6b24e2a4818736e0129778","title":"Provider-Agnostic Testing Framework - January 2025 Snapshot","url":"/docs/development/provider-testing","content":"⚠️ HISTORICAL DOCUMENT (January 2025) — This is a snapshot of the provider-agnostic testing milestone when 9 providers were live. The current product ships 40 providers (incl. voice and the decision-only decide() type). For the up-to-date provider list and capability matrix, see the README and Provider Capabilities Audit.\n\nProvider-Agnostic Testing Framework - January 2025 Snapshot\n\nUpdated: January 20, 2025 \nStatus: COMPLETE SUCCESS — 9/9 providers verified working at the time of writing \nObjective: Complete provider testing after resolving critical configuration bug\n\n🎯 MISSION ACCOMPLISHED\n\nProblem Solved\n\nThe previous testing framework was hardcoded to Google AI, making it impossible to validate other providers during migration. This has been completely fixed.\n\nSolution Implemented\n\n✅ Provider-agnostic test runner \n✅ Configurable environment validation \n✅ Dynamic provider switching \n✅ Hugging Face implementation complete\n✅ Ready for comprehensive testing phase\n\n🔧 IMPLEMENTATION DETAILS\nEnhanced Test Runner (run-parallel-tests.js)\n\nProvider Configuration System\n\nUsage Examples\n\nEnvironment Validation\n✅ Automatic API key detection\n✅ Clear error messages for missing credentials\n✅ Provider-specific configuration validation\n✅ Dynamic environment variable setup\nProvider-Agnostic Test Files\n\nDynamic Provider Detection\n\nUpdated Test Files\n✅ test/basic-functionality.test.ts - Provider-agnostic\n✅ test/analytics-features.test.ts - Provider-agnostic\n🔄 Additional test files can be updated using same pattern\n\n🧪 VALIDATION RESULTS\n\nGoogle AI Provider Testing\n\nOpenAI Provider Testing\n\nKey Observations\n✅ Both providers pass all tests\n✅ OpenAI is slightly faster (6.15s vs 9.08s)\n✅ Same test suite validates both providers\n✅ No code changes needed between providers\n\n🚀 STRATEGIC BENEFITS\nMigration Confidence\nBaseline Established: Google AI provider validated and working\nTarget Confirmed: OpenAI provider already operational\nTest Coverage: Universal test suite applies to all providers\nRegression Prevention: Any breaking changes immediately detected\nDevelopment Velocity\nParallel Testing: Can test multiple providers simultaneously\nQuick Validation: Individual provider testing in \\<10 seconds\nClear Feedback: Provider-specific error messages and success metrics\nAutomated Reports: JSON reports saved per provider\nQuality Assurance\nNo Manual Testing: Automated validation across all providers\nConsistent Coverage: Same test scenarios for all providers\nPerformance Monitoring: Response time tracking per provider\nEnvironment Validation: Automatic credential checking\n\n📋 NEXT STEPS FOR PHASE 3\n\n✅ Migration Complete - All Providers Operational\n\nWith the provider-agnostic testing framework and factory pattern complete:\n\n✅ Factory Pattern Implementation Complete\n✅ BaseProvider: All 9 providers (at the time of writing) extend BaseProvider (verified)\n✅ Custom Vercel AI SDK: Azure, HuggingFace, Ollama use custom implementations\n✅ Official Vercel AI SDK: OpenAI, Anthropic, Bedrock, Google AI, Mistral\n✅ 100% Success Rate: All 9 providers in this snapshot tested and operational\n\n✅ Architecture Achievements\n✅ No External Package Issues: Custom implementations solve compatibility problems\n✅ Universal Analytics: Analytics helper integrated across all providers\n✅ Unified Interface: Single parameter handling system operational\n✅ Enterprise Ready: Complete factory-first MCP architecture\n\nTesting Strategy for Phase 3\n\n🎯 SUCCESS CRITERIA MET\n\nOriginal Requirements\n✅ Fix testing script to be provider agnostic\n✅ Test with OpenAI first (already implemented)\n✅ Validate provider-agnostic functionality working\n\nAdditional Achievements\n✅ Support for 4 providers (Google AI, OpenAI, Anthropic, Bedrock)\n✅ Automatic environment validation\n✅ Clear error messaging\n✅ Performance benchmarking\n✅ JSON report generation\n\n🏆 CONCLUSION\n\nThe provider-agnostic testing framework is now complete and operational.\nProblem Solved: No longer bound to Google AI\nQuality Assured: Both existing providers validated\nFoundation Ready: Perfect infrastructure for Phase 3 migration\nDevelopment Ready: Can proceed with confidence\n\nWe can now begin Phase 3 migration knowing that every step can be validated immediately with comprehensive, provider-agnostic testing.","hierarchy":{"lvl0":"Development","lvl1":"Provider-Agnostic Testing Framework - January 2025 Snapshot","lvl2":"","lvl3":""}},
2255
+ {"objectID":"b7ea7ebd627e70d0c3debd74687c71a4ad7cb1a63a6b24e2a4818736e0129778","title":"Provider-Agnostic Testing Framework - January 2025 Snapshot","url":"/docs/development/provider-testing","content":"⚠️ HISTORICAL DOCUMENT (January 2025) — This is a snapshot of the provider-agnostic testing milestone when 9 providers were live. The current product ships many provider integrations (incl. voice and the decision-only decide() type). For the up-to-date provider list and capability matrix, see the README and Provider Capabilities Audit.\n\nProvider-Agnostic Testing Framework - January 2025 Snapshot\n\nUpdated: January 20, 2025 \nStatus: COMPLETE SUCCESS — 9/9 providers verified working at the time of writing \nObjective: Complete provider testing after resolving critical configuration bug\n\n🎯 MISSION ACCOMPLISHED\n\nProblem Solved\n\nThe previous testing framework was hardcoded to Google AI, making it impossible to validate other providers during migration. This has been completely fixed.\n\nSolution Implemented\n\n✅ Provider-agnostic test runner \n✅ Configurable environment validation \n✅ Dynamic provider switching \n✅ Hugging Face implementation complete\n✅ Ready for comprehensive testing phase\n\n🔧 IMPLEMENTATION DETAILS\nEnhanced Test Runner (run-parallel-tests.js)\n\nProvider Configuration System\n\nUsage Examples\n\nEnvironment Validation\n✅ Automatic API key detection\n✅ Clear error messages for missing credentials\n✅ Provider-specific configuration validation\n✅ Dynamic environment variable setup\nProvider-Agnostic Test Files\n\nDynamic Provider Detection\n\nUpdated Test Files\n✅ test/basic-functionality.test.ts - Provider-agnostic\n✅ test/analytics-features.test.ts - Provider-agnostic\n🔄 Additional test files can be updated using same pattern\n\n🧪 VALIDATION RESULTS\n\nGoogle AI Provider Testing\n\nOpenAI Provider Testing\n\nKey Observations\n✅ Both providers pass all tests\n✅ OpenAI is slightly faster (6.15s vs 9.08s)\n✅ Same test suite validates both providers\n✅ No code changes needed between providers\n\n🚀 STRATEGIC BENEFITS\nMigration Confidence\nBaseline Established: Google AI provider validated and working\nTarget Confirmed: OpenAI provider already operational\nTest Coverage: Universal test suite applies to all providers\nRegression Prevention: Any breaking changes immediately detected\nDevelopment Velocity\nParallel Testing: Can test multiple providers simultaneously\nQuick Validation: Individual provider testing in \\<10 seconds\nClear Feedback: Provider-specific error messages and success metrics\nAutomated Reports: JSON reports saved per provider\nQuality Assurance\nNo Manual Testing: Automated validation across all providers\nConsistent Coverage: Same test scenarios for all providers\nPerformance Monitoring: Response time tracking per provider\nEnvironment Validation: Automatic credential checking\n\n📋 NEXT STEPS FOR PHASE 3\n\n✅ Migration Complete - All Providers Operational\n\nWith the provider-agnostic testing framework and factory pattern complete:\n\n✅ Factory Pattern Implementation Complete\n✅ BaseProvider: All 9 providers (at the time of writing) extend BaseProvider (verified)\n✅ Custom Vercel AI SDK: Azure, HuggingFace, Ollama use custom implementations\n✅ Official Vercel AI SDK: OpenAI, Anthropic, Bedrock, Google AI, Mistral\n✅ 100% Success Rate: All 9 providers in this snapshot tested and operational\n\n✅ Architecture Achievements\n✅ No External Package Issues: Custom implementations solve compatibility problems\n✅ Universal Analytics: Analytics helper integrated across all providers\n✅ Unified Interface: Single parameter handling system operational\n✅ Enterprise Ready: Complete factory-first MCP architecture\n\nTesting Strategy for Phase 3\n\n🎯 SUCCESS CRITERIA MET\n\nOriginal Requirements\n✅ Fix testing script to be provider agnostic\n✅ Test with OpenAI first (already implemented)\n✅ Validate provider-agnostic functionality working\n\nAdditional Achievements\n✅ Support for 4 providers (Google AI, OpenAI, Anthropic, Bedrock)\n✅ Automatic environment validation\n✅ Clear error messaging\n✅ Performance benchmarking\n✅ JSON report generation\n\n🏆 CONCLUSION\n\nThe provider-agnostic testing framework is now complete and operational.\nProblem Solved: No longer bound to Google AI\nQuality Assured: Both existing providers validated\nFoundation Ready: Perfect infrastructure for Phase 3 migration\nDevelopment Ready: Can proceed with confidence\n\nWe can now begin Phase 3 migration knowing that every step can be validated immediately with comprehensive, provider-agnostic testing.","hierarchy":{"lvl0":"Development","lvl1":"Provider-Agnostic Testing Framework - January 2025 Snapshot","lvl2":"","lvl3":""}},
2256
2256
  {"objectID":"40155d0164fbc188b20eb8158f339edd47393bae047ec9d23dc1a22745059fa8","title":"Provider-Agnostic Testing Framework - January 2025 Snapshot","url":"/docs/development/provider-testing#provider-agnostic-testing-framework---january-2025-snapshot","content":"Updated: January 20, 2025 \nStatus: COMPLETE SUCCESS — 9/9 providers verified working at the time of writing \nObjective: Complete provider testing after resolving critical configuration bug","hierarchy":{"lvl0":"Development","lvl1":"Provider-Agnostic Testing Framework - January 2025 Snapshot","lvl2":"Provider-Agnostic Testing Framework - January 2025 Snapshot","lvl3":""}},
2257
2257
  {"objectID":"3212634220f7620a7f5dd8d7ffa3a5fb8b359e4c6722504ae1d7881d0020a6da","title":"Problem Solved","url":"/docs/development/provider-testing#problem-solved","content":"The previous testing framework was hardcoded to Google AI, making it impossible to validate other providers during migration. This has been completely fixed.","hierarchy":{"lvl0":"Development","lvl1":"Provider-Agnostic Testing Framework - January 2025 Snapshot","lvl2":"Problem Solved","lvl3":""}},
2258
2258
  {"objectID":"7f3693bb49886451df629951ddeab92578715dda9bfabbd5d34a0d0c16c747a2","title":"Solution Implemented","url":"/docs/development/provider-testing#solution-implemented","content":"✅ Provider-agnostic test runner \n✅ Configurable environment validation \n✅ Dynamic provider switching \n✅ Hugging Face implementation complete\n✅ Ready for comprehensive testing phase","hierarchy":{"lvl0":"Development","lvl1":"Provider-Agnostic Testing Framework - January 2025 Snapshot","lvl2":"Solution Implemented","lvl3":""}},
@@ -2336,61 +2336,61 @@
2336
2336
  {"objectID":"06453fe78480b6ae73c599e3820862490a2b30ddd72bd4dc0d65052855dae72c","title":"Test Data Requirements:","url":"/docs/development/testing-plan#test-data-requirements","content":"Mock AI provider responses\nTest WebSocket messages\nSample telemetry data\nChat conversation samples","hierarchy":{"lvl0":"Development","lvl1":"🧪 COMPREHENSIVE TESTING & VERIFICATION PLAN","lvl2":"Test Data Requirements:","lvl3":""}},
2337
2337
  {"objectID":"759cf99082dba9a208b8b190c152cc5fc54c637c0e8826d7369b8994ab20ac6f","title":"Test Results Documentation:","url":"/docs/development/testing-plan#test-results-documentation","content":"Phase Results Summary - Pass/fail status for each phase\nPerformance Benchmarks - Before/after performance metrics\nIntegration Test Results - Real-world scenario outcomes\nBug Report - Any issues discovered during testing\nProduction Readiness Certificate - Final validation sign-off","hierarchy":{"lvl0":"Development","lvl1":"🧪 COMPREHENSIVE TESTING & VERIFICATION PLAN","lvl2":"Test Results Documentation:","lvl3":""}},
2338
2338
  {"objectID":"2866fdda44a9f55d463a0c10f0d478793ec401edbb3ac475a9ff2a3cbbaf019d","title":"Updated Documentation:","url":"/docs/development/testing-plan#updated-documentation","content":"API Reference - Reflecting actual implementation\nExamples & Tutorials - Working code samples\nTroubleshooting Guide - Common issues and solutions\nPerformance Guide - Optimization recommendations\n\nReady for Execution: This plan provides comprehensive validation of all Lighthouse integration work while ensuring zero breaking changes and optimal performance.\n\nEstimated Total Time: 3 hours for complete validation\nCritical Path: Phase A must pass before proceeding to subsequent phases\nSuccess Rate Target: 100% pass rate for Critical criteria, 90%+ for Important criteria","hierarchy":{"lvl0":"Development","lvl1":"🧪 COMPREHENSIVE TESTING & VERIFICATION PLAN","lvl2":"Updated Documentation:","lvl3":""}},
2339
- {"objectID":"51b6b861923c4ecf8410549bd73ebac7e465ba84aef90c9a499f86d45bd8225b","title":"🧪 NeuroLink Testing Guide — 40 Providers, Validated in CI","url":"/docs/development/testing","content":"🧪 NeuroLink Testing Guide — 40 Providers, Validated in CI\n\n🎉 Provider Testing Status\n\n44 providers supported — validated in CI where credentials are configured (unconfigured providers are skipped): OpenAI, Anthropic, Google AI, Google Vertex, AWS Bedrock, Azure OpenAI, Mistral, Hugging Face, Ollama, LiteLLM, AWS SageMaker, OpenAI-compatible, OpenRouter, DeepSeek, NVIDIA NIM, LM Studio, llama.cpp, TypeSafe Jev — plus voice (OpenAI TTS, ElevenLabs, Deepgram, Azure Speech, Google TTS/STT, Whisper, OpenAI Realtime, Gemini Live).\n\nQuick Provider Validation\n\nComprehensive Testing\n\nExpected Results\n\nCLI Enhancement Output:\n\nSDK Enhancement Output:\n\nProvider Testing\n\nGoogle AI Provider Validation\n\nOpenAI Provider Validation\n\nMulti-Provider Testing\n\nBackward Compatibility Testing\n\nEnsure No Breaking Changes\n\nTest Existing SDK Integration\n\nError Handling Testing\n\nInvalid Model Names\n\nMissing API Keys\n\nNetwork Issues\n\nPerformance Testing\n\nResponse Time Validation\n\nToken Counting Accuracy\n\nEnhancement Feature Validation\n\nAnalytics Data Completeness\n\nEvaluation Data Validation\n\nContext Flow Testing\n\nTroubleshooting Guide\n\nCommon Issues\nEmpty Responses from Google AI\nCheck model name in .env file\nUse gemini-2.5-pro instead of deprecated models\nVerify API key is valid\nNaN Token Counts\nUsually indicates provider API failure\nCheck model configuration and API keys\nTest with --debug flag for detailed logs\nEnhancement Data Missing\nEnsure using --debug flag to see enhancement output\nVerify enhancement flags are correctly specified\nCheck that provider is working (not falling back)\nCLI Commands Not Found\nRun npm run build:cli to rebuild CLI\nCheck that dist/cli/index.js exists\nVerify Node.js version compatibility\n\nDebug Commands\n\nTest Automation\n\nValidation Script Usage\n\nCI/CD Integration\n\nThis testing guide ensures all enhancement features work correctly while maintaining backward compatibility and providing clear troubleshooting guidance.","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — 40 Providers, Validated in CI","lvl2":"","lvl3":""}},
2340
- {"objectID":"4d9bb1de4ad3dfd116e55dc2d6b220825f5b43875d3fd78069496be8d856ff06","title":"🎉 Provider Testing Status","url":"/docs/development/testing#-provider-testing-status","content":"44 providers supported — validated in CI where credentials are configured (unconfigured providers are skipped): OpenAI, Anthropic, Google AI, Google Vertex, AWS Bedrock, Azure OpenAI, Mistral, Hugging Face, Ollama, LiteLLM, AWS SageMaker, OpenAI-compatible, OpenRouter, DeepSeek, NVIDIA NIM, LM Studio, llama.cpp, TypeSafe Jev — plus voice (OpenAI TTS, ElevenLabs, Deepgram, Azure Speech, Google TTS/STT, Whisper, OpenAI Realtime, Gemini Live).","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — 40 Providers, Validated in CI","lvl2":"🎉 Provider Testing Status","lvl3":""}},
2341
- {"objectID":"8fc0eade856296973641598d92d1d671410031324b34910f255b9daf62bbc200","title":"Quick Provider Validation","url":"/docs/development/testing#quick-provider-validation","content":"`bash","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — 40 Providers, Validated in CI","lvl2":"Quick Provider Validation","lvl3":""}},
2342
- {"objectID":"e522bb68d746cfa26559e2fe3c17775ecced454e5eb5b1672cc734c310a125aa","title":"Test any provider via the CLI","url":"/docs/development/testing#test-any-provider-via-the-cli","content":"pnpm cli generate \"test\" --provider openai\npnpm cli generate \"test\" --provider anthropic\npnpm cli generate \"test\" --provider google-ai\npnpm cli generate \"test\" --provider deepseek\npnpm cli generate \"test\" --provider nvidia-nim\npnpm cli generate \"test\" --provider lm-studio\npnpm cli generate \"test\" --provider llamacpp\npnpm cli generate \"test\" --provider azure\npnpm cli generate \"test\" --provider mistral\npnpm cli generate \"test\" --provider ollama\npnpm cli generate \"test\" --provider vertex","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — 40 Providers, Validated in CI","lvl2":"Test any provider via the CLI","lvl3":""}},
2343
- {"objectID":"8304dacf623fd9daa0ab9a22acb9078e123f9aa467efbddbbe074af13c2cdd7a","title":"Test with enhancements (any provider works)","url":"/docs/development/testing#test-with-enhancements-any-provider-works","content":"pnpm cli generate \"test\" --provider google-ai --enable-analytics --enable-evaluation --debug\n`","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — 40 Providers, Validated in CI","lvl2":"Test with enhancements (any provider works)","lvl3":""}},
2344
- {"objectID":"962667c0956afc2243878258732206629fd012fb4cb4e266ca1cc92a76ec19ff","title":"Comprehensive Testing","url":"/docs/development/testing#comprehensive-testing","content":"`bash","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — 40 Providers, Validated in CI","lvl2":"Comprehensive Testing","lvl3":""}},
2345
- {"objectID":"2abd04954506b423a74683585841f9bb5def930dedf02265b11096a04f7206e8","title":"Run full validation suite","url":"/docs/development/testing#run-full-validation-suite","content":"./validate-fixes.sh","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — 40 Providers, Validated in CI","lvl2":"Run full validation suite","lvl3":""}},
2346
- {"objectID":"c0b895cc1390ca0f55f528c530bfe7f242648eb4408ae0634ae626fd6fcddc85","title":"Run comprehensive CLI tests","url":"/docs/development/testing#run-comprehensive-cli-tests","content":"node CLICOMPREHENSIVETESTS.js","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — 40 Providers, Validated in CI","lvl2":"Run comprehensive CLI tests","lvl3":""}},
2347
- {"objectID":"1444bf3290ae917bf6534b6e32f1f109f4451832b05c5743fa58efce2c979f7b","title":"Run before/after comparison","url":"/docs/development/testing#run-beforeafter-comparison","content":"node BEFOREAFTERCOMPARISON.js\n`","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — 40 Providers, Validated in CI","lvl2":"Run before/after comparison","lvl3":""}},
2348
- {"objectID":"08c576cff131fac374c1c3a4375497793b511d4a53730510268c77e78416c89c","title":"Google AI Provider Validation","url":"/docs/development/testing#google-ai-provider-validation","content":"`bash","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — 40 Providers, Validated in CI","lvl2":"Google AI Provider Validation","lvl3":""}},
2349
- {"objectID":"dbbd1df0dafb3c972c66761e7a286f29d6c648b6e9c5578051e634ad2e3401c7","title":"Test working model","url":"/docs/development/testing#test-working-model","content":"node ./dist/cli/index.js generate \"Hello\" --provider google-ai --debug","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — 40 Providers, Validated in CI","lvl2":"Test working model","lvl3":""}},
2350
- {"objectID":"0216650963a9f582f523ec8c08f4fab7eb75ba4754d4ec751c1d8d9e6bfb400e","title":"Expected: No empty responses or fallbacks","url":"/docs/development/testing#expected-no-empty-responses-or-fallbacks","content":"`","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — 40 Providers, Validated in CI","lvl2":"Expected: No empty responses or fallbacks","lvl3":""}},
2351
- {"objectID":"13e82c8c22a2f7a24a2f34bc6d2183eb55ecff140bbd00ae93a892baaa9bd135","title":"OpenAI Provider Validation","url":"/docs/development/testing#openai-provider-validation","content":"`bash","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — 40 Providers, Validated in CI","lvl2":"OpenAI Provider Validation","lvl3":""}},
2352
- {"objectID":"f03fd4d28918a7fd77dbac824938c702f1486b54448009be7671ddd21f42591b","title":"Test OpenAI fallback","url":"/docs/development/testing#test-openai-fallback","content":"node ./dist/cli/index.js generate \"Hello\" --provider openai --enable-analytics --debug","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — 40 Providers, Validated in CI","lvl2":"Test OpenAI fallback","lvl3":""}},
2353
- {"objectID":"7de61b60e3aa538d051db0159fc80e3cbb63e4d0e4e04f37b6e801dad8a5f53f","title":"Expected: Accurate token counting (no NaN values)","url":"/docs/development/testing#expected-accurate-token-counting-no-nan-values","content":"`","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — 40 Providers, Validated in CI","lvl2":"Expected: Accurate token counting (no NaN values)","lvl3":""}},
2354
- {"objectID":"f33aaba473bdf45c26d05793d64b2496936048e97d7e18b4e7cd943a60fec0db","title":"Multi-Provider Testing","url":"/docs/development/testing#multi-provider-testing","content":"`bash","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — 40 Providers, Validated in CI","lvl2":"Multi-Provider Testing","lvl3":""}},
2355
- {"objectID":"3040499d040ec7a9763949d3a928959dcf5ac65b964393671e1449b704c14857","title":"Test provider auto-selection","url":"/docs/development/testing#test-provider-auto-selection","content":"node ./dist/cli/index.js generate \"Hello\" --enable-analytics --debug","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — 40 Providers, Validated in CI","lvl2":"Test provider auto-selection","lvl3":""}},
2356
- {"objectID":"6fcbf2c32c2277f72918a7923d587cecc8cf1e24d899694c95a46e1c2c25a8cd","title":"Expected: Graceful fallback if primary provider fails","url":"/docs/development/testing#expected-graceful-fallback-if-primary-provider-fails","content":"`","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — 40 Providers, Validated in CI","lvl2":"Expected: Graceful fallback if primary provider fails","lvl3":""}},
2357
- {"objectID":"dbd1a1a8d7dc9ac0d259cdeef2ab1f7f5342e4e7d8c76def6624531e85139ac1","title":"Ensure No Breaking Changes","url":"/docs/development/testing#ensure-no-breaking-changes","content":"`bash","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — 40 Providers, Validated in CI","lvl2":"Ensure No Breaking Changes","lvl3":""}},
2358
- {"objectID":"03974bf1b097b8efb16b817e92ef49803eacd3d3e178b4a1aa07b45a1a4ac866","title":"Test existing CLI commands (no enhancement flags)","url":"/docs/development/testing#test-existing-cli-commands-no-enhancement-flags","content":"node ./dist/cli/index.js generate \"Simple test\"\nnode ./dist/cli/index.js generate \"Simple test\"\nnode ./dist/cli/index.js gen \"Simple test\"","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — 40 Providers, Validated in CI","lvl2":"Test existing CLI commands (no enhancement flags)","lvl3":""}},
2359
- {"objectID":"8fb36dbdf2d8b1b6eb3d7edcdc8304649093d7b7a6cf9da64944bc1932382b8d","title":"Expected: All existing functionality works","url":"/docs/development/testing#expected-all-existing-functionality-works","content":"`","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — 40 Providers, Validated in CI","lvl2":"Expected: All existing functionality works","lvl3":""}},
2360
- {"objectID":"a0cab3a3fc984cfbe3985ae09fe6e79f141999deddd7b70548cfa578e9051a34","title":"Invalid Model Names","url":"/docs/development/testing#invalid-model-names","content":"`bash","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — 40 Providers, Validated in CI","lvl2":"Invalid Model Names","lvl3":""}},
2361
- {"objectID":"c27b650b086910c0aeea0926a7081ace904ca5b4225d6a65de89c53f291e8484","title":"Test deprecated model handling","url":"/docs/development/testing#test-deprecated-model-handling","content":"node ./dist/cli/index.js generate \"test\" --provider google-ai --debug","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — 40 Providers, Validated in CI","lvl2":"Test deprecated model handling","lvl3":""}},
2362
- {"objectID":"1012fab5a00e125facac7dd6150f09d516d8f6af8e942b1dcca53b81bceb0f40","title":"Expected: Clear error message or automatic correction","url":"/docs/development/testing#expected-clear-error-message-or-automatic-correction","content":"`","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — 40 Providers, Validated in CI","lvl2":"Expected: Clear error message or automatic correction","lvl3":""}},
2363
- {"objectID":"5ddd754a280b4b927eb3dc046a889c6532f10c54a985864fd8228bda0a9f92d4","title":"Missing API Keys","url":"/docs/development/testing#missing-api-keys","content":"`bash","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — 40 Providers, Validated in CI","lvl2":"Missing API Keys","lvl3":""}},
2364
- {"objectID":"ef41be5889fafebb18d04e1c630e4960538a9cb519889de44c5160c0b98213f7","title":"Test without API keys","url":"/docs/development/testing#test-without-api-keys","content":"unset GOOGLEAIAPI_KEY\nunset OPENAIAPIKEY\nnode ./dist/cli/index.js generate \"test\" --debug","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — 40 Providers, Validated in CI","lvl2":"Test without API keys","lvl3":""}},
2365
- {"objectID":"3e6ecdfc6fc0f3b6fbc2b555bc4872547b558fca8f46928ad51cd5439dde5dd4","title":"Expected: Helpful setup instructions","url":"/docs/development/testing#expected-helpful-setup-instructions","content":"`","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — 40 Providers, Validated in CI","lvl2":"Expected: Helpful setup instructions","lvl3":""}},
2366
- {"objectID":"6f84c9acd43c65eed6e126ecb28707eac9dbf9d2251aa495da657c84519144ac","title":"Network Issues","url":"/docs/development/testing#network-issues","content":"`bash","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — 40 Providers, Validated in CI","lvl2":"Network Issues","lvl3":""}},
2367
- {"objectID":"535fb979e4072fd5943718b60f942cfe2581e59d94f02bf0ab3f9c5296aed133","title":"Test with invalid API endpoint (simulated)","url":"/docs/development/testing#test-with-invalid-api-endpoint-simulated","content":"node ./dist/cli/index.js generate \"test\" --timeout 5s --debug","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — 40 Providers, Validated in CI","lvl2":"Test with invalid API endpoint (simulated)","lvl3":""}},
2368
- {"objectID":"4a4ddc7e1ba7da05e8ac247d462c74e1d4796c47ca815b27edd6210911545a66","title":"Expected: Fallback to other providers if available","url":"/docs/development/testing#expected-fallback-to-other-providers-if-available","content":"`","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — 40 Providers, Validated in CI","lvl2":"Expected: Fallback to other providers if available","lvl3":""}},
2369
- {"objectID":"732e97053310081527b3956475ec8f9543528f27634cb9a9437be97491fc022e","title":"Response Time Validation","url":"/docs/development/testing#response-time-validation","content":"`bash","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — 40 Providers, Validated in CI","lvl2":"Response Time Validation","lvl3":""}},
2370
- {"objectID":"83436dd951e6c29193b97a7214bf39e68bba4321e298f87657bd15499ff55728","title":"Test response times with analytics","url":"/docs/development/testing#test-response-times-with-analytics","content":"node ./dist/cli/index.js generate \"Short prompt\" --enable-analytics --debug","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — 40 Providers, Validated in CI","lvl2":"Test response times with analytics","lvl3":""}},
2371
- {"objectID":"54a5273f2a0a118c577477cba7fa9d269a1f8bb310d8094e136c6392808b60ee","title":"Expected: Analytics data doesn't significantly slow requests","url":"/docs/development/testing#expected-analytics-data-doesnt-significantly-slow-requests","content":"`","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — 40 Providers, Validated in CI","lvl2":"Expected: Analytics data doesn't significantly slow requests","lvl3":""}},
2372
- {"objectID":"e5a5c046c23621ae139301e8c65dd604dc84439b8e7b885e3334496a1056537c","title":"Token Counting Accuracy","url":"/docs/development/testing#token-counting-accuracy","content":"`bash","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — 40 Providers, Validated in CI","lvl2":"Token Counting Accuracy","lvl3":""}},
2373
- {"objectID":"ccd90219360ecc36f15b0643eba076beb6ece97d47df2e726c02d5551923af2f","title":"Test accurate token counting","url":"/docs/development/testing#test-accurate-token-counting","content":"node ./dist/cli/index.js generate \"This is a test prompt for token counting\" --enable-analytics --debug","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — 40 Providers, Validated in CI","lvl2":"Test accurate token counting","lvl3":""}},
2374
- {"objectID":"33c361903e5d2155aee10120ed991aaf5c4ebc49b12169c7ffeb49e51b659acf","title":"Expected: Token counts match actual usage","url":"/docs/development/testing#expected-token-counts-match-actual-usage","content":"`","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — 40 Providers, Validated in CI","lvl2":"Expected: Token counts match actual usage","lvl3":""}},
2375
- {"objectID":"b879714c080fe2a85b50539fb224809866bec0b5ae9df829069f821f3356d017","title":"Analytics Data Completeness","url":"/docs/development/testing#analytics-data-completeness","content":"`bash","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — 40 Providers, Validated in CI","lvl2":"Analytics Data Completeness","lvl3":""}},
2376
- {"objectID":"ab64c1128474c05c7de4a45c9d0206d74b008e7e99e3de844bbb54a021289d3e","title":"Test analytics data structure","url":"/docs/development/testing#test-analytics-data-structure","content":"node ./dist/cli/index.js generate \"Business email\" --enable-analytics --context '{\"project\":\"test\"}' --debug","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — 40 Providers, Validated in CI","lvl2":"Test analytics data structure","lvl3":""}},
2377
- {"objectID":"f785281351d1476ace01b4412ce6621b8a6e47dc55e1f7263e647a4fa5ddc580","title":"- timestamp: ISO string","url":"/docs/development/testing#--timestamp-iso-string","content":"`","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — 40 Providers, Validated in CI","lvl2":"- timestamp: ISO string","lvl3":""}},
2378
- {"objectID":"83e222546aabbdc6c7bc9f23c5d11b80d63b2b7fef71fcbe3ea2093f44cfb7d8","title":"Evaluation Data Validation","url":"/docs/development/testing#evaluation-data-validation","content":"`bash","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — 40 Providers, Validated in CI","lvl2":"Evaluation Data Validation","lvl3":""}},
2379
- {"objectID":"cb4404c5157f480b12911f00292e0578971e88becf2998f836a5f86f2e82139c","title":"Test evaluation scoring","url":"/docs/development/testing#test-evaluation-scoring","content":"node ./dist/cli/index.js generate \"Explain quantum physics\" --enable-evaluation --debug","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — 40 Providers, Validated in CI","lvl2":"Test evaluation scoring","lvl3":""}},
2380
- {"objectID":"ab73a02c6fd432b8740d1624770287217547ab7d9cea1f53080f9611db83937b","title":"- evaluationTime: number","url":"/docs/development/testing#--evaluationtime-number","content":"`","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — 40 Providers, Validated in CI","lvl2":"- evaluationTime: number","lvl3":""}},
2381
- {"objectID":"a762e4c091d9b3e54bd2a51a4cdf02851c6636cae857996467d2a9437ec085a2","title":"Context Flow Testing","url":"/docs/development/testing#context-flow-testing","content":"`bash","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — 40 Providers, Validated in CI","lvl2":"Context Flow Testing","lvl3":""}},
2382
- {"objectID":"d7eb0273fcdf438807e6ad66b71d1b1511436d60f50712f7246d76e3a4441865","title":"Test context preservation","url":"/docs/development/testing#test-context-preservation","content":"node ./dist/cli/index.js generate \"Help with task\" --context '{\"userId\":\"123\",\"department\":\"sales\"}' --enable-analytics --debug","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — 40 Providers, Validated in CI","lvl2":"Test context preservation","lvl3":""}},
2383
- {"objectID":"f4d4540747aa848513d17bd416fc18287b535713ed1a03fbce8f311b4fe6bdf6","title":"Expected: Context available throughout request chain","url":"/docs/development/testing#expected-context-available-throughout-request-chain","content":"`","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — 40 Providers, Validated in CI","lvl2":"Expected: Context available throughout request chain","lvl3":""}},
2384
- {"objectID":"19720de4c8ed35a547ab099355e2fd5175800e0930b25b1d218940db0baf60f1","title":"Common Issues","url":"/docs/development/testing#common-issues","content":"Empty Responses from Google AI\nCheck model name in .env file\nUse gemini-2.5-pro instead of deprecated models\nVerify API key is valid\nNaN Token Counts\nUsually indicates provider API failure\nCheck model configuration and API keys\nTest with --debug flag for detailed logs\nEnhancement Data Missing\nEnsure using --debug flag to see enhancement output\nVerify enhancement flags are correctly specified\nCheck that provider is working (not falling back)\nCLI Commands Not Found\nRun npm run build:cli to rebuild CLI\nCheck that dist/cli/index.js exists\nVerify Node.js version compatibility","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — 40 Providers, Validated in CI","lvl2":"Common Issues","lvl3":""}},
2385
- {"objectID":"66eea4e65b778a0521203afbc43ff698e78df2a376ad66427ac83c227d77c081","title":"Debug Commands","url":"/docs/development/testing#debug-commands","content":"`bash","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — 40 Providers, Validated in CI","lvl2":"Debug Commands","lvl3":""}},
2386
- {"objectID":"67d89ab41aec29dc1893e5e5fc6f086c5b1b31a95c6b6aa40677d932d03c9594","title":"Comprehensive debug information","url":"/docs/development/testing#comprehensive-debug-information","content":"node ./dist/cli/index.js generate \"debug test\" --provider google-ai --enable-analytics --enable-evaluation --context '{\"debug\":true}' --debug","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — 40 Providers, Validated in CI","lvl2":"Comprehensive debug information","lvl3":""}},
2387
- {"objectID":"d6a5b4654b0448dc17e98a0644da6c0251088520c2b778bd1b2fcf5169c5abd5","title":"Check provider status","url":"/docs/development/testing#check-provider-status","content":"node ./dist/cli/index.js status","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — 40 Providers, Validated in CI","lvl2":"Check provider status","lvl3":""}},
2388
- {"objectID":"da0c759ab4959c695f7ba6d3682869e4b64af5010353fe3dfbcfed51eedec072","title":"Test specific provider","url":"/docs/development/testing#test-specific-provider","content":"node ./dist/cli/index.js generate \"provider test\" --provider openai --debug\n`","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — 40 Providers, Validated in CI","lvl2":"Test specific provider","lvl3":""}},
2389
- {"objectID":"5b50f79d5e15b3b0476213bafa40c4be8a431bdd409be9330906e070ad72fb52","title":"Validation Script Usage","url":"/docs/development/testing#validation-script-usage","content":"`bash","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — 40 Providers, Validated in CI","lvl2":"Validation Script Usage","lvl3":""}},
2390
- {"objectID":"838736a3fa982ded222301f415ca1ecc28a8bd1b718e40878f35ec514a555c23","title":"Run complete validation suite","url":"/docs/development/testing#run-complete-validation-suite","content":"./validate-fixes.sh","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — 40 Providers, Validated in CI","lvl2":"Run complete validation suite","lvl3":""}},
2391
- {"objectID":"489bc8592279699a24f5d95b3f635c1f1f30a8310b3d5d247e1f3109c6228d23","title":"Run specific test categories","url":"/docs/development/testing#run-specific-test-categories","content":"./validate-fixes.sh --cli-only\n./validate-fixes.sh --sdk-only\n./validate-fixes.sh --providers-only\n`","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — 40 Providers, Validated in CI","lvl2":"Run specific test categories","lvl3":""}},
2392
- {"objectID":"b9d3b2dedf68c9fecf0095380d37100ad6f63a1a5b4166af3428764814c5a2e4","title":"CI/CD Integration","url":"/docs/development/testing#cicd-integration","content":"`bash","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — 40 Providers, Validated in CI","lvl2":"CI/CD Integration","lvl3":""}},
2393
- {"objectID":"8914e25e0d42823489948b21e26bde8f722750852c2514cf994cdc6e6b720611","title":"Add to CI pipeline","url":"/docs/development/testing#add-to-ci-pipeline","content":"npm run test\nnpm run build:cli\n./validate-fixes.sh --ci-mode\n`\n\nThis testing guide ensures all enhancement features work correctly while maintaining backward compatibility and providing clear troubleshooting guidance.","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — 40 Providers, Validated in CI","lvl2":"Add to CI pipeline","lvl3":""}},
2339
+ {"objectID":"51b6b861923c4ecf8410549bd73ebac7e465ba84aef90c9a499f86d45bd8225b","title":"🧪 NeuroLink Testing Guide — Providers Validated in CI","url":"/docs/development/testing","content":"🧪 NeuroLink Testing Guide — Providers Validated in CI\n\n🎉 Provider Testing Status\n\nProviders supported — validated in CI where credentials are configured (unconfigured providers are skipped): OpenAI, Anthropic, Google AI, Google Vertex, AWS Bedrock, Azure OpenAI, Mistral, Hugging Face, Ollama, LiteLLM, AWS SageMaker, OpenAI-compatible, OpenRouter, DeepSeek, NVIDIA NIM, LM Studio, llama.cpp, TypeSafe Jev — plus voice (OpenAI TTS, ElevenLabs, Deepgram, Azure Speech, Google TTS/STT, Whisper, OpenAI Realtime, Gemini Live).\n\nQuick Provider Validation\n\nComprehensive Testing\n\nExpected Results\n\nCLI Enhancement Output:\n\nSDK Enhancement Output:\n\nProvider Testing\n\nGoogle AI Provider Validation\n\nOpenAI Provider Validation\n\nMulti-Provider Testing\n\nBackward Compatibility Testing\n\nEnsure No Breaking Changes\n\nTest Existing SDK Integration\n\nError Handling Testing\n\nInvalid Model Names\n\nMissing API Keys\n\nNetwork Issues\n\nPerformance Testing\n\nResponse Time Validation\n\nToken Counting Accuracy\n\nEnhancement Feature Validation\n\nAnalytics Data Completeness\n\nEvaluation Data Validation\n\nContext Flow Testing\n\nTroubleshooting Guide\n\nCommon Issues\nEmpty Responses from Google AI\nCheck model name in .env file\nUse gemini-2.5-pro instead of deprecated models\nVerify API key is valid\nNaN Token Counts\nUsually indicates provider API failure\nCheck model configuration and API keys\nTest with --debug flag for detailed logs\nEnhancement Data Missing\nEnsure using --debug flag to see enhancement output\nVerify enhancement flags are correctly specified\nCheck that provider is working (not falling back)\nCLI Commands Not Found\nRun npm run build:cli to rebuild CLI\nCheck that dist/cli/index.js exists\nVerify Node.js version compatibility\n\nDebug Commands\n\nTest Automation\n\nValidation Script Usage\n\nCI/CD Integration\n\nThis testing guide ensures all enhancement features work correctly while maintaining backward compatibility and providing clear troubleshooting guidance.","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — Providers Validated in CI","lvl2":"","lvl3":""}},
2340
+ {"objectID":"4d9bb1de4ad3dfd116e55dc2d6b220825f5b43875d3fd78069496be8d856ff06","title":"🎉 Provider Testing Status","url":"/docs/development/testing#-provider-testing-status","content":"Providers supported — validated in CI where credentials are configured (unconfigured providers are skipped): OpenAI, Anthropic, Google AI, Google Vertex, AWS Bedrock, Azure OpenAI, Mistral, Hugging Face, Ollama, LiteLLM, AWS SageMaker, OpenAI-compatible, OpenRouter, DeepSeek, NVIDIA NIM, LM Studio, llama.cpp, TypeSafe Jev — plus voice (OpenAI TTS, ElevenLabs, Deepgram, Azure Speech, Google TTS/STT, Whisper, OpenAI Realtime, Gemini Live).","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — Providers Validated in CI","lvl2":"🎉 Provider Testing Status","lvl3":""}},
2341
+ {"objectID":"8fc0eade856296973641598d92d1d671410031324b34910f255b9daf62bbc200","title":"Quick Provider Validation","url":"/docs/development/testing#quick-provider-validation","content":"`bash","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — Providers Validated in CI","lvl2":"Quick Provider Validation","lvl3":""}},
2342
+ {"objectID":"e522bb68d746cfa26559e2fe3c17775ecced454e5eb5b1672cc734c310a125aa","title":"Test any provider via the CLI","url":"/docs/development/testing#test-any-provider-via-the-cli","content":"pnpm cli generate \"test\" --provider openai\npnpm cli generate \"test\" --provider anthropic\npnpm cli generate \"test\" --provider google-ai\npnpm cli generate \"test\" --provider deepseek\npnpm cli generate \"test\" --provider nvidia-nim\npnpm cli generate \"test\" --provider lm-studio\npnpm cli generate \"test\" --provider llamacpp\npnpm cli generate \"test\" --provider azure\npnpm cli generate \"test\" --provider mistral\npnpm cli generate \"test\" --provider ollama\npnpm cli generate \"test\" --provider vertex","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — Providers Validated in CI","lvl2":"Test any provider via the CLI","lvl3":""}},
2343
+ {"objectID":"8304dacf623fd9daa0ab9a22acb9078e123f9aa467efbddbbe074af13c2cdd7a","title":"Test with enhancements (any provider works)","url":"/docs/development/testing#test-with-enhancements-any-provider-works","content":"pnpm cli generate \"test\" --provider google-ai --enable-analytics --enable-evaluation --debug\n`","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — Providers Validated in CI","lvl2":"Test with enhancements (any provider works)","lvl3":""}},
2344
+ {"objectID":"962667c0956afc2243878258732206629fd012fb4cb4e266ca1cc92a76ec19ff","title":"Comprehensive Testing","url":"/docs/development/testing#comprehensive-testing","content":"`bash","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — Providers Validated in CI","lvl2":"Comprehensive Testing","lvl3":""}},
2345
+ {"objectID":"2abd04954506b423a74683585841f9bb5def930dedf02265b11096a04f7206e8","title":"Run full validation suite","url":"/docs/development/testing#run-full-validation-suite","content":"./validate-fixes.sh","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — Providers Validated in CI","lvl2":"Run full validation suite","lvl3":""}},
2346
+ {"objectID":"c0b895cc1390ca0f55f528c530bfe7f242648eb4408ae0634ae626fd6fcddc85","title":"Run comprehensive CLI tests","url":"/docs/development/testing#run-comprehensive-cli-tests","content":"node CLICOMPREHENSIVETESTS.js","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — Providers Validated in CI","lvl2":"Run comprehensive CLI tests","lvl3":""}},
2347
+ {"objectID":"1444bf3290ae917bf6534b6e32f1f109f4451832b05c5743fa58efce2c979f7b","title":"Run before/after comparison","url":"/docs/development/testing#run-beforeafter-comparison","content":"node BEFOREAFTERCOMPARISON.js\n`","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — Providers Validated in CI","lvl2":"Run before/after comparison","lvl3":""}},
2348
+ {"objectID":"08c576cff131fac374c1c3a4375497793b511d4a53730510268c77e78416c89c","title":"Google AI Provider Validation","url":"/docs/development/testing#google-ai-provider-validation","content":"`bash","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — Providers Validated in CI","lvl2":"Google AI Provider Validation","lvl3":""}},
2349
+ {"objectID":"dbbd1df0dafb3c972c66761e7a286f29d6c648b6e9c5578051e634ad2e3401c7","title":"Test working model","url":"/docs/development/testing#test-working-model","content":"node ./dist/cli/index.js generate \"Hello\" --provider google-ai --debug","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — Providers Validated in CI","lvl2":"Test working model","lvl3":""}},
2350
+ {"objectID":"0216650963a9f582f523ec8c08f4fab7eb75ba4754d4ec751c1d8d9e6bfb400e","title":"Expected: No empty responses or fallbacks","url":"/docs/development/testing#expected-no-empty-responses-or-fallbacks","content":"`","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — Providers Validated in CI","lvl2":"Expected: No empty responses or fallbacks","lvl3":""}},
2351
+ {"objectID":"13e82c8c22a2f7a24a2f34bc6d2183eb55ecff140bbd00ae93a892baaa9bd135","title":"OpenAI Provider Validation","url":"/docs/development/testing#openai-provider-validation","content":"`bash","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — Providers Validated in CI","lvl2":"OpenAI Provider Validation","lvl3":""}},
2352
+ {"objectID":"f03fd4d28918a7fd77dbac824938c702f1486b54448009be7671ddd21f42591b","title":"Test OpenAI fallback","url":"/docs/development/testing#test-openai-fallback","content":"node ./dist/cli/index.js generate \"Hello\" --provider openai --enable-analytics --debug","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — Providers Validated in CI","lvl2":"Test OpenAI fallback","lvl3":""}},
2353
+ {"objectID":"7de61b60e3aa538d051db0159fc80e3cbb63e4d0e4e04f37b6e801dad8a5f53f","title":"Expected: Accurate token counting (no NaN values)","url":"/docs/development/testing#expected-accurate-token-counting-no-nan-values","content":"`","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — Providers Validated in CI","lvl2":"Expected: Accurate token counting (no NaN values)","lvl3":""}},
2354
+ {"objectID":"f33aaba473bdf45c26d05793d64b2496936048e97d7e18b4e7cd943a60fec0db","title":"Multi-Provider Testing","url":"/docs/development/testing#multi-provider-testing","content":"`bash","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — Providers Validated in CI","lvl2":"Multi-Provider Testing","lvl3":""}},
2355
+ {"objectID":"3040499d040ec7a9763949d3a928959dcf5ac65b964393671e1449b704c14857","title":"Test provider auto-selection","url":"/docs/development/testing#test-provider-auto-selection","content":"node ./dist/cli/index.js generate \"Hello\" --enable-analytics --debug","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — Providers Validated in CI","lvl2":"Test provider auto-selection","lvl3":""}},
2356
+ {"objectID":"6fcbf2c32c2277f72918a7923d587cecc8cf1e24d899694c95a46e1c2c25a8cd","title":"Expected: Graceful fallback if primary provider fails","url":"/docs/development/testing#expected-graceful-fallback-if-primary-provider-fails","content":"`","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — Providers Validated in CI","lvl2":"Expected: Graceful fallback if primary provider fails","lvl3":""}},
2357
+ {"objectID":"dbd1a1a8d7dc9ac0d259cdeef2ab1f7f5342e4e7d8c76def6624531e85139ac1","title":"Ensure No Breaking Changes","url":"/docs/development/testing#ensure-no-breaking-changes","content":"`bash","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — Providers Validated in CI","lvl2":"Ensure No Breaking Changes","lvl3":""}},
2358
+ {"objectID":"03974bf1b097b8efb16b817e92ef49803eacd3d3e178b4a1aa07b45a1a4ac866","title":"Test existing CLI commands (no enhancement flags)","url":"/docs/development/testing#test-existing-cli-commands-no-enhancement-flags","content":"node ./dist/cli/index.js generate \"Simple test\"\nnode ./dist/cli/index.js generate \"Simple test\"\nnode ./dist/cli/index.js gen \"Simple test\"","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — Providers Validated in CI","lvl2":"Test existing CLI commands (no enhancement flags)","lvl3":""}},
2359
+ {"objectID":"8fb36dbdf2d8b1b6eb3d7edcdc8304649093d7b7a6cf9da64944bc1932382b8d","title":"Expected: All existing functionality works","url":"/docs/development/testing#expected-all-existing-functionality-works","content":"`","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — Providers Validated in CI","lvl2":"Expected: All existing functionality works","lvl3":""}},
2360
+ {"objectID":"a0cab3a3fc984cfbe3985ae09fe6e79f141999deddd7b70548cfa578e9051a34","title":"Invalid Model Names","url":"/docs/development/testing#invalid-model-names","content":"`bash","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — Providers Validated in CI","lvl2":"Invalid Model Names","lvl3":""}},
2361
+ {"objectID":"c27b650b086910c0aeea0926a7081ace904ca5b4225d6a65de89c53f291e8484","title":"Test deprecated model handling","url":"/docs/development/testing#test-deprecated-model-handling","content":"node ./dist/cli/index.js generate \"test\" --provider google-ai --debug","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — Providers Validated in CI","lvl2":"Test deprecated model handling","lvl3":""}},
2362
+ {"objectID":"1012fab5a00e125facac7dd6150f09d516d8f6af8e942b1dcca53b81bceb0f40","title":"Expected: Clear error message or automatic correction","url":"/docs/development/testing#expected-clear-error-message-or-automatic-correction","content":"`","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — Providers Validated in CI","lvl2":"Expected: Clear error message or automatic correction","lvl3":""}},
2363
+ {"objectID":"5ddd754a280b4b927eb3dc046a889c6532f10c54a985864fd8228bda0a9f92d4","title":"Missing API Keys","url":"/docs/development/testing#missing-api-keys","content":"`bash","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — Providers Validated in CI","lvl2":"Missing API Keys","lvl3":""}},
2364
+ {"objectID":"ef41be5889fafebb18d04e1c630e4960538a9cb519889de44c5160c0b98213f7","title":"Test without API keys","url":"/docs/development/testing#test-without-api-keys","content":"unset GOOGLEAIAPI_KEY\nunset OPENAIAPIKEY\nnode ./dist/cli/index.js generate \"test\" --debug","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — Providers Validated in CI","lvl2":"Test without API keys","lvl3":""}},
2365
+ {"objectID":"3e6ecdfc6fc0f3b6fbc2b555bc4872547b558fca8f46928ad51cd5439dde5dd4","title":"Expected: Helpful setup instructions","url":"/docs/development/testing#expected-helpful-setup-instructions","content":"`","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — Providers Validated in CI","lvl2":"Expected: Helpful setup instructions","lvl3":""}},
2366
+ {"objectID":"6f84c9acd43c65eed6e126ecb28707eac9dbf9d2251aa495da657c84519144ac","title":"Network Issues","url":"/docs/development/testing#network-issues","content":"`bash","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — Providers Validated in CI","lvl2":"Network Issues","lvl3":""}},
2367
+ {"objectID":"535fb979e4072fd5943718b60f942cfe2581e59d94f02bf0ab3f9c5296aed133","title":"Test with invalid API endpoint (simulated)","url":"/docs/development/testing#test-with-invalid-api-endpoint-simulated","content":"node ./dist/cli/index.js generate \"test\" --timeout 5s --debug","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — Providers Validated in CI","lvl2":"Test with invalid API endpoint (simulated)","lvl3":""}},
2368
+ {"objectID":"4a4ddc7e1ba7da05e8ac247d462c74e1d4796c47ca815b27edd6210911545a66","title":"Expected: Fallback to other providers if available","url":"/docs/development/testing#expected-fallback-to-other-providers-if-available","content":"`","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — Providers Validated in CI","lvl2":"Expected: Fallback to other providers if available","lvl3":""}},
2369
+ {"objectID":"732e97053310081527b3956475ec8f9543528f27634cb9a9437be97491fc022e","title":"Response Time Validation","url":"/docs/development/testing#response-time-validation","content":"`bash","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — Providers Validated in CI","lvl2":"Response Time Validation","lvl3":""}},
2370
+ {"objectID":"83436dd951e6c29193b97a7214bf39e68bba4321e298f87657bd15499ff55728","title":"Test response times with analytics","url":"/docs/development/testing#test-response-times-with-analytics","content":"node ./dist/cli/index.js generate \"Short prompt\" --enable-analytics --debug","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — Providers Validated in CI","lvl2":"Test response times with analytics","lvl3":""}},
2371
+ {"objectID":"54a5273f2a0a118c577477cba7fa9d269a1f8bb310d8094e136c6392808b60ee","title":"Expected: Analytics data doesn't significantly slow requests","url":"/docs/development/testing#expected-analytics-data-doesnt-significantly-slow-requests","content":"`","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — Providers Validated in CI","lvl2":"Expected: Analytics data doesn't significantly slow requests","lvl3":""}},
2372
+ {"objectID":"e5a5c046c23621ae139301e8c65dd604dc84439b8e7b885e3334496a1056537c","title":"Token Counting Accuracy","url":"/docs/development/testing#token-counting-accuracy","content":"`bash","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — Providers Validated in CI","lvl2":"Token Counting Accuracy","lvl3":""}},
2373
+ {"objectID":"ccd90219360ecc36f15b0643eba076beb6ece97d47df2e726c02d5551923af2f","title":"Test accurate token counting","url":"/docs/development/testing#test-accurate-token-counting","content":"node ./dist/cli/index.js generate \"This is a test prompt for token counting\" --enable-analytics --debug","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — Providers Validated in CI","lvl2":"Test accurate token counting","lvl3":""}},
2374
+ {"objectID":"33c361903e5d2155aee10120ed991aaf5c4ebc49b12169c7ffeb49e51b659acf","title":"Expected: Token counts match actual usage","url":"/docs/development/testing#expected-token-counts-match-actual-usage","content":"`","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — Providers Validated in CI","lvl2":"Expected: Token counts match actual usage","lvl3":""}},
2375
+ {"objectID":"b879714c080fe2a85b50539fb224809866bec0b5ae9df829069f821f3356d017","title":"Analytics Data Completeness","url":"/docs/development/testing#analytics-data-completeness","content":"`bash","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — Providers Validated in CI","lvl2":"Analytics Data Completeness","lvl3":""}},
2376
+ {"objectID":"ab64c1128474c05c7de4a45c9d0206d74b008e7e99e3de844bbb54a021289d3e","title":"Test analytics data structure","url":"/docs/development/testing#test-analytics-data-structure","content":"node ./dist/cli/index.js generate \"Business email\" --enable-analytics --context '{\"project\":\"test\"}' --debug","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — Providers Validated in CI","lvl2":"Test analytics data structure","lvl3":""}},
2377
+ {"objectID":"f785281351d1476ace01b4412ce6621b8a6e47dc55e1f7263e647a4fa5ddc580","title":"- timestamp: ISO string","url":"/docs/development/testing#--timestamp-iso-string","content":"`","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — Providers Validated in CI","lvl2":"- timestamp: ISO string","lvl3":""}},
2378
+ {"objectID":"83e222546aabbdc6c7bc9f23c5d11b80d63b2b7fef71fcbe3ea2093f44cfb7d8","title":"Evaluation Data Validation","url":"/docs/development/testing#evaluation-data-validation","content":"`bash","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — Providers Validated in CI","lvl2":"Evaluation Data Validation","lvl3":""}},
2379
+ {"objectID":"cb4404c5157f480b12911f00292e0578971e88becf2998f836a5f86f2e82139c","title":"Test evaluation scoring","url":"/docs/development/testing#test-evaluation-scoring","content":"node ./dist/cli/index.js generate \"Explain quantum physics\" --enable-evaluation --debug","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — Providers Validated in CI","lvl2":"Test evaluation scoring","lvl3":""}},
2380
+ {"objectID":"ab73a02c6fd432b8740d1624770287217547ab7d9cea1f53080f9611db83937b","title":"- evaluationTime: number","url":"/docs/development/testing#--evaluationtime-number","content":"`","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — Providers Validated in CI","lvl2":"- evaluationTime: number","lvl3":""}},
2381
+ {"objectID":"a762e4c091d9b3e54bd2a51a4cdf02851c6636cae857996467d2a9437ec085a2","title":"Context Flow Testing","url":"/docs/development/testing#context-flow-testing","content":"`bash","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — Providers Validated in CI","lvl2":"Context Flow Testing","lvl3":""}},
2382
+ {"objectID":"d7eb0273fcdf438807e6ad66b71d1b1511436d60f50712f7246d76e3a4441865","title":"Test context preservation","url":"/docs/development/testing#test-context-preservation","content":"node ./dist/cli/index.js generate \"Help with task\" --context '{\"userId\":\"123\",\"department\":\"sales\"}' --enable-analytics --debug","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — Providers Validated in CI","lvl2":"Test context preservation","lvl3":""}},
2383
+ {"objectID":"f4d4540747aa848513d17bd416fc18287b535713ed1a03fbce8f311b4fe6bdf6","title":"Expected: Context available throughout request chain","url":"/docs/development/testing#expected-context-available-throughout-request-chain","content":"`","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — Providers Validated in CI","lvl2":"Expected: Context available throughout request chain","lvl3":""}},
2384
+ {"objectID":"19720de4c8ed35a547ab099355e2fd5175800e0930b25b1d218940db0baf60f1","title":"Common Issues","url":"/docs/development/testing#common-issues","content":"Empty Responses from Google AI\nCheck model name in .env file\nUse gemini-2.5-pro instead of deprecated models\nVerify API key is valid\nNaN Token Counts\nUsually indicates provider API failure\nCheck model configuration and API keys\nTest with --debug flag for detailed logs\nEnhancement Data Missing\nEnsure using --debug flag to see enhancement output\nVerify enhancement flags are correctly specified\nCheck that provider is working (not falling back)\nCLI Commands Not Found\nRun npm run build:cli to rebuild CLI\nCheck that dist/cli/index.js exists\nVerify Node.js version compatibility","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — Providers Validated in CI","lvl2":"Common Issues","lvl3":""}},
2385
+ {"objectID":"66eea4e65b778a0521203afbc43ff698e78df2a376ad66427ac83c227d77c081","title":"Debug Commands","url":"/docs/development/testing#debug-commands","content":"`bash","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — Providers Validated in CI","lvl2":"Debug Commands","lvl3":""}},
2386
+ {"objectID":"67d89ab41aec29dc1893e5e5fc6f086c5b1b31a95c6b6aa40677d932d03c9594","title":"Comprehensive debug information","url":"/docs/development/testing#comprehensive-debug-information","content":"node ./dist/cli/index.js generate \"debug test\" --provider google-ai --enable-analytics --enable-evaluation --context '{\"debug\":true}' --debug","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — Providers Validated in CI","lvl2":"Comprehensive debug information","lvl3":""}},
2387
+ {"objectID":"d6a5b4654b0448dc17e98a0644da6c0251088520c2b778bd1b2fcf5169c5abd5","title":"Check provider status","url":"/docs/development/testing#check-provider-status","content":"node ./dist/cli/index.js status","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — Providers Validated in CI","lvl2":"Check provider status","lvl3":""}},
2388
+ {"objectID":"da0c759ab4959c695f7ba6d3682869e4b64af5010353fe3dfbcfed51eedec072","title":"Test specific provider","url":"/docs/development/testing#test-specific-provider","content":"node ./dist/cli/index.js generate \"provider test\" --provider openai --debug\n`","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — Providers Validated in CI","lvl2":"Test specific provider","lvl3":""}},
2389
+ {"objectID":"5b50f79d5e15b3b0476213bafa40c4be8a431bdd409be9330906e070ad72fb52","title":"Validation Script Usage","url":"/docs/development/testing#validation-script-usage","content":"`bash","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — Providers Validated in CI","lvl2":"Validation Script Usage","lvl3":""}},
2390
+ {"objectID":"838736a3fa982ded222301f415ca1ecc28a8bd1b718e40878f35ec514a555c23","title":"Run complete validation suite","url":"/docs/development/testing#run-complete-validation-suite","content":"./validate-fixes.sh","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — Providers Validated in CI","lvl2":"Run complete validation suite","lvl3":""}},
2391
+ {"objectID":"489bc8592279699a24f5d95b3f635c1f1f30a8310b3d5d247e1f3109c6228d23","title":"Run specific test categories","url":"/docs/development/testing#run-specific-test-categories","content":"./validate-fixes.sh --cli-only\n./validate-fixes.sh --sdk-only\n./validate-fixes.sh --providers-only\n`","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — Providers Validated in CI","lvl2":"Run specific test categories","lvl3":""}},
2392
+ {"objectID":"b9d3b2dedf68c9fecf0095380d37100ad6f63a1a5b4166af3428764814c5a2e4","title":"CI/CD Integration","url":"/docs/development/testing#cicd-integration","content":"`bash","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — Providers Validated in CI","lvl2":"CI/CD Integration","lvl3":""}},
2393
+ {"objectID":"8914e25e0d42823489948b21e26bde8f722750852c2514cf994cdc6e6b720611","title":"Add to CI pipeline","url":"/docs/development/testing#add-to-ci-pipeline","content":"npm run test\nnpm run build:cli\n./validate-fixes.sh --ci-mode\n`\n\nThis testing guide ensures all enhancement features work correctly while maintaining backward compatibility and providing clear troubleshooting guidance.","hierarchy":{"lvl0":"Development","lvl1":"🧪 NeuroLink Testing Guide — Providers Validated in CI","lvl2":"Add to CI pipeline","lvl3":""}},
2394
2394
  {"objectID":"6e38e7480932000ddf9ecf61ffb29cd5ba0b87e39894e3871a18a9f6f8dc5524","title":"Documentation Versioning","url":"/docs/development/versioning","content":"Documentation Versioning\n\nManaging documentation versions across releases using mike\n\nOverview\n\nNeuroLink documentation uses mike to maintain multiple versions of documentation for different releases. This allows users to view documentation for the specific version they're using.\n\nBenefits\nVersion-specific docs: Users can view docs matching their installed version\nPreserved history: Old versions remain accessible\nEasy switching: Version selector in navigation\nAutomated deployment: Integrate with CI/CD for automatic publishing\n\nSetup\nInstall Dependencies\nVerify Configuration\n\nThe mkdocs.yml already includes mike configuration:\n\nLocal Usage\n\nCreate First Version\n\nDeploy New Version\n\nList All Versions\n\nOutput:\n\nServe Versioned Docs Locally\n\nVisit http://localhost:8000 to test version switching.\n\nDelete a Version\n\nVersion Management Workflow\n\nFor Minor Releases (1.0 → 1.1)\n\nFor Major Releases (1.x → 2.0)\n\nFor Patch Releases (1.0.0 → 1.0.1)\n\nCI/CD Integration\n\nGitHub Actions Workflow\n\nCreate .github/workflows/docs.yml:\n\nAutomatic Version Detection\n\nBest Practices\nVersion Naming\nStable releases: 1.0, 1.1, 2.0 (match npm version)\nPre-releases: 1.0-beta, 2.0-rc1\nDevelopment: dev (always latest from main branch)\nAlias Strategy\nVersion Cleanup\nDocumentation Updates\n\nFor bug fixes to old versions:\n\nAdvanced Configuration\n\nCustom Version Selector\n\nAdd to mkdocs.yml:\n\nVersion Warnings\n\nAdd version-specific warnings in docs/index.md:\n\nTroubleshooting\n\nIssue: \"gh-pages branch not found\"\n\nIssue: Version selector not appearing\n\nVerify mike is installed:\n\nCheck mkdocs.yml configuration:\n\nIssue: Wrong default version\n\nVersion History\n\n| Version | Release Date | Status | Notes |\n| ------- | ---------------- | -------------- | --------------------- |\n| 7.47.x | Current | ✅ Active | Latest features |\n| 7.46.x | 2024-12 | ✅ Active | Previous stable |\n| 7.45.x | 2024-11 | ⚠️ Old | Security updates only |\n| < 7.45 | 2024 and earlier | ❌ Unsupported | Upgrade recommended |\n\nRelated Documentation\nContributing - How to contribute documentation\nDevelopment Setup - Local development environment\nArchitecture - Documentation structure\n\nAdditional Resources\nmike Documentation - Official mike guide\nMkDocs Material Versioning - Material theme versioning\nGitHub Pages - Hosting documentation","hierarchy":{"lvl0":"Development","lvl1":"Documentation Versioning","lvl2":"","lvl3":""}},
2395
2395
  {"objectID":"e93b7f831e0fae0433eba697498889c8d09b69aecf3fbf3eda30c0965c348afa","title":"Documentation Versioning","url":"/docs/development/versioning#documentation-versioning","content":"Managing documentation versions across releases using mike","hierarchy":{"lvl0":"Development","lvl1":"Documentation Versioning","lvl2":"Documentation Versioning","lvl3":""}},
2396
2396
  {"objectID":"9cd60208b8c84605e89660a919d9094bb8345ba244f95c376d65305ad8e80ea3","title":"Overview","url":"/docs/development/versioning#overview","content":"NeuroLink documentation uses mike to maintain multiple versions of documentation for different releases. This allows users to view documentation for the specific version they're using.","hierarchy":{"lvl0":"Development","lvl1":"Documentation Versioning","lvl2":"Overview","lvl3":""}},
@@ -2608,8 +2608,8 @@
2608
2608
  {"objectID":"f283ec766223fa981594075b52d5edf537ebfb630e7ba1343782de0003ea2cd2","title":"Git revert failures","url":"/docs/features/autoresearch#git-revert-failures","content":"AutoResearch requires a clean working tree for reverts. If you have uncommitted changes outside mutable paths, commit or stash them first.","hierarchy":{"lvl0":"Features","lvl1":"AutoResearch - Autonomous AI Experiment Engine","lvl2":"Git revert failures","lvl3":""}},
2609
2609
  {"objectID":"6e1d3efcbcd2958a47bd91d71b60a4f1fb9bae5db434a0f80b84c8c207a80af0","title":"State file corruption","url":"/docs/features/autoresearch#state-file-corruption","content":"If .autoresearch/state.json becomes invalid, use reset to clear it:\n\nThen re-initialize with init. Your git branch and committed experiments are preserved.","hierarchy":{"lvl0":"Features","lvl1":"AutoResearch - Autonomous AI Experiment Engine","lvl2":"State file corruption","lvl3":""}},
2610
2610
  {"objectID":"3f9da31ccb4193e87888801724b536c1b3d42e0265faca0faf47b0632b1283a2","title":"FAQ","url":"/docs/features/autoresearch#faq","content":"Q: What providers work with AutoResearch?\nA: Any provider supported by NeuroLink. The AI needs tool-calling capability, so use models that support function calling (GPT-4o, Claude Sonnet, Gemini Flash/Pro, etc.).\n\nQ: Can I use AutoResearch with Python/ML training scripts?\nA: Yes — that's the primary use case. Set runCommand to your training script and configure the metric pattern to parse your output format.\n\nQ: How does the AI decide what to change?\nA: The AI reads the research program (program.md), the current code, and past experiment results. It proposes changes based on this context, using its understanding of the domain. The quality of your program document directly affects the quality of proposals.\n\nQ: What happens if the experiment crashes?\nA: The crash is detected via non-zero exit code or output parsing. The result is recorded as crash status, the candidate is reverted, and the loop continues with a new proposal.\n\nQ: Can I run AutoResearch on a remote server?\nA: Yes. Use the TaskManager integration with BullMQ (Redis) for scheduled runs. The repo must be accessible on the machine running NeuroLink.\n\nQ: How do I stop a running experiment?\nA: For run-once: Ctrl+C. For scheduled tasks: neurolink autoresearch stop <taskId> or await neurolink.tasks.delete(taskId).\n\nQ: Is there a limit on experiment count?\nA: Set maxExperiments in config or --max-runs in CLI. Without a limit, research continues indefinitely until manually stopped.\n\nQ: Can multiple AutoResearch sessions run on the same repo?\nA: Not recommended. Each session operates on its own git branch, but concurrent filesystem operations on the same repo can conflict. Use separate working directories or git worktrees for parallel sessions.\n\nQ: Does AutoResearch work with structuredOutput?\nA: No. AutoResearch uses tool calling (function calling) which is mutually exclusive with structuredOutput JSON schemas on Gemini providers. This is an API limitation, not a bug.","hierarchy":{"lvl0":"Features","lvl1":"AutoResearch - Autonomous AI Experiment Engine","lvl2":"FAQ","lvl3":""}},
2611
- {"objectID":"b62fe03b51882b07b58c3e35542449b69a1cdfa87de89867ee32b32e4a915257","title":"The model catalogue","url":"/docs/features/classifier-router-catalog","content":"The model catalogue\n\nThe classifier router has always routed\nacross a pool you declare — the set of models you are willing to be billed\nfor is not something NeuroLink can invent. The catalogue is an opt-in way to\nwiden that pool: it builds candidates from the model registry, intersected\nwith the credentials this host actually holds, and hands them to the\njev strategy as one choice\nquestion.\n\nThe registry is 64 models across 7 providers (openai 21, anthropic 19,\nazure 7, ollama 6, bedrock 5, mistral 4, google-ai 2), with 132 aliases on top\nof those 64 ids — not the whole set of 44 providers NeuroLink can call. The\ncatalogue is strictly an addition to a declared pool, never a replacement\nfor one: a host routing over LiteLLM, OpenRouter, an OpenAI-compatible\nendpoint, or anything self-hosted still declares those members by hand, and\nenrichCandidate ranks declared and catalogue members together on one scale\nrather than sorting them into separate buckets. Enabling catalog widens the\npool for the 7 providers it knows; it does not make the other 37 appear.\n\nThe degradation contract. catalog.enabled defaults to unset, and\nbuildModelCatalog() returns [] when it is. Nothing about routing changes\nuntil you turn it on: the declared pool remains the only source of\ncandidates.\n\nA declared pool and an enabled catalog combine: declared members win on a\nduplicate id (or provider/model when no id is set), so a hand-declared\noverride always beats the catalogue's own entry for the same model.\n\nBuilding the routable pool\n\nbuildModelCatalog() starts from every model the registry knows and removes:\ndeprecated models, unless includeDeprecated: true\nproviders this host has no reachable credentials for (see below)\nproviders not in catalog.providers, when that list is set\nmodels whose context window is below catalog.minContextWindow\n\nReachability is deliberately permissive, in two directions. A provider\nwhose credentials resolve through an external chain — Bedrock's AWS default\nchain, Vertex's several auth paths — is kept even though no single env var\nproves it is configured; a local runtime with no credential at all (Ollama, LM\nStudio) is likewise kept. What this actually filters out is the common case: a\ncloud provider with one named API-key env var that is simply unset. The worst\ncase of being too permissive is a candidate that fails at call time and falls\nback, which the router already handles.\n\nWhat is left is capped to maxModels (default 120) by a tier-neutral merit\nscore — tierScore(model, \"moderate\") — so a truncated list, if there is one,\nkeeps the models most likely to be broadly useful rather than whichever the\nregistry happened to list first. The default never truncates today: the\nwhole registry is 64 models, well under the cap. maxModels is a guard\nagainst a future registry that outgrows what a single question can carry, not\na limit anyone is currently hitting.\n\nOne line per model\n\nEach surviving model becomes a ClassifierCandidate and renderCandidate()\nturns it into one terse line for jev's criteria map. The order and the\nprecedence are both deliberate:\ndescription always renders first, when present.\ntiers, when declared, renders next as intended for\ntrivial/simple tasks — the host's most direct statement of where a\n model belongs.\nContext window and capability flags always render. These are facts\n about the model (\"accepts images\", \"128K context\"), not opinions about\n how good it is, so nothing suppresses them.\nDeclared cost/quality replace the registry's own opinion, rather\n than sitting beside it. When either is set, the line adds capability N\n(higher is more capable) / relative cost N (lower is cheaper) and\n suppresses the registry's price, speed bucket, quality bucket, and\n \"strong at …\" use-case scores entirely. When neither is set, the registry\n fills all of that in exactly as it always did.\n\nTwo real renders, from the same model, show the difference:\n\nThis precedence exists because the registry's opinion used to win, and a\nlive measurement showed it silently overriding the host's own routing\nintent. A pool member declared exactly the second line above — an explicit\nstatement that this model is for rote work — but the registry rates the\nsame underlying model highly on general benchmarks, so the old rendering\nappended its own \"high quality\" and \"strong at coding, analysis, reasoning\"\non top. Five registry clauses against one line of host prose, and the host\nlost: a hard concurrency-bug task routed to the cheap model in 5 of 8 runs,\nbecause the model-pick question asks for \"the cheapest one that can still\ncomplete this request correctly\" and had just been told the cheap one was\nhigh quality and strong at reasoning. The declared quality: 2 never\nreached the model at all — only description did. After the fix, the same\n15-prompt suite (trivial/simple/conversational/hard/expert) routed 15/15 to\nthe intended pool member, and the hard prompt went 8/8 to the capable model\n(previously 3/8).\n\nEvery catalogue-b","hierarchy":{"lvl0":"Features","lvl1":"The model catalogue","lvl2":"","lvl3":""}},
2612
- {"objectID":"d64b5f675ca9b47c7f4d4861bb339a5e6948e3d44b307d80ee1ee80cae9dece1","title":"The model catalogue","url":"/docs/features/classifier-router-catalog#the-model-catalogue","content":"The classifier router has always routed\nacross a pool you declare — the set of models you are willing to be billed\nfor is not something NeuroLink can invent. The catalogue is an opt-in way to\nwiden that pool: it builds candidates from the model registry, intersected\nwith the credentials this host actually holds, and hands them to the\njev strategy as one choice\nquestion.\n\nThe registry is 64 models across 7 providers (openai 21, anthropic 19,\nazure 7, ollama 6, bedrock 5, mistral 4, google-ai 2), with 132 aliases on top\nof those 64 ids — not the whole set of 44 providers NeuroLink can call. The\ncatalogue is strictly an addition to a declared pool, never a replacement\nfor one: a host routing over LiteLLM, OpenRouter, an OpenAI-compatible\nendpoint, or anything self-hosted still declares those members by hand, and\nenrichCandidate ranks declared and catalogue members together on one scale\nrather than sorting them into separate buckets. Enabling catalog widens the\npool for the 7 providers it knows; it does not make the other 37 appear.\n\nThe degradation contract. catalog.enabled defaults to unset, and\nbuildModelCatalog() returns [] when it is. Nothing about routing changes\nuntil you turn it on: the declared pool remains the only source of\ncandidates.\n\nA declared pool and an enabled catalog combine: declared members win on a\nduplicate id (or provider/model when no id is set), so a hand-declared\noverride always beats the catalogue's own entry for the same model.","hierarchy":{"lvl0":"Features","lvl1":"The model catalogue","lvl2":"The model catalogue","lvl3":""}},
2611
+ {"objectID":"b62fe03b51882b07b58c3e35542449b69a1cdfa87de89867ee32b32e4a915257","title":"The model catalogue","url":"/docs/features/classifier-router-catalog","content":"The model catalogue\n\nThe classifier router has always routed\nacross a pool you declare — the set of models you are willing to be billed\nfor is not something NeuroLink can invent. The catalogue is an opt-in way to\nwiden that pool: it builds candidates from the model registry, intersected\nwith the credentials this host actually holds, and hands them to the\njev strategy as one choice\nquestion.\n\nThe registry is 64 models across 7 providers (openai 21, anthropic 19,\nazure 7, ollama 6, bedrock 5, mistral 4, google-ai 2), with 132 aliases on top\nof those 64 ids — only a subset of the providers NeuroLink can call. The\ncatalogue is strictly an addition to a declared pool, never a replacement\nfor one: a host routing over LiteLLM, OpenRouter, an OpenAI-compatible\nendpoint, or anything self-hosted still declares those members by hand, and\nenrichCandidate ranks declared and catalogue members together on one scale\nrather than sorting them into separate buckets. Enabling catalog widens the\npool for the 7 providers it knows; it does not make the rest of the\nregistered providers appear.\n\nThe degradation contract. catalog.enabled defaults to unset, and\nbuildModelCatalog() returns [] when it is. Nothing about routing changes\nuntil you turn it on: the declared pool remains the only source of\ncandidates.\n\nA declared pool and an enabled catalog combine: declared members win on a\nduplicate id (or provider/model when no id is set), so a hand-declared\noverride always beats the catalogue's own entry for the same model.\n\nBuilding the routable pool\n\nbuildModelCatalog() starts from every model the registry knows and removes:\ndeprecated models, unless includeDeprecated: true\nproviders this host has no reachable credentials for (see below)\nproviders not in catalog.providers, when that list is set\nmodels whose context window is below catalog.minContextWindow\n\nReachability is deliberately permissive, in two directions. A provider\nwhose credentials resolve through an external chain — Bedrock's AWS default\nchain, Vertex's several auth paths — is kept even though no single env var\nproves it is configured; a local runtime with no credential at all (Ollama, LM\nStudio) is likewise kept. What this actually filters out is the common case: a\ncloud provider with one named API-key env var that is simply unset. The worst\ncase of being too permissive is a candidate that fails at call time and falls\nback, which the router already handles.\n\nWhat is left is capped to maxModels (default 120) by a tier-neutral merit\nscore — tierScore(model, \"moderate\") — so a truncated list, if there is one,\nkeeps the models most likely to be broadly useful rather than whichever the\nregistry happened to list first. The default never truncates today: the\nwhole registry is 64 models, well under the cap. maxModels is a guard\nagainst a future registry that outgrows what a single question can carry, not\na limit anyone is currently hitting.\n\nOne line per model\n\nEach surviving model becomes a ClassifierCandidate and renderCandidate()\nturns it into one terse line for jev's criteria map. The order and the\nprecedence are both deliberate:\ndescription always renders first, when present.\ntiers, when declared, renders next as intended for\ntrivial/simple tasks — the host's most direct statement of where a\n model belongs.\nContext window and capability flags always render. These are facts\n about the model (\"accepts images\", \"128K context\"), not opinions about\n how good it is, so nothing suppresses them.\nDeclared cost/quality replace the registry's own opinion, rather\n than sitting beside it. When either is set, the line adds capability N\n(higher is more capable) / relative cost N (lower is cheaper) and\n suppresses the registry's price, speed bucket, quality bucket, and\n \"strong at …\" use-case scores entirely. When neither is set, the registry\n fills all of that in exactly as it always did.\n\nTwo real renders, from the same model, show the difference:\n\nThis precedence exists because the registry's opinion used to win, and a\nlive measurement showed it silently overriding the host's own routing\nintent. A pool member declared exactly the second line above — an explicit\nstatement that this model is for rote work — but the registry rates the\nsame underlying model highly on general benchmarks, so the old rendering\nappended its own \"high quality\" and \"strong at coding, analysis, reasoning\"\non top. Five registry clauses against one line of host prose, and the host\nlost: a hard concurrency-bug task routed to the cheap model in 5 of 8 runs,\nbecause the model-pick question asks for \"the cheapest one that can still\ncomplete this request correctly\" and had just been told the cheap one was\nhigh quality and strong at reasoning. The declared quality: 2 never\nreached the model at all — only description did. After the fix, the same\n15-prompt suite (trivial/simple/conversational/hard/expert) routed 15/15 to\nthe intended pool member, and the hard prompt went 8/8 to the capable model\n(previously 3/8","hierarchy":{"lvl0":"Features","lvl1":"The model catalogue","lvl2":"","lvl3":""}},
2612
+ {"objectID":"d64b5f675ca9b47c7f4d4861bb339a5e6948e3d44b307d80ee1ee80cae9dece1","title":"The model catalogue","url":"/docs/features/classifier-router-catalog#the-model-catalogue","content":"The classifier router has always routed\nacross a pool you declare — the set of models you are willing to be billed\nfor is not something NeuroLink can invent. The catalogue is an opt-in way to\nwiden that pool: it builds candidates from the model registry, intersected\nwith the credentials this host actually holds, and hands them to the\njev strategy as one choice\nquestion.\n\nThe registry is 64 models across 7 providers (openai 21, anthropic 19,\nazure 7, ollama 6, bedrock 5, mistral 4, google-ai 2), with 132 aliases on top\nof those 64 ids — only a subset of the providers NeuroLink can call. The\ncatalogue is strictly an addition to a declared pool, never a replacement\nfor one: a host routing over LiteLLM, OpenRouter, an OpenAI-compatible\nendpoint, or anything self-hosted still declares those members by hand, and\nenrichCandidate ranks declared and catalogue members together on one scale\nrather than sorting them into separate buckets. Enabling catalog widens the\npool for the 7 providers it knows; it does not make the rest of the\nregistered providers appear.\n\nThe degradation contract. catalog.enabled defaults to unset, and\nbuildModelCatalog() returns [] when it is. Nothing about routing changes\nuntil you turn it on: the declared pool remains the only source of\ncandidates.\n\nA declared pool and an enabled catalog combine: declared members win on a\nduplicate id (or provider/model when no id is set), so a hand-declared\noverride always beats the catalogue's own entry for the same model.","hierarchy":{"lvl0":"Features","lvl1":"The model catalogue","lvl2":"The model catalogue","lvl3":""}},
2613
2613
  {"objectID":"071858e4fe13a1d63ea7f7c9dc52e1d185fcca54e327ec105d54cc20fea25543","title":"Building the routable pool","url":"/docs/features/classifier-router-catalog#building-the-routable-pool","content":"buildModelCatalog() starts from every model the registry knows and removes:\ndeprecated models, unless includeDeprecated: true\nproviders this host has no reachable credentials for (see below)\nproviders not in catalog.providers, when that list is set\nmodels whose context window is below catalog.minContextWindow\n\nReachability is deliberately permissive, in two directions. A provider\nwhose credentials resolve through an external chain — Bedrock's AWS default\nchain, Vertex's several auth paths — is kept even though no single env var\nproves it is configured; a local runtime with no credential at all (Ollama, LM\nStudio) is likewise kept. What this actually filters out is the common case: a\ncloud provider with one named API-key env var that is simply unset. The worst\ncase of being too permissive is a candidate that fails at call time and falls\nback, which the router already handles.\n\nWhat is left is capped to maxModels (default 120) by a tier-neutral merit\nscore — tierScore(model, \"moderate\") — so a truncated list, if there is one,\nkeeps the models most likely to be broadly useful rather than whichever the\nregistry happened to list first. The default never truncates today: the\nwhole registry is 64 models, well under the cap. maxModels is a guard\nagainst a future registry that outgrows what a single question can carry, not\na limit anyone is currently hitting.","hierarchy":{"lvl0":"Features","lvl1":"The model catalogue","lvl2":"Building the routable pool","lvl3":""}},
2614
2614
  {"objectID":"2cad48473fb9c200377fe1a4b2f1e1feea861afe5ae7ee9a53caf6cbe313cc4a","title":"One line per model","url":"/docs/features/classifier-router-catalog#one-line-per-model","content":"Each surviving model becomes a ClassifierCandidate and renderCandidate()\nturns it into one terse line for jev's criteria map. The order and the\nprecedence are both deliberate:\ndescription always renders first, when present.\ntiers, when declared, renders next as intended for\ntrivial/simple tasks — the host's most direct statement of where a\n model belongs.\nContext window and capability flags always render. These are facts\n about the model (\"accepts images\", \"128K context\"), not opinions about\n how good it is, so nothing suppresses them.\nDeclared cost/quality replace the registry's own opinion, rather\n than sitting beside it. When either is set, the line adds capability N\n(higher is more capable) / relative cost N (lower is cheaper) and\n suppresses the registry's price, speed bucket, quality bucket, and\n \"strong at …\" use-case scores entirely. When neither is set, the registry\n fills all of that in exactly as it always did.\n\nTwo real renders, from the same model, show the difference:\n\n`","hierarchy":{"lvl0":"Features","lvl1":"The model catalogue","lvl2":"One line per model","lvl3":""}},
2615
2615
  {"objectID":"ed0bc85ff16693c3ce8715b098e802cd31abaf513fd4a5e1ec8305d00a5e44a9","title":"No declared cost/quality — the registry fills in:","url":"/docs/features/classifier-router-catalog#no-declared-costquality-the-registry-fills-in","content":"GPT-4 Omni Mini; 128K context; 0.01c per 1K in; fast speed; high quality; supports vision, tools, reasoning, code, multimodal; strong at coding, analysis, conversation, reasoning, translation, summarization","hierarchy":{"lvl0":"Features","lvl1":"The model catalogue","lvl2":"No declared cost/quality — the registry fills in:","lvl3":""}},
@@ -3296,7 +3296,7 @@
3296
3296
  {"objectID":"f5a8b702e8237dd44e4c2afa5b0fe4b35914c8fbb7d3db35d767d62d5d59735d","title":"Data Retention","url":"/docs/features/conversation-history#data-retention","content":"Set TTL on sessions - Auto-delete old conversations\n\n`\nArchive regularly - Export to long-term storage","hierarchy":{"lvl0":"Features","lvl1":"Redis Conversation History Export","lvl2":"Data Retention","lvl3":""}},
3297
3297
  {"objectID":"8c905694c375e261af4d54a36b967993336d56d93c3c95c2d81c0eb97a9a810d","title":"Related Features","url":"/docs/features/conversation-history#related-features","content":"CLI Loop Sessions - Persistent conversation mode\nConversation Memory - Full memory system docs\nAnalytics Integration - Track conversation metrics","hierarchy":{"lvl0":"Features","lvl1":"Redis Conversation History Export","lvl2":"Related Features","lvl3":""}},
3298
3298
  {"objectID":"1f4d41e856ac4f9383479d49927a679708395521350a6d1225814a09b491b2ab","title":"Migration Notes","url":"/docs/features/conversation-history#migration-notes","content":"If upgrading from in-memory to Redis-backed storage:\nEnable Redis in configuration\nExisting in-memory sessions will be lost (not migrated)\nNew sessions automatically stored in Redis\nExport functionality only works with Redis store\nConsider gradual rollout with feature flag\n\nFor complete conversation memory system documentation, see conversation-memory.md.","hierarchy":{"lvl0":"Features","lvl1":"Redis Conversation History Export","lvl2":"Migration Notes","lvl3":""}},
3299
- {"objectID":"b2470c9e1d7e3606393dd20eff3c0c67db2dd4286351faae35b7df97b72b2989","title":"Credential Validation","url":"/docs/features/credential-validation","content":"Added in v9.59.0, NeuroLink ships a typed ModelAccessDeniedError and a pre-flight sdk.checkCredentials() API. Together they let you validate provider credentials before wiring them into a long-running flow — useful for setup wizards, health checks, and surfacing actionable errors to users instead of opaque HTTP 401/403s.\n\nsdk.checkCredentials()\n\nProbes a single provider with a real 1-token generation call (maxTokens: 16, tools disabled) and returns a structured status. The signature is:\n\nImplementation lives in src/lib/neurolink.ts.\n\nBasic usage\n\nProbing a specific model\n\nStatus reference\n\n| status | Meaning |\n| ----------- | --------------------------------------------------------------------- |\n| \"ok\" | Credentials valid; the probe succeeded. |\n| \"missing\" | Required env vars / per-call credentials are not set. |\n| \"expired\" | OAuth token / temporary credentials have expired. |\n| \"denied\" | Model access denied — see ModelAccessDeniedError below. |\n| \"network\" | Network failure reaching the provider (DNS, TLS, timeout). |\n| \"unknown\" | An unclassified provider error; inspect detail for the raw message. |\n\ndetail is a short human-readable message suitable for surfacing in a setup UI or log line.\n\nProbing several providers\n\ncheckCredentials() validates one provider per call. To check multiple providers, run them concurrently:\n\nModelAccessDeniedError\n\nWhen a generate/stream call hits a model-access policy (e.g. the team is not allowed to use a particular model, or a tier-restricted model is requested), NeuroLink throws a typed ModelAccessDeniedError instead of a generic Error. This makes it catchable by the providerFallback orchestrator and lets you produce actionable UI.\n\nError shape\n\nThe exact definition lives in src/lib/types/errors.ts.\n\nCLI\n\nNeuroLink does not ship a dedicated check-credentials CLI command. The closest operator-facing command is:\n\nFor programmatic credential validation in scripts, call the SDK directly:\n\nCombining with Provider Fallback\n\nThe most common pattern: validate at boot, surface configuration errors to operators, then let runtime requests use providerFallback for the model-access denial cases that survive validation.\n\nSetup Wizard Pattern\n\nPer-call credential overrides are also supported on generate() / stream() — see Per-Request Credentials.\n\nRelated\nProvider Fallback — catch ModelAccessDeniedError and switch to an allowed model\nPer-Request Credentials — pass credentials per-call or per-instance\nProvider Setup — initial configuration for all 44 providers\nTroubleshooting — error reference and resolution guide","hierarchy":{"lvl0":"Features","lvl1":"Credential Validation","lvl2":"","lvl3":""}},
3299
+ {"objectID":"b2470c9e1d7e3606393dd20eff3c0c67db2dd4286351faae35b7df97b72b2989","title":"Credential Validation","url":"/docs/features/credential-validation","content":"Added in v9.59.0, NeuroLink ships a typed ModelAccessDeniedError and a pre-flight sdk.checkCredentials() API. Together they let you validate provider credentials before wiring them into a long-running flow — useful for setup wizards, health checks, and surfacing actionable errors to users instead of opaque HTTP 401/403s.\n\nsdk.checkCredentials()\n\nProbes a single provider with a real 1-token generation call (maxTokens: 16, tools disabled) and returns a structured status. The signature is:\n\nImplementation lives in src/lib/neurolink.ts.\n\nBasic usage\n\nProbing a specific model\n\nStatus reference\n\n| status | Meaning |\n| ----------- | --------------------------------------------------------------------- |\n| \"ok\" | Credentials valid; the probe succeeded. |\n| \"missing\" | Required env vars / per-call credentials are not set. |\n| \"expired\" | OAuth token / temporary credentials have expired. |\n| \"denied\" | Model access denied — see ModelAccessDeniedError below. |\n| \"network\" | Network failure reaching the provider (DNS, TLS, timeout). |\n| \"unknown\" | An unclassified provider error; inspect detail for the raw message. |\n\ndetail is a short human-readable message suitable for surfacing in a setup UI or log line.\n\nProbing several providers\n\ncheckCredentials() validates one provider per call. To check multiple providers, run them concurrently:\n\nModelAccessDeniedError\n\nWhen a generate/stream call hits a model-access policy (e.g. the team is not allowed to use a particular model, or a tier-restricted model is requested), NeuroLink throws a typed ModelAccessDeniedError instead of a generic Error. This makes it catchable by the providerFallback orchestrator and lets you produce actionable UI.\n\nError shape\n\nThe exact definition lives in src/lib/types/errors.ts.\n\nCLI\n\nNeuroLink does not ship a dedicated check-credentials CLI command. The closest operator-facing command is:\n\nFor programmatic credential validation in scripts, call the SDK directly:\n\nCombining with Provider Fallback\n\nThe most common pattern: validate at boot, surface configuration errors to operators, then let runtime requests use providerFallback for the model-access denial cases that survive validation.\n\nSetup Wizard Pattern\n\nPer-call credential overrides are also supported on generate() / stream() — see Per-Request Credentials.\n\nRelated\nProvider Fallback — catch ModelAccessDeniedError and switch to an allowed model\nPer-Request Credentials — pass credentials per-call or per-instance\nProvider Setup — initial configuration for supported providers\nTroubleshooting — error reference and resolution guide","hierarchy":{"lvl0":"Features","lvl1":"Credential Validation","lvl2":"","lvl3":""}},
3300
3300
  {"objectID":"46449341ad79be4d2645e786dd7bd9c493acc4851ef0e6582435a5f053c6e789","title":"sdk.checkCredentials()","url":"/docs/features/credential-validation#sdkcheckcredentials","content":"Probes a single provider with a real 1-token generation call (maxTokens: 16, tools disabled) and returns a structured status. The signature is:\n\nImplementation lives in src/lib/neurolink.ts.","hierarchy":{"lvl0":"Features","lvl1":"Credential Validation","lvl2":"sdk.checkCredentials()","lvl3":""}},
3301
3301
  {"objectID":"187bc45a1141451913afe4ba39720fd9f5a222b7ee69cd6f1f37ce8c7246c813","title":"Status reference","url":"/docs/features/credential-validation#status-reference","content":"| status | Meaning |\n| ----------- | --------------------------------------------------------------------- |\n| \"ok\" | Credentials valid; the probe succeeded. |\n| \"missing\" | Required env vars / per-call credentials are not set. |\n| \"expired\" | OAuth token / temporary credentials have expired. |\n| \"denied\" | Model access denied — see ModelAccessDeniedError below. |\n| \"network\" | Network failure reaching the provider (DNS, TLS, timeout). |\n| \"unknown\" | An unclassified provider error; inspect detail for the raw message. |\n\ndetail is a short human-readable message suitable for surfacing in a setup UI or log line.","hierarchy":{"lvl0":"Features","lvl1":"Credential Validation","lvl2":"Status reference","lvl3":""}},
3302
3302
  {"objectID":"8c297800d157544564db0f6c8fb6e86b59ed703da1e3f089cc9117988944c911","title":"Probing several providers","url":"/docs/features/credential-validation#probing-several-providers","content":"checkCredentials() validates one provider per call. To check multiple providers, run them concurrently:","hierarchy":{"lvl0":"Features","lvl1":"Credential Validation","lvl2":"Probing several providers","lvl3":""}},
@@ -3306,10 +3306,10 @@
3306
3306
  {"objectID":"46bf176f46254d8491bfe69cc68ccb606df5782f8cfccf6cad3d54b6c3da7897","title":"Check provider connectivity / status","url":"/docs/features/credential-validation#check-provider-connectivity-status","content":"npx @juspay/neurolink status\ntypescript\nconst r = await neurolink.checkCredentials({ provider });\nprocess.exit(r.status === \"ok\" ? 0 : 1);\n`","hierarchy":{"lvl0":"Features","lvl1":"Credential Validation","lvl2":"Check provider connectivity / status","lvl3":""}},
3307
3307
  {"objectID":"8c51b1c7b3c37d1429ac1f0ae431c072cb364c1eebb1a9c634115a17ddaafd4d","title":"Combining with Provider Fallback","url":"/docs/features/credential-validation#combining-with-provider-fallback","content":"The most common pattern: validate at boot, surface configuration errors to operators, then let runtime requests use providerFallback for the model-access denial cases that survive validation.","hierarchy":{"lvl0":"Features","lvl1":"Credential Validation","lvl2":"Combining with Provider Fallback","lvl3":""}},
3308
3308
  {"objectID":"563c0e0700562c72770c62d5f532e84fc3ee56570cbf15ac9c6f43228041b77e","title":"Setup Wizard Pattern","url":"/docs/features/credential-validation#setup-wizard-pattern","content":"Per-call credential overrides are also supported on generate() / stream() — see Per-Request Credentials.","hierarchy":{"lvl0":"Features","lvl1":"Credential Validation","lvl2":"Setup Wizard Pattern","lvl3":""}},
3309
- {"objectID":"e9c0ee2866d85055fb3a31d68362756a3fde836cb8ef78eb471ccc19c5c62443","title":"Related","url":"/docs/features/credential-validation#related","content":"Provider Fallback — catch ModelAccessDeniedError and switch to an allowed model\nPer-Request Credentials — pass credentials per-call or per-instance\nProvider Setup — initial configuration for all 44 providers\nTroubleshooting — error reference and resolution guide","hierarchy":{"lvl0":"Features","lvl1":"Credential Validation","lvl2":"Related","lvl3":""}},
3310
- {"objectID":"0be17b4592b7a6e40fdc4145e101660a63d7b276620da4433ada9e9ffd24d7ed","title":"CSV File Support","url":"/docs/features/csv-support","content":"CSV File Support\n\nNeuroLink provides seamless CSV file support as a multimodal input type - attach CSV files directly to your AI prompts for data analysis, insights, and processing.\n\nOverview\n\nCSV support in NeuroLink works just like image support - it's a multimodal input that gets automatically processed and injected into your prompts. The system:\nAuto-detects CSV files using FileDetector (magic bytes, MIME types, extensions, content heuristics)\nParses CSV data using a streaming parser for memory efficiency\nFormats CSV content into LLM-optimized text (markdown/json)\nInjects formatted CSV data into your prompt text\nWorks with ALL AI providers (not limited to vision models)\n\nDelimiter auto-detection: the delimiter is detected from the content (comma, tab / .tsv, semicolon, or pipe) — so tab- and semicolon-separated files parse into the correct columns instead of collapsing into one. Comma remains the default on ambiguity, and parsing is RFC-4180 quote-aware (a delimiter inside a \"…\" quoted field, e.g. \"Smith, John\", does not split the field). The detected delimiter is reported in metadata.detectedDelimiter.\n\nQuick Start\n\nSDK Usage\n\nCLI Usage\n\nAPI Reference\n\nGenerateOptions\n\nCSV Input Types\n\nCSV files can be provided as:\nFile paths: \"./data.csv\" or \"/absolute/path/data.csv\"\nURLs: \"https://example.com/data.csv\"\nBuffers: Buffer.from(\"name,age\\nAlice,30\")\nData URIs: \"data:text/csv;base64,...\"\n\nCSV Processing Options\n\nmaxRows\n\nLimit the number of rows processed (default: 1000). Useful for large datasets.\n\nformatStyle\n\nControl how CSV data is formatted for the LLM:\nraw (default, RECOMMENDED): Original CSV format with proper escaping\nBest for large files and minimal token usage\nPreserves original structure\nHandles commas, quotes, newlines correctly\nFile size stays minimal (63KB stays 63KB, not 199KB)\njson: JSON array format\nBest for structured data processing\nEasy to parse programmatically\nHigher token usage (can expand 3x for large files)\nmarkdown: Markdown table format\nBest for small datasets (\\ (#384)\n- **Token limits**: Large CSV files may exceed provider token limits\n- **Streaming**: CSV content is parsed and formatted before sending (not streamed to LLM)\n\n## Error Handling\n\n\n\n## Related Features\n\n- **[Office Documents](/docs/features/office-documents)**: DOCX, PPTX, XLSX processing\n- **[PDF Support](/docs/features/pdf-support)**: PDF document processing\n- **Image Support**: Similar multimodal input for images\n- **File Detection**: Auto-detect file types with confidence scores\n- **Memory Efficient**: Streaming parser for large files\n- **Provider Agnostic**: Works with all AI providers\n- **CLI Integration**: Full CLI support with options\n\n## Summary\n\n- CSV support is **multimodal input** (like images)\n- Use csvFiles array or files array (auto-detect)\n- Customize with csvOptions (maxRows, formatStyle, includeHeaders)\n- Works with **ALL providers** (not just vision models)\n- **Memory efficient** streaming parser\n- CLI support with --csv, --file, --csv-max-rows, --csv-format`\nOnly types exposed from package (not classes)","hierarchy":{"lvl0":"Features","lvl1":"CSV File Support","lvl2":"","lvl3":""}},
3309
+ {"objectID":"e9c0ee2866d85055fb3a31d68362756a3fde836cb8ef78eb471ccc19c5c62443","title":"Related","url":"/docs/features/credential-validation#related","content":"Provider Fallback — catch ModelAccessDeniedError and switch to an allowed model\nPer-Request Credentials — pass credentials per-call or per-instance\nProvider Setup — initial configuration for supported providers\nTroubleshooting — error reference and resolution guide","hierarchy":{"lvl0":"Features","lvl1":"Credential Validation","lvl2":"Related","lvl3":""}},
3310
+ {"objectID":"0be17b4592b7a6e40fdc4145e101660a63d7b276620da4433ada9e9ffd24d7ed","title":"CSV File Support","url":"/docs/features/csv-support","content":"CSV File Support\n\nNeuroLink provides seamless CSV file support as a multimodal input type - attach CSV files directly to your AI prompts for data analysis, insights, and processing.\n\nOverview\n\nCSV support in NeuroLink works just like image support - it's a multimodal input that gets automatically processed and injected into your prompts. The system:\nAuto-detects CSV files using FileDetector (magic bytes, MIME types, extensions, content heuristics)\nParses CSV data using a streaming parser for memory efficiency\nFormats CSV content into LLM-optimized text (markdown/json)\nInjects formatted CSV data into your prompt text\nWorks across supported AI providers (not limited to vision models)\n\nDelimiter auto-detection: the delimiter is detected from the content (comma, tab / .tsv, semicolon, or pipe) — so tab- and semicolon-separated files parse into the correct columns instead of collapsing into one. Comma remains the default on ambiguity, and parsing is RFC-4180 quote-aware (a delimiter inside a \"…\" quoted field, e.g. \"Smith, John\", does not split the field). The detected delimiter is reported in metadata.detectedDelimiter.\n\nQuick Start\n\nSDK Usage\n\nCLI Usage\n\nAPI Reference\n\nGenerateOptions\n\nCSV Input Types\n\nCSV files can be provided as:\nFile paths: \"./data.csv\" or \"/absolute/path/data.csv\"\nURLs: \"https://example.com/data.csv\"\nBuffers: Buffer.from(\"name,age\\nAlice,30\")\nData URIs: \"data:text/csv;base64,...\"\n\nCSV Processing Options\n\nmaxRows\n\nLimit the number of rows processed (default: 1000). Useful for large datasets.\n\nformatStyle\n\nControl how CSV data is formatted for the LLM:\nraw (default, RECOMMENDED): Original CSV format with proper escaping\nBest for large files and minimal token usage\nPreserves original structure\nHandles commas, quotes, newlines correctly\nFile size stays minimal (63KB stays 63KB, not 199KB)\njson: JSON array format\nBest for structured data processing\nEasy to parse programmatically\nHigher token usage (can expand 3x for large files)\nmarkdown: Markdown table format\nBest for small datasets (\\ (#384)\n- **Token limits**: Large CSV files may exceed provider token limits\n- **Streaming**: CSV content is parsed and formatted before sending (not streamed to LLM)\n\n## Error Handling\n\n\n\n## Related Features\n\n- **[Office Documents](/docs/features/office-documents)**: DOCX, PPTX, XLSX processing\n- **[PDF Support](/docs/features/pdf-support)**: PDF document processing\n- **Image Support**: Similar multimodal input for images\n- **File Detection**: Auto-detect file types with confidence scores\n- **Memory Efficient**: Streaming parser for large files\n- **Provider Agnostic**: Works across supported providers\n- **CLI Integration**: Full CLI support with options\n\n## Summary\n\n- CSV support is **multimodal input** (like images)\n- Use csvFiles array or files array (auto-detect)\n- Customize with csvOptions (maxRows, formatStyle, includeHeaders)\n- Works across **supported providers** (not just vision models)\n- **Memory efficient** streaming parser\n- CLI support with --csv, --file, --csv-max-rows, --csv-format`\nOnly types exposed from package (not classes)","hierarchy":{"lvl0":"Features","lvl1":"CSV File Support","lvl2":"","lvl3":""}},
3311
3311
  {"objectID":"50558bfd6450513e97d26d0c5dec26864d0a62867d9822b5b8d676671c120203","title":"CSV File Support","url":"/docs/features/csv-support#csv-file-support","content":"NeuroLink provides seamless CSV file support as a multimodal input type - attach CSV files directly to your AI prompts for data analysis, insights, and processing.","hierarchy":{"lvl0":"Features","lvl1":"CSV File Support","lvl2":"CSV File Support","lvl3":""}},
3312
- {"objectID":"0b2183adf9e9cdf34c79d946245c47fa211c5973595f4ffa43ca19654c7e5183","title":"Overview","url":"/docs/features/csv-support#overview","content":"CSV support in NeuroLink works just like image support - it's a multimodal input that gets automatically processed and injected into your prompts. The system:\nAuto-detects CSV files using FileDetector (magic bytes, MIME types, extensions, content heuristics)\nParses CSV data using a streaming parser for memory efficiency\nFormats CSV content into LLM-optimized text (markdown/json)\nInjects formatted CSV data into your prompt text\nWorks with ALL AI providers (not limited to vision models)\n\nDelimiter auto-detection: the delimiter is detected from the content (comma, tab / .tsv, semicolon, or pipe) — so tab- and semicolon-separated files parse into the correct columns instead of collapsing into one. Comma remains the default on ambiguity, and parsing is RFC-4180 quote-aware (a delimiter inside a \"…\" quoted field, e.g. \"Smith, John\", does not split the field). The detected delimiter is reported in metadata.detectedDelimiter.","hierarchy":{"lvl0":"Features","lvl1":"CSV File Support","lvl2":"Overview","lvl3":""}},
3312
+ {"objectID":"0b2183adf9e9cdf34c79d946245c47fa211c5973595f4ffa43ca19654c7e5183","title":"Overview","url":"/docs/features/csv-support#overview","content":"CSV support in NeuroLink works just like image support - it's a multimodal input that gets automatically processed and injected into your prompts. The system:\nAuto-detects CSV files using FileDetector (magic bytes, MIME types, extensions, content heuristics)\nParses CSV data using a streaming parser for memory efficiency\nFormats CSV content into LLM-optimized text (markdown/json)\nInjects formatted CSV data into your prompt text\nWorks across supported AI providers (not limited to vision models)\n\nDelimiter auto-detection: the delimiter is detected from the content (comma, tab / .tsv, semicolon, or pipe) — so tab- and semicolon-separated files parse into the correct columns instead of collapsing into one. Comma remains the default on ambiguity, and parsing is RFC-4180 quote-aware (a delimiter inside a \"…\" quoted field, e.g. \"Smith, John\", does not split the field). The detected delimiter is reported in metadata.detectedDelimiter.","hierarchy":{"lvl0":"Features","lvl1":"CSV File Support","lvl2":"Overview","lvl3":""}},
3313
3313
  {"objectID":"d92dfaa87c1e409e260c02d2fbef266f735e9d8a274e61b42c32619031875928","title":"CLI Usage","url":"/docs/features/csv-support#cli-usage","content":"`bash","hierarchy":{"lvl0":"Features","lvl1":"CSV File Support","lvl2":"CLI Usage","lvl3":""}},
3314
3314
  {"objectID":"561deacc9447cbcbe6d0aaa718e672c272200b3317761b70dc2901799bbe387a","title":"Attach CSV files to your prompt","url":"/docs/features/csv-support#attach-csv-files-to-your-prompt","content":"neurolink generate \"Analyze this sales data\" --csv sales.csv","hierarchy":{"lvl0":"Features","lvl1":"CSV File Support","lvl2":"Attach CSV files to your prompt","lvl3":""}},
3315
3315
  {"objectID":"f9c0b14b57f208f3acdab9bd2cf17030fbe344f52dfed7892dc02133bf4dff6e","title":"Multiple CSV files","url":"/docs/features/csv-support#multiple-csv-files","content":"neurolink generate \"Compare these datasets\" --csv q1.csv --csv q2.csv","hierarchy":{"lvl0":"Features","lvl1":"CSV File Support","lvl2":"Multiple CSV files","lvl3":""}},
@@ -3335,8 +3335,8 @@
3335
3335
  {"objectID":"4f1c95c8681e4d6c09ce1c766dd656e93ac9d46eb9c260b07b52f403cbe9ba05","title":"4. Provide Clear Instructions","url":"/docs/features/csv-support#4-provide-clear-instructions","content":"Give the AI clear instructions about what to analyze:","hierarchy":{"lvl0":"Features","lvl1":"CSV File Support","lvl2":"4. Provide Clear Instructions","lvl3":""}},
3336
3336
  {"objectID":"3a7bb8857dd8b7fd19c3b7d2cd58af0ba2ebc1e4e417cab6d595670be0650f45","title":"5. Use Auto-Detection","url":"/docs/features/csv-support#5-use-auto-detection","content":"Let FileDetector handle mixed file types:","hierarchy":{"lvl0":"Features","lvl1":"CSV File Support","lvl2":"5. Use Auto-Detection","lvl3":""}},
3337
3337
  {"objectID":"a78bcf758e0d2cbf2d2e9ad39bb04c851848618fb55718447904be31d350055b","title":"Limitations","url":"/docs/features/csv-support#limitations","content":"Max file size: 10MB by default (configurable)\nMax rows: 1000 by default (configurable)\nEncoding: auto-detected via BOM + chardet (UTF-8 / UTF-16 / Windows-1252 / Latin-1 …), or forced with encoding (#362)\nPer-row size: a single row is capped at 10MB to bound memory; larger rows fail fast with a clear error (#371)\nParse timeout: parsing is time-bounded (30s strings / 5min files); on timeout partial rows are returned with metadata.parseTimedOut (#379)\nRow shape: parsed rows are validated to be string-keyed objects with string values; a malformed row aborts the parse with [CSVProcessor] Invalid CSV row <n> (#384)\nToken limits: Large CSV files may exceed provider token limits\nStreaming: CSV content is parsed and formatted before sending (not streamed to LLM)","hierarchy":{"lvl0":"Features","lvl1":"CSV File Support","lvl2":"Limitations","lvl3":""}},
3338
- {"objectID":"1e48831d1c4fc775af2633d0340bdeb3d11c96abc213cbdd814a53d14ce500df","title":"Related Features","url":"/docs/features/csv-support#related-features","content":"Office Documents: DOCX, PPTX, XLSX processing\nPDF Support: PDF document processing\nImage Support: Similar multimodal input for images\nFile Detection: Auto-detect file types with confidence scores\nMemory Efficient: Streaming parser for large files\nProvider Agnostic: Works with all AI providers\nCLI Integration: Full CLI support with options","hierarchy":{"lvl0":"Features","lvl1":"CSV File Support","lvl2":"Related Features","lvl3":""}},
3339
- {"objectID":"19734b9ffaeb8376dfcebd944730a4cedae77bc1e7ed769733b8b71b1758c421","title":"Summary","url":"/docs/features/csv-support#summary","content":"CSV support is multimodal input (like images)\nUse csvFiles array or files array (auto-detect)\nCustomize with csvOptions (maxRows, formatStyle, includeHeaders)\nWorks with ALL providers (not just vision models)\nMemory efficient streaming parser\nCLI support with --csv, --file, --csv-max-rows, --csv-format\nOnly types exposed from package (not classes)","hierarchy":{"lvl0":"Features","lvl1":"CSV File Support","lvl2":"Summary","lvl3":""}},
3338
+ {"objectID":"1e48831d1c4fc775af2633d0340bdeb3d11c96abc213cbdd814a53d14ce500df","title":"Related Features","url":"/docs/features/csv-support#related-features","content":"Office Documents: DOCX, PPTX, XLSX processing\nPDF Support: PDF document processing\nImage Support: Similar multimodal input for images\nFile Detection: Auto-detect file types with confidence scores\nMemory Efficient: Streaming parser for large files\nProvider Agnostic: Works across supported providers\nCLI Integration: Full CLI support with options","hierarchy":{"lvl0":"Features","lvl1":"CSV File Support","lvl2":"Related Features","lvl3":""}},
3339
+ {"objectID":"19734b9ffaeb8376dfcebd944730a4cedae77bc1e7ed769733b8b71b1758c421","title":"Summary","url":"/docs/features/csv-support#summary","content":"CSV support is multimodal input (like images)\nUse csvFiles array or files array (auto-detect)\nCustomize with csvOptions (maxRows, formatStyle, includeHeaders)\nWorks across supported providers (not just vision models)\nMemory efficient streaming parser\nCLI support with --csv, --file, --csv-max-rows, --csv-format\nOnly types exposed from package (not classes)","hierarchy":{"lvl0":"Features","lvl1":"CSV File Support","lvl2":"Summary","lvl3":""}},
3340
3340
  {"objectID":"fce0b532226adb069bbeb5459dc5e4ec28037617ca805845768d918653ddbfd5","title":"The `decide` inference type","url":"/docs/features/decide-inference-type","content":"The decide inference type\n\nDeep-dive: generate, stream, decide: a third inference type for NeuroLink —\nwhy this shipped as a provider rather than a subsystem, the five call sites, and the four\ntransport bugs found by adding the Vercel AI Gateway (two of which produced plausible output).\n\nNeuroLink recognises three inference types. Two of them produce text:\n\n| Type | Call | Produces |\n| ------------ | ------------------------ | ------------------------------------------ |\n| generate | neurolink.generate() | text |\n| stream | neurolink.stream() | text, incrementally |\n| decide | neurolink.decide() | typed, calibrated judgements — no text |\n\nA decision model takes one state plus a map of named, typed questions and\nreturns one typed answer per question, all evaluated in a single parallel pass.\nThere is no text anywhere in the response, so nothing has to be parsed back out\nof prose. TypeSafe's Jev was the first such model; Convai Innovations' open-weights\nLaya is the second.\n\nThis is not neurolink.evaluate(), which scores an\nalready-generated response with RAGAS scorers. Different feature, different\nword.\n\nThe three primitives\n\n| Type | Question | Answer fields |\n| --------- | ------------------------------ | ------------------------------------------------ |\n| boolean | Is this statement true? | probability (0–1) — no confidence |\n| choice | Which option from this set? | choice, probabilities, confidence |\n| score | Rate against an ordered rubric | score, legend, probabilities, confidence |\n\nAll three mix freely in one call.\n\nVocabulary note. TypeSafe calls the yes/no primitive a noul and answers\nit in a field of the same name. The Vercel AI SDK and Pydantic AI both renamed\nthat to boolean/probability when exposing it, and NeuroLink follows them —\nthe vendor's spelling is translated inside TypeSafeProvider, so a second\ndecision provider slots in without changing any call site.\n\nConfidence is not probability\n\nprobabilities says what the model thinks. confidence says _whether you\nshould act on it_. It is calibrated — derived from the distribution, not\nself-reported — which is what makes it usable as a gate.\n\nCalibration is a property of groups of answers, not a promise about any\none. Across many answers, those scored 0.8 are right about 80% of the time.\nIt does not mean a specific 0.8 answer is right.\n\nA boolean carries no confidence of its own. Use decisionBooleanConfidence(p)\n— distance from a coin flip, so 0.5 → 0 and 0/1 → 1. Note also that a boolean\nand an equivalent two-option choice are not guaranteed to agree, and\ncomplementary booleans do not reliably sum to 1, so a threshold tuned on one\nquestion shape does not transfer to another.\n\nEnabling it\n\nGet a key at console.typesafe.ai/keys.\n\nLaya, at a Laya server or a LiteLLM proxy route\n\nLaya has no built-in endpoint. The base URL and key can equally come from the\nconfig passed to the SDK, new NeuroLink({ credentials: { laya: { baseURL, apiKey } } }),\nor per call; config set there counts when NeuroLink picks the default decision\nprovider, exactly as the environment does.\n\nWhen a TypeSafe key (TYPESAFE_API_KEY or AI_GATEWAY_API_KEY) is configured\nalongside Laya, TypeSafe is the default; Laya runs where a caller names it\n(provider: \"laya\") or when neither TypeSafe key is set. Laya counts as\nconfigured only with both its key and its base URL. See the\nLaya provider guide.\n\nThe degradation contract. resolveDefaultDecisionProvider() returns\nundefined when no decision provider has its key set, and tryDecide() returns\nnull on any failure. There is no configuration in which a missing, invalid,\nslow or unreachable decision model changes NeuroLink's observable behaviour —\nit only ever falls back to what it did before.\n\nA credential the service does not accept disables that provider instance rather\nthan paying a round trip on every later call to be told so again.\n\nTwo transports\n\nThe same model is reachable two ways. Which one runs is decided once, in the\nconstructor:\n\n| | Direct | Vercel AI Gateway |\n| ------------------- | ------------------ | --------------------------------------------- |\n| Key | TYPESAFE_API_KEY | AI_GATEWAY_API_KEY |\n| Endpoint | api.typesafe.ai | ai-gateway.vercel.sh/v4/ai/evaluation-model |\n| Model named in | request body | ai-model-id header |\n| Question vocabulary | noul | boolean |\n| confidence | on each answer | on providerMetadata, not on the answer |\n| Billed by | TypeSafe | Vercel |\n\nHolding both keys keeps the direct transport, so the confidence f","hierarchy":{"lvl0":"Features","lvl1":"The `decide` inference type","lvl2":"","lvl3":""}},
3341
3341
  {"objectID":"f91e7ef7473aa411ff8c0d3b04381325781477c1876408ffd5469dbaf2d9584c","title":"The decide inference type","url":"/docs/features/decide-inference-type#the-decide-inference-type","content":"Deep-dive: generate, stream, decide: a third inference type for NeuroLink —\nwhy this shipped as a provider rather than a subsystem, the five call sites, and the four\ntransport bugs found by adding the Vercel AI Gateway (two of which produced plausible output).\n\nNeuroLink recognises three inference types. Two of them produce text:\n\n| Type | Call | Produces |\n| ------------ | ------------------------ | ------------------------------------------ |\n| generate | neurolink.generate() | text |\n| stream | neurolink.stream() | text, incrementally |\n| decide | neurolink.decide() | typed, calibrated judgements — no text |\n\nA decision model takes one state plus a map of named, typed questions and\nreturns one typed answer per question, all evaluated in a single parallel pass.\nThere is no text anywhere in the response, so nothing has to be parsed back out\nof prose. TypeSafe's Jev was the first such model; Convai Innovations' open-weights\nLaya is the second.\n\nThis is not neurolink.evaluate(), which scores an\nalready-generated response with RAGAS scorers. Different feature, different\nword.","hierarchy":{"lvl0":"Features","lvl1":"The `decide` inference type","lvl2":"The decide inference type","lvl3":""}},
3342
3342
  {"objectID":"2c0f154b9ae29f0af1a097de9ccb435db1e8f5c35a4df8bb91526eadb7b5eb97","title":"The three primitives","url":"/docs/features/decide-inference-type#the-three-primitives","content":"| Type | Question | Answer fields |\n| --------- | ------------------------------ | ------------------------------------------------ |\n| boolean | Is this statement true? | probability (0–1) — no confidence |\n| choice | Which option from this set? | choice, probabilities, confidence |\n| score | Rate against an ordered rubric | score, legend, probabilities, confidence |\n\nAll three mix freely in one call.\n\nVocabulary note. TypeSafe calls the yes/no primitive a noul and answers\nit in a field of the same name. The Vercel AI SDK and Pydantic AI both renamed\nthat to boolean/probability when exposing it, and NeuroLink follows them —\nthe vendor's spelling is translated inside TypeSafeProvider, so a second\ndecision provider slots in without changing any call site.","hierarchy":{"lvl0":"Features","lvl1":"The `decide` inference type","lvl2":"The three primitives","lvl3":""}},
@@ -3556,10 +3556,10 @@
3556
3556
  {"objectID":"e3366024d1a12d0c73fbcb1592927d2dcc0d92c12eaea661cf5164bb7217c32f","title":"Feature Guides","url":"/docs/features","content":"Feature Guides\n\nComprehensive guides for all NeuroLink features organized by category. Each guide includes setup, usage patterns, configuration, and troubleshooting.\n\nLatest Features (Q1 2026)\n\n| Feature | Description |\n| ---------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| decide Inference Type | A third inference type alongside generate/stream: typed, calibrated boolean/choice/score judgments in one parallel pass — no text. ~400ms, ~$0.00002 per decision. First provider is TypeSafe Jev; Laya, open-weights and self-hosted, is the second. Fail-open: a no-op without a key. |\n| Model Routing with a Decision Model | One round trip answers difficulty, capabilities, risk, context scope and the model pick, with asymmetric confidence bars (0.3 up / 0.6 down). |\n| Model Catalogue | Ranks the 64-model registry as an addition to a host-declared pool, never a replacement. One choice question ranks all N candidates. |\n| Context Budget | A per-request compaction threshold derived from how much context the request actually needs. Only ever lowers the default, never raises it. |\n| Relevance Compaction | Stage 0 of the compaction pipeline: asks which earlier messages the current request still needs, plus a quality gate on the generated summary. |\n| Tool Routing with a Decision Model | One calibrated yes/no per MCP server, dropping only on a confident \"no\" — replaces a 15s LLM call at ~400ms. |\n| RAG Retrieval Planning | Per-query topK breadth and whether to use hybrid / graph / rerank. Opt-in via RAGPipeline. |\n| Real-time Voice Services | Bidirectional realtime voice APIs — OpenAI Realtime and Gemini Live. Full-duplex audio streaming with tool calls, barge-in, and interruption. |\n| LiveKit Voice Agent | WebRTC voice agent using LiveKit for the real-time loop (transport, VAD, turn-taking, worker-per-call scaling) with NeuroLink as the brain (LLM, tools, memory). Cloud or self-hosted. |\n| Provider Fallback & Model Chains | providerFallback callback + modelChain config (v9.58.0) — centralized multi-provider fallba","hierarchy":{"lvl0":"Features","lvl1":"Feature Guides","lvl2":"","lvl3":""}},
3557
3557
  {"objectID":"a477c76a577a17e7aeaf89736289a0a41734b4bcfe479a523cdd9e2051bd0ba7","title":"Feature Guides","url":"/docs/features#feature-guides","content":"Comprehensive guides for all NeuroLink features organized by category. Each guide includes setup, usage patterns, configuration, and troubleshooting.","hierarchy":{"lvl0":"Features","lvl1":"Feature Guides","lvl2":"Feature Guides","lvl3":""}},
3558
3558
  {"objectID":"a43e81fa4a6c594f8b6b4cfc216db1356d75b3e4ebb54279dd2da7f69001d28f","title":"Latest Features (Q1 2026)","url":"/docs/features#latest-features-q1-2026","content":"| Feature | Description |\n| ---------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| decide Inference Type | A third inference type alongside generate/stream: typed, calibrated boolean/choice/score judgments in one parallel pass — no text. ~400ms, ~$0.00002 per decision. First provider is TypeSafe Jev; Laya, open-weights and self-hosted, is the second. Fail-open: a no-op without a key. |\n| Model Routing with a Decision Model | One round trip answers difficulty, capabilities, risk, context scope and the model pick, with asymmetric confidence bars (0.3 up / 0.6 down). |\n| Model Catalogue | Ranks the 64-model registry as an addition to a host-declared pool, never a replacement. One choice question ranks all N candidates. ","hierarchy":{"lvl0":"Features","lvl1":"Feature Guides","lvl2":"Latest Features (Q1 2026)","lvl3":""}},
3559
- {"objectID":"84c604ce940f85fbe8aa8d94675e4c1dae80b22ede558d58102426598f6a7d06","title":"Core Features (shipped 2025)","url":"/docs/features#core-features-shipped-2025","content":"| Feature | Description |\n| -------------------------------------------------------- | -------------------------------------------------------------------------------------------------- |\n| Image Generation | Generate images from text prompts using Gemini models via Vertex AI or Google AI Studio. |\n| Enterprise HITL | Production-ready HITL with approval workflows, confidence thresholds, and enterprise patterns. |\n| Interactive CLI | AI development environment with loop mode, session variables, and conversation memory. |\n| MCP Tools Showcase | Complete guide to 6 built-in tools and connecting external MCP servers across 6 categories. |\n| Human-in-the-Loop (HITL) | Pause AI tool execution for user approval before risky operations like file deletion or API calls. |\n| Guardrails Middleware | Content filtering, PII detection, and safety checks for AI outputs with zero configuration. |\n| Redis Conversation Export | Export complete session history as JSON for analytics, debugging, and compliance auditing. |\n| Context Compaction | Automatic conversation compression for long-running sessions to stay within token limits. |\n| LiteLLM Integration | Access 100+ AI models from all major providers through unified LiteLLM routing interface. |\n| SageMaker Integration | Deploy and use custom-trained models on AWS SageMaker infrastructure with full control. |","hierarchy":{"lvl0":"Features","lvl1":"Feature Guides","lvl2":"Core Features (shipped 2025)","lvl3":""}},
3560
- {"objectID":"f64aba3e564a8f56064839c33b533971468da990a9cc95d86ceb1e9d13223478","title":"Earlier Core Features (shipped Q3 2025)","url":"/docs/features#earlier-core-features-shipped-q3-2025","content":"| Feature | Description |\n| ------------------------------------------------------------- | ------------------------------------------------------------------------------------------------ |\n| Multimodal Chat Experiences | Stream text and images together with automatic provider fallbacks and format conversion. |\n| CSV File Support | Process CSV files for data analysis with automatic format conversion. Works with all providers. |\n| PDF File Support | Process PDF documents for visual analysis and content extraction. Native provider support. |\n| Office Documents | Process DOCX, PPTX, XLSX files for document analysis. Native Bedrock, Vertex, Anthropic support. |\n| Auto Evaluation Engine | Automated quality scoring and metrics export for AI response validation using LLM-as-judge. |\n| CLI Loop Sessions | Persistent interactive mode with conversation memory and session state for prompt engineering. |\n| Regional Streaming Controls | Region-specific model deployment and routing for compliance and latency optimization. |\n| Provider Orchestration Brain | Adaptive provider and model selection with intelligent fallbacks based on task classification. |","hierarchy":{"lvl0":"Features","lvl1":"Feature Guides","lvl2":"Earlier Core Features (shipped Q3 2025)","lvl3":""}},
3561
- {"objectID":"fbd682fc148477639d38ab175c38363d003a1464834e84b2a48d88087d001b91","title":"Platform Capabilities at a Glance","url":"/docs/features#platform-capabilities-at-a-glance","content":"| Category | Features | Documentation |\n| ------------------------ | ------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------- |\n| Provider unification | 44 providers with automatic failover, cost-aware routing, providerFallback policy, modelChain config | Provider Setup |\n| Multimodal pipeline | Stream images + CSV data + PDF documents + Office files across providers with auto-detection for mixed file types. | Multimodal Guide, CSV Support, PDF Support, Office Docs |\n| Voice pipeline | TTS (6 providers) + STT (4 providers) + realtime APIs (OpenAI Realtime, Gemini Live) | TTS Guide, STT Guide, Realtime Services |\n| Quality & governance | Auto-evaluation engine (14 scorers), guardrails middleware, HITL workflows, audit logging | Auto Evaluation, Guardrails, HITL |\n| Memory & context | Per-user condensed memory (S3/Redis/SQLite), Redis session export, 5-stage context compaction | Conversation Memory, Memory, Redis Export |\n| CLI tooling | Loop sessions, setup wizard, config validation, Redis auto-detect, JSON output, TTS/STT flags | CLI Loop, CLI Commands |\n| Enterprise ops | Claude proxy, OTLP observability, OpenObserve dashboard, regional routing,","hierarchy":{"lvl0":"Features","lvl1":"Feature Guides","lvl2":"Platform Capabilities at a Glance","lvl3":""}},
3562
- {"objectID":"71822e016bf07461e8af1f4f98755ff09c6a0af3daac91dc0cc0326dce7f06d1","title":"AI Provider Integration","url":"/docs/features#ai-provider-integration","content":"NeuroLink supports 44 AI providers with unified API access:\n\n| Provider | Key Features | Free Tier | Tool Support | Status | Documentation |\n| --------------------- | ---------------------------------------- | ------------ | ------------ | ---------- | ----------------------------------------------------------------------------------------------------------- |\n| OpenAI | GPT-4o, GPT-4o-mini, o1 models | No | Full | Production | Setup Guide |\n| Anthropic | Claude 4.6, 4.5/4.0 Sonnet, Opus, Haiku | No | Full | Production | Setup Guide, Subscription Guide |\n| Google AI | Gemini 3 Flash/Pro, Gemini 2.5 Flash/Pro | Free Tier | Full | Production | Setup Guide |\n| AWS Bedrock | Claude, Titan, Llama, Nova | No | Full | Production | Setup Guide |\n| Google Vertex | Gemini via GCP | No | Full | Production | Setup Guide |\n| Azure OpenAI | GPT-4, GPT-4o, o1 | No | Full | Production | Setup Guide |\n| LiteLLM | 100+ models unified | Varies | Full | Production | Integration Guide |\n| AWS SageMaker | Custom deployed models | No | Full | Production | Integration Guide |\n| Mistral AI | Mistral Large, Small | Free Tier | Full | Production | Setup Guide ","hierarchy":{"lvl0":"Features","lvl1":"Feature Guides","lvl2":"AI Provider Integration","lvl3":""}},
3559
+ {"objectID":"84c604ce940f85fbe8aa8d94675e4c1dae80b22ede558d58102426598f6a7d06","title":"Core Features (shipped 2025)","url":"/docs/features#core-features-shipped-2025","content":"| Feature | Description |\n| -------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- |\n| Image Generation | Generate images from text prompts using Gemini models via Vertex AI or Google AI Studio. |\n| Enterprise HITL | Production-ready HITL with approval workflows, confidence thresholds, and enterprise patterns. |\n| Interactive CLI | AI development environment with loop mode, session variables, and conversation memory. |\n| MCP Tools Showcase | Complete guide to 6 built-in tools and connecting external MCP servers across 6 categories. |\n| Human-in-the-Loop (HITL) | Pause AI tool execution for user approval before risky operations like file deletion or API calls. |\n| Guardrails Middleware | Content filtering, PII detection, and safety checks for AI outputs with zero configuration. |\n| Redis Conversation Export | Export complete session history as JSON for analytics, debugging, and compliance auditing. |\n| Context Compaction | Automatic conversation compression for long-running sessions to stay within token limits. |\n| LiteLLM Integration | Access 100+ AI models across a broad range of AI providers through unified LiteLLM routing interface. |\n| SageMaker Integration | Deploy and use custom-trained models on AWS SageMaker infrastructure with full control. |","hierarchy":{"lvl0":"Features","lvl1":"Feature Guides","lvl2":"Core Features (shipped 2025)","lvl3":""}},
3560
+ {"objectID":"f64aba3e564a8f56064839c33b533971468da990a9cc95d86ceb1e9d13223478","title":"Earlier Core Features (shipped Q3 2025)","url":"/docs/features#earlier-core-features-shipped-q3-2025","content":"| Feature | Description |\n| ------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- |\n| Multimodal Chat Experiences | Stream text and images together with automatic provider fallbacks and format conversion. |\n| CSV File Support | Process CSV files for data analysis with automatic format conversion. Works across supported providers. |\n| PDF File Support | Process PDF documents for visual analysis and content extraction. Native provider support. |\n| Office Documents | Process DOCX, PPTX, XLSX files for document analysis. Native Bedrock, Vertex, Anthropic support. |\n| Auto Evaluation Engine | Automated quality scoring and metrics export for AI response validation using LLM-as-judge. |\n| CLI Loop Sessions | Persistent interactive mode with conversation memory and session state for prompt engineering. |\n| Regional Streaming Controls | Region-specific model deployment and routing for compliance and latency optimization. |\n| Provider Orchestration Brain | Adaptive provider and model selection with intelligent fallbacks based on task classification. |","hierarchy":{"lvl0":"Features","lvl1":"Feature Guides","lvl2":"Earlier Core Features (shipped Q3 2025)","lvl3":""}},
3561
+ {"objectID":"fbd682fc148477639d38ab175c38363d003a1464834e84b2a48d88087d001b91","title":"Platform Capabilities at a Glance","url":"/docs/features#platform-capabilities-at-a-glance","content":"| Category | Features | Documentation |\n| ------------------------ | ------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------- |\n| Provider unification | Provider integrations with automatic failover, cost-aware routing, providerFallback policy, modelChain config | Provider Setup |\n| Multimodal pipeline | Stream images + CSV data + PDF documents + Office files across providers with auto-detection for mixed file types. | Multimodal Guide, CSV Support, PDF Support, Office Docs |\n| Voice pipeline | TTS (6 providers) + STT (4 providers) + realtime APIs (OpenAI Realtime, Gemini Live) | TTS Guide, STT Guide, Realtime Services |\n| Quality & governance | Auto-evaluation engine (14 scorers), guardrails middleware, HITL workflows, audit logging | Auto Evaluation, Guardrails, HITL |\n| Memory & context | Per-user condensed memory (S3/Redis/SQLite), Redis session export, 5-stage context compaction | Conversation Memory, Memory, Redis Export |\n| CLI tooling | Loop sessions, setup wizard, config validation, Redis auto-detect, JSON output, TTS/STT flags | CLI Loop, CLI Commands |\n| Enterprise ops | Claude proxy, OTLP observability, OpenObserve dashboard, regional routing,","hierarchy":{"lvl0":"Features","lvl1":"Feature Guides","lvl2":"Platform Capabilities at a Glance","lvl3":""}},
3562
+ {"objectID":"71822e016bf07461e8af1f4f98755ff09c6a0af3daac91dc0cc0326dce7f06d1","title":"AI Provider Integration","url":"/docs/features#ai-provider-integration","content":"NeuroLink supports many AI providers with unified API access:\n\n| Provider | Key Features | Free Tier | Tool Support | Status | Documentation |\n| --------------------- | ---------------------------------------- | ------------ | ------------ | ---------- | ----------------------------------------------------------------------------------------------------------- |\n| OpenAI | GPT-4o, GPT-4o-mini, o1 models | No | Full | Production | Setup Guide |\n| Anthropic | Claude 4.6, 4.5/4.0 Sonnet, Opus, Haiku | No | Full | Production | Setup Guide, Subscription Guide |\n| Google AI | Gemini 3 Flash/Pro, Gemini 2.5 Flash/Pro | Free Tier | Full | Production | Setup Guide |\n| AWS Bedrock | Claude, Titan, Llama, Nova | No | Full | Production | Setup Guide |\n| Google Vertex | Gemini via GCP | No | Full | Production | Setup Guide |\n| Azure OpenAI | GPT-4, GPT-4o, o1 | No | Full | Production | Setup Guide |\n| LiteLLM | 100+ models unified | Varies | Full | Production | Integration Guide |\n| AWS SageMaker | Custom deployed models | No | Full | Production | Integration Guide |\n| Mistral AI | Mistral Large, Small | Free Tier | Full | Production | Setup Guide ","hierarchy":{"lvl0":"Features","lvl1":"Feature Guides","lvl2":"AI Provider Integration","lvl3":""}},
3563
3563
  {"objectID":"a059b5877fe4f99abd8eaef030c84dbbad6788f1b0fb3eda3f13391a49191096","title":"Interactive Setup Wizard","url":"/docs/features#interactive-setup-wizard","content":"NeuroLink includes a revolutionary interactive setup wizard that guides users through provider configuration in 2-3 minutes:\n\n`bash","hierarchy":{"lvl0":"Features","lvl1":"Feature Guides","lvl2":"Interactive Setup Wizard","lvl3":""}},
3564
3564
  {"objectID":"dc28dea0405bc1b4e32ddc4cc74e79ad386f019644e00d8e25b546cab3d7932c","title":"Launch interactive setup wizard","url":"/docs/features#launch-interactive-setup-wizard","content":"npx @juspay/neurolink setup","hierarchy":{"lvl0":"Features","lvl1":"Feature Guides","lvl2":"Launch interactive setup wizard","lvl3":""}},
3565
3565
  {"objectID":"7630f844976b486b7711e43c6398d829d3d93b78d722dd37a872ea08685922d5","title":"Provider-specific guided setup","url":"/docs/features#provider-specific-guided-setup","content":"npx @juspay/neurolink setup --provider openai\nnpx @juspay/neurolink setup --provider bedrock\n\n\n**Wizard Features:**\n\n- Secure credential collection with validation\n- Real-time authentication testing\n- Automatic .env` file creation\nRecommended model selection\nQuick-start command examples\nInteractive provider discovery","hierarchy":{"lvl0":"Features","lvl1":"Feature Guides","lvl2":"Provider-specific guided setup","lvl3":""}},
@@ -3588,7 +3588,7 @@
3588
3588
  {"objectID":"793abedc47b3a45489689d77b646431971e56ce23a71d29a1d7fa7e3318e7ad8","title":"Exit the session","url":"/docs/features#exit-the-session","content":"neurolink » exit\n`\n\nComplete Loop Guide - Full documentation with all commands","hierarchy":{"lvl0":"Features","lvl1":"Feature Guides","lvl2":"Exit the session","lvl3":""}},
3589
3589
  {"objectID":"164b1ae9f7c7eb2f50d998d5b8c755eee88a19a0248684adfaa42e5a1674e18a","title":"Production Capabilities","url":"/docs/features#production-capabilities","content":"| Feature | Description | Use Case | Documentation |\n| ---------------------------- | ----------------------------------- | ---------------------------- | ----------------------------------------------------------------- |\n| Enterprise Proxy | Corporate proxy support | Behind firewalls | Proxy Setup |\n| Redis Memory | Distributed conversation state | Multi-instance deployment | Redis Guide |\n| Cost Optimization | Automatic cheapest model selection | Budget control | Cost Guide |\n| Multi-Provider Failover | Automatic provider switching | High availability | Failover Guide |\n| Telemetry & Monitoring | OpenTelemetry integration | Observability | Observability Guide |\n| Security Hardening | Credential management, auditing | Compliance | Security Guide |\n| Custom Model Hosting | SageMaker integration | Private models | SageMaker Guide |\n| Load Balancing | LiteLLM proxy integration | Scale & routing | Load Balancing Guide |\n| Audit Trails | Comprehensive logging | Compliance | Audit Guide |\n| Configuration Management | Environment & credential management | Multi-environment deployment | Config Guide |","hierarchy":{"lvl0":"Features","lvl1":"Feature Guides","lvl2":"Production Capabilities","lvl3":""}},
3590
3590
  {"objectID":"96340b4d64ab075d5784d9013a40bf6d857fcda9154292346b5a2b24fff4e7b8","title":"Human-in-the-Loop (HITL) Policy Engine","url":"/docs/features#human-in-the-loop-hitl-policy-engine","content":"Enterprise-grade approval system for sensitive operations:\n\nHITL Capabilities:\nUser consent for dangerous operations\nConfigurable policy engine\nComprehensive audit trail logging\nTimeout handling\nBulk approval for batch operations","hierarchy":{"lvl0":"Features","lvl1":"Feature Guides","lvl2":"Human-in-the-Loop (HITL) Policy Engine","lvl3":""}},
3591
- {"objectID":"c81fd2f8780d547e81f6ea98ef097272fa09287c1f9f13a4954cde4378778e19","title":"Advanced Proxy Support","url":"/docs/features#advanced-proxy-support","content":"Corporate network compatibility:\n\n| Proxy Type | Support | Features |\n| -------------------- | ------- | ------------------------------------ |\n| AWS Proxy | Full | AWS-specific proxy configuration |\n| HTTP/HTTPS Proxy | Full | Universal proxy across all providers |\n| No-Proxy Bypass | Full | Bypass configuration and utilities |","hierarchy":{"lvl0":"Features","lvl1":"Feature Guides","lvl2":"Advanced Proxy Support","lvl3":""}},
3591
+ {"objectID":"c81fd2f8780d547e81f6ea98ef097272fa09287c1f9f13a4954cde4378778e19","title":"Advanced Proxy Support","url":"/docs/features#advanced-proxy-support","content":"Corporate network compatibility:\n\n| Proxy Type | Support | Features |\n| -------------------- | ------- | ---------------------------------------- |\n| AWS Proxy | Full | AWS-specific proxy configuration |\n| HTTP/HTTPS Proxy | Full | Proxy support across supported providers |\n| No-Proxy Bypass | Full | Bypass configuration and utilities |","hierarchy":{"lvl0":"Features","lvl1":"Feature Guides","lvl2":"Advanced Proxy Support","lvl3":""}},
3592
3592
  {"objectID":"15f245fee8b38a5783018e5867e335b078b5b03bbfa9cf2ed1e181e3e94aad13","title":"Enhanced Guardrails","url":"/docs/features#enhanced-guardrails","content":"AI-powered content security:\nContent Filtering: Automatic content screening\nToxicity Detection: Toxic content filtering\nPII Redaction: Privacy protection and PII detection\nCustom Rules: Configurable policy rules\nSecurity Reporting: Detailed security event reporting","hierarchy":{"lvl0":"Features","lvl1":"Feature Guides","lvl2":"Enhanced Guardrails","lvl3":""}},
3593
3593
  {"objectID":"af17d7cb6a64c95bf45ad63fd19adcc4db8f3bf34c93d5918f81d4555a8728fe","title":"Security & Compliance","url":"/docs/features#security-compliance","content":"Deployable within SOC 2 Type II environments — NeuroLink itself is not audited or certified\nDeployable on ISO 27001-certified infrastructure — that certification is your infrastructure's, not NeuroLink's\nGDPR-conscious data handling (EU-region providers selectable; you own compliance)\nDeployable in HIPAA-aligned configurations — you are responsible for a compliant setup\nHardened OS verified (SELinux, AppArmor)\nZero credential logging\nEncrypted configuration storage\n\nEnterprise Deployment Guide - Complete production patterns","hierarchy":{"lvl0":"Features","lvl1":"Feature Guides","lvl2":"Security & Compliance","lvl3":""}},
3594
3594
  {"objectID":"656519a66c6e75c3518f426f95a3478a44549339df28f6ee4f6ca762cfbe2992","title":"Advanced Middleware Architecture","url":"/docs/features#advanced-middleware-architecture","content":"Pluggable request/response processing for custom workflows:","hierarchy":{"lvl0":"Features","lvl1":"Feature Guides","lvl2":"Advanced Middleware Architecture","lvl3":""}},
@@ -3597,7 +3597,7 @@
3597
3597
  {"objectID":"827f201374ae1ffd3131fbce5ed9e64e77eefc0cb6fef9cc788c624169cbb591","title":"Intelligent Cost Optimization","url":"/docs/features#intelligent-cost-optimization","content":"Model Resolver: Cost optimization algorithms and intelligent routing\nPerformance Routing: Speed-optimized provider selection\nConcurrent Initialization: Reduced latency through parallel loading\nCaching Strategies: Intelligent response and configuration caching","hierarchy":{"lvl0":"Features","lvl1":"Feature Guides","lvl2":"Intelligent Cost Optimization","lvl3":""}},
3598
3598
  {"objectID":"6b26b4b828ef5c0cc5cc15e2402c41de74cb58d1f290153b83e405a48901936f","title":"Advanced SageMaker Features","url":"/docs/features#advanced-sagemaker-features","content":"Beyond basic integration - enterprise-grade custom model deployment:\n\n| Feature | Description | Status |\n| ---------------------------- | ---------------------------------------------------- | ----------- |\n| Adaptive Semaphore | Dynamic concurrency control for optimal throughput | Implemented |\n| Structured Output Parser | Complex response parsing and validation | Implemented |\n| Capability Detection | Automatic endpoint capability discovery | Implemented |\n| Batch Inference | Efficient batch processing for high-volume workloads | Implemented |\n| Diagnostics System | Real-time endpoint monitoring and debugging | Implemented |","hierarchy":{"lvl0":"Features","lvl1":"Feature Guides","lvl2":"Advanced SageMaker Features","lvl3":""}},
3599
3599
  {"objectID":"d19b1338259a288805f8a2eb47fc10040666a90ee4bdfa3846f31f3bf3a3a275","title":"Error Handling & Resilience","url":"/docs/features#error-handling-resilience","content":"Production-grade fault tolerance:\nMCP Circuit Breaker: Fault tolerance with state management\nError Hierarchies: Comprehensive error types for HITL, providers, and MCP\nGraceful Degradation: Intelligent fallback strategies\nRetry Logic: Configurable retry with exponential backoff\n\nPerformance Optimization Guide - Complete optimization strategies","hierarchy":{"lvl0":"Features","lvl1":"Feature Guides","lvl2":"Error Handling & Resilience","lvl3":""}},
3600
- {"objectID":"ca876274dff5d751bc09c60e4de804f44917d9e0599697c2cd17362e3e6148bd","title":"Advanced Integrations","url":"/docs/features#advanced-integrations","content":"| Integration | Description |\n| -------------------------------------------------------------- | --------------------------------------------------------------------------------------- |\n| LiteLLM Integration | Access 100+ models from all major providers via LiteLLM routing with unified interface. |\n| SageMaker Integration | Deploy and call custom endpoints directly from NeuroLink CLI/SDK with full control. |\n| Memory | Per-user condensed memory with S3/Redis/SQLite storage and LLM-powered condensation. |\n| Enterprise Proxy | Configure outbound policies and compliance posture for corporate environments. |\n| Configuration Management | Manage environments, regions, and credentials safely across deployments. |","hierarchy":{"lvl0":"Features","lvl1":"Feature Guides","lvl2":"Advanced Integrations","lvl3":""}},
3600
+ {"objectID":"ca876274dff5d751bc09c60e4de804f44917d9e0599697c2cd17362e3e6148bd","title":"Advanced Integrations","url":"/docs/features#advanced-integrations","content":"| Integration | Description |\n| -------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- |\n| LiteLLM Integration | Access 100+ models across a broad range of AI providers via LiteLLM routing with unified interface. |\n| SageMaker Integration | Deploy and call custom endpoints directly from NeuroLink CLI/SDK with full control. |\n| Memory | Per-user condensed memory with S3/Redis/SQLite storage and LLM-powered condensation. |\n| Enterprise Proxy | Configure outbound policies and compliance posture for corporate environments. |\n| Configuration Management | Manage environments, regions, and credentials safely across deployments. |","hierarchy":{"lvl0":"Features","lvl1":"Feature Guides","lvl2":"Advanced Integrations","lvl3":""}},
3601
3601
  {"objectID":"0d74f47963b8a59cf58901d344f8d1e987d3bb286cb012ed22278f415c051d3f","title":"Advanced Features","url":"/docs/features#advanced-features","content":"| Feature | Description |\n| ----------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- |\n| 🏭 Factory Pattern Architecture | Unified provider interface with automatic fallbacks and type-safe implementations. |\n| 🗄️ Conversation Memory | Deep dive into memory management and Redis integration. |\n| 🔧 Custom Middleware | Build request/response hooks for logging, filtering, and custom processing. |\n| ⚡ Performance Optimization | Caching, connection pooling, and latency optimization strategies. |\n| 📊 Telemetry & Observability | OpenTelemetry integration for distributed tracing and monitoring. |\n| 🧪 Testing Guide | Provider-agnostic testing, mocking, and quality assurance strategies. |\n| 📊 Analytics & Evaluation | Usage tracking, cost monitoring, and quality scoring for AI responses. |\n| ⚡ Streaming | Real-time token streaming with provider-specific optimizations. |\n| Thinking Configuration | Configure extended thinking levels for supported models (Anthropic, Gemini 2.5+). |\n| Structured Output | JSON schema-based structured output with provider-specific formatting. |\n| Text-to-Speech (TTS) | Basic TTS support via Google Cloud TTS (Neural2, Wavenet, Standard voices). |","hierarchy":{"lvl0":"Features","lvl1":"Feature Guides","lvl2":"Advanced Features","lvl3":""}},
3602
3602
  {"objectID":"9c1dd453df8293552c84f52e9dd08ca4cd003afe799a2561dc4101aa9c2a304a","title":"See Also","url":"/docs/features#see-also","content":"Getting Started - Quick start and installation\nCLI Reference - Command-line interface documentation\nSDK Reference - TypeScript API documentation\nEnterprise Guides - Production deployment patterns\nTutorials - Step-by-step implementation guides\nExamples - Real-world code samples","hierarchy":{"lvl0":"Features","lvl1":"Feature Guides","lvl2":"See Also","lvl3":""}},
3603
3603
  {"objectID":"83f5b0de036a8a17898acf6e57b876b24b8eab4db20af614b766816e4da47913","title":"LiveKit Voice Agent — Real-Time Voice over WebRTC","url":"/docs/features/livekit-voice-agent","content":"LiveKit Voice Agent — Real-Time Voice over WebRTC\n\nA WebRTC voice agent that uses LiveKit for the real-time media loop and NeuroLink as the brain (LLM, tools, memory).\n\nTable of Contents\nProblem Statement & Solution\nArchitecture Overview\nDeployment Topologies (Cloud & Self-Hosted)\nCore Components\nHow NeuroLink Owns the Brain\nRuntime Flow\nUsage Example\nSource Layout\nConfiguration\nTuning the Voice Loop (VAD, Turn Detection, Interruption, Language)\nConversation Memory\nImplementation Plan\nOperational Behavior\nError Handling & Troubleshooting\nExtensibility Roadmap\n\nProblem Statement & Solution\n\nThe Challenge\n\nThe original NeuroLink voice agent (see voice-agent.md) runs a browser-to-server loop over a WebSocket. That design works, but a WebSocket transport carries structural limits for real-time audio:\nTCP head-of-line blocking and no jitter buffer cause choppy audio on lossy networks\nno built-in acoustic echo cancellation — the assistant can be transcribed by its own mic input\nraw PCM is ~8–10× the bandwidth of a compressed codec, and all of it flows through the application server\nvoice-activity detection runs on the application server's event loop, capping per-process concurrency\nSvelteKit and similar frameworks cannot accept the WebSocket upgrade without a custom server entry\n\nThe Solution\n\nThe LiveKit voice agent moves the transport to WebRTC via LiveKit, while keeping NeuroLink as the brain. LiveKit (an open-source WebRTC platform with a managed cloud and a self-hostable server) provides the parts that are hard to build correctly:\nWebRTC transport with echo cancellation, jitter buffering, packet-loss concealment, and Opus compression\nvoice-activity detection, turn detection, and interruption handling\na worker/job model that runs each call in its own process for isolation and horizontal scaling\n\nNeuroLink remains responsible for the conversation itself:\nthe LLM (any NeuroLink provider — Bedrock/Claude, OpenAI, Gemini, etc.)\ntool calling (MCP and registered tools), decided and executed inside neurolink.stream()\nconversation memory, keyed by a stable conversationId\n\nKey Benefits\nProduction-grade real-time audio without building media plumbing\nNeuroLink stays the brain — generate()/stream(), tools, and memory are unchanged\nWorker-per-call scaling provided by the LiveKit Agents runtime\nCloud or self-hosted with identical application code\nProvider-agnostic brain layer that can later back other transports\n\nArchitecture Overview\n\nSystem Flow Diagram\n\nDivision of Responsibility\n\n| Concern | Owner |\n| ------------------------------------------- | ----------------------------------- |\n| WebRTC transport, AEC, jitter, Opus | LiveKit |\n| VAD, turn detection, interruption | LiveKit Agents |\n| Worker-per-call process isolation & scaling | LiveKit Agents |\n| STT / TTS | LiveKit plugins (configurable) |\n| LLM, tool-calling, memory | NeuroLink |\n| Conversation history source of truth | NeuroLink memory (conversationId) |\n\nDeployment Topologies (Cloud & Self-Hosted)\n\nThe application code is identical across topologies; only LIVEKIT_URL and credentials change.\n\nTopology A — LiveKit Cloud (managed)\nRooms are created automatically on LiveKit's servers on first join.\nThe worker connects outbound to Cloud and receives dispatched Jobs over that connection — no inbound exposure or tunneling is required, even in local development.\nBilling is per participant-minute (a free Build tier is suitable for development).\nUse when: fastest setup, minimal media ops, dev/staging, or production without running media infrastructure.\n\nTopology B — Self-Hosted LiveKit (in-house)\nThe livekit-server (open source) runs on your own infrastructure (for example, Kubernetes behind your ingress/service mesh).\nMedia stays inside your network; there is no per-minute media fee — you pay only for compute and bandwidth.\nUse when: cost control at scale, data-residency/compliance requirements, or full control over the media path.\n\nLocal Development\nConsole mode: the worker runs standalone using the host machine's microphone and speakers — no LiveKit server and no browser required. Best for iterating on the brain loop.\nLocal server: livekit-server --dev (placeholder credentials, no external dependencies) with the browser and worker on localhost.\nCloud from local: point local LIVEKIT_URL at a Cloud project. Because the worker connects outbound, Cloud can dispatch Jobs to a locally-running worker without tunneling.\n\nCore Components\nLiveKit Agents Worker\n\nA long-lived Node process built on @livekit/agents. It registers with the LiveKit server under an agentName (for example, neurolink-voice). For each room, LiveKit dispatches a Job, which the runtime runs in its own process — this is the worker-per-call isolation that bounds the ","hierarchy":{"lvl0":"Features","lvl1":"LiveKit Voice Agent — Real-Time Voice over WebRTC","lvl2":"","lvl3":""}},
@@ -3869,7 +3869,7 @@
3869
3869
  {"objectID":"a32b726022ea495ce0c2f3b5495bddf2c2061044d8aea54e85eb352a66fdc948","title":"Auto-detect CSV files","url":"/docs/features/multimodal-chat#auto-detect-csv-files","content":"npx @juspay/neurolink generate \"Analyze sales trends\" \\\n --file ./sales_2024.csv","hierarchy":{"lvl0":"Features","lvl1":"Multimodal Chat Experiences","lvl2":"Auto-detect CSV files","lvl3":""}},
3870
3870
  {"objectID":"7843d3f99da1c4a6b19bc18cc3014937a447f66b9ebfc3ed6b18b7ee6d1c5531","title":"Explicit CSV with options","url":"/docs/features/multimodal-chat#explicit-csv-with-options","content":"npx @juspay/neurolink generate \"Summarize data\" \\\n --csv ./data.csv \\\n --csv-max-rows 500 \\\n --csv-format raw\n`","hierarchy":{"lvl0":"Features","lvl1":"Multimodal Chat Experiences","lvl2":"Explicit CSV with options","lvl3":""}},
3871
3871
  {"objectID":"bcadeaa569124a46c1c0764dcd93d7a884c68d9edda56ecd8abe1d63191ba15a","title":"Format Options","url":"/docs/features/multimodal-chat#format-options","content":"raw (default) - Best for large files, minimal token usage\njson - Structured data, easier parsing, higher token usage\nmarkdown - Readable tables, good for small datasets (\\<100 rows)","hierarchy":{"lvl0":"Features","lvl1":"Multimodal Chat Experiences","lvl2":"Format Options","lvl3":""}},
3872
- {"objectID":"aa2d789c76c869e3ccf1c475f7d872f4f56d13b7fff317c8b757fa26da1bfae2","title":"Best Practices","url":"/docs/features/multimodal-chat#best-practices-1","content":"Use raw format for large files to minimize token usage\nUse JSON format for structured data processing\nLimit to 1000 rows by default (configurable up to 10K)\nCombine CSV with visualization images for comprehensive analysis\nWorks with ALL providers (not just vision-capable models)","hierarchy":{"lvl0":"Features","lvl1":"Multimodal Chat Experiences","lvl2":"Best Practices","lvl3":""}},
3872
+ {"objectID":"aa2d789c76c869e3ccf1c475f7d872f4f56d13b7fff317c8b757fa26da1bfae2","title":"Best Practices","url":"/docs/features/multimodal-chat#best-practices-1","content":"Use raw format for large files to minimize token usage\nUse JSON format for structured data processing\nLimit to 1000 rows by default (configurable up to 10K)\nCombine CSV with visualization images for comprehensive analysis\nWorks across supported providers (not just vision-capable models)","hierarchy":{"lvl0":"Features","lvl1":"Multimodal Chat Experiences","lvl2":"Best Practices","lvl3":""}},
3873
3873
  {"objectID":"064b7e792ab9b07be4fbac1b0c005e7108f719ff6a967d99f1856b5bafaff68c","title":"Quick Start","url":"/docs/features/multimodal-chat#quick-start-1","content":"`bash","hierarchy":{"lvl0":"Features","lvl1":"Multimodal Chat Experiences","lvl2":"Quick Start","lvl3":""}},
3874
3874
  {"objectID":"d79221dc9d6684d605708a62a8eb5ec6452797fe909257f7b653d49755cbeab8","title":"Auto-detect PDF files","url":"/docs/features/multimodal-chat#auto-detect-pdf-files","content":"npx @juspay/neurolink generate \"Summarize this report\" \\\n --file ./financial-report.pdf \\\n --provider vertex","hierarchy":{"lvl0":"Features","lvl1":"Multimodal Chat Experiences","lvl2":"Auto-detect PDF files","lvl3":""}},
3875
3875
  {"objectID":"821650bf5345151ab1de75384d75ea7c6ce2c795d8d82bc74b04243ac30833cf","title":"Explicit PDF processing","url":"/docs/features/multimodal-chat#explicit-pdf-processing","content":"npx @juspay/neurolink generate \"Extract key terms\" \\\n --pdf ./contract.pdf \\\n --provider anthropic","hierarchy":{"lvl0":"Features","lvl1":"Multimodal Chat Experiences","lvl2":"Explicit PDF processing","lvl3":""}},
@@ -3885,7 +3885,7 @@
3885
3885
  {"objectID":"d0eb9507c22f810f741db122a450315f7e8ca7480886a360ba58883956f5d62b","title":"Provider Support Matrix","url":"/docs/features/multimodal#provider-support-matrix","content":"Not all providers support all multimodal capabilities. Use this matrix to select the right provider for your use case.","hierarchy":{"lvl0":"Features","lvl1":"Multimodal Capabilities Guide","lvl2":"Provider Support Matrix","lvl3":""}},
3886
3886
  {"objectID":"8c7a44d915f72bd0d66d990b00f455bbf48d2380a71a6d201170291b30de77d3","title":"Vision (Images)","url":"/docs/features/multimodal#vision-images","content":"| Provider | Supported | Recommended Models | Max Images | Max Size | Notes |\n| --------------------- | --------- | ------------------------------------------------------ | ---------- | -------- | ------------------------------------ |\n| OpenAI | ✅ | gpt-4o, gpt-4o-mini, gpt-5.2 | 10 | ~20 MB | Best for general vision tasks |\n| Azure OpenAI | ✅ | gpt-4o, gpt-4o-mini | 10 | ~20 MB | Same as OpenAI |\n| Google AI Studio | ✅ | gemini-2.5-pro, gemini-2.5-flash, gemini-3-flash | 16 | ~20 MB | Excellent for visual reasoning |\n| Google Vertex AI | ✅ | gemini-2.5-pro, gemini-2.5-flash, Claude models | 16/20 | ~20 MB | Gemini: 16 images, Claude: 20 images |\n| Anthropic | ✅ | claude-3.5-sonnet, claude-3.7-sonnet | 20 | ~20 MB | Strong visual understanding |\n| AWS Bedrock | ✅ | Claude models | 20 | ~20 MB | Same as Anthropic |\n| Ollama | ✅ | llava, bakllava, llava-phi3 | 10 | Varies | Local vision models |\n| LiteLLM | ✅ | Depends on upstream | 10 | Varies | Proxy to vision-capable models |\n| Mistral | ✅ | pixtral-12b-2409, pixtral-large-2411 | 10 | ~20 MB | Multimodal Mistral models |\n| OpenRouter | ✅ | Depends on model | 10 | Varies | Routes to various vision models |\n| Hugging Face | ⚠️ | Limited | Varies | Varies | Model-dependent |\n| AWS SageMaker | ❌ | N","hierarchy":{"lvl0":"Features","lvl1":"Multimodal Capabilities Guide","lvl2":"Vision (Images)","lvl3":""}},
3887
3887
  {"objectID":"73d7935973c0a686585af87403eac8b065162f05b5a7c956894d5cc17807712d","title":"PDF Documents","url":"/docs/features/multimodal#pdf-documents","content":"| Provider | Supported | Max Size | Max Pages | Processing Mode | Notes |\n| --------------------- | --------- | -------- | --------- | ---------------- | --------------------------------------- |\n| Google Vertex AI | ✅ | 5 MB | 100 | Native PDF | Best for document analysis |\n| Anthropic | ✅ | 5 MB | 100 | Native PDF | Claude excels at document understanding |\n| AWS Bedrock | ✅ | 5 MB | 100 | Native PDF | Via Claude models |\n| Google AI Studio | ✅ | 2000 MB | 100 | Native PDF | Handles very large files |\n| OpenAI | ✅ | 10 MB | 100 | Files API | gpt-4o, gpt-4o-mini, o1 |\n| Azure OpenAI | ✅ | 10 MB | 100 | Files API | Uses OpenAI Files API |\n| LiteLLM | ✅ | 10 MB | 100 | Proxy | Depends on upstream model |\n| OpenAI Compatible | ✅ | 10 MB | 100 | Varies | Server-dependent |\n| Mistral | ✅ | 10 MB | 100 | Native PDF | Native support |\n| Hugging Face | ✅ | 10 MB | 100 | Model-dependent | Varies by model |\n| Ollama | ❌ | - | - | - | Not supported |\n| OpenRouter | ⚠️ | Varies | Varies | Depends on model | Route-dependent |\n| AWS SageMaker | ❌ | - | - | - | Not supported |","hierarchy":{"lvl0":"Features","lvl1":"Multimodal Capabilities Guide","lvl2":"PDF Documents","lvl3":""}},
3888
- {"objectID":"96bf471d5383c56e1f0144483b12e8a6f6c221ab852ed86b42f9ea057e68a91d","title":"CSV/Spreadsheet Data","url":"/docs/features/multimodal#csvspreadsheet-data","content":"| Provider | Supported | Max Rows | Format Options | Notes |\n| ----------------- | --------- | -------- | ------------------- | ------------------------------------- |\n| All Providers | ✅ | 10,000 | raw, json, markdown | Universal support - processed as text |\n\nCSV support works with all providers because files are converted to text before sending to the AI model. The file is parsed and formatted (raw CSV, JSON, or Markdown table) before inclusion in the prompt.\n\nFormat Recommendations:\nRaw format - Best for large files (minimal token usage)\nJSON format - Best for structured data processing\nMarkdown format - Best for small datasets (\\<100 rows), readable tables","hierarchy":{"lvl0":"Features","lvl1":"Multimodal Capabilities Guide","lvl2":"CSV/Spreadsheet Data","lvl3":""}},
3888
+ {"objectID":"96bf471d5383c56e1f0144483b12e8a6f6c221ab852ed86b42f9ea057e68a91d","title":"CSV/Spreadsheet Data","url":"/docs/features/multimodal#csvspreadsheet-data","content":"| Provider | Supported | Max Rows | Format Options | Notes |\n| ----------------------- | --------- | -------- | ------------------- | --------------------------------- |\n| Supported Providers | ✅ | 10,000 | raw, json, markdown | Broad support - processed as text |\n\nCSV support works across supported providers because files are converted to text before sending to the AI model. The file is parsed and formatted (raw CSV, JSON, or Markdown table) before inclusion in the prompt.\n\nFormat Recommendations:\nRaw format - Best for large files (minimal token usage)\nJSON format - Best for structured data processing\nMarkdown format - Best for small datasets (\\<100 rows), readable tables","hierarchy":{"lvl0":"Features","lvl1":"Multimodal Capabilities Guide","lvl2":"CSV/Spreadsheet Data","lvl3":""}},
3889
3889
  {"objectID":"b52c712e324d5d40df527e8a5877d9ea0ae63d2ae80bd022cfbaffc9c3c91a82","title":"Audio Input","url":"/docs/features/multimodal#audio-input","content":"| Provider | Native Audio | Transcription | Real-time | Max Duration | Notes |\n| -------------------- | ------------ | ------------- | --------- | ------------ | ----------------------------------- |\n| Google AI Studio | ✅ | ✅ | ✅ | 1 hour | Best for real-time voice |\n| Google Vertex AI | ✅ | ✅ | ✅ | 1 hour | Native Gemini audio support |\n| OpenAI | ❌ | ✅ Whisper | ❌ | 25 MB | Excellent transcription accuracy |\n| Azure OpenAI | ❌ | ✅ Whisper | ❌ | 25 MB | Via Whisper integration |\n| Anthropic | ❌ | Via fallback | ❌ | - | Uses transcription approach |\n| AWS Bedrock | ❌ | Via fallback | ❌ | - | Uses transcription approach |\n| Others | ❌ | Via fallback | ❌ | - | Audio transcribed before processing |\n\nFor comprehensive audio documentation, see the Audio Input Guide.","hierarchy":{"lvl0":"Features","lvl1":"Multimodal Capabilities Guide","lvl2":"Audio Input","lvl3":""}},
3890
3890
  {"objectID":"6c75d56315cf5bcec368645e07a84c0b2b067c8052da1028e9deb65d16aab9ee","title":"Video","url":"/docs/features/multimodal#video","content":"Two mechanisms, and which one a provider gets changes what it can answer.\n\nNative (inline) — the video file itself travels in the request. The model\nsees continuous motion and hears the audio track. Only Google's Gemini front\nends accept this today.\n\nFrame extraction — ffmpeg pulls keyframes at intervals and they are\nattached as ordinary images, alongside a metadata summary in the prompt text.\nThe model sees a handful of stills and hears nothing.\n\n| Provider | Mechanism | Inline ceiling | Audio track | Default frame budget |\n| ------------------------------------ | ---------------- | -------------- | ----------- | -------------------- |\n| Google AI Studio | Native (inline) | 14 MB | ✅ heard | 16 (fallback only) |\n| Google Vertex AI (Gemini models) | Native (inline) | 14 MB | ✅ heard | 16 (fallback only) |\n| OpenAI / Azure OpenAI | Frame extraction | – | ❌ | 8 |\n| Anthropic / AWS Bedrock | Frame extraction | – | ❌ | 8 |\n| Mistral | Frame extraction | – | ❌ | 8 |\n| LiteLLM / OpenRouter | Frame extraction | – | ❌ | 8 |\n| Ollama / llama.cpp | Frame extraction | – | ❌ | 4 |\n\nThe 14 MB ceiling is one shared source-byte budget for the whole request,\nnot a separate per-clip limit. Before a clip ships natively, its bytes are\nadded to the source bytes of every inline part already in the request, and\nthe clip is delivered only if the total stays within 14 MB. Those parts\ninclude images (keyframes among them), PDFs, audio and any clip accepted\nearlier. With nothing else attached, that reduces to the clip's own size.\nThe budget is in source bytes because inline data travels as base64 in a\nJSON body, which costs four bytes per th","hierarchy":{"lvl0":"Features","lvl1":"Multimodal Capabilities Guide","lvl2":"Video","lvl3":""}},
3891
3891
  {"objectID":"623b369433add73c32c5d31532a82b33ea81350ec9e96ead3a7dc6262db5c09f","title":"Supported containers","url":"/docs/features/multimodal#supported-containers","content":".mp4, .webm, .mov, .avi, .mkv, .mpeg, .flv, .wmv, .3gp and\nthe other formats in the detector's video registry are all accepted for frame\nextraction. Inline delivery is narrower — it is limited to the containers\nGemini reads directly (mp4, mpeg, mov, avi, flv, webm, wmv, 3gpp) — and a\ncontainer outside that set falls back to keyframes rather than being\nre-encoded. Transcoding a long recording mid-request costs minutes of CPU for\na payload that would usually breach the inline ceiling anyway.","hierarchy":{"lvl0":"Features","lvl1":"Multimodal Capabilities Guide","lvl2":"Supported containers","lvl3":""}},
@@ -3906,7 +3906,7 @@
3906
3906
  {"objectID":"ea777a57bbb0c3b0c3628e13bf1bb3ea8f10a683f8e3fe97dc2e182e1d389240","title":"Auto-detect CSV","url":"/docs/features/multimodal#auto-detect-csv","content":"npx @juspay/neurolink generate \"Analyze sales trends\" \\\n --file ./sales_2024.csv","hierarchy":{"lvl0":"Features","lvl1":"Multimodal Capabilities Guide","lvl2":"Auto-detect CSV","lvl3":""}},
3907
3907
  {"objectID":"0ffdeaf2a4d433739fb1f96c6487b2e35e254c4459ead6ecbfd3dcb3a98de8b3","title":"Explicit CSV with options","url":"/docs/features/multimodal#explicit-csv-with-options","content":"npx @juspay/neurolink generate \"Summarize data\" \\\n --csv ./data.csv \\\n --csv-max-rows 500 \\\n --csv-format raw\ntypescript\n// Auto-detect (recommended)\nawait neurolink.generate({\n input: {\n text: \"Analyze this sales data\",\n files: [\"./sales.csv\"], // Auto-detected as CSV\n },\n});\n\n// Explicit CSV with options\nawait neurolink.generate({\n input: {\n text: \"Compare quarterly data\",\n csvFiles: [\"./q1.csv\", \"./q2.csv\"],\n },\n csvOptions: {\n maxRows: 1000,\n formatStyle: \"json\", // or \"raw\", \"markdown\"\n },\n});\n`","hierarchy":{"lvl0":"Features","lvl1":"Multimodal Capabilities Guide","lvl2":"Explicit CSV with options","lvl3":""}},
3908
3908
  {"objectID":"93535721732536c013e0204b266f2a131be12a7745f6c88a6e61cdeb76704728","title":"CSV Format Options","url":"/docs/features/multimodal#csv-format-options","content":"Three format styles:\nRaw format (default)\nBest for large files\nMinimal token usage\nPreserves original CSV structure\nJSON format\nStructured data processing\nEasier for AI to parse\nHigher token usage\nMarkdown format\nReadable tables\nGood for small datasets (\\<100 rows)\nModerate token usage","hierarchy":{"lvl0":"Features","lvl1":"Multimodal Capabilities Guide","lvl2":"CSV Format Options","lvl3":""}},
3909
- {"objectID":"427b303d134e7e002fe1fbb0ae86243f33506e795e3029cdfb7994c2014c0db4","title":"CSV Best Practices","url":"/docs/features/multimodal#csv-best-practices","content":"Use raw format for large files to minimize token usage\nUse JSON format for structured processing when AI needs to manipulate data\nLimit to 1000 rows by default (configurable up to 10,000)\nCombine CSV with visualization images for comprehensive analysis\nWorks with ALL providers (not just vision-capable models)","hierarchy":{"lvl0":"Features","lvl1":"Multimodal Capabilities Guide","lvl2":"CSV Best Practices","lvl3":""}},
3909
+ {"objectID":"427b303d134e7e002fe1fbb0ae86243f33506e795e3029cdfb7994c2014c0db4","title":"CSV Best Practices","url":"/docs/features/multimodal#csv-best-practices","content":"Use raw format for large files to minimize token usage\nUse JSON format for structured processing when AI needs to manipulate data\nLimit to 1000 rows by default (configurable up to 10,000)\nCombine CSV with visualization images for comprehensive analysis\nWorks across supported providers (not just vision-capable models)","hierarchy":{"lvl0":"Features","lvl1":"Multimodal Capabilities Guide","lvl2":"CSV Best Practices","lvl3":""}},
3910
3910
  {"objectID":"5f2f649cdd7639b3fc3fb30871df07bf3331ad446ac4d23340aaab8976ccf1a7","title":"Frame-extraction options","url":"/docs/features/multimodal#frame-extraction-options","content":"These control the keyframes and are ignored by a provider on the native path.\n\nWithout an explicit frames, the interval is chosen from the clip's duration\n— roughly every second for clips under 10s, widening to every three minutes\nfor recordings over half an hour, always capped at 100 frames.","hierarchy":{"lvl0":"Features","lvl1":"Multimodal Capabilities Guide","lvl2":"Frame-extraction options","lvl3":""}},
3911
3911
  {"objectID":"2c4c2bb10b6fea62d177994e6df1345d05606b65f8122b3c969cf214df3363f1","title":"CLI usage","url":"/docs/features/multimodal#cli-usage","content":"`bash","hierarchy":{"lvl0":"Features","lvl1":"Multimodal Capabilities Guide","lvl2":"CLI usage","lvl3":""}},
3912
3912
  {"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":""}},
@@ -4126,7 +4126,7 @@
4126
4126
  {"objectID":"af5efdaa7ba1811d537c1c7aca8a0143cd8496be1e9db86526d34003cf427dbb","title":"Streaming with Credentials","url":"/docs/features/per-request-credentials#streaming-with-credentials","content":"credentials works identically on stream(). Note that neurolink.stream()\nreturns a StreamResult wrapper — iterate over its .stream property:","hierarchy":{"lvl0":"Features","lvl1":"Per-Request Credentials","lvl2":"Streaming with Credentials","lvl3":""}},
4127
4127
  {"objectID":"ea70e911923bd079e70af1c36bda14c16bdd9bfcec49f236a9d0550d6602502a","title":"Multi-Tenant Request Handler","url":"/docs/features/per-request-credentials#multi-tenant-request-handler","content":"A typical pattern for a multi-tenant API endpoint. Note the provider-name →\ncredential-key mapping: the registered provider names (google-ai,\nopenai-compatible, huggingface) differ from their NeurolinkCredentials\nslot keys (googleAiStudio, openaiCompatible, huggingFace), so map\nexplicitly to avoid runtime surprises.\n\nNote: This example assumes API-key authentication. Providers like Bedrock\n(which use accessKeyId/secretAccessKey) and Ollama (which use baseURL)\nrequire different credential shapes — see the Provider Credential Reference above.","hierarchy":{"lvl0":"Features","lvl1":"Per-Request Credentials","lvl2":"Multi-Tenant Request Handler","lvl3":""}},
4128
4128
  {"objectID":"66e3491e17a04ce42e1b0d37adcf1fca17f24feb6bb3771d62a010949e62aa0d","title":"Limitations","url":"/docs/features/per-request-credentials#limitations","content":"CLI does not support --credentials — passing API keys as CLI flags would expose them in shell history, process lists, and log aggregators. Use environment variables for CLI usage instead.\nNo credential rotation within a streaming call — credentials are resolved once when generate() or stream() is called; you cannot swap keys mid-stream.\nNo built-in secret storage — NeuroLink passes credentials directly to the underlying provider SDK. Key storage, rotation, and encryption are the caller's responsibility. Consider integrating with a secrets manager (AWS Secrets Manager, HashiCorp Vault, Passetto) before injecting credentials into calls.\nOllama accepts only baseURL — Ollama does not use API keys; only the endpoint URL can be overridden.\nUnrecognised fields are silently ignored — each provider only reads the fields documented in the reference table above. Passing extra fields has no effect.\nInternal fallback switches providers — When a provider call fails and NeuroLink's internal fallback activates (selecting a different provider), the per-request credentials scoped to the original provider do not apply to the fallback provider. The fallback provider resolves credentials from its own instance-level or environment-variable sources. If you need strict per-call credential control and want to prevent fallback provider switches, set disableInternalFallback: true on the stream/generate call.","hierarchy":{"lvl0":"Features","lvl1":"Per-Request Credentials","lvl2":"Limitations","lvl3":""}},
4129
- {"objectID":"40b1b0dcd156e0f047058e051fba53dc2694754d03963600bf6419d6beae000c","title":"Key Files","url":"/docs/features/per-request-credentials#key-files","content":"| File | Purpose |\n| --------------------------------------- | -------------------------------------------------------------------------- |\n| src/lib/types/providers.ts | NeurolinkCredentials type definition |\n| src/lib/types/configTypes.ts | NeurolinkConstructorConfig.credentials field |\n| src/lib/types/generateTypes.ts | GenerateOptions.credentials + TextGenerationOptions.credentials fields |\n| src/lib/types/streamTypes.ts | StreamOptions.credentials field |\n| src/lib/factories/providerFactory.ts | Per-provider credential slice extraction |\n| src/lib/factories/providerRegistry.ts | All 21+ provider factory registrations |\n| src/lib/neurolink.ts | resolveCredentials() merge helper + generate()/stream() threading |","hierarchy":{"lvl0":"Features","lvl1":"Per-Request Credentials","lvl2":"Key Files","lvl3":""}},
4129
+ {"objectID":"40b1b0dcd156e0f047058e051fba53dc2694754d03963600bf6419d6beae000c","title":"Key Files","url":"/docs/features/per-request-credentials#key-files","content":"| File | Purpose |\n| --------------------------------------- | -------------------------------------------------------------------------- |\n| src/lib/types/providers.ts | NeurolinkCredentials type definition |\n| src/lib/types/configTypes.ts | NeurolinkConstructorConfig.credentials field |\n| src/lib/types/generateTypes.ts | GenerateOptions.credentials + TextGenerationOptions.credentials fields |\n| src/lib/types/streamTypes.ts | StreamOptions.credentials field |\n| src/lib/factories/providerFactory.ts | Per-provider credential slice extraction |\n| src/lib/factories/providerRegistry.ts | Provider factory registrations |\n| src/lib/neurolink.ts | resolveCredentials() merge helper + generate()/stream() threading |","hierarchy":{"lvl0":"Features","lvl1":"Per-Request Credentials","lvl2":"Key Files","lvl3":""}},
4130
4130
  {"objectID":"27e690fd1a24b6335b0168109634d1f2708ccff7dc221d910bd84351a3d8eec3","title":"See Also","url":"/docs/features/per-request-credentials#see-also","content":"Authentication Providers -- token validation, RBAC, and session management for your own API endpoints\nObservability Guide -- tracing generate/stream calls. Credentials are passed only to the underlying provider SDK, not captured in NeuroLink span attributes; if you attach custom span enrichment, avoid logging the credentials field.\nSDK API Reference -- complete SDK reference","hierarchy":{"lvl0":"Features","lvl1":"Per-Request Credentials","lvl2":"See Also","lvl3":""}},
4131
4131
  {"objectID":"1f6373b4b05729bcff02515fb6d2aef7232356a1136116405f84d26828518c3f","title":"PPT Generation - AI-Powered Presentations","url":"/docs/features/ppt-generation","content":"PPT Generation - AI-Powered Presentations\n\nNeuroLink enables AI-powered PowerPoint presentation generation from text prompts. Transform ideas into professional, visually-appealing presentations with intelligent content planning, multiple slide types, and optional AI-generated images.\n\nOverview\n\nPPT generation in NeuroLink uses a multi-stage pipeline powered by any supported AI provider:\nAccepts a text prompt describing the presentation topic via input.text\nPlans structured content using AI-powered content planning\nGenerates individual slides with appropriate types, layouts, and content\nCreates optional AI-generated images for visual slides\nAssembles a complete .pptx file using pptxgenjs\nReturns a PPTGenerationResult containing file path and metadata\n\nWhat You Get\nProfessional presentations – Generate complete PowerPoint files with 5-50 slides\n35 slide types – From title and content slides to charts, timelines, dashboards, and composite layouts\n5 built-in themes – Modern, Corporate, Creative, Minimal, and Dark\nAI image generation – Optional background and decorative images using Gemini\nUser-provided images – Use your own images instead of AI generation\nSDK integration – Use neurolink.generate() with output.mode: \"ppt\"\nCLI support – Generate presentations directly from command line\nMulti-provider support – Works with Vertex AI, OpenAI, Anthropic, Google AI, Azure, and Bedrock\n\nSupported Providers & Models\n\nProvider Compatibility\n\n| Provider | Recommended Models | Slide Types | Image Gen | Quality | Notes |\n| ----------- | -------------------------------- | ----------- | ----------- | ------- | ------------------------ |\n| vertex | gemini-2.5-pro, gemini-3 | All 35 | ✅ Native | Highest | Full feature support |\n| google-ai | gemini-2.5-pro, gemini-3 | All 35 | ✅ Native | Highest | Full feature support |\n| openai | gpt-4o, gpt-4-turbo | All 35 | ⚠️ External | High | Uses OpenAI for planning |\n| anthropic | claude-4.5-sonnet, claude-3-opus | All 35 | ⚠️ External | Highest | Advanced reasoning |\n| azure | gpt-4o, gpt-4-turbo | All 35 | ⚠️ External | High | Enterprise deployment |\n| bedrock | claude-3-sonnet, titan | All 35 | ⚠️ External | High | AWS integration |\n\nModel Tiers\n\n| Tier | Models | Slide Types | Notes |\n| ---------- | ------------------------------------------------------------------------ | ----------- | ----------------------------- |\n| advanced | claude-4.5-opus, claude-4.5-sonnet, gpt-4o, gemini-2.5-pro, gemini-3-pro | All 35 | Full prompt with all features |\n| basic | gemini-flash, claude-instant, gpt-3.5 | 10 core | Simplified prompt for speed |\n\nPrerequisites\nAI provider credentials configured for your chosen provider\nFor AI images: Vertex AI or Google AI credentials with Gemini access\nSufficient storage: Output files range from 100KB to 10MB+ depending on images\n\nQuick Start\n\nSDK Usage\n\nWith Full Options\n\nWith User-Provided Images\n\nCLI Usage\n\nCLI Arguments\n--outputMode (string, default: text) — Output mode: text, video, or ppt\n--pptPages, --pages (number, default: 10) — Number of slides (5-50)\n--pptTheme (string, default: AI-selected) — Theme: modern, corporate, creative, minimal, dark\n--pptAudience (string, default: AI-selected) — Target audience: business, students, technical, general\n--pptTone (string, default: AI-selected) — Presentation tone: professional, casual, educational, persuasive\n--pptNoImages (boolean, default: false) — Disable AI images for visual slides (images are enabled by default)\n--pptAspectRatio (string, default: 16:9) — Aspect ratio: 16:9 or 4:3\n--pptOutput, --po (string, default: auto-generated) — Output file path\n\nSlide Types\n\nNeuroLink supports 35 distinct slide types organized by category:\n\nOpening/Closing Slides\n\n| Type | Description | Layout Options |\n| ---------------- | -------------------------------- | ---------------------------------- |\n| title | Opening slide with main title | title-centered, title-bottom |\n| section-header | Section divider with large title | title-centered |\n| thank-you | Final slide with contact info | contact-info, title-centered |\n| closing | Summary and next steps | summary-bullets, title-content |\n\nContent Slides\n\n| Type | Description | Layout Options |\n| --------------- | ------------------------------ | ------------------------------ |\n| content | Standard title + bullet points | title-content, image layouts |\n| agenda | Table of contents | title-content, two-column |\n| bullets | Enhanced bullet points | title-content ","hierarchy":{"lvl0":"Features","lvl1":"PPT Generation - AI-Powered Presentations","lvl2":"","lvl3":""}},
4132
4132
  {"objectID":"e0c4e26b9e0f958e5f57517b22eaeb1b734afc5617b7a4259a5e070e2542dab7","title":"PPT Generation - AI-Powered Presentations","url":"/docs/features/ppt-generation#ppt-generation---ai-powered-presentations","content":"NeuroLink enables AI-powered PowerPoint presentation generation from text prompts. Transform ideas into professional, visually-appealing presentations with intelligent content planning, multiple slide types, and optional AI-generated images.","hierarchy":{"lvl0":"Features","lvl1":"PPT Generation - AI-Powered Presentations","lvl2":"PPT Generation - AI-Powered Presentations","lvl3":""}},
@@ -4167,7 +4167,7 @@
4167
4167
  {"objectID":"837a97078e3a914aabc16f12fa7cd475fc4211678d735b2f7bb8194367d677ae","title":"modelChain config","url":"/docs/features/provider-fallback#modelchain-config","content":"A simple ordered list of model names. NeuroLink walks the chain on each access-denial.\n\nmodelChain is string[] only — bare model names. There is no support for object entries with provider / baseURL per row. The current provider is preserved across the chain; only the model name changes. If you need to switch providers on denial, use providerFallback and return { provider, model }.","hierarchy":{"lvl0":"Features","lvl1":"Provider Fallback & Model Chains","lvl2":"modelChain config","lvl3":""}},
4168
4168
  {"objectID":"346e7f061d0dd914e6170977bb1eab9e7bf190f7d8fcf6f3d1045cc48d30ba22","title":"Internal no-output fallback (disableInternalFallback, fallbackOnMaxSteps)","url":"/docs/features/provider-fallback#internal-no-output-fallback-disableinternalfallback-fallbackonmaxsteps","content":"Separate from the orchestration above, stream() carries an internal safety\nnet: when the drained stream produced no non-sentinel text, audio, or image\nchunks and recorded no tool calls or tool results, NeuroLink retries the\nrequest once on a fallback route. An audio-only or image-only stream counts\nas real output and does not trigger the retry. The route's provider and\nmodel are resolved independently: the per-call fallbackProvider /\nfallbackModel options each override their matching FALLBACK_PROVIDER /\nFALLBACK_MODEL environment variable, which overrides the corresponding\nmodel-router value. Two per-call knobs control the retry:\ndisableInternalFallback: true — turn the safety net off entirely. The\n Claude proxy does this so the proxy itself can own fallback order.\nfallbackOnMaxSteps: false — keep the safety net, but exempt turns that\n ended at your own maxSteps bound. A tool-looping turn that runs out of\n step budget produces no final text, which otherwise looks exactly like a\n failed stream to the no-output check — and the retry spends a second\n provider's tokens to exceed a budget you set deliberately. With this set,\n the capped turn is surfaced as-is and reports\n metadata.stopReason === \"step-cap\" after the stream is drained. Default\n (unset) preserves the retry.\n\ngenerate() has no no-output retry, but the same flag governs its two\ninternal fallbacks: the static provider-priority walk that runs when no\nprovider was requested, and the catalog model-fallback walk a provider performs\nwhen the vendor rejects its model as invalid. With\ndisableInternalFallback: true, generate() tries exactly one provider from\nthat static list and surfaces an invalid model as the classified\nInvalidModelError after a single request. A configured ModelPool,\nproviderFallback and modelChain are your own fallback and are unaffected on\neither path: a pool still walks its own candidates.","hierarchy":{"lvl0":"Features","lvl1":"Provider Fallback & Model Chains","lvl2":"Internal no-output fallback (disableInternalFallback, fallbackOnMaxSteps)","lvl3":""}},
4169
4169
  {"objectID":"f7eb454e7f6880f1dcb42959f03030932f2ccf5c41ff8317f04fe17de24d2b07","title":"Observability","url":"/docs/features/provider-fallback#observability","content":"When the orchestrator advances past an access-denial, it emits a model.fallback event on the SDK's internal emitter:\n\nThe same event also flows through the OTEL/Langfuse pipeline, so you can monitor fallback frequency in production without subscribing to the in-process emitter.","hierarchy":{"lvl0":"Features","lvl1":"Provider Fallback & Model Chains","lvl2":"Observability","lvl3":""}},
4170
- {"objectID":"9c51b871367ba3a45cb97dd7259ba5717cc5cc072f50c091b63c661c7a470b7d","title":"Related","url":"/docs/features/provider-fallback#related","content":"Credential Validation — sdk.checkCredentials() and the typed ModelAccessDeniedError\nReal-time Voice Services — fallback also applies to realtime sessions on access denial\nProvider Setup — configuring all 44 providers\nObservability — wiring model.fallback events into your monitoring stack","hierarchy":{"lvl0":"Features","lvl1":"Provider Fallback & Model Chains","lvl2":"Related","lvl3":""}},
4170
+ {"objectID":"9c51b871367ba3a45cb97dd7259ba5717cc5cc072f50c091b63c661c7a470b7d","title":"Related","url":"/docs/features/provider-fallback#related","content":"Credential Validation — sdk.checkCredentials() and the typed ModelAccessDeniedError\nReal-time Voice Services — fallback also applies to realtime sessions on access denial\nProvider Setup — configuring supported providers\nObservability — wiring model.fallback events into your monitoring stack","hierarchy":{"lvl0":"Features","lvl1":"Provider Fallback & Model Chains","lvl2":"Related","lvl3":""}},
4171
4171
  {"objectID":"3b5d0122d0762f5202d83a9db0e7430a5ae248ba21c1277692dc84d45ff346bf","title":"Provider Orchestration Brain","url":"/docs/features/provider-orchestration","content":"Provider Orchestration Brain\n\nThe orchestration engine introduced in 7.42.0 pairs a task classifier with a provider/model router. When enabled, NeuroLink inspects each prompt, chooses the most suitable provider/model based on capabilities and availability, and carries that preference through the fallback chain.\n\nHighlights\nBinary task classifier – categorises prompts (analysis vs. creative, etc.) before routing.\nModel router – selects provider/model pairs, honouring local providers like Ollama when available.\nProvider validation – confirms credentials/availability before committing to the route.\nNon-invasive – orchestration augments requests via context so standard fallback logic still applies.\n\nEnabling Orchestration (SDK)\nEnable orchestration for automatic provider/model selection\nTask classifier analyzes prompt to determine best provider\nLog routing decisions to analytics\nValidate routed provider meets quality expectations\nSee which provider/model was selected by the router\n\nThe router adds __orchestratedPreferredProvider to the request context so analytics and downstream logging capture routing decisions.\n\nTuning the Router\nEnvironment awareness – orchestration only routes to providers that pass hasProviderEnvVars, so missing API keys fall back gracefully.\nOllama detection – checks http://localhost:11434/api/tags to verify local models before selection.\nConfidence scores – ModelRouter.route returns confidence and reasoning. Enable debug logs (export NEUROLINK_DEBUG=true) to inspect decisions.\nManual overrides – specifying provider or model bypasses orchestration for that call.\n\nWorking with the CLI\n\nCLI sessions instantiate NeuroLink without orchestration by default. To experiment with the router from the CLI:\nRun Node.js one-liner from CLI\nEnable orchestration in SDK mode\nLet router select best provider for comparison task\nOutput selected provider and model\n\nFuture CLI releases will surface a --enable-orchestration flag; until then keep orchestration for SDK/server workloads.\n\nBest Practices\n\nEnable orchestration in development to understand routing patterns, then pin provider or model in production for predictable behavior. Orchestration is ideal for exploratory workflows; explicit selection ensures consistency in critical paths.\n\nThe default fallback order prioritizes self-hosted providers — LiteLLM and Ollama — before cloud providers. This avoids external API costs and rate limits during development. Ensure your local providers are running to take advantage of this local-first routing.\n\nPair orchestration with evaluation to verify the routed provider meets quality expectations.\nMaintain provider credentials for all potential routes; orchestration skips providers missing keys.\nMonitor debug logs in staging to understand how tasks map to providers before rolling out widely.\nCombine with regional controls (region option) when routing to cloud-specific providers such as Vertex or Bedrock.\n\nTroubleshooting\n\n| Symptom | Action |\n| ----------------------------------- | -------------------------------------------------------------------------------------------------- |\n| Router always returns empty context | Ensure enableOrchestration: true and prompts contain text. |\n| Routed provider never used | Check credentials via neurolink status; orchestration only hints the preferred provider. |\n| Ollama route ignored | Confirm Ollama server running at http://localhost:11434 and model tag matches router suggestion. |\n| Fallback cycles between providers | Pin provider/model explicitly or reduce orchestrated confidence thresholds (see ModelRouter). |\n\nModelPool — failover with per-member cooldown\n\nOrchestration above hints a provider. ModelPool is the separate, explicit\nmechanism that owns selection: you hand it an ordered list of\nprovider/model/region members and it tries them in turn, taking a failed member\nout of rotation for a while rather than retrying it on every call.\n\nFile: src/lib/routing/modelPool.ts · Types: src/lib/types/modelPool.ts\n\nstrategy picks among the members that are currently available: priority\nalways takes the first, round-robin rotates, weighted prefers higher\nweight.\n\nCooldown is classified, not uniform\n\nA failure is classified into a ProviderErrorClass — rate_limit, auth,\ncontext_window, server, network, unknown — and the class decides how\nlong the member sits out:\n\n| Class | Cooldown |\n| -------------------------------------------- | ----------------------------------------- |\n| rate_limit, server, network, unknown | cooldownMs (default 60s) |\n| auth, context_window | permanent for the life of the process |\n\n\"Permanent\" is literal: PERMANENT_COOLDOWN_MS is ten years. The reasoning is\nthat neither ","hierarchy":{"lvl0":"Features","lvl1":"Provider Orchestration Brain","lvl2":"","lvl3":""}},
4172
4172
  {"objectID":"4f317fa66a6678bfaf848dc5b575809a95b82ded04ae00dab6cb107a05d97723","title":"Provider Orchestration Brain","url":"/docs/features/provider-orchestration#provider-orchestration-brain","content":"The orchestration engine introduced in 7.42.0 pairs a task classifier with a provider/model router. When enabled, NeuroLink inspects each prompt, chooses the most suitable provider/model based on capabilities and availability, and carries that preference through the fallback chain.","hierarchy":{"lvl0":"Features","lvl1":"Provider Orchestration Brain","lvl2":"Provider Orchestration Brain","lvl3":""}},
4173
4173
  {"objectID":"bad00a4fdf2c1282d34f035fbae43b10d1cb83f5a5ebc20a6496dfeadf76f6c3","title":"Highlights","url":"/docs/features/provider-orchestration#highlights","content":"Binary task classifier – categorises prompts (analysis vs. creative, etc.) before routing.\nModel router – selects provider/model pairs, honouring local providers like Ollama when available.\nProvider validation – confirms credentials/availability before committing to the route.\nNon-invasive – orchestration augments requests via context so standard fallback logic still applies.","hierarchy":{"lvl0":"Features","lvl1":"Provider Orchestration Brain","lvl2":"Highlights","lvl3":""}},
@@ -4412,11 +4412,11 @@
4412
4412
  {"objectID":"b802832537c22912fff88f6ef9ed79b85fd26dc3b69b61b0a52eb261feff8297","title":"Common Errors","url":"/docs/features/streaming#common-errors","content":"| Error | Cause | Solution |\n| ------------------------- | ------------------------------------------ | --------------------------------------------------- |\n| SESSION_BUDGET_EXCEEDED | Session cost exceeded maxBudgetUsd limit | Increase budget or start a new session |\n| PROVIDER_AUTH_ERROR | Missing or invalid API key | Set the provider's API key environment variable |\n| TIMEOUT | Request exceeded timeout | Increase timeout or use abortSignal for control |\n| MODEL_NOT_FOUND | Invalid model name | Check provider docs for supported model names |","hierarchy":{"lvl0":"Features","lvl1":"Streaming Guide","lvl2":"Common Errors","lvl3":""}},
4413
4413
  {"objectID":"1949a330d8bfb85ec15c527f519bf4eefb0b571f2db1027d8d568edd39986091","title":"Provider Support","url":"/docs/features/streaming#provider-support","content":"All NeuroLink providers support streaming:\n\n| Provider | Streaming | Notes |\n| ----------------- | --------- | ----------------------------------------------------------- |\n| OpenAI | Yes | Full streaming with tool support |\n| Anthropic | Yes | Full streaming with tool support |\n| Google AI Studio | Yes | Full streaming with tool support |\n| Google Vertex AI | Yes | Full streaming with tool support |\n| Amazon Bedrock | Yes | Full streaming with tool support |\n| Azure OpenAI | Yes | Full streaming with tool support |\n| Mistral | Yes | Full streaming with tool support |\n| LiteLLM | Yes | Full streaming; tool support depends on underlying model |\n| Ollama | Yes | Full streaming; tool support depends on model |\n| Hugging Face | Yes | Streaming support; tool support varies by model |\n| Amazon SageMaker | Limited | Falls back to fake streaming (generate then emit as chunks) |\n| OpenAI-Compatible | Yes | Depends on the endpoint's streaming support |\n\nWhen real streaming is not available for a provider or model, NeuroLink transparently falls back to \"fake streaming\" -- it generates the full response and then emits it as chunks. Your consuming code does not need to change.","hierarchy":{"lvl0":"Features","lvl1":"Streaming Guide","lvl2":"Provider Support","lvl3":""}},
4414
4414
  {"objectID":"a65ae1b5264ffcf3bd257c1a2666704dd13916433e8fe9af65ee41cc79288854","title":"See Also","url":"/docs/features/streaming#see-also","content":"Advanced Streaming Guide -- Enterprise streaming patterns, backpressure, and event types\nTTS Guide -- Text-to-speech audio streaming\nRAG Guide -- Retrieval-augmented generation with streaming\nThinking Configuration -- Extended thinking with streaming\nMultimodal Guide -- Images, PDFs, and files with streaming","hierarchy":{"lvl0":"Features","lvl1":"Streaming Guide","lvl2":"See Also","lvl3":""}},
4415
- {"objectID":"5a947cc17681ddd7c40d18de744818974a4dbb4e1a3a1884ffedcd192f89c8ff","title":"Structured Output with Zod Schemas","url":"/docs/features/structured-output","content":"Structured Output with Zod Schemas\n\nGenerate type-safe, validated JSON responses using Zod schemas. Both generate() and stream() accept schema; generate() returns structuredData directly, while a fully drained stream exposes it as result.metadata.structuredData.\n\nQuick Start\n\nRequirements\nschema: A Zod schema defining the output structure — always required.\noutput.format: Must be \"json\" or \"structured\" to get a JSON string\n in result.content (defaults to \"text\" if not specified). This is\n independent of structuredData: passing schema alone, with no\n output.format, is enough for result.structuredData to be populated —\n this is the path the tools section below uses.\n\nComplex Schemas\n\nWorks with Tools\n\nStructured output works seamlessly with MCP tools:\n\nHow this works on OpenAI-compatible providers\n\nOpenAI-compatible vendors vary in whether they accept response_format and\ntools in the same request. NeuroLink is conservative by default and does not\nsend them together. For catalog providers whose combined request has been\nverified live, capabilities.structuredOutputWithTools: true opts both\ngenerate() and stream() into sending them together, so the vendor can use\nnative constrained decoding without an extra formatting request. Separate\nsuccessful tool and structured-output probes are not enough to enable the flag.\n\nWhen a provider is not opted in, the tool turn runs untouched. If its answer\ndoes not satisfy your schema, the SDK re-asks once with the tools removed,\nwhich is what makes native response_format legal again. That second pass only\nreformats an answer the model has already produced, so tool results still drive\nthe content; toolsUsed, toolExecutions and usage cover the whole turn, not\njust the reformat. If an opted-in provider later rejects the combined request,\nthe same conflict recovery retries without structured output, so a stale\ncapability flag costs one request rather than the turn.\n\nTwo consequences worth knowing:\nA generate({ schema }) call that needed the reformat costs two requests.\n Calls whose first answer already satisfies the schema cost one, as before.\nThe reformat is accepted only if it actually produced a schema-valid value.\n If it fails, if the SDK's own turn deadline is reached, or if it comes back as\n prose anyway, the original answer is returned rather than an error — so this\n can improve an outcome but never degrade one. A caller that cancels the\n request still gets its cancellation. In those cases structuredData may still\n be unset, which is the honest signal that the model never produced the value.\n\nThe schema is deliberately not injected into the tool turn's system prompt.\nSome models read a JSON Schema sitting next to a tool list as another tool and\nanswer by calling one that does not exist — Groq's llama-3.3-70b-versatile\ntries to call a tool named json, which the server rejects outright.\n\nThe re-ask is not a single attempt. It tries native response_format first,\nbecause removing the tools is precisely what makes that legal again. Some\nvendors then reject the schema itself rather than the request: Groq answers\na non-object root with invalid JSON schema for response_format: schema must\nhave type 'object', so an array- or scalar-rooted schema fails at this stage.\nWhen that happens the SDK degrades a second time and re-runs the same tools-free\npass with the schema spelled into the prompt instead. That is why a\nz.array(z.string()) schema returns [\"red\",\"blue\",\"yellow\"] with matching\nstructuredData rather than prose. Both stages run without tools; only the way\nthe schema is communicated changes.\n\nImportant: Google Gemini Providers Limitation\n\nGoogle API Constraint: Google Gemini (both Vertex AI and Google AI Studio) cannot combine function calling with structured output (JSON schema validation). This is a documented Google API limitation, not a NeuroLink issue.\n\nGemini 3 / Gemini 2.5 Note: This limitation applies to all Gemini models, including the latest Gemini 3 and Gemini 2.5 series (e.g., gemini-2.5-pro, gemini-2.5-flash). While these models have excellent JSON schema support for structured output, they still cannot use tools and JSON schema validation together in the same request.\n\nError Message:\n\nSolution: Use disableTools: true when using schemas with Google providers:\n\nThis is Industry Standard: All major AI frameworks (LangChain, Vercel AI SDK, Agno, Instructor) use the same approach - disabling tools when using response schemas with Google models.\n\nWorkarounds for Gemini Tools + Structured Output\n\nIf you need both tool execution and structured output with Gemini, consider these approaches:\nTwo-Step Approach: First call with tools enabled (no schema), then a second call with schema to format the result:\nUse a Different Provider: OpenAI and Anthropic support tools and structured output together:\nChoose One or the Other: Design your workflow to use either tools OR structured output per request, not both.\n\nRelated Limitation: Complex schemas may trigger \"Too many","hierarchy":{"lvl0":"Features","lvl1":"Structured Output with Zod Schemas","lvl2":"","lvl3":""}},
4415
+ {"objectID":"5a947cc17681ddd7c40d18de744818974a4dbb4e1a3a1884ffedcd192f89c8ff","title":"Structured Output with Zod Schemas","url":"/docs/features/structured-output","content":"Structured Output with Zod Schemas\n\nGenerate type-safe, validated JSON responses using Zod schemas. Both generate() and stream() accept schema; generate() returns structuredData directly, while a fully drained stream exposes it as result.metadata.structuredData.\n\nQuick Start\n\nRequirements\nschema: A Zod schema defining the output structure — always required.\noutput.format: Must be \"json\" or \"structured\" to get a JSON string\n in result.content (defaults to \"text\" if not specified). This is\n independent of structuredData: passing schema alone, with no\n output.format, is enough for result.structuredData to be populated —\n this is the path the tools section below uses.\n\nComplex Schemas\n\nWorks with Tools\n\nStructured output works seamlessly with MCP tools:\n\nHow this works on OpenAI-compatible providers\n\nOpenAI-compatible vendors vary in whether they accept response_format and\ntools in the same request. NeuroLink is conservative by default and does not\nsend them together. For catalog providers whose combined request has been\nverified live, capabilities.structuredOutputWithTools: true opts both\ngenerate() and stream() into sending them together, so the vendor can use\nnative constrained decoding without an extra formatting request. Separate\nsuccessful tool and structured-output probes are not enough to enable the flag.\n\nWhen a provider is not opted in, the tool turn runs untouched. If its answer\ndoes not satisfy your schema, the SDK re-asks once with the tools removed,\nwhich is what makes native response_format legal again. That second pass only\nreformats an answer the model has already produced, so tool results still drive\nthe content; toolsUsed, toolExecutions and usage cover the whole turn, not\njust the reformat. If an opted-in provider later rejects the combined request,\nthe same conflict recovery retries without structured output, so a stale\ncapability flag costs one request rather than the turn.\n\nTwo consequences worth knowing:\nA generate({ schema }) call that needed the reformat costs up to three\n requests: the original tool turn, the response_format re-ask, and — only\n if the vendor rejects the schema itself (a non-object root) rather than the\n request — a third tools-free pass with the schema spelled into the prompt\n instead, described below. Calls whose first answer already satisfies the\n schema cost one, as before.\nThe reformat is accepted only if it actually produced a schema-valid value.\n If it fails, if the SDK's own turn deadline is reached, or if it comes back as\n prose anyway, the original answer is returned rather than an error — so this\n can improve an outcome but never degrade one. A caller that cancels the\n request still gets its cancellation. In those cases structuredData may still\n be unset, which is the honest signal that the model never produced the value.\n\nThe schema is deliberately not injected into the tool turn's system prompt.\nSome models read a JSON Schema sitting next to a tool list as another tool and\nanswer by calling one that does not exist — Groq's llama-3.3-70b-versatile\ntries to call a tool named json, which the server rejects outright.\n\nThe re-ask is not a single attempt. It tries native response_format first,\nbecause removing the tools is precisely what makes that legal again. Some\nvendors then reject the schema itself rather than the request: Groq answers\na non-object root with invalid JSON schema for response_format: schema must\nhave type 'object', so an array- or scalar-rooted schema fails at this stage.\nWhen that happens the SDK degrades a second time and re-runs the same tools-free\npass with the schema spelled into the prompt instead. That is why a\nz.array(z.string()) schema returns [\"red\",\"blue\",\"yellow\"] with matching\nstructuredData rather than prose. Both stages run without tools; only the way\nthe schema is communicated changes.\n\nImportant: Google Gemini Providers Limitation\n\nGoogle API Constraint: Google Gemini (both Vertex AI and Google AI Studio) cannot combine function calling with structured output (JSON schema validation). This is a documented Google API limitation, not a NeuroLink issue.\n\nGemini 3 / Gemini 2.5 Note: This limitation applies to all Gemini models, including the latest Gemini 3 and Gemini 2.5 series (e.g., gemini-2.5-pro, gemini-2.5-flash). While these models have excellent JSON schema support for structured output, they still cannot use tools and JSON schema validation together in the same request.\n\nError Message:\n\nSolution: Use disableTools: true when using schemas with Google providers:\n\nThis is Industry Standard: All major AI frameworks (LangChain, Vercel AI SDK, Agno, Instructor) use the same approach - disabling tools when using response schemas with Google models.\n\nWorkarounds for Gemini Tools + Structured Output\n\nIf you need both tool execution and structured output with Gemini, consider these approaches:\nTwo-Step Approach: First call with tools enabled (no schema), then a second call with schema to format the result:\nUse a ","hierarchy":{"lvl0":"Features","lvl1":"Structured Output with Zod Schemas","lvl2":"","lvl3":""}},
4416
4416
  {"objectID":"82da02b8aebfda79a43e92c60a33f5fe1bb8e84ba9ba8ac0a42d36f0df945844","title":"Structured Output with Zod Schemas","url":"/docs/features/structured-output#structured-output-with-zod-schemas","content":"Generate type-safe, validated JSON responses using Zod schemas. Both generate() and stream() accept schema; generate() returns structuredData directly, while a fully drained stream exposes it as result.metadata.structuredData.","hierarchy":{"lvl0":"Features","lvl1":"Structured Output with Zod Schemas","lvl2":"Structured Output with Zod Schemas","lvl3":""}},
4417
4417
  {"objectID":"8786915973a894e8ce2e6fd18a7da976c109949f20b7549c63b50d98d05bd821","title":"Requirements","url":"/docs/features/structured-output#requirements","content":"schema: A Zod schema defining the output structure — always required.\noutput.format: Must be \"json\" or \"structured\" to get a JSON string\n in result.content (defaults to \"text\" if not specified). This is\n independent of structuredData: passing schema alone, with no\n output.format, is enough for result.structuredData to be populated —\n this is the path the tools section below uses.","hierarchy":{"lvl0":"Features","lvl1":"Structured Output with Zod Schemas","lvl2":"Requirements","lvl3":""}},
4418
4418
  {"objectID":"239e70c6bb43d051b5ce01d19d01e865b6eab69208cea7c37f849114a7766afb","title":"Works with Tools","url":"/docs/features/structured-output#works-with-tools","content":"Structured output works seamlessly with MCP tools:","hierarchy":{"lvl0":"Features","lvl1":"Structured Output with Zod Schemas","lvl2":"Works with Tools","lvl3":""}},
4419
- {"objectID":"970f3f5cf5c095a627ebce241052024f34fb08a9916fb006fb0c3dadd3ecc43f","title":"How this works on OpenAI-compatible providers","url":"/docs/features/structured-output#how-this-works-on-openai-compatible-providers","content":"OpenAI-compatible vendors vary in whether they accept response_format and\ntools in the same request. NeuroLink is conservative by default and does not\nsend them together. For catalog providers whose combined request has been\nverified live, capabilities.structuredOutputWithTools: true opts both\ngenerate() and stream() into sending them together, so the vendor can use\nnative constrained decoding without an extra formatting request. Separate\nsuccessful tool and structured-output probes are not enough to enable the flag.\n\nWhen a provider is not opted in, the tool turn runs untouched. If its answer\ndoes not satisfy your schema, the SDK re-asks once with the tools removed,\nwhich is what makes native response_format legal again. That second pass only\nreformats an answer the model has already produced, so tool results still drive\nthe content; toolsUsed, toolExecutions and usage cover the whole turn, not\njust the reformat. If an opted-in provider later rejects the combined request,\nthe same conflict recovery retries without structured output, so a stale\ncapability flag costs one request rather than the turn.\n\nTwo consequences worth knowing:\nA generate({ schema }) call that needed the reformat costs two requests.\n Calls whose first answer already satisfies the schema cost one, as before.\nThe reformat is accepted only if it actually produced a schema-valid value.\n If it fails, if the SDK's own turn deadline is reached, or if it comes back as\n prose anyway, the original answer is returned rather than an error — so this\n can improve an outcome but never degrade one. A caller that cancels the\n request still gets its cancellation. In those cases structuredData may still\n be unset, which is the honest signal that the model never produced the value.\n\nThe schema is deliberately not injected into the tool turn's system prompt.\nSome models read a JSON Schema sitting next to a tool list as another tool and\nanswer by calling one that does not exist — Groq's llama-3.3-70b-versatile\n","hierarchy":{"lvl0":"Features","lvl1":"Structured Output with Zod Schemas","lvl2":"How this works on OpenAI-compatible providers","lvl3":""}},
4419
+ {"objectID":"970f3f5cf5c095a627ebce241052024f34fb08a9916fb006fb0c3dadd3ecc43f","title":"How this works on OpenAI-compatible providers","url":"/docs/features/structured-output#how-this-works-on-openai-compatible-providers","content":"OpenAI-compatible vendors vary in whether they accept response_format and\ntools in the same request. NeuroLink is conservative by default and does not\nsend them together. For catalog providers whose combined request has been\nverified live, capabilities.structuredOutputWithTools: true opts both\ngenerate() and stream() into sending them together, so the vendor can use\nnative constrained decoding without an extra formatting request. Separate\nsuccessful tool and structured-output probes are not enough to enable the flag.\n\nWhen a provider is not opted in, the tool turn runs untouched. If its answer\ndoes not satisfy your schema, the SDK re-asks once with the tools removed,\nwhich is what makes native response_format legal again. That second pass only\nreformats an answer the model has already produced, so tool results still drive\nthe content; toolsUsed, toolExecutions and usage cover the whole turn, not\njust the reformat. If an opted-in provider later rejects the combined request,\nthe same conflict recovery retries without structured output, so a stale\ncapability flag costs one request rather than the turn.\n\nTwo consequences worth knowing:\nA generate({ schema }) call that needed the reformat costs up to three\n requests: the original tool turn, the response_format re-ask, and — only\n if the vendor rejects the schema itself (a non-object root) rather than the\n request — a third tools-free pass with the schema spelled into the prompt\n instead, described below. Calls whose first answer already satisfies the\n schema cost one, as before.\nThe reformat is accepted only if it actually produced a schema-valid value.\n If it fails, if the SDK's own turn deadline is reached, or if it comes back as\n prose anyway, the original answer is returned rather than an error — so this\n can improve an outcome but never degrade one. A caller that cancels the\n request still gets its cancellation. In those cases structuredData may still\n be unset, which is the honest signal that the model ne","hierarchy":{"lvl0":"Features","lvl1":"Structured Output with Zod Schemas","lvl2":"How this works on OpenAI-compatible providers","lvl3":""}},
4420
4420
  {"objectID":"cc660b57647a3a31ebe3aca058136232c61bddb59022c34114e48727143b0a74","title":"Important: Google Gemini Providers Limitation","url":"/docs/features/structured-output#important-google-gemini-providers-limitation","content":"Google API Constraint: Google Gemini (both Vertex AI and Google AI Studio) cannot combine function calling with structured output (JSON schema validation). This is a documented Google API limitation, not a NeuroLink issue.\n\nGemini 3 / Gemini 2.5 Note: This limitation applies to all Gemini models, including the latest Gemini 3 and Gemini 2.5 series (e.g., gemini-2.5-pro, gemini-2.5-flash). While these models have excellent JSON schema support for structured output, they still cannot use tools and JSON schema validation together in the same request.\n\nError Message:\n\nSolution: Use disableTools: true when using schemas with Google providers:\n\nThis is Industry Standard: All major AI frameworks (LangChain, Vercel AI SDK, Agno, Instructor) use the same approach - disabling tools when using response schemas with Google models.","hierarchy":{"lvl0":"Features","lvl1":"Structured Output with Zod Schemas","lvl2":"Important: Google Gemini Providers Limitation","lvl3":""}},
4421
4421
  {"objectID":"72d39c1123edc80bab2c387126c4257c184aae7ad60046baf6698df58b5be31b","title":"Workarounds for Gemini Tools + Structured Output","url":"/docs/features/structured-output#workarounds-for-gemini-tools-structured-output","content":"If you need both tool execution and structured output with Gemini, consider these approaches:\nTwo-Step Approach: First call with tools enabled (no schema), then a second call with schema to format the result:\nUse a Different Provider: OpenAI and Anthropic support tools and structured output together:\nChoose One or the Other: Design your workflow to use either tools OR structured output per request, not both.\n\nRelated Limitation: Complex schemas may trigger \"Too many states for serving\" errors. Solutions:\nSimplify schema structure\nReduce nested objects\nUse disableTools: true to reduce state complexity","hierarchy":{"lvl0":"Features","lvl1":"Structured Output with Zod Schemas","lvl2":"Workarounds for Gemini Tools + Structured Output","lvl3":""}},
4422
4422
  {"objectID":"1075ae3db0656103e73fad23d48fb13a44ce2db31f37066e7de3168378c5e6b8","title":"Important Notes","url":"/docs/features/structured-output#important-notes","content":"Available in generate() and stream() - generate() exposes result.structuredData; after the stream is fully drained, stream() exposes result.metadata.structuredData\noutput.format controls result.content - If it is not \"json\" or \"structured\", result.content is plain text even with a schema; result.structuredData can still be populated from schema alone (see Requirements)\nAuto-validated, with a no-throw fallback when tools are involved - Without tools, an invalid response throws NoObjectGeneratedError with validation details. With tools attached, a failed schema match triggers the tool-free re-ask described in Works with Tools; if that also fails, the original answer is returned rather than an error, and structuredData is left unset\nProvider support - Works with OpenAI, Anthropic, Google AI Studio, Vertex AI\nGemini JSON Schema Support - Gemini 3 / Gemini 2.5 models have excellent native JSON schema support\nGemini Tools Limitation - All Gemini models (including Gemini 3) cannot combine tools with schemas - use disableTools: true","hierarchy":{"lvl0":"Features","lvl1":"Structured Output with Zod Schemas","lvl2":"Important Notes","lvl3":""}},
@@ -4783,7 +4783,7 @@
4783
4783
  {"objectID":"fcfa01797e52ab1944e7eaf5a67e44327b6bf5fa98b6bc359b1f191431398f81","title":"Supported Models","url":"/docs/getting-started/environment-variables#supported-models-8","content":"mistral-tiny - Fastest, most cost-effective\nmistral-small (default) - Balanced performance\nmistral-medium - Enhanced capabilities\nmistral-large - Most capable model","hierarchy":{"lvl0":"Getting Started","lvl1":"🔧 Environment Variables Configuration Guide","lvl2":"Supported Models","lvl3":""}},
4784
4784
  {"objectID":"f6c3cb30008c4e93cb54d3c19855a7b711cd21f6d2be5c5992be5aad7ab2fed4","title":"How to Use LiteLLM","url":"/docs/getting-started/environment-variables#how-to-use-litellm","content":"LiteLLM provides access to 100+ AI models through a unified proxy interface:\nLocal Setup: Run LiteLLM locally with your API keys (recommended)\nSelf-Hosted: Deploy your own LiteLLM proxy server\nCloud Deployment: Use cloud-hosted LiteLLM instances","hierarchy":{"lvl0":"Getting Started","lvl1":"🔧 Environment Variables Configuration Guide","lvl2":"How to Use LiteLLM","lvl3":""}},
4785
4785
  {"objectID":"df8073a30f7eadd712f3281fdb08836ca593880b0126f80dbfd4b2a603b04eb4","title":"Available Models (Example Configuration)","url":"/docs/getting-started/environment-variables#available-models-example-configuration","content":"openai/gpt-4o - OpenAI GPT-4 Optimized\nanthropic/claude-3-5-sonnet - Anthropic Claude Sonnet\ngoogle/gemini-2.0-flash - Google Gemini Flash\nmistral/mistral-large - Mistral Large model\nMany more via LiteLLM Providers","hierarchy":{"lvl0":"Getting Started","lvl1":"🔧 Environment Variables Configuration Guide","lvl2":"Available Models (Example Configuration)","lvl3":""}},
4786
- {"objectID":"16d6afbe9b3fa8d860520d6dcc83ce880d114aa7b898c7a415c411e0581f7b31","title":"Benefits","url":"/docs/getting-started/environment-variables#benefits","content":"100+ Models: Access to all major AI providers through one interface\nCost Optimization: Automatic routing to cost-effective models\nUnified API: OpenAI-compatible API for all models\nLoad Balancing: Automatic failover and load distribution\nAnalytics: Built-in usage tracking and monitoring","hierarchy":{"lvl0":"Getting Started","lvl1":"🔧 Environment Variables Configuration Guide","lvl2":"Benefits","lvl3":""}},
4786
+ {"objectID":"16d6afbe9b3fa8d860520d6dcc83ce880d114aa7b898c7a415c411e0581f7b31","title":"Benefits","url":"/docs/getting-started/environment-variables#benefits","content":"100+ Models: Access to a broad range of AI providers through one interface\nCost Optimization: Automatic routing to cost-effective models\nUnified API: OpenAI-compatible API for all models\nLoad Balancing: Automatic failover and load distribution\nAnalytics: Built-in usage tracking and monitoring","hierarchy":{"lvl0":"Getting Started","lvl1":"🔧 Environment Variables Configuration Guide","lvl2":"Benefits","lvl3":""}},
4787
4787
  {"objectID":"c6f8a1cbeac3a5649df7fc10e6b3070f8598f774fbf37e0c6ce9d7b12258624f","title":"How to Set Up Amazon SageMaker","url":"/docs/getting-started/environment-variables#how-to-set-up-amazon-sagemaker","content":"Amazon SageMaker allows you to deploy and use your own custom trained models:\nDeploy Your Model to SageMaker:\nTrain your model using SageMaker Training Jobs\nDeploy model to a SageMaker Real-time Endpoint\nNote the endpoint name for configuration\nSet Up AWS Credentials:\nUse IAM user with sagemaker:InvokeEndpoint permission\nOr use IAM role for EC2/Lambda/ECS deployments\nConfigure AWS CLI: aws configure\nConfigure NeuroLink:\nTest Connection:","hierarchy":{"lvl0":"Getting Started","lvl1":"🔧 Environment Variables Configuration Guide","lvl2":"How to Set Up Amazon SageMaker","lvl3":""}},
4788
4788
  {"objectID":"95128ec20e9e749c91d5e3088e62d139a59c69b0a40b875b470aa118414b4940","title":"How to Get AWS Credentials for SageMaker","url":"/docs/getting-started/environment-variables#how-to-get-aws-credentials-for-sagemaker","content":"Create IAM User:\nGo to AWS IAM Console\nCreate new user with Programmatic access\nAttach the following policy:\nDownload Credentials:\nSave Access Key ID and Secret Access Key\nSet as environment variables","hierarchy":{"lvl0":"Getting Started","lvl1":"🔧 Environment Variables Configuration Guide","lvl2":"How to Get AWS Credentials for SageMaker","lvl3":""}},
4789
4789
  {"objectID":"9b2daca4c5f6f2be9874eca1ba8905fd5513bcff8a7050ac5a746d664bf7d828","title":"Supported Models","url":"/docs/getting-started/environment-variables#supported-models-9","content":"SageMaker supports any custom model you deploy:\nCustom Fine-tuned Models - Your domain-specific models\nFoundation Model Endpoints - Large language models deployed via SageMaker\nMulti-model Endpoints - Multiple models behind single endpoint\nServerless Endpoints - Auto-scaling model deployments","hierarchy":{"lvl0":"Getting Started","lvl1":"🔧 Environment Variables Configuration Guide","lvl2":"Supported Models","lvl3":""}},
@@ -4867,9 +4867,9 @@
4867
4867
  {"objectID":"026849e64c4508cd3787981011f9695ae7cc7fe9c37c434b64337d70cc73eb68","title":"Check environment loading","url":"/docs/getting-started/environment-variables#check-environment-loading","content":"node -e \"require('dotenv').config(); console.log(process.env.OPENAIAPIKEY)\"\n`","hierarchy":{"lvl0":"Getting Started","lvl1":"🔧 Environment Variables Configuration Guide","lvl2":"Check environment loading","lvl3":""}},
4868
4868
  {"objectID":"ef5399cfb34b518cd328d8048966f1ffc291aab078e851c68f737fd17d887c3e","title":"📖 Related Documentation","url":"/docs/getting-started/environment-variables#-related-documentation","content":"Provider Configuration Guide - Detailed provider setup\nCLI Guide - Complete CLI command reference\nAPI Reference - Programmatic usage examples\nFramework Integration - Next.js, SvelteKit, React","hierarchy":{"lvl0":"Getting Started","lvl1":"🔧 Environment Variables Configuration Guide","lvl2":"📖 Related Documentation","lvl3":""}},
4869
4869
  {"objectID":"613424cad7ec338b9e008872f0ede32040b09147bcf00c9683472cf820bff525","title":"🤝 Need Help?","url":"/docs/getting-started/environment-variables#-need-help","content":"📖 Check the troubleshooting section above\n🐛 Report issues in our GitHub repository\n💬 Join our Discord for community support\n📧 Contact us for enterprise support\n\nNext Steps: Once configured, test your setup with npx @juspay/neurolink status and start generating AI content!","hierarchy":{"lvl0":"Getting Started","lvl1":"🔧 Environment Variables Configuration Guide","lvl2":"🤝 Need Help?","lvl3":""}},
4870
- {"objectID":"12a7c0529934f3aa32b5e5fc4275c287f34cac54735e0c8f73da4e5f235ce6f2","title":"Getting Started","url":"/docs/getting-started","content":"Getting Started\n\nWelcome to NeuroLink! This section will help you get up and running quickly with the Enterprise AI Development Platform.\n\n🚀 What You'll Learn\nQuick Start — Get NeuroLink working in under 2 minutes with basic examples for both CLI and SDK usage.\nInstallation — Detailed installation instructions for different environments and package managers.\nProvider Setup — Configure API keys and credentials for all 40 supported AI providers with step-by-step guides.\nEnvironment Variables — Complete reference for all environment variables and configuration options.\n\n🎯 Choose Your Path\n\nStart with our Quick Start guide to understand the basics and see NeuroLink in action.\n\nJump to Provider Setup to configure your API keys, then check the CLI Guide.\n\nStart with Claude Proxy for account pooling and local proxy setup, then use Claude Proxy Observability to bring up OpenObserve and the maintained dashboard.\n\nFollow the Installation guide for SDK setup, then explore Framework Integration.\n\nCheck our Provider Comparison to understand the differences and benefits.\n\n🔧 Prerequisites\nNode.js 18+ (for SDK usage)\nnpm/pnpm/yarn (package manager)\nAPI keys for at least one AI provider\n\nYou can start with free providers like Google AI Studio, Hugging Face, or local Ollama to test NeuroLink without costs.\n\n🚦 Next Steps\nQuick Start - Get running in 2 minutes\nProvider Setup - Configure your AI providers\nCLI Guide or SDK Reference - Deep dive into usage\nExamples - See real-world applications","hierarchy":{"lvl0":"Getting Started","lvl1":"Getting Started","lvl2":"","lvl3":""}},
4870
+ {"objectID":"12a7c0529934f3aa32b5e5fc4275c287f34cac54735e0c8f73da4e5f235ce6f2","title":"Getting Started","url":"/docs/getting-started","content":"Getting Started\n\nWelcome to NeuroLink! This section will help you get up and running quickly with the Enterprise AI Development Platform.\n\n🚀 What You'll Learn\nQuick Start — Get NeuroLink working in under 2 minutes with basic examples for both CLI and SDK usage.\nInstallation — Detailed installation instructions for different environments and package managers.\nProvider Setup — Configure API keys and credentials for supported AI providers with step-by-step guides.\nEnvironment Variables — Complete reference for all environment variables and configuration options.\n\n🎯 Choose Your Path\n\nStart with our Quick Start guide to understand the basics and see NeuroLink in action.\n\nJump to Provider Setup to configure your API keys, then check the CLI Guide.\n\nStart with Claude Proxy for account pooling and local proxy setup, then use Claude Proxy Observability to bring up OpenObserve and the maintained dashboard.\n\nFollow the Installation guide for SDK setup, then explore Framework Integration.\n\nCheck our Provider Comparison to understand the differences and benefits.\n\n🔧 Prerequisites\nNode.js 18+ (for SDK usage)\nnpm/pnpm/yarn (package manager)\nAPI keys for at least one AI provider\n\nYou can start with free providers like Google AI Studio, Hugging Face, or local Ollama to test NeuroLink without costs.\n\n🚦 Next Steps\nQuick Start - Get running in 2 minutes\nProvider Setup - Configure your AI providers\nCLI Guide or SDK Reference - Deep dive into usage\nExamples - See real-world applications","hierarchy":{"lvl0":"Getting Started","lvl1":"Getting Started","lvl2":"","lvl3":""}},
4871
4871
  {"objectID":"b0d765c876e121d11333175482464d620229c1f197973fa67042b50b22308662","title":"Getting Started","url":"/docs/getting-started#getting-started","content":"Welcome to NeuroLink! This section will help you get up and running quickly with the Enterprise AI Development Platform.","hierarchy":{"lvl0":"Getting Started","lvl1":"Getting Started","lvl2":"Getting Started","lvl3":""}},
4872
- {"objectID":"664e045414b3df2ca70149c3156c1559808f274707f33f763a26153903b705c0","title":"🚀 What You'll Learn","url":"/docs/getting-started#-what-youll-learn","content":"Quick Start — Get NeuroLink working in under 2 minutes with basic examples for both CLI and SDK usage.\nInstallation — Detailed installation instructions for different environments and package managers.\nProvider Setup — Configure API keys and credentials for all 40 supported AI providers with step-by-step guides.\nEnvironment Variables — Complete reference for all environment variables and configuration options.","hierarchy":{"lvl0":"Getting Started","lvl1":"Getting Started","lvl2":"🚀 What You'll Learn","lvl3":""}},
4872
+ {"objectID":"664e045414b3df2ca70149c3156c1559808f274707f33f763a26153903b705c0","title":"🚀 What You'll Learn","url":"/docs/getting-started#-what-youll-learn","content":"Quick Start — Get NeuroLink working in under 2 minutes with basic examples for both CLI and SDK usage.\nInstallation — Detailed installation instructions for different environments and package managers.\nProvider Setup — Configure API keys and credentials for supported AI providers with step-by-step guides.\nEnvironment Variables — Complete reference for all environment variables and configuration options.","hierarchy":{"lvl0":"Getting Started","lvl1":"Getting Started","lvl2":"🚀 What You'll Learn","lvl3":""}},
4873
4873
  {"objectID":"d0599fd459b08ef75aaf3202e7aa8b9edc8b8c6be692dea34736c1f5bb719bc0","title":"🎯 Choose Your Path","url":"/docs/getting-started#-choose-your-path","content":"Start with our Quick Start guide to understand the basics and see NeuroLink in action.\n\nJump to Provider Setup to configure your API keys, then check the CLI Guide.\n\nStart with Claude Proxy for account pooling and local proxy setup, then use Claude Proxy Observability to bring up OpenObserve and the maintained dashboard.\n\nFollow the Installation guide for SDK setup, then explore Framework Integration.\n\nCheck our Provider Comparison to understand the differences and benefits.","hierarchy":{"lvl0":"Getting Started","lvl1":"Getting Started","lvl2":"🎯 Choose Your Path","lvl3":""}},
4874
4874
  {"objectID":"dc9ae5044fb0c1b760838ace35478cb2b88be20d999c6a3a43e681e8197373d7","title":"🔧 Prerequisites","url":"/docs/getting-started#-prerequisites","content":"Node.js 18+ (for SDK usage)\nnpm/pnpm/yarn (package manager)\nAPI keys for at least one AI provider\n\nYou can start with free providers like Google AI Studio, Hugging Face, or local Ollama to test NeuroLink without costs.","hierarchy":{"lvl0":"Getting Started","lvl1":"Getting Started","lvl2":"🔧 Prerequisites","lvl3":""}},
4875
4875
  {"objectID":"1a7e94c2c9326d04263d5fb9a57f370d340a0afd2a6ed097c94d584a94bdd0d9","title":"🚦 Next Steps","url":"/docs/getting-started#-next-steps","content":"Quick Start - Get running in 2 minutes\nProvider Setup - Configure your AI providers\nCLI Guide or SDK Reference - Deep dive into usage\nExamples - See real-world applications","hierarchy":{"lvl0":"Getting Started","lvl1":"Getting Started","lvl2":"🚦 Next Steps","lvl3":""}},
@@ -4912,13 +4912,13 @@
4912
4912
  {"objectID":"8bee50a94bc91cf5273efb43aa2f13a39be6cd72e048c55da55bd80bc74ce8a0","title":"Getting Help","url":"/docs/getting-started/installation#getting-help","content":"Check our Troubleshooting Guide\nReview FAQ\nSearch GitHub Issues\nCreate new issue with:\nNode.js version (node --version)\nOperating system\nError message\nSteps to reproduce","hierarchy":{"lvl0":"Getting Started","lvl1":"Installation","lvl2":"Getting Help","lvl3":""}},
4913
4913
  {"objectID":"80210a84a233c58e9a12aa96cedd225ad03c3bfe5344b78032d691be93ae3ba0","title":"Verification Checklist","url":"/docs/getting-started/installation#verification-checklist","content":"[ ] Node.js 18+ installed\n[ ] NeuroLink package installed or accessible via npx\n[ ] API keys configured in .env file\n[ ] neurolink status shows working providers\n[ ] Basic generation command works\n[ ] TypeScript support (if needed)\n[ ] Framework integration (if applicable)","hierarchy":{"lvl0":"Getting Started","lvl1":"Installation","lvl2":"Verification Checklist","lvl3":""}},
4914
4914
  {"objectID":"44c035a6ed0dc3b4a04ad68e17bc22de77840cb664eaee4e84f04bb8bd70caaf","title":"Next Steps","url":"/docs/getting-started/installation#next-steps","content":"Quick Start - Test your installation\nProvider Setup - Configure AI providers\nCLI Commands - Learn available commands\nExamples - See implementation patterns","hierarchy":{"lvl0":"Getting Started","lvl1":"Installation","lvl2":"Next Steps","lvl3":""}},
4915
- {"objectID":"c44f69a5d19212c85a451486bef65999f3ef505311f283fa4a129d90603820ac","title":"⚙️ Provider Configuration Guide","url":"/docs/getting-started/provider-setup","content":"⚙️ Provider Configuration Guide\n\nNeuroLink supports multiple AI providers with flexible authentication methods. This guide covers complete setup for all supported providers.\n\nSupported Providers\n\nThis guide walks through full environment-variable setup for the providers below; the complete roster — including the newer catalog providers and the embedding/media/decision-only providers — is indexed with setup guides at Provider Guides.\n\nProviders configured in this guide\nOpenAI - GPT-4o, GPT-4o-mini, GPT-4-turbo\nAmazon Bedrock - Claude 3.7 Sonnet, Claude 3.5 Sonnet, Claude 3 Haiku\nAmazon SageMaker - Custom models deployed on SageMaker endpoints\nGoogle Vertex AI - Gemini 3 Flash/Pro (preview), Gemini 2.5 Flash, Claude 4.0 Sonnet\nGoogle AI Studio - Gemini 1.5 Pro, Gemini 2.0 Flash, Gemini 1.5 Flash\nAnthropic - Claude 4.5 Opus/Sonnet/Haiku, Claude 4.0 Opus/Sonnet, Claude 3.7 Sonnet\nAzure OpenAI - GPT-4, GPT-3.5-Turbo\nLiteLLM - 100+ models from all providers via proxy server\nHugging Face - open models served by the unified router (Llama 3.x, Qwen 2.5, DeepSeek, Mistral)\nOllama - Local AI models including Llama 2, Code Llama, Mistral, Vicuna\nOpenRouter - 300+ models from every major lab via one aggregator endpoint\nMistral AI - Mistral Tiny, Small, Medium, and Large models\nDeepSeek - deepseek-chat (V3) and deepseek-reasoner (R1)\nNVIDIA NIM - Llama 3.3 70B and 400+ catalog models via NVIDIA hosted or self-hosted NIM\nLM Studio - Any model loaded in LM Studio desktop app (local, no API key required)\nllama.cpp - Any GGUF model served by llama-server (local, no API key required)\n\nOther providers (setup guides in the Provider Guides index)\n\nOnboarded via the zero-quirk OpenAI-wire-compatible catalog (Tier 2) — each has its own setup guide under providers/:\nGroq - LPU-accelerated inference; default openai/gpt-oss-120b\nCerebras - Wafer-scale inference; default gpt-oss-120b\nSambaNova - default Meta-Llama-3.3-70B-Instruct\nTogether AI - default meta-llama/Llama-3.3-70B-Instruct-Turbo\nFireworks AI - default accounts/fireworks/models/kimi-k2p6\nPerplexity - search-augmented models; default sonar\nCloudflare Workers AI - edge inference\nxAI - Grok models; default grok-4.6\nBaseten - default zai-org/GLM-5.3-Flash (BASETEN_API_KEY)\nGMI Cloud - default MiniMaxAI/MiniMax-M3 (GMICLOUD_API_KEY)\nInception Labs - diffusion LLMs; default mercury-2 (INCEPTION_LABS_API_KEY)\nio.net Intelligence - decentralized GPU inference; default meta-llama/Llama-3.3-70B-Instruct (IO_INTELLIGENCE_API_KEY)\nMancer - default deepseek-v4-flash (MANCER_API_KEY); no tool calling\nUpstage - Solar models; default solar-pro4 (UPSTAGE_API_KEY)\nAPI Route - OpenAI-compatible passthrough; default claude-sonnet-4-6 (API_ROUTE_API_KEY)\n\nEmbedding, media-generation, and decision-only providers — not part of generate()/stream() provider selection in the same way, but each has a setup guide:\nCohere - chat + embed-english-v3.0 embeddings + reranking\nVoyage AI - embedding-only; default voyage-3.5\nJina AI - embeddings + reranking; default jina-embeddings-v3\nReplicate, Stability AI, Ideogram, Recraft - direct image generation\nTypeSafe Jev - decision-only; serves decide(), not generate()/stream(). Set TYPESAFE_API_KEY (or AI_GATEWAY_API_KEY for the gateway transport)\nLaya - decision-only, open-weights; serves decide() on a Laya server or LiteLLM proxy route you configure. Set LAYA_API_KEY + LAYA_BASE_URL; used when TypeSafe isn't configured\n\nVoice providers (TTS/STT/Realtime) are configured further down in this guide — see OpenAI TTS onward.\n\n💰 Model Availability & Cost Considerations\n\nImportant Notes:\nModel Availability: Specific models may not be available in all regions or require special access\nCost Variations: Pricing differs significantly between providers and models (e.g., Claude 3.5 Sonnet vs GPT-4o)\nRate Limits: Each provider has different rate limits and quota restrictions\nLocal vs Cloud: Ollama (local) has no per-request cost but requires hardware resources\nEnterprise Tiers: AWS Bedrock, Google Vertex AI, and Azure typically offer enterprise pricing\n\nBest Practices:\nUse new NeuroLink() with automatic provider selection for cost-optimized routing\nMonitor usage through built-in analytics to track costs\nConsider local models (Ollama) for development and testing\nCheck provider documentation for current pricing and availability\n\n🏢 Enterprise Proxy Support\n\nAll providers support corporate proxy environments automatically. Simply set environment variables:\n\nNo code changes required - NeuroLink automatically detects and uses proxy settings.\n\nFor detailed proxy setup → See Enterprise & Proxy Setup Guide\n\nOpenAI Configuration {#openai}\n\nBasic Setup\n\nOptional Configuration\n\nSupported Models\ngpt-4o (default) - Latest multimodal model\ngpt-4o-mini - Cost-effective variant\ngpt-4-turbo - High-performance model\n\nUsage Example\n\nTimeout Configuration\nDefault Timeout: 30 seconds\nSupported Formats: Milliseconds (30000), human-readable ('30s', '1m', '5m')\nEnvironment Variable: OPENAI_TIMEOUT","hierarchy":{"lvl0":"Getting Started","lvl1":"⚙️ Provider Configuration Guide","lvl2":"","lvl3":""}},
4915
+ {"objectID":"c44f69a5d19212c85a451486bef65999f3ef505311f283fa4a129d90603820ac","title":"⚙️ Provider Configuration Guide","url":"/docs/getting-started/provider-setup","content":"⚙️ Provider Configuration Guide\n\nNeuroLink supports multiple AI providers with flexible authentication methods. This guide covers complete setup for all supported providers.\n\nSupported Providers\n\nThis guide walks through full environment-variable setup for the providers below; the complete roster — including the newer catalog providers and the embedding/media/decision-only providers — is indexed with setup guides at Provider Guides.\n\nProviders configured in this guide\nOpenAI - GPT-4o, GPT-4o-mini, GPT-4-turbo\nAmazon Bedrock - Claude 3.7 Sonnet, Claude 3.5 Sonnet, Claude 3 Haiku\nAmazon SageMaker - Custom models deployed on SageMaker endpoints\nGoogle Vertex AI - Gemini 3 Flash/Pro (preview), Gemini 2.5 Flash, Claude 4.0 Sonnet\nGoogle AI Studio - Gemini 1.5 Pro, Gemini 2.0 Flash, Gemini 1.5 Flash\nAnthropic - Claude 4.5 Opus/Sonnet/Haiku, Claude 4.0 Opus/Sonnet, Claude 3.7 Sonnet\nAzure OpenAI - GPT-4, GPT-3.5-Turbo\nLiteLLM - 100+ models across a broad range of providers via proxy server\nHugging Face - open models served by the unified router (Llama 3.x, Qwen 2.5, DeepSeek, Mistral)\nOllama - Local AI models including Llama 2, Code Llama, Mistral, Vicuna\nOpenRouter - 300+ models from every major lab via one aggregator endpoint\nMistral AI - Mistral Tiny, Small, Medium, and Large models\nDeepSeek - deepseek-chat (V3) and deepseek-reasoner (R1)\nNVIDIA NIM - Llama 3.3 70B and 400+ catalog models via NVIDIA hosted or self-hosted NIM\nLM Studio - Any model loaded in LM Studio desktop app (local, no API key required)\nllama.cpp - Any GGUF model served by llama-server (local, no API key required)\n\nOther providers (setup guides in the Provider Guides index)\n\nOnboarded via the zero-quirk OpenAI-wire-compatible catalog (Tier 2) — each has its own setup guide under providers/:\nGroq - LPU-accelerated inference; default openai/gpt-oss-120b\nCerebras - Wafer-scale inference; default gpt-oss-120b\nSambaNova - default Meta-Llama-3.3-70B-Instruct\nTogether AI - default meta-llama/Llama-3.3-70B-Instruct-Turbo\nFireworks AI - default accounts/fireworks/models/kimi-k2p6\nPerplexity - search-augmented models; default sonar\nCloudflare Workers AI - edge inference\nxAI - Grok models; default grok-4.6\nBaseten - default zai-org/GLM-5.3-Flash (BASETEN_API_KEY)\nGMI Cloud - default MiniMaxAI/MiniMax-M3 (GMICLOUD_API_KEY)\nInception Labs - diffusion LLMs; default mercury-2 (INCEPTION_LABS_API_KEY)\nio.net Intelligence - decentralized GPU inference; default meta-llama/Llama-3.3-70B-Instruct (IO_INTELLIGENCE_API_KEY)\nMancer - default deepseek-v4-flash (MANCER_API_KEY); no tool calling\nUpstage - Solar models; default solar-pro4 (UPSTAGE_API_KEY)\nAPI Route - OpenAI-compatible passthrough; default claude-sonnet-4-6 (API_ROUTE_API_KEY)\n\nEmbedding, media-generation, and decision-only providers — not part of generate()/stream() provider selection in the same way, but each has a setup guide:\nCohere - chat + embed-english-v3.0 embeddings + reranking\nVoyage AI - embedding-only; default voyage-3.5\nJina AI - embeddings + reranking; default jina-embeddings-v3\nReplicate, Stability AI, Ideogram, Recraft - direct image generation\nTypeSafe Jev - decision-only; serves decide(), not generate()/stream(). Set TYPESAFE_API_KEY (or AI_GATEWAY_API_KEY for the gateway transport)\nLaya - decision-only, open-weights; serves decide() on a Laya server or LiteLLM proxy route you configure. Set LAYA_API_KEY + LAYA_BASE_URL; used when TypeSafe isn't configured\n\nVoice providers (TTS/STT/Realtime) are configured further down in this guide — see OpenAI TTS onward.\n\n💰 Model Availability & Cost Considerations\n\nImportant Notes:\nModel Availability: Specific models may not be available in all regions or require special access\nCost Variations: Pricing differs significantly between providers and models (e.g., Claude 3.5 Sonnet vs GPT-4o)\nRate Limits: Each provider has different rate limits and quota restrictions\nLocal vs Cloud: Ollama (local) has no per-request cost but requires hardware resources\nEnterprise Tiers: AWS Bedrock, Google Vertex AI, and Azure typically offer enterprise pricing\n\nBest Practices:\nUse new NeuroLink() with automatic provider selection for cost-optimized routing\nMonitor usage through built-in analytics to track costs\nConsider local models (Ollama) for development and testing\nCheck provider documentation for current pricing and availability\n\n🏢 Enterprise Proxy Support\n\nProviders support corporate proxy environments automatically. Simply set environment variables:\n\nNo code changes required - NeuroLink automatically detects and uses proxy settings.\n\nFor detailed proxy setup → See Enterprise & Proxy Setup Guide\n\nOpenAI Configuration {#openai}\n\nBasic Setup\n\nOptional Configuration\n\nSupported Models\ngpt-4o (default) - Latest multimodal model\ngpt-4o-mini - Cost-effective variant\ngpt-4-turbo - High-performance model\n\nUsage Example\n\nTimeout Configuration\nDefault Timeout: 30 seconds\nSupported Formats: Milliseconds (30000), human-readable ('30s', '1m', '5m')\nEnvironment Variable: OPE","hierarchy":{"lvl0":"Getting Started","lvl1":"⚙️ Provider Configuration Guide","lvl2":"","lvl3":""}},
4916
4916
  {"objectID":"44479af76ca558a6630aafa39578fb6543bd892844c3a6c5948ffd58a2d73287","title":"⚙️ Provider Configuration Guide","url":"/docs/getting-started/provider-setup#-provider-configuration-guide","content":"NeuroLink supports multiple AI providers with flexible authentication methods. This guide covers complete setup for all supported providers.","hierarchy":{"lvl0":"Getting Started","lvl1":"⚙️ Provider Configuration Guide","lvl2":"⚙️ Provider Configuration Guide","lvl3":""}},
4917
4917
  {"objectID":"ed4c54afa059a89c0cb4a7815f361a50933fe695ec62b3df5a0bd4ad2e25e431","title":"Supported Providers","url":"/docs/getting-started/provider-setup#supported-providers","content":"This guide walks through full environment-variable setup for the providers below; the complete roster — including the newer catalog providers and the embedding/media/decision-only providers — is indexed with setup guides at Provider Guides.","hierarchy":{"lvl0":"Getting Started","lvl1":"⚙️ Provider Configuration Guide","lvl2":"Supported Providers","lvl3":""}},
4918
- {"objectID":"c0abb48e819713cb16c04d745137321d348118c823351fcf31ab014735dd036e","title":"Providers configured in this guide","url":"/docs/getting-started/provider-setup#providers-configured-in-this-guide","content":"OpenAI - GPT-4o, GPT-4o-mini, GPT-4-turbo\nAmazon Bedrock - Claude 3.7 Sonnet, Claude 3.5 Sonnet, Claude 3 Haiku\nAmazon SageMaker - Custom models deployed on SageMaker endpoints\nGoogle Vertex AI - Gemini 3 Flash/Pro (preview), Gemini 2.5 Flash, Claude 4.0 Sonnet\nGoogle AI Studio - Gemini 1.5 Pro, Gemini 2.0 Flash, Gemini 1.5 Flash\nAnthropic - Claude 4.5 Opus/Sonnet/Haiku, Claude 4.0 Opus/Sonnet, Claude 3.7 Sonnet\nAzure OpenAI - GPT-4, GPT-3.5-Turbo\nLiteLLM - 100+ models from all providers via proxy server\nHugging Face - open models served by the unified router (Llama 3.x, Qwen 2.5, DeepSeek, Mistral)\nOllama - Local AI models including Llama 2, Code Llama, Mistral, Vicuna\nOpenRouter - 300+ models from every major lab via one aggregator endpoint\nMistral AI - Mistral Tiny, Small, Medium, and Large models\nDeepSeek - deepseek-chat (V3) and deepseek-reasoner (R1)\nNVIDIA NIM - Llama 3.3 70B and 400+ catalog models via NVIDIA hosted or self-hosted NIM\nLM Studio - Any model loaded in LM Studio desktop app (local, no API key required)\nllama.cpp - Any GGUF model served by llama-server (local, no API key required)","hierarchy":{"lvl0":"Getting Started","lvl1":"⚙️ Provider Configuration Guide","lvl2":"Providers configured in this guide","lvl3":""}},
4918
+ {"objectID":"c0abb48e819713cb16c04d745137321d348118c823351fcf31ab014735dd036e","title":"Providers configured in this guide","url":"/docs/getting-started/provider-setup#providers-configured-in-this-guide","content":"OpenAI - GPT-4o, GPT-4o-mini, GPT-4-turbo\nAmazon Bedrock - Claude 3.7 Sonnet, Claude 3.5 Sonnet, Claude 3 Haiku\nAmazon SageMaker - Custom models deployed on SageMaker endpoints\nGoogle Vertex AI - Gemini 3 Flash/Pro (preview), Gemini 2.5 Flash, Claude 4.0 Sonnet\nGoogle AI Studio - Gemini 1.5 Pro, Gemini 2.0 Flash, Gemini 1.5 Flash\nAnthropic - Claude 4.5 Opus/Sonnet/Haiku, Claude 4.0 Opus/Sonnet, Claude 3.7 Sonnet\nAzure OpenAI - GPT-4, GPT-3.5-Turbo\nLiteLLM - 100+ models across a broad range of providers via proxy server\nHugging Face - open models served by the unified router (Llama 3.x, Qwen 2.5, DeepSeek, Mistral)\nOllama - Local AI models including Llama 2, Code Llama, Mistral, Vicuna\nOpenRouter - 300+ models from every major lab via one aggregator endpoint\nMistral AI - Mistral Tiny, Small, Medium, and Large models\nDeepSeek - deepseek-chat (V3) and deepseek-reasoner (R1)\nNVIDIA NIM - Llama 3.3 70B and 400+ catalog models via NVIDIA hosted or self-hosted NIM\nLM Studio - Any model loaded in LM Studio desktop app (local, no API key required)\nllama.cpp - Any GGUF model served by llama-server (local, no API key required)","hierarchy":{"lvl0":"Getting Started","lvl1":"⚙️ Provider Configuration Guide","lvl2":"Providers configured in this guide","lvl3":""}},
4919
4919
  {"objectID":"cc96a04c9f262c3c1f6f8b8e7c82407cc63406705250afd22947a3567e151721","title":"Other providers (setup guides in the Provider Guides index)","url":"/docs/getting-started/provider-setup#other-providers-setup-guides-in-the-provider-guides-index","content":"Onboarded via the zero-quirk OpenAI-wire-compatible catalog (Tier 2) — each has its own setup guide under providers/:\nGroq - LPU-accelerated inference; default openai/gpt-oss-120b\nCerebras - Wafer-scale inference; default gpt-oss-120b\nSambaNova - default Meta-Llama-3.3-70B-Instruct\nTogether AI - default meta-llama/Llama-3.3-70B-Instruct-Turbo\nFireworks AI - default accounts/fireworks/models/kimi-k2p6\nPerplexity - search-augmented models; default sonar\nCloudflare Workers AI - edge inference\nxAI - Grok models; default grok-4.6\nBaseten - default zai-org/GLM-5.3-Flash (BASETEN_API_KEY)\nGMI Cloud - default MiniMaxAI/MiniMax-M3 (GMICLOUD_API_KEY)\nInception Labs - diffusion LLMs; default mercury-2 (INCEPTION_LABS_API_KEY)\nio.net Intelligence - decentralized GPU inference; default meta-llama/Llama-3.3-70B-Instruct (IO_INTELLIGENCE_API_KEY)\nMancer - default deepseek-v4-flash (MANCER_API_KEY); no tool calling\nUpstage - Solar models; default solar-pro4 (UPSTAGE_API_KEY)\nAPI Route - OpenAI-compatible passthrough; default claude-sonnet-4-6 (API_ROUTE_API_KEY)\n\nEmbedding, media-generation, and decision-only providers — not part of generate()/stream() provider selection in the same way, but each has a setup guide:\nCohere - chat + embed-english-v3.0 embeddings + reranking\nVoyage AI - embedding-only; default voyage-3.5\nJina AI - embeddings + reranking; default jina-embeddings-v3\nReplicate, Stability AI, Ideogram, Recraft - direct image generation\nTypeSafe Jev - decision-only; serves decide(), not generate()/stream(). Set TYPESAFE_API_KEY (or AI_GATEWAY_API_KEY for the gateway transport)\nLaya - decision-only, open-weights; serves decide() on a Laya server or LiteLLM proxy route you configure. Set LAYA_API_KEY + LAYA_BASE_URL; used when TypeSafe isn't configured\n\nVoice providers (TTS/STT/Realtime) are configured further down in this guide — see OpenAI TTS onward.","hierarchy":{"lvl0":"Getting Started","lvl1":"⚙️ Provider Configuration Guide","lvl2":"Other providers (setup guides in the Provider Guides index)","lvl3":""}},
4920
4920
  {"objectID":"d17be3311722218280d0e76731e7344c620c18f5073e07abbc826f3922db976a","title":"💰 Model Availability & Cost Considerations","url":"/docs/getting-started/provider-setup#-model-availability-cost-considerations","content":"Important Notes:\nModel Availability: Specific models may not be available in all regions or require special access\nCost Variations: Pricing differs significantly between providers and models (e.g., Claude 3.5 Sonnet vs GPT-4o)\nRate Limits: Each provider has different rate limits and quota restrictions\nLocal vs Cloud: Ollama (local) has no per-request cost but requires hardware resources\nEnterprise Tiers: AWS Bedrock, Google Vertex AI, and Azure typically offer enterprise pricing\n\nBest Practices:\nUse new NeuroLink() with automatic provider selection for cost-optimized routing\nMonitor usage through built-in analytics to track costs\nConsider local models (Ollama) for development and testing\nCheck provider documentation for current pricing and availability","hierarchy":{"lvl0":"Getting Started","lvl1":"⚙️ Provider Configuration Guide","lvl2":"💰 Model Availability & Cost Considerations","lvl3":""}},
4921
- {"objectID":"3a1bd0ccb708d37a59e2db3650f689f77fba69e91ec88142c7c9b85f1c18057d","title":"🏢 Enterprise Proxy Support","url":"/docs/getting-started/provider-setup#-enterprise-proxy-support","content":"All providers support corporate proxy environments automatically. Simply set environment variables:\n\nNo code changes required - NeuroLink automatically detects and uses proxy settings.\n\nFor detailed proxy setup → See Enterprise & Proxy Setup Guide","hierarchy":{"lvl0":"Getting Started","lvl1":"⚙️ Provider Configuration Guide","lvl2":"🏢 Enterprise Proxy Support","lvl3":""}},
4921
+ {"objectID":"3a1bd0ccb708d37a59e2db3650f689f77fba69e91ec88142c7c9b85f1c18057d","title":"🏢 Enterprise Proxy Support","url":"/docs/getting-started/provider-setup#-enterprise-proxy-support","content":"Providers support corporate proxy environments automatically. Simply set environment variables:\n\nNo code changes required - NeuroLink automatically detects and uses proxy settings.\n\nFor detailed proxy setup → See Enterprise & Proxy Setup Guide","hierarchy":{"lvl0":"Getting Started","lvl1":"⚙️ Provider Configuration Guide","lvl2":"🏢 Enterprise Proxy Support","lvl3":""}},
4922
4922
  {"objectID":"1b0159447e4aee3ffd31efe28600cf755e4cc49d50f354e1a59d9574199213d2","title":"Supported Models","url":"/docs/getting-started/provider-setup#supported-models","content":"gpt-4o (default) - Latest multimodal model\ngpt-4o-mini - Cost-effective variant\ngpt-4-turbo - High-performance model","hierarchy":{"lvl0":"Getting Started","lvl1":"⚙️ Provider Configuration Guide","lvl2":"Supported Models","lvl3":""}},
4923
4923
  {"objectID":"27581667470b332f3c1c5159d4345a675be587f71dfb0d0b5d2a342adf1d2d44","title":"Timeout Configuration","url":"/docs/getting-started/provider-setup#timeout-configuration","content":"Default Timeout: 30 seconds\nSupported Formats: Milliseconds (30000), human-readable ('30s', '1m', '5m')\nEnvironment Variable: OPENAI_TIMEOUT='45s' (optional)","hierarchy":{"lvl0":"Getting Started","lvl1":"⚙️ Provider Configuration Guide","lvl2":"Timeout Configuration","lvl3":""}},
4924
4924
  {"objectID":"9c310a3f365a46c6628ae6910d2bb72ec8560e43353e044f6c9b73e5ce8d1798","title":"🚨 Critical Setup Requirements","url":"/docs/getting-started/provider-setup#-critical-setup-requirements","content":"⚠️ IMPORTANT: Anthropic Models Require Inference Profile ARN\n\nFor Anthropic Claude models in Bedrock, you MUST use the full inference profile ARN, not simple model names:\n\n`bash","hierarchy":{"lvl0":"Getting Started","lvl1":"⚙️ Provider Configuration Guide","lvl2":"🚨 Critical Setup Requirements","lvl3":""}},
@@ -4991,7 +4991,7 @@
4991
4991
  {"objectID":"497b3d51224d322e05db352815782bea7fcb3c132fe7cd95610db446a0a5c075","title":"Optional: Default model selection","url":"/docs/getting-started/provider-setup#optional-default-model-selection","content":"`","hierarchy":{"lvl0":"Getting Started","lvl1":"⚙️ Provider Configuration Guide","lvl2":"Optional: Default model selection","lvl3":""}},
4992
4992
  {"objectID":"50905a021f274d78cfbc8774739edd4c66dc2043d18106d5d69fc40fb8203dc4","title":"Rate Limits and Quotas","url":"/docs/getting-started/provider-setup#rate-limits-and-quotas","content":"Google AI Studio includes generous free tier limits:\nFree Tier: 15 requests per minute, 1,500 requests per day\nPaid Usage: Higher limits available with billing enabled\nModel-Specific: Different models may have different rate limits","hierarchy":{"lvl0":"Getting Started","lvl1":"⚙️ Provider Configuration Guide","lvl2":"Rate Limits and Quotas","lvl3":""}},
4993
4993
  {"objectID":"9bdc413342f12139f8eda0ef7773b7d54afce16b483c78401edeb8c488f1dbdf","title":"Security Considerations","url":"/docs/getting-started/provider-setup#security-considerations","content":"API Key Security: Treat API keys as sensitive credentials\nEnvironment Variables: Never commit API keys to version control\nRate Limiting: Implement client-side rate limiting for production apps\nMonitoring: Monitor usage to avoid unexpected charges","hierarchy":{"lvl0":"Getting Started","lvl1":"⚙️ Provider Configuration Guide","lvl2":"Security Considerations","lvl3":""}},
4994
- {"objectID":"1485e35ac09dab942a1e2a7e6d1d5eb003edf3993a58b961783f6ae7b076e210","title":"LiteLLM Configuration","url":"/docs/getting-started/provider-setup#litellm-configuration","content":"LiteLLM provides access to 100+ models through a unified proxy server, allowing you to use any AI provider through a single interface.","hierarchy":{"lvl0":"Getting Started","lvl1":"⚙️ Provider Configuration Guide","lvl2":"LiteLLM Configuration","lvl3":""}},
4994
+ {"objectID":"1485e35ac09dab942a1e2a7e6d1d5eb003edf3993a58b961783f6ae7b076e210","title":"LiteLLM Configuration","url":"/docs/getting-started/provider-setup#litellm-configuration","content":"LiteLLM provides access to 100+ models through a unified proxy server, allowing you to use supported AI providers through a single interface.","hierarchy":{"lvl0":"Getting Started","lvl1":"⚙️ Provider Configuration Guide","lvl2":"LiteLLM Configuration","lvl3":""}},
4995
4995
  {"objectID":"f59d9b65be729e58d4c0b353daf2e012c6287960a20a47bc150960b23e1ff903","title":"Prerequisites","url":"/docs/getting-started/provider-setup#prerequisites-1","content":"Install LiteLLM:\nStart LiteLLM proxy server:\n\n`bash","hierarchy":{"lvl0":"Getting Started","lvl1":"⚙️ Provider Configuration Guide","lvl2":"Prerequisites","lvl3":""}},
4996
4996
  {"objectID":"3dcd4a02eb4068b5f9b2688a5997e83cb8d18d32c64a7f7ff433a47ed89cb98c","title":"Basic usage","url":"/docs/getting-started/provider-setup#basic-usage","content":"litellm --port 4000","hierarchy":{"lvl0":"Getting Started","lvl1":"⚙️ Provider Configuration Guide","lvl2":"Basic usage","lvl3":""}},
4997
4997
  {"objectID":"bd1b9e48d6be39ee40e6d1d56211486b7eda87e1ab0958f0a463047b3b61061c","title":"With configuration file (recommended)","url":"/docs/getting-started/provider-setup#with-configuration-file-recommended","content":"litellm --config litellm_config.yaml --port 4000\n`","hierarchy":{"lvl0":"Getting Started","lvl1":"⚙️ Provider Configuration Guide","lvl2":"With configuration file (recommended)","lvl3":""}},
@@ -5609,15 +5609,15 @@
5609
5609
  {"objectID":"9d254192d1446a6d2433b439814e2084c26cfc40cf978f2b58ee92d11ad94842","title":"Configuration Reference","url":"/docs/getting-started/providers/flatkey#configuration-reference","content":"| Variable | Required | Description |\n| ---------------------------- | -------- | ----------------------------------------------------------- |\n| OPENAI_COMPATIBLE_BASE_URL | Yes | Flatkey endpoint — https://router.flatkey.ai/v1 |\n| OPENAI_COMPATIBLE_API_KEY | Yes | API key from the console |\n| OPENAI_COMPATIBLE_MODEL | No | Default model; overridable per request |\n\nFlatkey routes to upstream providers, so per-model availability follows the live\ncatalog rather than a fixed list. A machine-readable integration summary is\npublished at https://flatkey.ai/SKILL.md.","hierarchy":{"lvl0":"Getting Started","lvl1":"Flatkey Provider Guide","lvl2":"Configuration Reference","lvl3":""}},
5610
5610
  {"objectID":"550c70ada734bc846e71a11aa4a04f5a7d5c588444eb1013973cd3466274b520","title":"Troubleshooting","url":"/docs/getting-started/providers/flatkey#troubleshooting","content":"401 Unauthorized\nThe key is missing or malformed. Keys start with sk-fk- and are\nissued at https://console.flatkey.ai/keys. Confirm the value is exported in\nthe environment NeuroLink runs in.\n\n404 on chat completions\nCheck that OPENAI_COMPATIBLE_BASE_URL ends with /v1. The gateway follows the\nOpenAI path layout, so the version segment is part of the base URL.\n\nModel not found\nModel IDs must match the live catalog exactly. List what your key can reach:\n\nEmpty or truncated responses\nUpstream providers apply their own limits. Try a different model from the\ncatalog to isolate whether the behaviour is model-specific.","hierarchy":{"lvl0":"Getting Started","lvl1":"Flatkey Provider Guide","lvl2":"Troubleshooting","lvl3":""}},
5611
5611
  {"objectID":"1f92b8bd349af9436446b4060203d2a61b288d38359030bc83db930dceee4076","title":"See Also","url":"/docs/getting-started/providers/flatkey#see-also","content":"OpenAI-Compatible Providers Guide\nOpenRouter Provider Guide\nLiteLLM Provider Guide","hierarchy":{"lvl0":"Getting Started","lvl1":"Flatkey Provider Guide","lvl2":"See Also","lvl3":""}},
5612
- {"objectID":"b49adfb9356e8bb74d8cd90813f7848391c5bd042cf3f6ce2c741f11cca4e8e1","title":"FriendliAI Provider Guide","url":"/docs/getting-started/providers/friendli","content":"FriendliAI Provider Guide\n\nFriendliAI is a Tier-2 catalog provider: OpenAI-wire-compatible with no\nbehavioural quirks, so its entire integration is one JSON file\n(src/lib/providers/catalog/friendli.json) rather than hand-written code. That\nfile is the source of truth for everything on this page.\n\nKey Facts\nProvider id: friendli\nProtocol: OpenAI-compatible (/chat/completions)\nBase URL: https://api.friendli.ai/serverless/v1\nDefault model: zai-org/GLM-5.3\nModels in catalog: 7\nStreaming: supported\nTool calling: supported (native)\nStructured output: supported — but not combined with tools in one\n request: Friendli rejects tools + response_format together with HTTP\n 422 (\"response_format\" field cannot be set when tools are specified).\n NeuroLink handles this the same way as Groq (isToolsSchemaConflictError):\n it retries the call without response_format.\nEmbeddings: not supported\nBilling: free-tier\nKey format: none declared\nRate limits: tight — pace requests at least 20 seconds apart\n\nQuick Start\nGet an API key\nVisit: https://suite.friendli.ai/ and sign in\nCreate a Personal Access Token for the serverless endpoints\nNew accounts start with trial credit; confirm current billing terms in the console before heavy use\nSet FRIENDLI_API_KEY in your .env file\nConfigure\nUse it\n\nPer-request credentials work as they do for every provider:\n\nModels\n\n| Model | Context | Vision | $/M in · out | Notes |\n| --------------------------- | ------- | ------ | -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| zai-org/GLM-5.3 ⭐ | 1M | no | $1.4 / $4.4 (cached $0.26) | Recommended — the only model in this roster capability-probed end to end (real tool call, SSE streaming, json_object). Heavy internal reasoner via reasoning/reasoning_content — give it a generous maxTokens. Rejects image/video input (HTTP 422). |\n| zai-org/GLM-5.3-Flash | 1M | no | — | Lighter/faster sibling of the default; roster-listed only, not itself capability-probed; fallback. |\n| zai-org/GLM-5.2 | 1M | no | — | Prior GLM generation; roster-listed only; fallback. |\n| zai-org/GLM-5.1 | 1M | no | — | Prior GLM generation; roster-listed only; fallback. |\n| google/gemma-4-31B-it | 1M | no | — | Google Gemma 4 31B instruct-tuned; roster-listed only; fallback. |\n| deepseek-ai/DeepSeek-V3.2 | 1M | no | — | DeepSeek V3.2; roster-listed only; fallback. |\n| MiniMaxAI/MiniMax-M2.5 | 1M | no | — | MiniMax M2.5; roster-listed only; fallback. |\n\nContext window shown is the catalog default of 1,048,576 tokens; the default\nmax output is 131,072 tokens (zai-org/GLM-5.3's documented per-request\noutput ceiling, distinct from the context window).\n\nFallback order when the default is unavailable: zai-org/GLM-5.3-Flash →\nzai-org/GLM-5.2 → zai-org/GLM-5.1 → google/gemma-4-31B-it →\ndeepseek-ai/DeepSeek-V3.2 → MiniMaxAI/MiniMax-M2.5.\n\nVerification status\n\nTier-2 onboarding requires evidence before a provider is accepted, and\npnpm run verify:provider-onboarding gates it in CI. This is what the\ncatalog records for FriendliAI:\n\n| Probe | Result ","hierarchy":{"lvl0":"Getting Started","lvl1":"FriendliAI Provider Guide","lvl2":"","lvl3":""}},
5612
+ {"objectID":"b49adfb9356e8bb74d8cd90813f7848391c5bd042cf3f6ce2c741f11cca4e8e1","title":"FriendliAI Provider Guide","url":"/docs/getting-started/providers/friendli","content":"FriendliAI Provider Guide\n\nFriendliAI is a Tier-2 catalog provider: OpenAI-wire-compatible with no\nbehavioural quirks, so its entire integration is one JSON file\n(src/lib/providers/catalog/friendli.json) rather than hand-written code. That\nfile is the source of truth for everything on this page.\n\nKey Facts\nProvider id: friendli\nProtocol: OpenAI-compatible (/chat/completions)\nBase URL: https://api.friendli.ai/serverless/v1\nDefault model: zai-org/GLM-5.3\nModels in catalog: 7\nStreaming: supported\nTool calling: supported (native)\nStructured output: supported. Friendli rejects tools + response_format\n together with HTTP 422 (\"response_format\" field cannot be set when tools\nare specified), so NeuroLink proactively omits response_format whenever\n tools are present, before the request is sent — it does not wait for the\n 422 and retry.\nEmbeddings: not supported\nBilling: free-tier\nKey format: none declared\nRate limits: tight — pace requests at least 20 seconds apart\n\nQuick Start\nGet an API key\nVisit: https://suite.friendli.ai/ and sign in\nCreate a Personal Access Token for the serverless endpoints\nNew accounts start with trial credit; confirm current billing terms in the console before heavy use\nSet FRIENDLI_API_KEY in your .env file\nConfigure\nUse it\n\nPer-request credentials work as they do for every provider:\n\nModels\n\n| Model | Context | Vision | $/M in · out | Notes |\n| --------------------------- | ------- | ------ | -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| zai-org/GLM-5.3 ⭐ | 1M | no | $1.4 / $4.4 (cached $0.26) | Recommended — the only model in this roster capability-probed end to end (real tool call, SSE streaming, json_object). Heavy internal reasoner via reasoning/reasoning_content — give it a generous maxTokens. Rejects image/video input (HTTP 422). |\n| zai-org/GLM-5.3-Flash | 1M | no | — | Lighter/faster sibling of the default; roster-listed only, not itself capability-probed; fallback. |\n| zai-org/GLM-5.2 | 1M | no | — | Prior GLM generation; roster-listed only; fallback. |\n| zai-org/GLM-5.1 | 1M | no | — | Prior GLM generation; roster-listed only; fallback. |\n| google/gemma-4-31B-it | 1M | no | — | Google Gemma 4 31B instruct-tuned; roster-listed only; fallback. |\n| deepseek-ai/DeepSeek-V3.2 | 1M | no | — | DeepSeek V3.2; roster-listed only; fallback. |\n| MiniMaxAI/MiniMax-M2.5 | 1M | no | — | MiniMax M2.5; roster-listed only; fallback. |\n\nContext window shown is the catalog default of 1,048,576 tokens; the default\nmax output is 131,072 tokens (zai-org/GLM-5.3's documented per-request\noutput ceiling, distinct from the context window).\n\nFallback order when the default is unavailable: zai-org/GLM-5.3-Flash →\nzai-org/GLM-5.2 → zai-org/GLM-5.1 → google/gemma-4-31B-it →\ndeepseek-ai/DeepSeek-V3.2 → MiniMaxAI/MiniMax-M2.5.\n\nVerification status\n\nTier-2 onboarding requires evidence before a provider is accepted, and\npnpm run verify:provider-onboarding gates it in CI. This is what the\ncatalog records for FriendliAI:\n\n| Probe | Result ","hierarchy":{"lvl0":"Getting Started","lvl1":"FriendliAI Provider Guide","lvl2":"","lvl3":""}},
5613
5613
  {"objectID":"3fb06fe52ebad07b008fc3e35e116b6189c226a6650eba037def86f1183b305e","title":"FriendliAI Provider Guide","url":"/docs/getting-started/providers/friendli#friendliai-provider-guide","content":"FriendliAI is a Tier-2 catalog provider: OpenAI-wire-compatible with no\nbehavioural quirks, so its entire integration is one JSON file\n(src/lib/providers/catalog/friendli.json) rather than hand-written code. That\nfile is the source of truth for everything on this page.","hierarchy":{"lvl0":"Getting Started","lvl1":"FriendliAI Provider Guide","lvl2":"FriendliAI Provider Guide","lvl3":""}},
5614
- {"objectID":"901e86d320bbeefec291bde97052ba20256a0e571c5c5e3a8c5348adecead50e","title":"Key Facts","url":"/docs/getting-started/providers/friendli#key-facts","content":"Provider id: friendli\nProtocol: OpenAI-compatible (/chat/completions)\nBase URL: https://api.friendli.ai/serverless/v1\nDefault model: zai-org/GLM-5.3\nModels in catalog: 7\nStreaming: supported\nTool calling: supported (native)\nStructured output: supported — but not combined with tools in one\n request: Friendli rejects tools + response_format together with HTTP\n 422 (\"response_format\" field cannot be set when tools are specified).\n NeuroLink handles this the same way as Groq (isToolsSchemaConflictError):\n it retries the call without response_format.\nEmbeddings: not supported\nBilling: free-tier\nKey format: none declared\nRate limits: tight — pace requests at least 20 seconds apart","hierarchy":{"lvl0":"Getting Started","lvl1":"FriendliAI Provider Guide","lvl2":"Key Facts","lvl3":""}},
5614
+ {"objectID":"901e86d320bbeefec291bde97052ba20256a0e571c5c5e3a8c5348adecead50e","title":"Key Facts","url":"/docs/getting-started/providers/friendli#key-facts","content":"Provider id: friendli\nProtocol: OpenAI-compatible (/chat/completions)\nBase URL: https://api.friendli.ai/serverless/v1\nDefault model: zai-org/GLM-5.3\nModels in catalog: 7\nStreaming: supported\nTool calling: supported (native)\nStructured output: supported. Friendli rejects tools + response_format\n together with HTTP 422 (\"response_format\" field cannot be set when tools\nare specified), so NeuroLink proactively omits response_format whenever\n tools are present, before the request is sent — it does not wait for the\n 422 and retry.\nEmbeddings: not supported\nBilling: free-tier\nKey format: none declared\nRate limits: tight — pace requests at least 20 seconds apart","hierarchy":{"lvl0":"Getting Started","lvl1":"FriendliAI Provider Guide","lvl2":"Key Facts","lvl3":""}},
5615
5615
  {"objectID":"3b505650bea29496f59be24689157bff939b626ff4f22ffc51253cb59e72c7d5","title":"1. Get an API key","url":"/docs/getting-started/providers/friendli#1-get-an-api-key","content":"Visit: https://suite.friendli.ai/ and sign in\nCreate a Personal Access Token for the serverless endpoints\nNew accounts start with trial credit; confirm current billing terms in the console before heavy use\nSet FRIENDLI_API_KEY in your .env file","hierarchy":{"lvl0":"Getting Started","lvl1":"FriendliAI Provider Guide","lvl2":"1. Get an API key","lvl3":""}},
5616
5616
  {"objectID":"e429f8ec995eebc8e5b148f5c505da49f68c8a6d155fa512a8f162266c44b607","title":"3. Use it","url":"/docs/getting-started/providers/friendli#3-use-it","content":"`bash","hierarchy":{"lvl0":"Getting Started","lvl1":"FriendliAI Provider Guide","lvl2":"3. Use it","lvl3":""}},
5617
5617
  {"objectID":"9f40a517994a669fac5089e4975087ec49eb4a129a0b88f78ee137ca51b6c352","title":"CLI","url":"/docs/getting-started/providers/friendli#cli","content":"npx @juspay/neurolink generate \"Hello\" --provider friendli\ntypescript\nawait neurolink.generate({\n input: { text: \"Hello\" },\n provider: \"friendli\",\n credentials: { friendli: { apiKey: process.env.FRIENDLIAPIKEY } },\n});\n`","hierarchy":{"lvl0":"Getting Started","lvl1":"FriendliAI Provider Guide","lvl2":"CLI","lvl3":""}},
5618
5618
  {"objectID":"b66c8029693af65986440601e71042fc07bea17a333d634287f211acaaa3b6ad","title":"Models","url":"/docs/getting-started/providers/friendli#models","content":"| Model | Context | Vision | $/M in · out | Notes |\n| --------------------------- | ------- | ------ | -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| zai-org/GLM-5.3 ⭐ | 1M | no | $1.4 / $4.4 (cached $0.26) | Recommended — the only model in this roster capability-probed end to end (real tool call, SSE streaming, json_object). Heavy internal reasoner via reasoning/reasoning_content — give it a generous maxTokens. Rejects image/video input (HTTP 422). |\n| zai-org/GLM-5.3-Flash | 1M | no | — | Lighter/faster sibling of the default; roster-listed only, not itself capability-probed; fallback. |\n| zai-org/GLM-5.2 | 1M | no | — | Prior GLM generation; roster-listed only; fallback. |\n| zai-org/GLM-5.1 | 1M | no | — | Prior GLM generation; roster-listed only; fallback. |\n| google/gemma-4-","hierarchy":{"lvl0":"Getting Started","lvl1":"FriendliAI Provider Guide","lvl2":"Models","lvl3":""}},
5619
5619
  {"objectID":"341bb86e88577c8982f565e3bb49d1faa5c1449e8cd5310b8df239e829efdb9e","title":"Verification status","url":"/docs/getting-started/providers/friendli#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 records for FriendliAI:\n\n| Probe | Result |\n| --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n| Roster | authenticated GET /serverless/v1/models, HTTP 200, 2026-09-06 |\n| Auth rejection | HTTP 401, 2026-09-06 ","hierarchy":{"lvl0":"Getting Started","lvl1":"FriendliAI Provider Guide","lvl2":"Verification status","lvl3":""}},
5620
- {"objectID":"7d5ebae39916c5745bbc01788b7092e2fa3f81495e1375fc9d720eb326bee964","title":"Troubleshooting","url":"/docs/getting-started/providers/friendli#troubleshooting","content":"| Symptom | Cause | Fix |\n| ----------------------------------------- | ---------------------------------------------------------------- | --------------------------------------------------------------------------------- |\n| Invalid Friendli API key | FRIENDLI_API_KEY unset or wrong | Check the key at https://suite.friendli.ai/ |\n| Model not found | The roster changed since 2026-09-06 | Pick a current id from the authenticated /serverless/v1/models roster |\n| Frequent 429s | Friendli's rate limits are tight | Pace requests at least 20 seconds apart and retry |\n| HTTP 422 when tools + schema are both set | Friendli rejects response_format when tools is present | NeuroLink retries automatically without response_format (same handling as Groq) |\n| Empty content at a small maxTokens | zai-org/GLM-5.3 spends its budget on reasoning_content first | Give reasoning prompts a generous maxTokens budget |","hierarchy":{"lvl0":"Getting Started","lvl1":"FriendliAI Provider Guide","lvl2":"Troubleshooting","lvl3":""}},
5620
+ {"objectID":"7d5ebae39916c5745bbc01788b7092e2fa3f81495e1375fc9d720eb326bee964","title":"Troubleshooting","url":"/docs/getting-started/providers/friendli#troubleshooting","content":"| Symptom | Cause | Fix |\n| ------------------------------------------------------ | --------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ |\n| Invalid Friendli API key | FRIENDLI_API_KEY unset or wrong | Check the key at https://suite.friendli.ai/ |\n| Model not found | The roster changed since 2026-09-06 | Pick a current id from the authenticated /serverless/v1/models roster |\n| Frequent 429s | Friendli's rate limits are tight | Pace requests at least 20 seconds apart and retry |\n| Structured output silently dropped when tools are used | Friendli rejects response_format when tools is present (HTTP 422) | NeuroLink omits response_format automatically whenever tools are present, before sending — this is expected, not a bug |\n| Empty content at a small maxTokens | zai-org/GLM-5.3 spends its budget on reasoning_content first | Give reasoning prompts a generous maxTokens budget |","hierarchy":{"lvl0":"Getting Started","lvl1":"FriendliAI Provider Guide","lvl2":"Troubleshooting","lvl3":""}},
5621
5621
  {"objectID":"9a2b3c1a8e2b87f12be59e06d2a131fcba54035f11d0fa25b11030eebc0064f7","title":"See also","url":"/docs/getting-started/providers/friendli#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":"FriendliAI Provider Guide","lvl2":"See also","lvl3":""}},
5622
5622
  {"objectID":"3f4a67c46fcd7980b7a40666e1ec1dcc4a4f71af4691b96f8f3893ccfe3932ab","title":"GMI Cloud Provider Guide","url":"/docs/getting-started/providers/gmicloud","content":"GMI Cloud Provider Guide\n\nGMI Cloud is a Tier-2 catalog provider: OpenAI-wire-compatible with no\nbehavioural quirks, so its entire integration is one JSON file\n(src/lib/providers/catalog/gmicloud.json) rather than hand-written code. That\nfile is the source of truth for everything on this page.\n\nKey Facts\nProvider id: gmicloud (aliases: gmi-cloud)\nProtocol: OpenAI-compatible (/chat/completions)\nBase URL: https://api.gmi-serving.com/v1\nDefault model: MiniMaxAI/MiniMax-M3\nModels in catalog: 1\nStreaming: supported\nTool calling: supported (native)\nStructured output: supported\nEmbeddings: not supported\nBilling: free-tier\nKey format: ^eyJ[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+$\n\nQuick Start\nGet an API key\nVisit: https://console.gmicloud.ai\nSign in and select the Inference service\nCreate an API key; check Console → Inference → Model Hub for current model pricing\nSet GMICLOUD_API_KEY in your .env file\nConfigure\nUse it\n\nPer-request credentials work as they do for every provider:\n\nModels\n\n| Model | Context | Vision | $/M in · out | Notes |\n| ------------------------- | ------- | ------ | ------------ | -------------------------------------------------- |\n| MiniMaxAI/MiniMax-M3 ⭐ | 1M | no | — | MiniMaxAI/MiniMax-M3 — live GMI Cloud-probed model |\n\nFallback order when the default is unavailable: MiniMaxAI/MiniMax-M3.\n\nVerification status\n\nTier-2 onboarding requires evidence before a provider is accepted, and\npnpm run verify:provider-onboarding gates it in CI. This is what the\ncatalog records for GMI Cloud:\n\n| Probe | Result |\n| --------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Roster | authenticated GET /v1/models, HTTP 200, 2026-09-03 |\n| Auth rejection | HTTP 401, 2026-09-03 |\n| Live capability sweep | 2026-09-03 — MiniMax-M3 accepted maxcompletiontokens=524288 and rejected 1048576 with an explicit 524288 limit. Structured output: the endpoint ignores responseformat (jsonschema and json_object both return prose with no prompt h |\n\nTroubleshooting\n\n| Symptom | Cause | Fix |\n| --------------------------- | ----------------------------------- | ----------------------------------------------------------------- |\n| Invalid GMI Cloud API key | GMICLOUD_API_KEY unset or wrong | Check the key at https://console.gmicloud.ai |\n| Model not found | The roster changed since 2026-09-03 | Pick a current id; catalog providers retire models without notice |\n\nSee also\nProvider setup overview\nAll providers\nTier-2 onboarding — how this provider's JSON becomes a working integration\nProvider feature compatibility","hierarchy":{"lvl0":"Getting Started","lvl1":"GMI Cloud Provider Guide","lvl2":"","lvl3":""}},
5623
5623
  {"objectID":"1eb70df9354621e43dbd2fef9c02cbba04abccfd67b8519feca9b39bdd2d597a","title":"GMI Cloud Provider Guide","url":"/docs/getting-started/providers/gmicloud#gmi-cloud-provider-guide","content":"GMI Cloud is a Tier-2 catalog provider: OpenAI-wire-compatible with no\nbehavioural quirks, so its entire integration is one JSON file\n(src/lib/providers/catalog/gmicloud.json) rather than hand-written code. That\nfile is the source of truth for everything on this page.","hierarchy":{"lvl0":"Getting Started","lvl1":"GMI Cloud Provider Guide","lvl2":"GMI Cloud Provider Guide","lvl3":""}},
@@ -5887,13 +5887,13 @@
5887
5887
  {"objectID":"e4ebbbc3b9437c3a809d6a052b1682ad075cf5d89deff12e5a1b1c61ac4a1dcd","title":"[LM Studio](/docs/getting-started/provider-setup.md#lm-studio)","url":"/docs/getting-started/providers#lm-studiodocsgetting-startedprovider-setupmdlm-studio","content":"Run any supported model locally with a GUI app\n🖥️ Download and run models via the LM Studio desktop application\n🔍 Auto-discovers the loaded model from /v1/models (no model name required)\n🌐 OpenAI-compatible API at http://localhost:1234/v1 by default\n🆓 No API key needed for local use (key optional for reverse-proxy setups)\n🔄 Aliases: lmstudio, lms\n\nSetup Guide →","hierarchy":{"lvl0":"Getting Started","lvl1":"AI Provider Guides","lvl2":"[LM Studio](/docs/getting-started/provider-setup.md#lm-studio)","lvl3":""}},
5888
5888
  {"objectID":"ee135d1d1497d8b7c612159f7ca945ddc9232bb358bbb4fdd13730c71a7ecd42","title":"[llama.cpp](/docs/getting-started/provider-setup.md#llamacpp)","url":"/docs/getting-started/providers#llamacppdocsgetting-startedprovider-setupmdllamacpp","content":"High-performance local inference via llama-server\n⚡ Run GGUF models with llama-server at http://localhost:8080/v1 by default\n🔍 Auto-discovers the loaded model from /v1/models\n🛠️ Tool support requires --jinja flag when starting llama-server\n🆓 No API key needed for local use (key optional for reverse-proxy setups)\n🔄 Aliases: llama.cpp\n\nSetup Guide →","hierarchy":{"lvl0":"Getting Started","lvl1":"AI Provider Guides","lvl2":"[llama.cpp](/docs/getting-started/provider-setup.md#llamacpp)","lvl3":""}},
5889
5889
  {"objectID":"cd37ca4358ecd7baa6ede9b31b08ef940e7f29b7eb80ad4eb7c60e58b25068f6","title":"🔌 Aggregators & Proxies","url":"/docs/getting-started/providers#-aggregators-proxies","content":"Access multiple providers through unified interfaces:","hierarchy":{"lvl0":"Getting Started","lvl1":"AI Provider Guides","lvl2":"🔌 Aggregators & Proxies","lvl3":""}},
5890
- {"objectID":"6ad36ba3488491bb913c7a77b86a278cc86509da88a054975bcded71f5c02130","title":"[OpenRouter](/docs/getting-started/providers/openrouter)","url":"/docs/getting-started/providers#openrouterdocsgetting-startedprovidersopenrouter","content":"300+ models from 60+ providers\n🌐 Single API for all major providers (Anthropic, OpenAI, Google, Meta, etc.)\n⚡ Automatic failover and routing\n💰 Competitive pricing with cost optimization\n🎯 Zero lock-in - switch models instantly\n📊 Usage tracking dashboard\n🆓 Free models available\n\nSetup Guide →","hierarchy":{"lvl0":"Getting Started","lvl1":"AI Provider Guides","lvl2":"[OpenRouter](/docs/getting-started/providers/openrouter)","lvl3":""}},
5890
+ {"objectID":"6ad36ba3488491bb913c7a77b86a278cc86509da88a054975bcded71f5c02130","title":"[OpenRouter](/docs/getting-started/providers/openrouter)","url":"/docs/getting-started/providers#openrouterdocsgetting-startedprovidersopenrouter","content":"300+ models from 60+ providers\n🌐 Single API across many AI providers (Anthropic, OpenAI, Google, Meta, etc.)\n⚡ Automatic failover and routing\n💰 Competitive pricing with cost optimization\n🎯 Zero lock-in - switch models instantly\n📊 Usage tracking dashboard\n🆓 Free models available\n\nSetup Guide →","hierarchy":{"lvl0":"Getting Started","lvl1":"AI Provider Guides","lvl2":"[OpenRouter](/docs/getting-started/providers/openrouter)","lvl3":""}},
5891
5891
  {"objectID":"733a2fa8ea4c547cdcdf502f89f003a2208c0e5828e36e7faaaa94e0903d3d49","title":"[OpenAI Compatible](/docs/getting-started/providers/openai-compatible)","url":"/docs/getting-started/providers#openai-compatibledocsgetting-startedprovidersopenai-compatible","content":"OpenRouter, vLLM, LocalAI, and more\n🌐 100+ models through OpenRouter\n💻 Local deployment with vLLM\n🔓 Self-hosted with LocalAI\n🔄 Drop-in OpenAI replacement\n\nSetup Guide →","hierarchy":{"lvl0":"Getting Started","lvl1":"AI Provider Guides","lvl2":"[OpenAI Compatible](/docs/getting-started/providers/openai-compatible)","lvl3":""}},
5892
5892
  {"objectID":"fc415454bfde58f3634df544ef2adb88836c75fb1344b7042af7a9d6fdfa63d4","title":"[LiteLLM](/docs/getting-started/providers/litellm)","url":"/docs/getting-started/providers#litellmdocsgetting-startedproviderslitellm","content":"100+ providers through proxy\n🔄 Unified API for 100+ providers\n📊 Load balancing and fallbacks\n💰 Cost tracking\n🎯 Model routing\n\nSetup Guide →","hierarchy":{"lvl0":"Getting Started","lvl1":"AI Provider Guides","lvl2":"[LiteLLM](/docs/getting-started/providers/litellm)","lvl3":""}},
5893
5893
  {"objectID":"faae7281e5a366b4892035d92012602a9e7aaa15cc9d96556b20493e25562498","title":"🧠 Decision-Only Providers {#decision-only-providers}","url":"/docs/getting-started/providers#-decision-only-providers-decision-only-providers","content":"The two providers that serve decide rather than generate/stream. Each\nreturns typed, calibrated judgments and emits no text, so neither appears in\ngeneration fallback chains or the health sweep.","hierarchy":{"lvl0":"Getting Started","lvl1":"AI Provider Guides","lvl2":"🧠 Decision-Only Providers {#decision-only-providers}","lvl3":""}},
5894
5894
  {"objectID":"50860d1f7a27dbe3ad7452ad7079ea437658db372b97081d0a509429369cacc6","title":"[TypeSafe (Jev)](/docs/getting-started/providers/typesafe)","url":"/docs/getting-started/providers#typesafe-jevdocsgetting-startedproviderstypesafe","content":"Typed, calibrated judgments instead of text\n🎯 boolean / choice / score answers, each with a calibrated confidence\n⚡ Latency flat in question count — 1 question ~393 ms, 400 questions ~465 ms\n💰 ~$0.00002 per decision (~$0.042/M input, output billed at zero)\n🔌 Two transports: TypeSafe direct, or the Vercel AI Gateway\n🛡️ Fails open — with no key configured, every consumer behaves exactly as before\n🔑 API key from console.typesafe.ai/keys\n🔄 Aliases: jev, typesafe-ai\n\nSetup Guide →","hierarchy":{"lvl0":"Getting Started","lvl1":"AI Provider Guides","lvl2":"[TypeSafe (Jev)](/docs/getting-started/providers/typesafe)","lvl3":""}},
5895
5895
  {"objectID":"43b838d60f2794ce46361196d6fc8a708b3a301398dd55f2c8015d567aa21c2c","title":"[Laya](/docs/getting-started/providers/laya)","url":"/docs/getting-started/providers#layadocsgetting-startedproviderslaya","content":"Open-weights decision provider — the same typed boolean/choice/score answers as Jev, from Convai Innovations' Apache-2.0 checkpoints, at a Laya server or LiteLLM proxy route you configure\n🧭 Serves decide only; built-in features use it when its key and base URL are set and neither TYPESAFE_API_KEY nor AI_GATEWAY_API_KEY is\n📏 Refuses more than ~768 tokens of state (320 on english) before any network call, since its encoders read only 1,024 (512)\n🔌 No built-in endpoint: LAYA_BASE_URL (or credentials.laya.baseURL) names a Laya server or a LiteLLM pass-through route to one\n🔑 LAYA_API_KEY is the key that endpoint accepts; on LiteLLM, the route must be in the key's Allowed Routes\n\nSetup Guide →","hierarchy":{"lvl0":"Getting Started","lvl1":"AI Provider Guides","lvl2":"[Laya](/docs/getting-started/providers/laya)","lvl3":""}},
5896
- {"objectID":"c98403894a115164f29a019817b7f39c93b59623a9854b4575ad06bc5f597320","title":"🧩 Additional Catalog Providers","url":"/docs/getting-started/providers#-additional-catalog-providers","content":"Every provider below is a Tier-2 catalog entry — OpenAI-wire-compatible\nwith no behavioural quirks, so the whole integration is one JSON file under\nsrc/lib/providers/catalog/. Each page is generated from that file, which is\nalso what the CI onboarding gate reads.","hierarchy":{"lvl0":"Getting Started","lvl1":"AI Provider Guides","lvl2":"🧩 Additional Catalog Providers","lvl3":""}},
5896
+ {"objectID":"c98403894a115164f29a019817b7f39c93b59623a9854b4575ad06bc5f597320","title":"🧩 Additional Catalog Providers","url":"/docs/getting-started/providers#-additional-catalog-providers","content":"Every provider below is a Tier-2 catalog entry. Provider-specific\nbehavioural quirks may apply, so check the provider's catalog file. The whole\nintegration is one JSON file under src/lib/providers/catalog/. Each page is\ngenerated from that file, which is also what the CI onboarding gate reads.","hierarchy":{"lvl0":"Getting Started","lvl1":"AI Provider Guides","lvl2":"🧩 Additional Catalog Providers","lvl3":""}},
5897
5897
  {"objectID":"026138da0a559269ecd9f0b2ceb72d9039096e72e064142afb7bfb74a5cb7455","title":"[API Route](/docs/getting-started/providers/api-route)","url":"/docs/getting-started/providers#api-routedocsgetting-startedprovidersapi-route","content":"Claude Sonnet 4.6\n🤖 8 models; default claude-sonnet-4-6 (1M context)\n🛠️ Native tool calling + structured output together\n💳 Free tier available\n✅ Roster verified 2026-09-17 (authenticated GET /v1/models)\n🔑 API key from api-route.com\n🔄 Aliases: apiroute\n\nSetup Guide →","hierarchy":{"lvl0":"Getting Started","lvl1":"AI Provider Guides","lvl2":"[API Route](/docs/getting-started/providers/api-route)","lvl3":""}},
5898
5898
  {"objectID":"85aa65949d959db077347ecf93a4c40ade9ebab4300d4d52c62c702f6929053b","title":"[Baseten](/docs/getting-started/providers/baseten)","url":"/docs/getting-started/providers#basetendocsgetting-startedprovidersbaseten","content":"GLM 5.3 Flash\n🤖 16 models; default zai-org/GLM-5.3-Flash (1M context)\n🛠️ Native tool calling + structured output together\n💳 Free tier available\n✅ Roster verified 2026-09-03 (authenticated GET /v1/models)\n🔑 API key from app.baseten.co\n\nSetup Guide →","hierarchy":{"lvl0":"Getting Started","lvl1":"AI Provider Guides","lvl2":"[Baseten](/docs/getting-started/providers/baseten)","lvl3":""}},
5899
5899
  {"objectID":"a63f2c06a13bf6cfc44ae46ceeced786bb08ec6a5a641e0603509b440cf7efcf","title":"[Friendli](/docs/getting-started/providers/friendli)","url":"/docs/getting-started/providers#friendlidocsgetting-startedprovidersfriendli","content":"zai-org/GLM-5.3\n🤖 7 models; default zai-org/GLM-5.3 (1M context)\n🛠️ Native tool calling — not combined with structured output in one request (HTTP 422 if both are set)\n💳 Free tier available (rate limits are tight — pace requests 20s+ apart)\n✅ Roster verified 2026-09-06 (authenticated GET /serverless/v1/models)\n🔑 API key from suite.friendli.ai\n\nSetup Guide →","hierarchy":{"lvl0":"Getting Started","lvl1":"AI Provider Guides","lvl2":"[Friendli](/docs/getting-started/providers/friendli)","lvl3":""}},
@@ -5970,11 +5970,11 @@
5970
5970
  {"objectID":"de358abc64cad163c1666dce7b06fc5f7b3637b9568e420ceb9269a526929d54","title":"Running your own Laya server","url":"/docs/getting-started/providers/laya#running-your-own-laya-server","content":"Laya's example server exposes the same /predict route. Point\nLAYA_BASE_URL at it:","hierarchy":{"lvl0":"Getting Started","lvl1":"Laya Provider Guide","lvl2":"Running your own Laya server","lvl3":""}},
5971
5971
  {"objectID":"e0dd67e8f79c7801d3e199dcd765a559f64a9d65d43cf1611026725a8ae1ee82","title":"Troubleshooting","url":"/docs/getting-started/providers/laya#troubleshooting","content":"Laya requires a base URL — set LAYA_BASE_URL, or pass\n credentials.laya.baseURL. There is no default endpoint.\nAuthentication failed — the proxy rejected the key. Check it in the\n LiteLLM Dashboard, including its Allowed Routes. The provider instance does\n not retry after a rejection.\nA 403 with error code: 1010 — Cloudflare in front of your proxy blocked\n the client by its signature. Node's fetch is accepted; a proxy or agent that\n rewrites the user agent may not be.\nexceeded the provider's token limit — the state is larger than Laya\n reads. Shorten it, or configure TypeSafe for long inputs.\nBuilt-in routing never uses Laya — a TypeSafe key is also set and takes\n precedence, or Laya has no base URL.","hierarchy":{"lvl0":"Getting Started","lvl1":"Laya Provider Guide","lvl2":"Troubleshooting","lvl3":""}},
5972
5972
  {"objectID":"fb160b657869a262fd7735599ce2c2ffd49423f4a0f7c43f4ef5ee74aa4dcde5","title":"See also","url":"/docs/getting-started/providers/laya#see-also","content":"The decide inference type\nTypeSafe (Jev) Provider Guide\nLaya on GitHub","hierarchy":{"lvl0":"Getting Started","lvl1":"Laya Provider Guide","lvl2":"See also","lvl3":""}},
5973
- {"objectID":"e3ac6498f27344d89bbe65467d6382ad117a8cdd85b1daa4ec6dafe521cc8d44","title":"LiteLLM Provider Guide","url":"/docs/getting-started/providers/litellm","content":"LiteLLM Provider Guide\n\nAccess hundreds of AI models across 100+ providers through the NeuroLink LiteLLM provider via a LiteLLM proxy server\n\nOverview\n\nNeuroLink's litellm provider connects to a LiteLLM proxy server to access hundreds of models across 100+ AI providers (OpenAI, Anthropic, Google, AWS Bedrock, Cohere, Groq, Together AI, and more) through a single OpenAI-compatible API. The proxy adds enterprise features like load balancing, fallbacks, budgets, and rate limiting on top of any AI provider.\n\nHow It Works\nYou run (or connect to) a LiteLLM proxy server that manages your provider API keys and model routing.\nNeuroLink's litellm provider communicates with this proxy using the OpenAI-compatible protocol.\nModels are referenced using LiteLLM's provider/model format (e.g., openai/gpt-4o-mini, anthropic/claude-3-5-sonnet-20240620).\n\nKey Benefits\n100+ Providers: Access hundreds of models across every major AI provider through one interface\nUnified Model Format: Use provider/model naming across all backends\nLoad Balancing: Distribute requests across multiple providers/models\nCost Tracking: Built-in budget management and spend tracking\nFallbacks: Automatic failover when providers are down\nProxy Mode: Run as standalone proxy server for team-wide use\n\nQuick Start\nSet Up a LiteLLM Proxy Server\n\nBefore using the NeuroLink litellm provider, you need a running LiteLLM proxy. See the Setting Up LiteLLM Proxy section below for full details, or get started quickly:\nConfigure Environment Variables\n\nAdd to your .env file:\nTest the Setup\n\nEnvironment Variables\n\n| Variable | Required | Default | Description |\n| ------------------ | -------- | ----------------------- | ----------------------------------------- |\n| LITELLM_BASE_URL | No | http://localhost:4000 | URL of your LiteLLM proxy server |\n| LITELLM_API_KEY | No | sk-anything | API key for authenticating with the proxy |\n| LITELLM_MODEL | No | openai/gpt-4o-mini | Default model in provider/model format |\n\nDefault Model\n\nThe default model is openai/gpt-4o-mini (from LiteLLMModels.OPENAI_GPT_4O_MINI). Override it by setting LITELLM_MODEL in your environment or passing --model on the CLI.\n\nModel Name Format\n\nLiteLLM uses a provider/model format for model names. Examples:\n\nSee the full list at LiteLLM Supported Providers.\n\nSDK Usage\n\nBasic Usage\n\nWith a Specific Model\n\nStreaming\n\nMulti-Model Workflow\n\nCLI Usage\n\nAvailable Models\n\nThe LiteLLMModels enum provides commonly used model identifiers:\n\n| Enum Value | Model ID |\n| ------------------------------ | -------------------------------------- |\n| OPENAI_GPT_4O_MINI | openai/gpt-4o-mini |\n| OPENAI_GPT_4O | openai/gpt-4o |\n| OPENAI_GPT_5 | openai/gpt-5 |\n| ANTHROPIC_CLAUDE_SONNET_4_6 | anthropic/claude-sonnet-4-6 |\n| ANTHROPIC_CLAUDE_3_5_SONNET | anthropic/claude-3-5-sonnet-20240620 |\n| VERTEX_GEMINI_2_5_PRO | vertex_ai/gemini-2.5-pro |\n| GEMINI_2_0_FLASH | gemini/gemini-2.0-flash |\n| GROQ_LLAMA_3_1_70B_VERSATILE | groq/llama-3.1-70b-versatile |\n| MISTRAL_LARGE | mistral/mistral-large-latest |\n\nYou can also pass any model string your LiteLLM proxy is configured to serve. Use the proxy's /v1/models endpoint to discover available models dynamically.\n\nError Handling\n\nThe LiteLLM provider returns specific error types for common failure scenarios:\n\n| Error | Cause | Resolution |\n| ----------------------------- | ----------------------------------- | -------------------------------------------------------- |\n| NetworkError (ECONNREFUSED) | LiteLLM proxy server is not running | Start the proxy at the configured LITELLM_BASE_URL |\n| AuthenticationError | Invalid LITELLM_API_KEY | Check your API key matches the proxy's master key |\n| RateLimitError | Upstream rate limit exceeded | Wait and retry, or configure load balancing in the proxy |\n| InvalidModelError | Model not configured in proxy | Add the model to your LiteLLM proxy configuration |\n\nSetting Up LiteLLM Proxy\n\nThe NeuroLink litellm provider requires a running LiteLLM proxy server. This section covers how to set one up.\n\nInstall LiteLLM\n\nQuick Start (Single Model)\n\nConfiguration File (Multiple Models)\n\nCreate litellm_config.yaml:\n\nStart the proxy:\n\nLoad Balancing\n\nDistribute requests across multiple providers or API keys:\n\nAutomatic Failover\n\nConfigure fallback providers for reliability:\n\nBudget Management\n\nSet spending limits per virtual key:\n\nDocker Deployment\n\nTroubleshooting\n\nCommon Issues\n\"LiteLLM proxy server not available\"\n\nProblem: The proxy server is not run","hierarchy":{"lvl0":"Getting Started","lvl1":"LiteLLM Provider Guide","lvl2":"","lvl3":""}},
5973
+ {"objectID":"e3ac6498f27344d89bbe65467d6382ad117a8cdd85b1daa4ec6dafe521cc8d44","title":"LiteLLM Provider Guide","url":"/docs/getting-started/providers/litellm","content":"LiteLLM Provider Guide\n\nAccess hundreds of AI models across 100+ providers through the NeuroLink LiteLLM provider via a LiteLLM proxy server\n\nOverview\n\nNeuroLink's litellm provider connects to a LiteLLM proxy server to access hundreds of models across 100+ AI providers (OpenAI, Anthropic, Google, AWS Bedrock, Cohere, Groq, Together AI, and more) through a single OpenAI-compatible API. The proxy adds enterprise features like load balancing, fallbacks, budgets, and rate limiting on top of the connected AI providers.\n\nHow It Works\nYou run (or connect to) a LiteLLM proxy server that manages your provider API keys and model routing.\nNeuroLink's litellm provider communicates with this proxy using the OpenAI-compatible protocol.\nModels are referenced using LiteLLM's provider/model format (e.g., openai/gpt-4o-mini, anthropic/claude-3-5-sonnet-20240620).\n\nKey Benefits\n100+ Providers: Access hundreds of models across a broad range of AI providers through one interface\nUnified Model Format: Use provider/model naming across all backends\nLoad Balancing: Distribute requests across multiple providers/models\nCost Tracking: Built-in budget management and spend tracking\nFallbacks: Automatic failover when providers are down\nProxy Mode: Run as standalone proxy server for team-wide use\n\nQuick Start\nSet Up a LiteLLM Proxy Server\n\nBefore using the NeuroLink litellm provider, you need a running LiteLLM proxy. See the Setting Up LiteLLM Proxy section below for full details, or get started quickly:\nConfigure Environment Variables\n\nAdd to your .env file:\nTest the Setup\n\nEnvironment Variables\n\n| Variable | Required | Default | Description |\n| ------------------ | -------- | ----------------------- | ----------------------------------------- |\n| LITELLM_BASE_URL | No | http://localhost:4000 | URL of your LiteLLM proxy server |\n| LITELLM_API_KEY | No | sk-anything | API key for authenticating with the proxy |\n| LITELLM_MODEL | No | openai/gpt-4o-mini | Default model in provider/model format |\n\nDefault Model\n\nThe default model is openai/gpt-4o-mini (from LiteLLMModels.OPENAI_GPT_4O_MINI). Override it by setting LITELLM_MODEL in your environment or passing --model on the CLI.\n\nModel Name Format\n\nLiteLLM uses a provider/model format for model names. Examples:\n\nSee the full list at LiteLLM Supported Providers.\n\nSDK Usage\n\nBasic Usage\n\nWith a Specific Model\n\nStreaming\n\nMulti-Model Workflow\n\nCLI Usage\n\nAvailable Models\n\nThe LiteLLMModels enum provides commonly used model identifiers:\n\n| Enum Value | Model ID |\n| ------------------------------ | -------------------------------------- |\n| OPENAI_GPT_4O_MINI | openai/gpt-4o-mini |\n| OPENAI_GPT_4O | openai/gpt-4o |\n| OPENAI_GPT_5 | openai/gpt-5 |\n| ANTHROPIC_CLAUDE_SONNET_4_6 | anthropic/claude-sonnet-4-6 |\n| ANTHROPIC_CLAUDE_3_5_SONNET | anthropic/claude-3-5-sonnet-20240620 |\n| VERTEX_GEMINI_2_5_PRO | vertex_ai/gemini-2.5-pro |\n| GEMINI_2_0_FLASH | gemini/gemini-2.0-flash |\n| GROQ_LLAMA_3_1_70B_VERSATILE | groq/llama-3.1-70b-versatile |\n| MISTRAL_LARGE | mistral/mistral-large-latest |\n\nYou can also pass any model string your LiteLLM proxy is configured to serve. Use the proxy's /v1/models endpoint to discover available models dynamically.\n\nError Handling\n\nThe LiteLLM provider returns specific error types for common failure scenarios:\n\n| Error | Cause | Resolution |\n| ----------------------------- | ----------------------------------- | -------------------------------------------------------- |\n| NetworkError (ECONNREFUSED) | LiteLLM proxy server is not running | Start the proxy at the configured LITELLM_BASE_URL |\n| AuthenticationError | Invalid LITELLM_API_KEY | Check your API key matches the proxy's master key |\n| RateLimitError | Upstream rate limit exceeded | Wait and retry, or configure load balancing in the proxy |\n| InvalidModelError | Model not configured in proxy | Add the model to your LiteLLM proxy configuration |\n\nSetting Up LiteLLM Proxy\n\nThe NeuroLink litellm provider requires a running LiteLLM proxy server. This section covers how to set one up.\n\nInstall LiteLLM\n\nQuick Start (Single Model)\n\nConfiguration File (Multiple Models)\n\nCreate litellm_config.yaml:\n\nStart the proxy:\n\nLoad Balancing\n\nDistribute requests across multiple providers or API keys:\n\nAutomatic Failover\n\nConfigure fallback providers for reliability:\n\nBudget Management\n\nSet spending limits per virtual key:\n\nDocker Deployment\n\nTroubleshooting\n\nCommon Issues\n\"LiteLLM proxy server not available\"\n\nProblem: The proxy ","hierarchy":{"lvl0":"Getting Started","lvl1":"LiteLLM Provider Guide","lvl2":"","lvl3":""}},
5974
5974
  {"objectID":"d7435a5ad9fdbf5d14349609fed469d76227dc6098228c3ec8e0c82c3d62944a","title":"LiteLLM Provider Guide","url":"/docs/getting-started/providers/litellm#litellm-provider-guide","content":"Access hundreds of AI models across 100+ providers through the NeuroLink LiteLLM provider via a LiteLLM proxy server","hierarchy":{"lvl0":"Getting Started","lvl1":"LiteLLM Provider Guide","lvl2":"LiteLLM Provider Guide","lvl3":""}},
5975
- {"objectID":"27c251c8bbd323623221b411910908f9845d9bca578eaf8a167eff42d385cc67","title":"Overview","url":"/docs/getting-started/providers/litellm#overview","content":"NeuroLink's litellm provider connects to a LiteLLM proxy server to access hundreds of models across 100+ AI providers (OpenAI, Anthropic, Google, AWS Bedrock, Cohere, Groq, Together AI, and more) through a single OpenAI-compatible API. The proxy adds enterprise features like load balancing, fallbacks, budgets, and rate limiting on top of any AI provider.","hierarchy":{"lvl0":"Getting Started","lvl1":"LiteLLM Provider Guide","lvl2":"Overview","lvl3":""}},
5975
+ {"objectID":"27c251c8bbd323623221b411910908f9845d9bca578eaf8a167eff42d385cc67","title":"Overview","url":"/docs/getting-started/providers/litellm#overview","content":"NeuroLink's litellm provider connects to a LiteLLM proxy server to access hundreds of models across 100+ AI providers (OpenAI, Anthropic, Google, AWS Bedrock, Cohere, Groq, Together AI, and more) through a single OpenAI-compatible API. The proxy adds enterprise features like load balancing, fallbacks, budgets, and rate limiting on top of the connected AI providers.","hierarchy":{"lvl0":"Getting Started","lvl1":"LiteLLM Provider Guide","lvl2":"Overview","lvl3":""}},
5976
5976
  {"objectID":"ffa745af619fbbdc696848b86a23102f0af21cccda5c3cf6e5d15488484c6af4","title":"How It Works","url":"/docs/getting-started/providers/litellm#how-it-works","content":"You run (or connect to) a LiteLLM proxy server that manages your provider API keys and model routing.\nNeuroLink's litellm provider communicates with this proxy using the OpenAI-compatible protocol.\nModels are referenced using LiteLLM's provider/model format (e.g., openai/gpt-4o-mini, anthropic/claude-3-5-sonnet-20240620).","hierarchy":{"lvl0":"Getting Started","lvl1":"LiteLLM Provider Guide","lvl2":"How It Works","lvl3":""}},
5977
- {"objectID":"97405234ee76e92079a98db9d4960bab3e4b53cde7e22551b783509414a43b96","title":"Key Benefits","url":"/docs/getting-started/providers/litellm#key-benefits","content":"100+ Providers: Access hundreds of models across every major AI provider through one interface\nUnified Model Format: Use provider/model naming across all backends\nLoad Balancing: Distribute requests across multiple providers/models\nCost Tracking: Built-in budget management and spend tracking\nFallbacks: Automatic failover when providers are down\nProxy Mode: Run as standalone proxy server for team-wide use","hierarchy":{"lvl0":"Getting Started","lvl1":"LiteLLM Provider Guide","lvl2":"Key Benefits","lvl3":""}},
5977
+ {"objectID":"97405234ee76e92079a98db9d4960bab3e4b53cde7e22551b783509414a43b96","title":"Key Benefits","url":"/docs/getting-started/providers/litellm#key-benefits","content":"100+ Providers: Access hundreds of models across a broad range of AI providers through one interface\nUnified Model Format: Use provider/model naming across all backends\nLoad Balancing: Distribute requests across multiple providers/models\nCost Tracking: Built-in budget management and spend tracking\nFallbacks: Automatic failover when providers are down\nProxy Mode: Run as standalone proxy server for team-wide use","hierarchy":{"lvl0":"Getting Started","lvl1":"LiteLLM Provider Guide","lvl2":"Key Benefits","lvl3":""}},
5978
5978
  {"objectID":"8656a6506343b37515c26ba4cd61f12c4f17398d03770f5811d4f9a92cd6e021","title":"1. Set Up a LiteLLM Proxy Server","url":"/docs/getting-started/providers/litellm#1-set-up-a-litellm-proxy-server","content":"Before using the NeuroLink litellm provider, you need a running LiteLLM proxy. See the Setting Up LiteLLM Proxy section below for full details, or get started quickly:","hierarchy":{"lvl0":"Getting Started","lvl1":"LiteLLM Provider Guide","lvl2":"1. Set Up a LiteLLM Proxy Server","lvl3":""}},
5979
5979
  {"objectID":"c6309d511cf7e0b99d5423769131cb23f86098414a09fb1c2bb8a1fce5c312df","title":"2. Configure Environment Variables","url":"/docs/getting-started/providers/litellm#2-configure-environment-variables","content":"Add to your .env file:\n\n`bash","hierarchy":{"lvl0":"Getting Started","lvl1":"LiteLLM Provider Guide","lvl2":"2. Configure Environment Variables","lvl3":""}},
5980
5980
  {"objectID":"fd0112a4c53d9edaced89e4a00cb0990c3f5071c57b354b16f47ab41faeb64bf","title":"Required: URL of your LiteLLM proxy server","url":"/docs/getting-started/providers/litellm#required-url-of-your-litellm-proxy-server","content":"LITELLMBASEURL=http://localhost:4000","hierarchy":{"lvl0":"Getting Started","lvl1":"LiteLLM Provider Guide","lvl2":"Required: URL of your LiteLLM proxy server","lvl3":""}},
@@ -6998,11 +6998,11 @@
6998
6998
  {"objectID":"5e419fd378ccf967026f166ff17ca26ff25e33bee3a5e5f1ff6294df4c06bb12","title":"Set in Vercel dashboard or CLI","url":"/docs/guides/frameworks/sveltekit#set-in-vercel-dashboard-or-cli","content":"vercel env add OPENAIAPIKEY\nvercel env add ANTHROPICAPIKEY\nvercel env add JWT_SECRET\n`","hierarchy":{"lvl0":"Guides","lvl1":"SvelteKit Integration Guide","lvl2":"Set in Vercel dashboard or CLI","lvl3":""}},
6999
6999
  {"objectID":"a86f4915394a5106e65dd50477d31423486db347ca83c02354ed3a06df8cdc62","title":"Related Documentation","url":"/docs/guides/frameworks/sveltekit#related-documentation","content":"API Reference - NeuroLink SDK\nStreaming Guide - Real-time responses\nCompliance Guide - Security and authentication\nCost Optimization - Reduce costs\nFastify Integration - High-performance Node.js framework with schema validation","hierarchy":{"lvl0":"Guides","lvl1":"SvelteKit Integration Guide","lvl2":"Related Documentation","lvl3":""}},
7000
7000
  {"objectID":"dae99b935ff34c8fd5f10f0ac1f2f4fdffb0cd777d7bb45c7bc7f4b91059014c","title":"Additional Resources","url":"/docs/guides/frameworks/sveltekit#additional-resources","content":"SvelteKit Documentation - Official SvelteKit docs\nSvelte Tutorial - Learn Svelte\nSvelteKit Examples - Example apps\n\nNeed Help? Join our GitHub Discussions or open an issue.","hierarchy":{"lvl0":"Guides","lvl1":"SvelteKit Integration Guide","lvl2":"Additional Resources","lvl3":""}},
7001
- {"objectID":"8f31aec32f066055dee31be79a01ee297a435bbf7f901cce7785983b2e27e1eb","title":"GitHub Action Guide","url":"/docs/guides/github-action","content":"GitHub Action Guide\n\nLast Updated: January 10, 2026\nNeuroLink Version: 8.32.0\n\nRun AI-powered workflows with 44 providers directly in GitHub Actions. The NeuroLink GitHub Action enables automated code review, issue triage, content generation, and more.\n\nOverview\n\nThe NeuroLink GitHub Action provides a unified interface to integrate AI capabilities into your CI/CD workflows. It supports all 40 NeuroLink providers through a single, consistent configuration.\n\nKey Features:\nMulti-provider support - 44 AI providers with unified interface\nPR/Issue comments - Auto-post AI responses with intelligent comment updates\nCost tracking - Built-in analytics with usage metrics\nQuality evaluation - Response scoring and validation\nMultimodal - Support for images, PDFs, CSVs, and videos\nExtended thinking - Deep reasoning with thinking tokens\nJob summaries - Detailed execution summaries in workflow runs\n\nQuick Start\n\nBasic Usage\n\nAuto Provider Detection\n\nWhen you set provider: auto (the default), NeuroLink automatically selects the best available provider based on which API keys you provide:\n\nProvider Configuration\n\nNeuroLink supports 44 AI providers. Configure each by providing the required credentials as secrets.\n\nProvider Quick Reference\n\n| Provider | Required Inputs | Example Models |\n| ----------------- | ------------------------------------------------------------------ | ------------------------------------------ |\n| OpenAI | openai_api_key | gpt-4o, gpt-4o-mini, o1 |\n| Anthropic | anthropic_api_key | claude-sonnet-4-20250514, claude-3-5-haiku |\n| Google AI Studio | google_ai_api_key | gemini-2.5-pro, gemini-2.5-flash |\n| Vertex AI | google_vertex_project, google_application_credentials | gemini-\\, claude-\\ |\n| Amazon Bedrock | aws_access_key_id, aws_secret_access_key | claude-\\, titan-\\, nova-\\* |\n| Azure OpenAI | azure_openai_api_key, azure_openai_endpoint | gpt-4o, gpt-4-turbo |\n| Mistral | mistral_api_key | mistral-large, mistral-small |\n| Hugging Face | huggingface_api_key | Various open models |\n| OpenRouter | openrouter_api_key | 300+ models |\n| LiteLLM | litellm_api_key, litellm_base_url | Proxy to 100+ models |\n| Ollama | - | Local models |\n| SageMaker | aws_access_key_id, aws_secret_access_key, sagemaker_endpoint | Custom endpoints |\n| OpenAI-Compatible | openai_compatible_api_key, openai_compatible_base_url | vLLM, custom APIs |\n\nOpenAI\n\nEnvironment Variables:\nOPENAI_API_KEY - Your OpenAI API key (starts with sk-)\n\nAvailable Models:\ngpt-4o - Most capable model\ngpt-4o-mini - Fast and cost-effective\no1 - Advanced reasoning model\ngpt-4-turbo - Previous generation flagship\n\nAnthropic\n\nEnvironment Variables:\nANTHROPIC_API_KEY - Your Anthropic API key (starts with sk-ant-)\n\nAvailable Models:\nclaude-sonnet-4-20250514 - Best overall performance\nclaude-3-5-haiku - Fast and efficient\nclaude-opus-4-20250514 - Maximum capability\n\nExtended Thinking Support: Anthropic models support extended thinking for deep reasoning tasks.\n\nGoogle AI Studio\n\nEnvironment Variables:\nGOOGLE_AI_API_KEY - Your Google AI Studio API key\n\nAvailable Models:\ngemini-2.5-pro - Most capable Gemini model\ngemini-2.5-flash - Fast and cost-effective\ngemini-2.0-flash - Previous generation\n\nFree Tier: Google AI Studio offers a generous free tier (1M tokens/day).\n\nGoogle Vertex AI\n\nEnvironment Variables:\nGOOGLE_VERTEX_PROJECT - Your GCP project ID\nGOOGLE_VERTEX_LOCATION - GCP region (default: us-central1)\nGOOGLE_APPLICATION_CREDENTIALS - Base64-encoded service account JSON\n\nSetup Service Account:\n\nAmazon Bedrock\n\nEnvironment Variables:\nAWS_ACCESS_KEY_ID - AWS access key\nAWS_SECRET_ACCESS_KEY - AWS secret key\nAWS_REGION - AWS region (default: us-east-1)\nAWS_SESSION_TOKEN - Optional session token for temporary credentials\n\nAvailable Models:\nanthropic.claude-3-5-sonnet-20241022-v2:0 - Claude on Bedrock\namazon.titan-text-express-v1 - Amazon Titan\namazon.nova-pro-v1:0 - Amazon Nova\n\nOIDC Authentication (Recommended):\n\nFor better security, use GitHub OIDC instead of static credentials:\n\nAzure OpenAI\n\nEnvironment Variables:\nAZURE_OPENAI_API_KEY - Azure OpenAI API key\nAZURE_OPENAI_ENDPOINT - Azure OpenAI endpoi","hierarchy":{"lvl0":"Guides","lvl1":"GitHub Action Guide","lvl2":"","lvl3":""}},
7002
- {"objectID":"7ff4c3df91e5e1c298b72c9c4582ecd6d75ff6486e6af5c4ef96766507050d2b","title":"GitHub Action Guide","url":"/docs/guides/github-action#github-action-guide","content":"Last Updated: January 10, 2026\nNeuroLink Version: 8.32.0\n\nRun AI-powered workflows with 44 providers directly in GitHub Actions. The NeuroLink GitHub Action enables automated code review, issue triage, content generation, and more.","hierarchy":{"lvl0":"Guides","lvl1":"GitHub Action Guide","lvl2":"GitHub Action Guide","lvl3":""}},
7003
- {"objectID":"33dd9029b76affe39c2b849f369b0629e6061d643568bcefd1ab923e2653bd90","title":"Overview","url":"/docs/guides/github-action#overview","content":"The NeuroLink GitHub Action provides a unified interface to integrate AI capabilities into your CI/CD workflows. It supports all 40 NeuroLink providers through a single, consistent configuration.\n\nKey Features:\nMulti-provider support - 44 AI providers with unified interface\nPR/Issue comments - Auto-post AI responses with intelligent comment updates\nCost tracking - Built-in analytics with usage metrics\nQuality evaluation - Response scoring and validation\nMultimodal - Support for images, PDFs, CSVs, and videos\nExtended thinking - Deep reasoning with thinking tokens\nJob summaries - Detailed execution summaries in workflow runs","hierarchy":{"lvl0":"Guides","lvl1":"GitHub Action Guide","lvl2":"Overview","lvl3":""}},
7001
+ {"objectID":"8f31aec32f066055dee31be79a01ee297a435bbf7f901cce7785983b2e27e1eb","title":"GitHub Action Guide","url":"/docs/guides/github-action","content":"GitHub Action Guide\n\nLast Updated: January 10, 2026\nNeuroLink Version: 8.32.0\n\nRun AI-powered workflows with supported providers directly in GitHub Actions. The NeuroLink GitHub Action enables automated code review, issue triage, content generation, and more.\n\nOverview\n\nThe NeuroLink GitHub Action provides a unified interface to integrate AI capabilities into your CI/CD workflows. It supports NeuroLink provider integrations through a single, consistent configuration.\n\nKey Features:\nMulti-provider support - supported AI providers with a unified interface\nPR/Issue comments - Auto-post AI responses with intelligent comment updates\nCost tracking - Built-in analytics with usage metrics\nQuality evaluation - Response scoring and validation\nMultimodal - Support for images, PDFs, CSVs, and videos\nExtended thinking - Deep reasoning with thinking tokens\nJob summaries - Detailed execution summaries in workflow runs\n\nQuick Start\n\nBasic Usage\n\nAuto Provider Detection\n\nWhen you set provider: auto (the default), NeuroLink automatically selects the best available provider based on which API keys you provide:\n\nProvider Configuration\n\nNeuroLink supports many AI providers. Configure each by providing the required credentials as secrets.\n\nProvider Quick Reference\n\n| Provider | Required Inputs | Example Models |\n| ----------------- | ------------------------------------------------------------------ | ------------------------------------------ |\n| OpenAI | openai_api_key | gpt-4o, gpt-4o-mini, o1 |\n| Anthropic | anthropic_api_key | claude-sonnet-4-20250514, claude-3-5-haiku |\n| Google AI Studio | google_ai_api_key | gemini-2.5-pro, gemini-2.5-flash |\n| Vertex AI | google_vertex_project, google_application_credentials | gemini-\\, claude-\\ |\n| Amazon Bedrock | aws_access_key_id, aws_secret_access_key | claude-\\, titan-\\, nova-\\* |\n| Azure OpenAI | azure_openai_api_key, azure_openai_endpoint | gpt-4o, gpt-4-turbo |\n| Mistral | mistral_api_key | mistral-large, mistral-small |\n| Hugging Face | huggingface_api_key | Various open models |\n| OpenRouter | openrouter_api_key | 300+ models |\n| LiteLLM | litellm_api_key, litellm_base_url | Proxy to 100+ models |\n| Ollama | - | Local models |\n| SageMaker | aws_access_key_id, aws_secret_access_key, sagemaker_endpoint | Custom endpoints |\n| OpenAI-Compatible | openai_compatible_api_key, openai_compatible_base_url | vLLM, custom APIs |\n\nOpenAI\n\nEnvironment Variables:\nOPENAI_API_KEY - Your OpenAI API key (starts with sk-)\n\nAvailable Models:\ngpt-4o - Most capable model\ngpt-4o-mini - Fast and cost-effective\no1 - Advanced reasoning model\ngpt-4-turbo - Previous generation flagship\n\nAnthropic\n\nEnvironment Variables:\nANTHROPIC_API_KEY - Your Anthropic API key (starts with sk-ant-)\n\nAvailable Models:\nclaude-sonnet-4-20250514 - Best overall performance\nclaude-3-5-haiku - Fast and efficient\nclaude-opus-4-20250514 - Maximum capability\n\nExtended Thinking Support: Anthropic models support extended thinking for deep reasoning tasks.\n\nGoogle AI Studio\n\nEnvironment Variables:\nGOOGLE_AI_API_KEY - Your Google AI Studio API key\n\nAvailable Models:\ngemini-2.5-pro - Most capable Gemini model\ngemini-2.5-flash - Fast and cost-effective\ngemini-2.0-flash - Previous generation\n\nFree Tier: Google AI Studio offers a generous free tier (1M tokens/day).\n\nGoogle Vertex AI\n\nEnvironment Variables:\nGOOGLE_VERTEX_PROJECT - Your GCP project ID\nGOOGLE_VERTEX_LOCATION - GCP region (default: us-central1)\nGOOGLE_APPLICATION_CREDENTIALS - Base64-encoded service account JSON\n\nSetup Service Account:\n\nAmazon Bedrock\n\nEnvironment Variables:\nAWS_ACCESS_KEY_ID - AWS access key\nAWS_SECRET_ACCESS_KEY - AWS secret key\nAWS_REGION - AWS region (default: us-east-1)\nAWS_SESSION_TOKEN - Optional session token for temporary credentials\n\nAvailable Models:\nanthropic.claude-3-5-sonnet-20241022-v2:0 - Claude on Bedrock\namazon.titan-text-express-v1 - Amazon Titan\namazon.nova-pro-v1:0 - Amazon Nova\n\nOIDC Authentication (Recommended):\n\nFor better security, use GitHub OIDC instead of static credentials:\n\nAzure OpenAI\n\nEnvironment Variables:\nAZURE_OPENAI_API_KEY - Azure OpenAI API key\nAZURE_OPENAI_ENDPOIN","hierarchy":{"lvl0":"Guides","lvl1":"GitHub Action Guide","lvl2":"","lvl3":""}},
7002
+ {"objectID":"7ff4c3df91e5e1c298b72c9c4582ecd6d75ff6486e6af5c4ef96766507050d2b","title":"GitHub Action Guide","url":"/docs/guides/github-action#github-action-guide","content":"Last Updated: January 10, 2026\nNeuroLink Version: 8.32.0\n\nRun AI-powered workflows with supported providers directly in GitHub Actions. The NeuroLink GitHub Action enables automated code review, issue triage, content generation, and more.","hierarchy":{"lvl0":"Guides","lvl1":"GitHub Action Guide","lvl2":"GitHub Action Guide","lvl3":""}},
7003
+ {"objectID":"33dd9029b76affe39c2b849f369b0629e6061d643568bcefd1ab923e2653bd90","title":"Overview","url":"/docs/guides/github-action#overview","content":"The NeuroLink GitHub Action provides a unified interface to integrate AI capabilities into your CI/CD workflows. It supports NeuroLink provider integrations through a single, consistent configuration.\n\nKey Features:\nMulti-provider support - supported AI providers with a unified interface\nPR/Issue comments - Auto-post AI responses with intelligent comment updates\nCost tracking - Built-in analytics with usage metrics\nQuality evaluation - Response scoring and validation\nMultimodal - Support for images, PDFs, CSVs, and videos\nExtended thinking - Deep reasoning with thinking tokens\nJob summaries - Detailed execution summaries in workflow runs","hierarchy":{"lvl0":"Guides","lvl1":"GitHub Action Guide","lvl2":"Overview","lvl3":""}},
7004
7004
  {"objectID":"3bb997302dc433bdb7ccaa27311d8b28539d24f519d50d7777495c4477c52933","title":"Auto Provider Detection","url":"/docs/guides/github-action#auto-provider-detection","content":"When you set provider: auto (the default), NeuroLink automatically selects the best available provider based on which API keys you provide:","hierarchy":{"lvl0":"Guides","lvl1":"GitHub Action Guide","lvl2":"Auto Provider Detection","lvl3":""}},
7005
- {"objectID":"a0196ac56db4df812b123855c3b7524934cf265a63e96a8ba68334d3206c0fe1","title":"Provider Configuration","url":"/docs/guides/github-action#provider-configuration","content":"NeuroLink supports 44 AI providers. Configure each by providing the required credentials as secrets.","hierarchy":{"lvl0":"Guides","lvl1":"GitHub Action Guide","lvl2":"Provider Configuration","lvl3":""}},
7005
+ {"objectID":"a0196ac56db4df812b123855c3b7524934cf265a63e96a8ba68334d3206c0fe1","title":"Provider Configuration","url":"/docs/guides/github-action#provider-configuration","content":"NeuroLink supports many AI providers. Configure each by providing the required credentials as secrets.","hierarchy":{"lvl0":"Guides","lvl1":"GitHub Action Guide","lvl2":"Provider Configuration","lvl3":""}},
7006
7006
  {"objectID":"e323a8ed54e480b24ca441ae97e154de2fc279ab13289c50496ffb1c1040dbbd","title":"Provider Quick Reference","url":"/docs/guides/github-action#provider-quick-reference","content":"| Provider | Required Inputs | Example Models |\n| ----------------- | ------------------------------------------------------------------ | ------------------------------------------ |\n| OpenAI | openai_api_key | gpt-4o, gpt-4o-mini, o1 |\n| Anthropic | anthropic_api_key | claude-sonnet-4-20250514, claude-3-5-haiku |\n| Google AI Studio | google_ai_api_key | gemini-2.5-pro, gemini-2.5-flash |\n| Vertex AI | google_vertex_project, google_application_credentials | gemini-\\, claude-\\ |\n| Amazon Bedrock | aws_access_key_id, aws_secret_access_key | claude-\\, titan-\\, nova-\\* |\n| Azure OpenAI | azure_openai_api_key, azure_openai_endpoint | gpt-4o, gpt-4-turbo |\n| Mistral | mistral_api_key | mistral-large, mistral-small |\n| Hugging Face | huggingface_api_key | Various open models |\n| OpenRouter | openrouter_api_key | 300+ models |\n| LiteLLM | litellm_api_key, litellm_base_url | Proxy to 100+ models |\n| Ollama | - | Local models |\n| SageMaker | aws_access_key_id, aws_secret_access_key, sagemaker_endpoint | Custom endpoints |\n| OpenAI-Compatible | openai_compatible_api_key, openai_compatible_base_url | vLLM, custom APIs |","hierarchy":{"lvl0":"Guides","lvl1":"GitHub Action Guide","lvl2":"Provider Quick Reference","lvl3":""}},
7007
7007
  {"objectID":"73ea2110630bda0912a64584e314b35c87ee437f430be4dd34b4ac6c7432d374","title":"OpenAI","url":"/docs/guides/github-action#openai","content":"Environment Variables:\nOPENAI_API_KEY - Your OpenAI API key (starts with sk-)\n\nAvailable Models:\ngpt-4o - Most capable model\ngpt-4o-mini - Fast and cost-effective\no1 - Advanced reasoning model\ngpt-4-turbo - Previous generation flagship","hierarchy":{"lvl0":"Guides","lvl1":"GitHub Action Guide","lvl2":"OpenAI","lvl3":""}},
7008
7008
  {"objectID":"0c8f98396097547044efc8ecb20220a7f14be5586bbaa0ca9ba7f3e2bc1fffc4","title":"Anthropic","url":"/docs/guides/github-action#anthropic","content":"Environment Variables:\nANTHROPIC_API_KEY - Your Anthropic API key (starts with sk-ant-)\n\nAvailable Models:\nclaude-sonnet-4-20250514 - Best overall performance\nclaude-3-5-haiku - Fast and efficient\nclaude-opus-4-20250514 - Maximum capability\n\nExtended Thinking Support: Anthropic models support extended thinking for deep reasoning tasks.","hierarchy":{"lvl0":"Guides","lvl1":"GitHub Action Guide","lvl2":"Anthropic","lvl3":""}},
@@ -7064,9 +7064,9 @@
7064
7064
  {"objectID":"346cc5caded9aa6e897a4e54ade3fc9272366e665ce37cb4af8dfc7b9d4c9cec","title":"Workflow Permissions","url":"/docs/guides/github-action#workflow-permissions","content":"Use minimal permissions in your workflows:","hierarchy":{"lvl0":"Guides","lvl1":"GitHub Action Guide","lvl2":"Workflow Permissions","lvl3":""}},
7065
7065
  {"objectID":"c336381d8c9fc251580c4369411bae528e0c086a9e321ee09f9530de404e1a50","title":"See Also","url":"/docs/guides/github-action#see-also","content":"Provider Selection Guide - Choose the best provider for your use case\nTroubleshooting Guide - Diagnose and resolve issues\nSDK API Reference - Full SDK documentation\nCLI Reference - CLI command documentation\nMCP Server Catalog - Available MCP tools","hierarchy":{"lvl0":"Guides","lvl1":"GitHub Action Guide","lvl2":"See Also","lvl3":""}},
7066
7066
  {"objectID":"610518771a7d035ee7026390e54a9314551b161fc3ae4e94c4c45310566bbe04","title":"License","url":"/docs/guides/github-action#license","content":"MIT - See LICENSE","hierarchy":{"lvl0":"Guides","lvl1":"GitHub Action Guide","lvl2":"License","lvl3":""}},
7067
- {"objectID":"f480bb93f79e74509c99f1427808ccc90e77e5ca6c5aa13bb80518d1027a2dc0","title":"NeuroLink Guides","url":"/docs/guides","content":"Guides\n\nComprehensive guides for building production-ready AI applications with NeuroLink.\n\n🎯 Essential Guides\n\nCore guides for getting the most out of NeuroLink.\n\n| Guide | Description |\n| ----------------------------------------------------- | ---------------------------------------------------------------------- |\n| Provider Selection Guide | Interactive wizard to choose the best provider for your use case |\n| GitHub Action Guide | Run AI-powered workflows in GitHub Actions with 44 providers |\n| Troubleshooting | Common issues, debugging tips, and solutions for NeuroLink CLI and SDK |\n\n🗄️ Redis & Persistence\n\nGuides for setting up and managing Redis-backed conversation memory.\n\n| Guide | Description |\n| ------------------------------------------------- | ------------------------------------------------------------------------ |\n| Redis Configuration | Production-ready Redis setup with cluster, security, and cloud providers |\n| Redis Migration | Migration patterns for upgrading Redis and moving between environments |\n\nSee also: Redis Quick Start in Getting Started\n\nMigration Guides\n\nMigrate from other AI frameworks to NeuroLink.\n\n| Guide | Description |\n| --------------------------------------------------------- | ------------------------------------------------------------------------------- |\n| From LangChain | Complete migration guide from LangChain with concept mapping and examples |\n| From Vercel AI SDK | Migrate from Vercel AI SDK with Next.js-focused patterns and streaming examples |\n| Migration Guide (Legacy) | General migration guide for older versions |\n\n🏢 Enterprise Guides\n\nProduction-ready patterns for enterprise AI deployments.\n\n| Guide | Description |\n| -------------------------------------------------------------------- | ----------------------------------------------------------- |\n| Multi-Provider Failover | High availability with automatic failover between providers |\n| Load Balancing | Distribute traffic across providers with 6 strategies |\n| Cost Optimization | Reduce AI costs by 80-95% with smart routing |\n| Compliance & Security | GDPR, SOC2, HIPAA compliance patterns |\n| Multi-Region Deployment | Global deployment with geographic routing |\n| Monitoring & Observability | Prometheus, Grafana, CloudWatch integration |\n| Audit Trails | Comprehensive logging for compliance |\n\n🔧 MCP Integration\n\nModel Context Protocol server catalog and integration patterns.\n\n| Guide | Description |\n| ------------------------------------------- | ----------------------------------------------------------- |\n| Server Catalog | 58+ MCP servers for file systems, databases, APIs, and more |\n\nSee also: MCP Tools Showcase for detailed tool documentation\n\nServer Adapters\n\nDeploy NeuroLink as production-ready HTTP APIs.\n\n| Guide | Description |\n| ---------------------------------------------------------- | ------------------------------------------------------------------- |\n| Server Adapters Overview | Quick start guide for exposing AI agents as HTTP APIs |\n| Hono Adapter | Recommended lightweight adapter for serverless and edge deployments |\n| Express Adapter | Integration with existing Express applications |\n| Fastify Adapter | High-performance adapter with built-in schema validation |\n| Koa Adapter | Modern, minimalist adapter with clean middleware composition |\n| Security Guide | Authentication, authorization, and security best practices |\n| Deployment Guide | Production deployment patterns with Docker and Kubernetes |\n\n🎨 Framework Integration\n\nFramework-specific integration guides.\n\n| Framework | Description |\n| ---------------------------------------- | -------------------------------------------------------- |\n| Next.js | App Router, Server Components, Server Actions, Streaming |\n| Express.js | RESTful APIs, middleware, authentication, rate limiting |\n| SvelteKit | SSR, load function","hierarchy":{"lvl0":"Guides","lvl1":"NeuroLink Guides","lvl2":"","lvl3":""}},
7067
+ {"objectID":"f480bb93f79e74509c99f1427808ccc90e77e5ca6c5aa13bb80518d1027a2dc0","title":"NeuroLink Guides","url":"/docs/guides","content":"Guides\n\nComprehensive guides for building production-ready AI applications with NeuroLink.\n\n🎯 Essential Guides\n\nCore guides for getting the most out of NeuroLink.\n\n| Guide | Description |\n| ----------------------------------------------------- | ---------------------------------------------------------------------- |\n| Provider Selection Guide | Interactive wizard to choose the best provider for your use case |\n| GitHub Action Guide | Run AI-powered workflows in GitHub Actions with broad provider support |\n| Troubleshooting | Common issues, debugging tips, and solutions for NeuroLink CLI and SDK |\n\n🗄️ Redis & Persistence\n\nGuides for setting up and managing Redis-backed conversation memory.\n\n| Guide | Description |\n| ------------------------------------------------- | ------------------------------------------------------------------------ |\n| Redis Configuration | Production-ready Redis setup with cluster, security, and cloud providers |\n| Redis Migration | Migration patterns for upgrading Redis and moving between environments |\n\nSee also: Redis Quick Start in Getting Started\n\nMigration Guides\n\nMigrate from other AI frameworks to NeuroLink.\n\n| Guide | Description |\n| --------------------------------------------------------- | ------------------------------------------------------------------------------- |\n| From LangChain | Complete migration guide from LangChain with concept mapping and examples |\n| From Vercel AI SDK | Migrate from Vercel AI SDK with Next.js-focused patterns and streaming examples |\n| Migration Guide (Legacy) | General migration guide for older versions |\n\n🏢 Enterprise Guides\n\nProduction-ready patterns for enterprise AI deployments.\n\n| Guide | Description |\n| -------------------------------------------------------------------- | ----------------------------------------------------------- |\n| Multi-Provider Failover | High availability with automatic failover between providers |\n| Load Balancing | Distribute traffic across providers with 6 strategies |\n| Cost Optimization | Reduce AI costs by 80-95% with smart routing |\n| Compliance & Security | GDPR, SOC2, HIPAA compliance patterns |\n| Multi-Region Deployment | Global deployment with geographic routing |\n| Monitoring & Observability | Prometheus, Grafana, CloudWatch integration |\n| Audit Trails | Comprehensive logging for compliance |\n\n🔧 MCP Integration\n\nModel Context Protocol server catalog and integration patterns.\n\n| Guide | Description |\n| ------------------------------------------- | ----------------------------------------------------------- |\n| Server Catalog | 58+ MCP servers for file systems, databases, APIs, and more |\n\nSee also: MCP Tools Showcase for detailed tool documentation\n\nServer Adapters\n\nDeploy NeuroLink as production-ready HTTP APIs.\n\n| Guide | Description |\n| ---------------------------------------------------------- | ------------------------------------------------------------------- |\n| Server Adapters Overview | Quick start guide for exposing AI agents as HTTP APIs |\n| Hono Adapter | Recommended lightweight adapter for serverless and edge deployments |\n| Express Adapter | Integration with existing Express applications |\n| Fastify Adapter | High-performance adapter with built-in schema validation |\n| Koa Adapter | Modern, minimalist adapter with clean middleware composition |\n| Security Guide | Authentication, authorization, and security best practices |\n| Deployment Guide | Production deployment patterns with Docker and Kubernetes |\n\n🎨 Framework Integration\n\nFramework-specific integration guides.\n\n| Framework | Description |\n| ---------------------------------------- | -------------------------------------------------------- |\n| Next.js | App Router, Server Components, Server Actions, Streaming |\n| Express.js | RESTful APIs, middleware, authentication, rate limiting |\n| SvelteKit | SSR, load function","hierarchy":{"lvl0":"Guides","lvl1":"NeuroLink Guides","lvl2":"","lvl3":""}},
7068
7068
  {"objectID":"f3e109277bf2acc158f13d6dfef4acbcd6b631110715c613c4d323725831aef1","title":"Guides","url":"/docs/guides#guides","content":"Comprehensive guides for building production-ready AI applications with NeuroLink.","hierarchy":{"lvl0":"Guides","lvl1":"NeuroLink Guides","lvl2":"Guides","lvl3":""}},
7069
- {"objectID":"fbc8bd34303a9275ca9eecff06e7f138de59c648fc469b73ecd7b49b4587a1ad","title":"🎯 Essential Guides","url":"/docs/guides#-essential-guides","content":"Core guides for getting the most out of NeuroLink.\n\n| Guide | Description |\n| ----------------------------------------------------- | ---------------------------------------------------------------------- |\n| Provider Selection Guide | Interactive wizard to choose the best provider for your use case |\n| GitHub Action Guide | Run AI-powered workflows in GitHub Actions with 44 providers |\n| Troubleshooting | Common issues, debugging tips, and solutions for NeuroLink CLI and SDK |","hierarchy":{"lvl0":"Guides","lvl1":"NeuroLink Guides","lvl2":"🎯 Essential Guides","lvl3":""}},
7069
+ {"objectID":"fbc8bd34303a9275ca9eecff06e7f138de59c648fc469b73ecd7b49b4587a1ad","title":"🎯 Essential Guides","url":"/docs/guides#-essential-guides","content":"Core guides for getting the most out of NeuroLink.\n\n| Guide | Description |\n| ----------------------------------------------------- | ---------------------------------------------------------------------- |\n| Provider Selection Guide | Interactive wizard to choose the best provider for your use case |\n| GitHub Action Guide | Run AI-powered workflows in GitHub Actions with broad provider support |\n| Troubleshooting | Common issues, debugging tips, and solutions for NeuroLink CLI and SDK |","hierarchy":{"lvl0":"Guides","lvl1":"NeuroLink Guides","lvl2":"🎯 Essential Guides","lvl3":""}},
7070
7070
  {"objectID":"9d0bcedfc805ed137c59970dec43fcb50619592f6f5bbd8bc390695263503ef1","title":"🗄️ Redis & Persistence","url":"/docs/guides#-redis-persistence","content":"Guides for setting up and managing Redis-backed conversation memory.\n\n| Guide | Description |\n| ------------------------------------------------- | ------------------------------------------------------------------------ |\n| Redis Configuration | Production-ready Redis setup with cluster, security, and cloud providers |\n| Redis Migration | Migration patterns for upgrading Redis and moving between environments |\n\nSee also: Redis Quick Start in Getting Started","hierarchy":{"lvl0":"Guides","lvl1":"NeuroLink Guides","lvl2":"🗄️ Redis & Persistence","lvl3":""}},
7071
7071
  {"objectID":"3790b1e182a0c8ce047899f589bdf8981d8fb05fe24e296b7036337a7b1a8d4f","title":"Migration Guides","url":"/docs/guides#migration-guides","content":"Migrate from other AI frameworks to NeuroLink.\n\n| Guide | Description |\n| --------------------------------------------------------- | ------------------------------------------------------------------------------- |\n| From LangChain | Complete migration guide from LangChain with concept mapping and examples |\n| From Vercel AI SDK | Migrate from Vercel AI SDK with Next.js-focused patterns and streaming examples |\n| Migration Guide (Legacy) | General migration guide for older versions |","hierarchy":{"lvl0":"Guides","lvl1":"NeuroLink Guides","lvl2":"Migration Guides","lvl3":""}},
7072
7072
  {"objectID":"0fbcbb8693f2289feb889fa823823e20e0b69d7882b5a481064296960949d69d","title":"🏢 Enterprise Guides","url":"/docs/guides#-enterprise-guides","content":"Production-ready patterns for enterprise AI deployments.\n\n| Guide | Description |\n| -------------------------------------------------------------------- | ----------------------------------------------------------- |\n| Multi-Provider Failover | High availability with automatic failover between providers |\n| Load Balancing | Distribute traffic across providers with 6 strategies |\n| Cost Optimization | Reduce AI costs by 80-95% with smart routing |\n| Compliance & Security | GDPR, SOC2, HIPAA compliance patterns |\n| Multi-Region Deployment | Global deployment with geographic routing |\n| Monitoring & Observability | Prometheus, Grafana, CloudWatch integration |\n| Audit Trails | Comprehensive logging for compliance |","hierarchy":{"lvl0":"Guides","lvl1":"NeuroLink Guides","lvl2":"🏢 Enterprise Guides","lvl3":""}},
@@ -7113,11 +7113,11 @@
7113
7113
  {"objectID":"4e625e9030f4ea5fefc5b7d84590c608e6ba446d7d4b99f1cb1ba251e7f977bc","title":"Tool Not Available","url":"/docs/guides/mcp/server-catalog#tool-not-available","content":"Problem: AI can't see MCP tools.\n\nSolution:","hierarchy":{"lvl0":"Guides","lvl1":"MCP Server Catalog","lvl2":"Tool Not Available","lvl3":""}},
7114
7114
  {"objectID":"6d2d4fa3bbc54b540d933545bf408ed8aedbf14464bcc106ba3aa99ef10b3eeb","title":"Related Documentation","url":"/docs/guides/mcp/server-catalog#related-documentation","content":"MCP Integration Guide - Detailed MCP setup\nCustom Tools - Create and use custom MCP servers\nSecurity - MCP security best practices","hierarchy":{"lvl0":"Guides","lvl1":"MCP Server Catalog","lvl2":"Related Documentation","lvl3":""}},
7115
7115
  {"objectID":"16b53f447a7f270153e21177c8452dc74b51e8a2b9ace9b9dfa8aa2fb06c5eae","title":"Additional Resources","url":"/docs/guides/mcp/server-catalog#additional-resources","content":"MCP Specification - Official protocol spec\nMCP GitHub - Source code\nServer Registry - Official servers\nCommunity Servers - Community contributions\n\nNeed Help? Join our GitHub Discussions or open an issue.","hierarchy":{"lvl0":"Guides","lvl1":"MCP Server Catalog","lvl2":"Additional Resources","lvl3":""}},
7116
- {"objectID":"4e74c1e4ff68211a2a065ab2d47fe95bc680df578aa09601cb90da05a15f41b9","title":"Migrating from LangChain to NeuroLink","url":"/docs/guides/migration/from-langchain","content":"Migrating from LangChain to NeuroLink\n\nWhy Migrate?\n\nNeuroLink offers a simpler, more production-ready alternative to LangChain with these key advantages:\n\n| Benefit | LangChain | NeuroLink |\n| ----------------------- | ------------------------------------------- | -------------------------------------------------- |\n| TypeScript Support | Partial, many type issues | Full native TypeScript, complete type safety |\n| API Complexity | Complex chains, agents, memory abstractions | Single unified generate() API |\n| Provider Support | Requires separate packages | 44 providers built-in, single package |\n| Enterprise Features | Limited | HITL workflows, Redis memory, middleware, failover |\n| MCP Integration | None | Native 58+ MCP servers with zero config |\n| Bundle Size | Large (many dependencies) | Optimized, tree-shakeable |\n| Production Ready | Community-driven | In production use at Juspay |\n\nMigration time: Most applications can migrate in 1-2 hours, with full feature parity and improved capabilities.\n\nConcept Mapping\n\nUnderstanding how LangChain concepts map to NeuroLink:\n\n| LangChain Concept | NeuroLink Equivalent | Notes |\n| ----------------------------------- | --------------------------- | -------------------------------- |\n| ChatOpenAI, ChatAnthropic, etc. | provider parameter | Single unified interface |\n| LLMChain | generate() method | No chain abstraction needed |\n| ConversationChain | conversationMemory config | Built-in conversation tracking |\n| Agent + Tools | MCP Tools | Native tool support, 58+ servers |\n| Memory (BufferMemory, etc.) | conversationMemory | Redis or in-memory |\n| Callbacks | Middleware system | More powerful, composable |\n| VectorStoreRetriever | Custom tools + external MCP | Use MCP for RAG integrations |\n| OutputParser | structuredOutput | Zod schema validation |\n| PromptTemplate | Template literals / utils | Use native JS/TS patterns |\n\nQuick Start Migration\n\nBefore (LangChain)\n\nAfter (NeuroLink)\n\nKey changes:\nSingle import instead of multiple\nUnified generate() method instead of call()\nSimpler message format (no HumanMessage wrapper)\nType-safe result with content property\n\nFeature-by-Feature Migration\nChat Models\n\nLangChain:\n\nNeuroLink:\n\nBenefits:\nNo separate packages for each provider\nConsistent API across all 44 providers\nRuntime provider switching\nAutomatic failover\nChains\n\nLangChain:\n\nNeuroLink:\n\nBenefits:\nNo chain abstraction needed\nUse native JavaScript template literals\nMore flexible, easier to debug\nDirect control over prompts\nAgents and Tools\n\nLangChain:\n\nNeuroLink:\n\nBenefits:\n6 core tools work out-of-the-box (no setup)\n58+ MCP servers available\nNo complex agent configuration\nAI automatically chooses tools\nMemory\n\nLangChain:\n\nNeuroLink:\n\nWith Redis (production):\n\nBenefits:\nBuilt-in conversation tracking\nRedis support for distributed systems\nAutomatic context management\nExport conversations to JSON\nCallbacks\n\nLangChain:\n\nNeuroLink:\n\nBuilt-in middleware:\n\nBenefits:\nMore powerful than callbacks\nComposable middleware system\nBuilt-in analytics and auto-evaluation\nRequest and response hooks\n\nCommon Patterns\n\nPattern 1: RAG Applications\n\nLangChain:\n\nNeuroLink:\n\nBenefits:\nUse MCP for database/vector integrations\nMore flexible retrieval strategies\nDirect control over context injection\n\nPattern 2: Chatbots\n\nLangChain:\n\nNeuroLink:\n\nBenefits:\nRedis support for multi-instance deployments\nAutomatic context windowing\nExport conversations for analytics\nBuilt-in conversation management\n\nPattern 3: Multi-step Workflows\n\nLangChain:\n\nNeuroLink:\n\nWith orchestration:\n\nBenefits:\nExplicit control over workflow\nEasier to debug and test\nCan use conversation memory for context\nMore flexible than rigid chains\n\nStreaming\n\nLangChain:\n\nNeuroLink:\n\nBenefits:\nSimpler streaming API\nConsistent across all providers\nBuilt-in error handling\n\nStructured Output\n\nLangChain:\n\nNeuroLink:\n\nBenefits:\nBuilt-in Zod schema validation\nType-safe results\nAutomatic JSON parsing\nNo manual parsing needed\n\nGotchas and Differences\nMessage Format\n\nLangChain uses message classes:\n\nNeuroLink uses simple objects:\nError Handling\n\nLangChain: Basic try-catch required for all operations\n\nNeuroLink: Built-in retry, failover, and graceful degradation:\nTool Execution\n\nLangChain: Manual tool registration and execution\n\nNeuroLink: Automatic MCP tool discovery and exec","hierarchy":{"lvl0":"Guides","lvl1":"Migrating from LangChain to NeuroLink","lvl2":"","lvl3":""}},
7117
- {"objectID":"a48bbe2942ddb17ff0becb164f308f631fa2cb15ff71defc2a8efa2e759601a3","title":"Why Migrate?","url":"/docs/guides/migration/from-langchain#why-migrate","content":"NeuroLink offers a simpler, more production-ready alternative to LangChain with these key advantages:\n\n| Benefit | LangChain | NeuroLink |\n| ----------------------- | ------------------------------------------- | -------------------------------------------------- |\n| TypeScript Support | Partial, many type issues | Full native TypeScript, complete type safety |\n| API Complexity | Complex chains, agents, memory abstractions | Single unified generate() API |\n| Provider Support | Requires separate packages | 44 providers built-in, single package |\n| Enterprise Features | Limited | HITL workflows, Redis memory, middleware, failover |\n| MCP Integration | None | Native 58+ MCP servers with zero config |\n| Bundle Size | Large (many dependencies) | Optimized, tree-shakeable |\n| Production Ready | Community-driven | In production use at Juspay |\n\nMigration time: Most applications can migrate in 1-2 hours, with full feature parity and improved capabilities.","hierarchy":{"lvl0":"Guides","lvl1":"Migrating from LangChain to NeuroLink","lvl2":"Why Migrate?","lvl3":""}},
7116
+ {"objectID":"4e74c1e4ff68211a2a065ab2d47fe95bc680df578aa09601cb90da05a15f41b9","title":"Migrating from LangChain to NeuroLink","url":"/docs/guides/migration/from-langchain","content":"Migrating from LangChain to NeuroLink\n\nWhy Migrate?\n\nNeuroLink offers a simpler, more production-ready alternative to LangChain with these key advantages:\n\n| Benefit | LangChain | NeuroLink |\n| ----------------------- | ------------------------------------------- | -------------------------------------------------- |\n| TypeScript Support | Partial, many type issues | Full native TypeScript, complete type safety |\n| API Complexity | Complex chains, agents, memory abstractions | Single unified generate() API |\n| Provider Support | Requires separate packages | Supported providers built in, one package |\n| Enterprise Features | Limited | HITL workflows, Redis memory, middleware, failover |\n| MCP Integration | None | Native 58+ MCP servers with zero config |\n| Bundle Size | Large (many dependencies) | Optimized, tree-shakeable |\n| Production Ready | Community-driven | In production use at Juspay |\n\nMigration time: Most applications can migrate in 1-2 hours, with full feature parity and improved capabilities.\n\nConcept Mapping\n\nUnderstanding how LangChain concepts map to NeuroLink:\n\n| LangChain Concept | NeuroLink Equivalent | Notes |\n| ----------------------------------- | --------------------------- | -------------------------------- |\n| ChatOpenAI, ChatAnthropic, etc. | provider parameter | Single unified interface |\n| LLMChain | generate() method | No chain abstraction needed |\n| ConversationChain | conversationMemory config | Built-in conversation tracking |\n| Agent + Tools | MCP Tools | Native tool support, 58+ servers |\n| Memory (BufferMemory, etc.) | conversationMemory | Redis or in-memory |\n| Callbacks | Middleware system | More powerful, composable |\n| VectorStoreRetriever | Custom tools + external MCP | Use MCP for RAG integrations |\n| OutputParser | structuredOutput | Zod schema validation |\n| PromptTemplate | Template literals / utils | Use native JS/TS patterns |\n\nQuick Start Migration\n\nBefore (LangChain)\n\nAfter (NeuroLink)\n\nKey changes:\nSingle import instead of multiple\nUnified generate() method instead of call()\nSimpler message format (no HumanMessage wrapper)\nType-safe result with content property\n\nFeature-by-Feature Migration\nChat Models\n\nLangChain:\n\nNeuroLink:\n\nBenefits:\nNo separate packages for each provider\nConsistent API across supported providers\nRuntime provider switching\nAutomatic failover\nChains\n\nLangChain:\n\nNeuroLink:\n\nBenefits:\nNo chain abstraction needed\nUse native JavaScript template literals\nMore flexible, easier to debug\nDirect control over prompts\nAgents and Tools\n\nLangChain:\n\nNeuroLink:\n\nBenefits:\n6 core tools work out-of-the-box (no setup)\n58+ MCP servers available\nNo complex agent configuration\nAI automatically chooses tools\nMemory\n\nLangChain:\n\nNeuroLink:\n\nWith Redis (production):\n\nBenefits:\nBuilt-in conversation tracking\nRedis support for distributed systems\nAutomatic context management\nExport conversations to JSON\nCallbacks\n\nLangChain:\n\nNeuroLink:\n\nBuilt-in middleware:\n\nBenefits:\nMore powerful than callbacks\nComposable middleware system\nBuilt-in analytics and auto-evaluation\nRequest and response hooks\n\nCommon Patterns\n\nPattern 1: RAG Applications\n\nLangChain:\n\nNeuroLink:\n\nBenefits:\nUse MCP for database/vector integrations\nMore flexible retrieval strategies\nDirect control over context injection\n\nPattern 2: Chatbots\n\nLangChain:\n\nNeuroLink:\n\nBenefits:\nRedis support for multi-instance deployments\nAutomatic context windowing\nExport conversations for analytics\nBuilt-in conversation management\n\nPattern 3: Multi-step Workflows\n\nLangChain:\n\nNeuroLink:\n\nWith orchestration:\n\nBenefits:\nExplicit control over workflow\nEasier to debug and test\nCan use conversation memory for context\nMore flexible than rigid chains\n\nStreaming\n\nLangChain:\n\nNeuroLink:\n\nBenefits:\nSimpler streaming API\nConsistent streaming API across supported providers\nBuilt-in error handling\n\nStructured Output\n\nLangChain:\n\nNeuroLink:\n\nBenefits:\nBuilt-in Zod schema validation\nType-safe results\nAutomatic JSON parsing\nNo manual parsing needed\n\nGotchas and Differences\nMessage Format\n\nLangChain uses message classes:\n\nNeuroLink uses simple objects:\nError Handling\n\nLangChain: Basic try-catch required for all operations\n\nNeuroLink: Built-in retry, failover, and graceful degradation:\nTool Execution\n\nLangChain: Manual tool registration and execution\n\nNeuroLink: Automatic MCP ","hierarchy":{"lvl0":"Guides","lvl1":"Migrating from LangChain to NeuroLink","lvl2":"","lvl3":""}},
7117
+ {"objectID":"a48bbe2942ddb17ff0becb164f308f631fa2cb15ff71defc2a8efa2e759601a3","title":"Why Migrate?","url":"/docs/guides/migration/from-langchain#why-migrate","content":"NeuroLink offers a simpler, more production-ready alternative to LangChain with these key advantages:\n\n| Benefit | LangChain | NeuroLink |\n| ----------------------- | ------------------------------------------- | -------------------------------------------------- |\n| TypeScript Support | Partial, many type issues | Full native TypeScript, complete type safety |\n| API Complexity | Complex chains, agents, memory abstractions | Single unified generate() API |\n| Provider Support | Requires separate packages | Supported providers built in, one package |\n| Enterprise Features | Limited | HITL workflows, Redis memory, middleware, failover |\n| MCP Integration | None | Native 58+ MCP servers with zero config |\n| Bundle Size | Large (many dependencies) | Optimized, tree-shakeable |\n| Production Ready | Community-driven | In production use at Juspay |\n\nMigration time: Most applications can migrate in 1-2 hours, with full feature parity and improved capabilities.","hierarchy":{"lvl0":"Guides","lvl1":"Migrating from LangChain to NeuroLink","lvl2":"Why Migrate?","lvl3":""}},
7118
7118
  {"objectID":"577449cc99d461284c8c0b170d17bca277a1c8902b814a0c4c23a0ed7ec0d97a","title":"Concept Mapping","url":"/docs/guides/migration/from-langchain#concept-mapping","content":"Understanding how LangChain concepts map to NeuroLink:\n\n| LangChain Concept | NeuroLink Equivalent | Notes |\n| ----------------------------------- | --------------------------- | -------------------------------- |\n| ChatOpenAI, ChatAnthropic, etc. | provider parameter | Single unified interface |\n| LLMChain | generate() method | No chain abstraction needed |\n| ConversationChain | conversationMemory config | Built-in conversation tracking |\n| Agent + Tools | MCP Tools | Native tool support, 58+ servers |\n| Memory (BufferMemory, etc.) | conversationMemory | Redis or in-memory |\n| Callbacks | Middleware system | More powerful, composable |\n| VectorStoreRetriever | Custom tools + external MCP | Use MCP for RAG integrations |\n| OutputParser | structuredOutput | Zod schema validation |\n| PromptTemplate | Template literals / utils | Use native JS/TS patterns |","hierarchy":{"lvl0":"Guides","lvl1":"Migrating from LangChain to NeuroLink","lvl2":"Concept Mapping","lvl3":""}},
7119
7119
  {"objectID":"88a2415a8665ffb48e4aa61b4bfe5038b9058d71d57d7dfefdcae9926279ea2d","title":"After (NeuroLink)","url":"/docs/guides/migration/from-langchain#after-neurolink","content":"Key changes:\nSingle import instead of multiple\nUnified generate() method instead of call()\nSimpler message format (no HumanMessage wrapper)\nType-safe result with content property","hierarchy":{"lvl0":"Guides","lvl1":"Migrating from LangChain to NeuroLink","lvl2":"After (NeuroLink)","lvl3":""}},
7120
- {"objectID":"723e79f38aacc3d160110337cf2c477463d91fc4f7c2d5f2a0bff5184b9196b0","title":"1. Chat Models","url":"/docs/guides/migration/from-langchain#1-chat-models","content":"LangChain:\n\nNeuroLink:\n\nBenefits:\nNo separate packages for each provider\nConsistent API across all 44 providers\nRuntime provider switching\nAutomatic failover","hierarchy":{"lvl0":"Guides","lvl1":"Migrating from LangChain to NeuroLink","lvl2":"1. Chat Models","lvl3":""}},
7120
+ {"objectID":"723e79f38aacc3d160110337cf2c477463d91fc4f7c2d5f2a0bff5184b9196b0","title":"1. Chat Models","url":"/docs/guides/migration/from-langchain#1-chat-models","content":"LangChain:\n\nNeuroLink:\n\nBenefits:\nNo separate packages for each provider\nConsistent API across supported providers\nRuntime provider switching\nAutomatic failover","hierarchy":{"lvl0":"Guides","lvl1":"Migrating from LangChain to NeuroLink","lvl2":"1. Chat Models","lvl3":""}},
7121
7121
  {"objectID":"87ed2004761c0ac3f520eefcb0d6e3b9f4b3b6e8590a2b7ac77201de056c2d7a","title":"2. Chains","url":"/docs/guides/migration/from-langchain#2-chains","content":"LangChain:\n\nNeuroLink:\n\nBenefits:\nNo chain abstraction needed\nUse native JavaScript template literals\nMore flexible, easier to debug\nDirect control over prompts","hierarchy":{"lvl0":"Guides","lvl1":"Migrating from LangChain to NeuroLink","lvl2":"2. Chains","lvl3":""}},
7122
7122
  {"objectID":"dc52896ae97fa9f660e3fb62286c58c304440af383736dde467399d1f7adda39","title":"3. Agents and Tools","url":"/docs/guides/migration/from-langchain#3-agents-and-tools","content":"LangChain:\n\nNeuroLink:\n\nBenefits:\n6 core tools work out-of-the-box (no setup)\n58+ MCP servers available\nNo complex agent configuration\nAI automatically chooses tools","hierarchy":{"lvl0":"Guides","lvl1":"Migrating from LangChain to NeuroLink","lvl2":"3. Agents and Tools","lvl3":""}},
7123
7123
  {"objectID":"caf9522e06a3e9cb5bc8259e003d905389fb74982b7791849a6b338b28ef9d16","title":"4. Memory","url":"/docs/guides/migration/from-langchain#4-memory","content":"LangChain:\n\nNeuroLink:\n\nWith Redis (production):\n\nBenefits:\nBuilt-in conversation tracking\nRedis support for distributed systems\nAutomatic context management\nExport conversations to JSON","hierarchy":{"lvl0":"Guides","lvl1":"Migrating from LangChain to NeuroLink","lvl2":"4. Memory","lvl3":""}},
@@ -7125,7 +7125,7 @@
7125
7125
  {"objectID":"0ba8b00a515703e5a305e59c4599a53284b23bd566124629859c0a424603b20a","title":"Pattern 1: RAG Applications","url":"/docs/guides/migration/from-langchain#pattern-1-rag-applications","content":"LangChain:\n\nNeuroLink:\n\nBenefits:\nUse MCP for database/vector integrations\nMore flexible retrieval strategies\nDirect control over context injection","hierarchy":{"lvl0":"Guides","lvl1":"Migrating from LangChain to NeuroLink","lvl2":"Pattern 1: RAG Applications","lvl3":""}},
7126
7126
  {"objectID":"e7b879ef1d9410960e6b330ffdd930baee5730e693c3850961d4dde1b250dbf5","title":"Pattern 2: Chatbots","url":"/docs/guides/migration/from-langchain#pattern-2-chatbots","content":"LangChain:\n\nNeuroLink:\n\nBenefits:\nRedis support for multi-instance deployments\nAutomatic context windowing\nExport conversations for analytics\nBuilt-in conversation management","hierarchy":{"lvl0":"Guides","lvl1":"Migrating from LangChain to NeuroLink","lvl2":"Pattern 2: Chatbots","lvl3":""}},
7127
7127
  {"objectID":"22f85c21288e70d58eade9cf05ca318566866fd9274d03b7ec30c03f8088a9a8","title":"Pattern 3: Multi-step Workflows","url":"/docs/guides/migration/from-langchain#pattern-3-multi-step-workflows","content":"LangChain:\n\nNeuroLink:\n\nWith orchestration:\n\nBenefits:\nExplicit control over workflow\nEasier to debug and test\nCan use conversation memory for context\nMore flexible than rigid chains","hierarchy":{"lvl0":"Guides","lvl1":"Migrating from LangChain to NeuroLink","lvl2":"Pattern 3: Multi-step Workflows","lvl3":""}},
7128
- {"objectID":"abacb7f2253dd5bac3f0f2e7d62672d56829fecd4136e1c7e5dfcb3663c9ce8c","title":"Streaming","url":"/docs/guides/migration/from-langchain#streaming","content":"LangChain:\n\nNeuroLink:\n\nBenefits:\nSimpler streaming API\nConsistent across all providers\nBuilt-in error handling","hierarchy":{"lvl0":"Guides","lvl1":"Migrating from LangChain to NeuroLink","lvl2":"Streaming","lvl3":""}},
7128
+ {"objectID":"abacb7f2253dd5bac3f0f2e7d62672d56829fecd4136e1c7e5dfcb3663c9ce8c","title":"Streaming","url":"/docs/guides/migration/from-langchain#streaming","content":"LangChain:\n\nNeuroLink:\n\nBenefits:\nSimpler streaming API\nConsistent streaming API across supported providers\nBuilt-in error handling","hierarchy":{"lvl0":"Guides","lvl1":"Migrating from LangChain to NeuroLink","lvl2":"Streaming","lvl3":""}},
7129
7129
  {"objectID":"d507a0d919e1df62ec9798f967ca658a6d43852bdb930962876f578c7fcd7dd8","title":"Structured Output","url":"/docs/guides/migration/from-langchain#structured-output","content":"LangChain:\n\nNeuroLink:\n\nBenefits:\nBuilt-in Zod schema validation\nType-safe results\nAutomatic JSON parsing\nNo manual parsing needed","hierarchy":{"lvl0":"Guides","lvl1":"Migrating from LangChain to NeuroLink","lvl2":"Structured Output","lvl3":""}},
7130
7130
  {"objectID":"b09ffb5075c316b1b6df4ea695a23c0da9050f02bc88df7a807201893f56719a","title":"1. Message Format","url":"/docs/guides/migration/from-langchain#1-message-format","content":"LangChain uses message classes:\n\nNeuroLink uses simple objects:","hierarchy":{"lvl0":"Guides","lvl1":"Migrating from LangChain to NeuroLink","lvl2":"1. Message Format","lvl3":""}},
7131
7131
  {"objectID":"6000275838e307759e78facdbbfb27aafcf309871c63d3980cab64aedc7d4c2f","title":"2. Error Handling","url":"/docs/guides/migration/from-langchain#2-error-handling","content":"LangChain: Basic try-catch required for all operations\n\nNeuroLink: Built-in retry, failover, and graceful degradation:","hierarchy":{"lvl0":"Guides","lvl1":"Migrating from LangChain to NeuroLink","lvl2":"2. Error Handling","lvl3":""}},
@@ -7142,15 +7142,15 @@
7142
7142
  {"objectID":"57ae3eeeeebc21be185b544e87e67d83d434547f5bfa002f9527648e8b9ae90b","title":"Performance Comparison","url":"/docs/guides/migration/from-langchain#performance-comparison","content":"Real-world benchmarks (averaged over 1000 requests):\n\n| Metric | LangChain | NeuroLink | Improvement |\n| -------------------------- | --------- | --------- | --------------- |\n| First response time | 850ms | 420ms | 50% faster |\n| Memory usage | 180MB | 85MB | 53% less |\n| Bundle size (minified) | 2.3MB | 890KB | 61% smaller |\n| Type errors (compile time) | Frequent | Rare | Better DX |","hierarchy":{"lvl0":"Guides","lvl1":"Migrating from LangChain to NeuroLink","lvl2":"Performance Comparison","lvl3":""}},
7143
7143
  {"objectID":"7ffaf72fa4826f16117855d87c69889019034bb89e2bdc084e7d38de3d539294","title":"Getting Help","url":"/docs/guides/migration/from-langchain#getting-help","content":"Documentation: https://neurolink.dev/docs\nExamples: Migration examples repo\nDiscord: Join our community\nGitHub Issues: Report issues","hierarchy":{"lvl0":"Guides","lvl1":"Migrating from LangChain to NeuroLink","lvl2":"Getting Help","lvl3":""}},
7144
7144
  {"objectID":"bd252895420dd111dafef549646a4e9b9ebd8639c3b6c75bbc4b88c5ed24744e","title":"See Also","url":"/docs/guides/migration/from-langchain#see-also","content":"NeuroLink Getting Started Guide\nComplete API Reference\nMCP Integration Guide\nEnterprise Features\nProvider Comparison","hierarchy":{"lvl0":"Guides","lvl1":"Migrating from LangChain to NeuroLink","lvl2":"See Also","lvl3":""}},
7145
- {"objectID":"1e2daa291d57c89396dd26585176a8263cbe2d5b17c0e62552e1c5ba852507ff","title":"Migrating from Vercel AI SDK to NeuroLink","url":"/docs/guides/migration/from-vercel-ai-sdk","content":"Migrating from Vercel AI SDK to NeuroLink\n\nWhy Migrate?\n\nWhile Vercel AI SDK is excellent for Next.js applications, NeuroLink offers broader capabilities for enterprise and multi-framework applications:\n\n| Benefit | Vercel AI SDK | NeuroLink |\n| ----------------------- | ------------------------------ | ---------------------------------------- |\n| Multi-Provider | Separate packages per provider | 44 providers in single package |\n| Framework Support | Optimized for Next.js | Next.js, SvelteKit, Express, any Node.js |\n| Tool Integration | Function calling only | MCP (58+ servers) + function calling |\n| Enterprise Features | Basic | HITL, Redis memory, middleware, failover |\n| Memory/State | useChat hook (client-side) | Redis-backed server-side memory |\n| Production Ready | Good for prototypes | In production use at Juspay |\n| Bundle Size | Moderate | Optimized, tree-shakeable |\n| Streaming | Excellent | Excellent (same quality) |\n\nMigration time: Most Next.js apps can migrate in 2-3 hours with feature parity and enhanced capabilities.\n\nConcept Mapping\n\n| Vercel AI SDK | NeuroLink | Notes |\n| ------------------------------------ | ----------------------- | ------------------------------------- |\n| generateText() | generate() | Similar API, unified across providers |\n| streamText() | stream() | Built-in streaming |\n| useChat() | Custom hook + API route | Server-side memory more robust |\n| CoreMessage | ChatMessage | Type compatible |\n| tool() function | MCP Tools | More powerful, 58+ servers |\n| Provider packages (@ai-sdk/openai) | provider parameter | Single package |\n| generateObject() | generate({ schema }) | Zod schema validation |\n| Edge Runtime | Node.js runtime | Compatible with Edge via adapters |\n\nQuick Start Migration\n\nBefore (Vercel AI SDK)\n\nAfter (NeuroLink)\n\nKey changes:\nSingle import instead of multiple packages\nUnified generate() method\ncontent instead of text property\nProvider specified in config, not per-call\n\nFeature-by-Feature Migration\nText Generation\n\nVercel AI SDK:\n\nNeuroLink:\nStreaming\n\nVercel AI SDK:\n\nNeuroLink:\n\nFull chunk data:\nTool Calling (Function Calling)\n\nVercel AI SDK:\n\nNeuroLink:\n\nBenefits:\nMCP servers provide 58+ pre-built integrations\nNo manual tool registration needed\nTools work across all providers\nStructured Output\n\nVercel AI SDK:\n\nNeuroLink:\n\nBenefits:\nType-safe results\nAutomatic validation\nWorks across all providers\nMulti-Provider Support\n\nVercel AI SDK:\n\nNeuroLink:\n\nWith automatic failover:\n\nBenefits:\nSingle package for all 44 providers\nRuntime provider switching\nAutomatic failover\nNo need to install separate packages\n\nNext.js Integration\n\nPattern 1: API Routes\n\nVercel AI SDK:\n\nNeuroLink:\n\nWith better error handling:\n\nPattern 2: Server Components\n\nVercel AI SDK:\n\nNeuroLink:\n\nWith caching:\n\nPattern 3: useChat Alternative\n\nVercel AI SDK:\n\nNeuroLink:\n\nOr create a custom hook:\n\nPattern 4: Server Actions\n\nVercel AI SDK:\n\nNeuroLink:\n\nWith user context:\n\nEdge Runtime Support\n\nVercel AI SDK:\n\nNeuroLink:\n\nRecommendation: NeuroLink works best with Node.js runtime. For Edge Runtime, consider using provider APIs directly or wait for Edge-compatible version.\n\nMultimodal Support\n\nVercel AI SDK:\n\nNeuroLink:\n\nWith file path:\n\nWith PDF:\n\nMigration Checklist\n[ ] Install NeuroLink: npm install @juspay/neurolink\n[ ] Setup Environment: Configure API keys in .env\n[ ] Test Basic Generation: Verify generate() works\n[ ] Migrate API Routes: Update /api routes\n[ ] Migrate Server Components: Update RSC usage\n[ ] Update Client Components: Replace useChat with custom hook\n[ ] Migrate Tool Calling: Convert functions to MCP tools\n[ ] Enable Conversation Memory: Add Redis if needed\n[ ] Update Streaming: Adapt streaming code\n[ ] Test Multi-Provider: Verify provider switching\n[ ] Update Types: Use NeuroLink types\n[ ] Remove Vercel AI SDK: Uninstall after migration\n\nPerformance Comparison\n\n| Metric | Vercel AI SDK | NeuroLink | Notes |\n| ---------------------- | ----------------- | -------------- | ------------------- |\n| Bundle Size (minified) | 890KB | 890KB | Similar |\n| First Response | 420ms | 420ms | Equivalent |\n| Streaming Latency | Excellent | Excellent | Both optimized |\n| Multi-Provider | Requires packages | Single pa","hierarchy":{"lvl0":"Guides","lvl1":"Migrating from Vercel AI SDK to NeuroLink","lvl2":"","lvl3":""}},
7146
- {"objectID":"1b4c7ad2fe68ede95233d4921cc923211694c7249534efac0b3439b82a924749","title":"Why Migrate?","url":"/docs/guides/migration/from-vercel-ai-sdk#why-migrate","content":"While Vercel AI SDK is excellent for Next.js applications, NeuroLink offers broader capabilities for enterprise and multi-framework applications:\n\n| Benefit | Vercel AI SDK | NeuroLink |\n| ----------------------- | ------------------------------ | ---------------------------------------- |\n| Multi-Provider | Separate packages per provider | 44 providers in single package |\n| Framework Support | Optimized for Next.js | Next.js, SvelteKit, Express, any Node.js |\n| Tool Integration | Function calling only | MCP (58+ servers) + function calling |\n| Enterprise Features | Basic | HITL, Redis memory, middleware, failover |\n| Memory/State | useChat hook (client-side) | Redis-backed server-side memory |\n| Production Ready | Good for prototypes | In production use at Juspay |\n| Bundle Size | Moderate | Optimized, tree-shakeable |\n| Streaming | Excellent | Excellent (same quality) |\n\nMigration time: Most Next.js apps can migrate in 2-3 hours with feature parity and enhanced capabilities.","hierarchy":{"lvl0":"Guides","lvl1":"Migrating from Vercel AI SDK to NeuroLink","lvl2":"Why Migrate?","lvl3":""}},
7145
+ {"objectID":"1e2daa291d57c89396dd26585176a8263cbe2d5b17c0e62552e1c5ba852507ff","title":"Migrating from Vercel AI SDK to NeuroLink","url":"/docs/guides/migration/from-vercel-ai-sdk","content":"Migrating from Vercel AI SDK to NeuroLink\n\nWhy Migrate?\n\nWhile Vercel AI SDK is excellent for Next.js applications, NeuroLink offers broader capabilities for enterprise and multi-framework applications:\n\n| Benefit | Vercel AI SDK | NeuroLink |\n| ----------------------- | ------------------------------ | ---------------------------------------- |\n| Multi-Provider | Separate packages per provider | Supported providers in a single package |\n| Framework Support | Optimized for Next.js | Next.js, SvelteKit, Express, any Node.js |\n| Tool Integration | Function calling only | MCP (58+ servers) + function calling |\n| Enterprise Features | Basic | HITL, Redis memory, middleware, failover |\n| Memory/State | useChat hook (client-side) | Redis-backed server-side memory |\n| Production Ready | Good for prototypes | In production use at Juspay |\n| Bundle Size | Moderate | Optimized, tree-shakeable |\n| Streaming | Excellent | Excellent (same quality) |\n\nMigration time: Most Next.js apps can migrate in 2-3 hours with feature parity and enhanced capabilities.\n\nConcept Mapping\n\n| Vercel AI SDK | NeuroLink | Notes |\n| ------------------------------------ | ----------------------- | ------------------------------------- |\n| generateText() | generate() | Similar API, unified across providers |\n| streamText() | stream() | Built-in streaming |\n| useChat() | Custom hook + API route | Server-side memory more robust |\n| CoreMessage | ChatMessage | Type compatible |\n| tool() function | MCP Tools | More powerful, 58+ servers |\n| Provider packages (@ai-sdk/openai) | provider parameter | Single package |\n| generateObject() | generate({ schema }) | Zod schema validation |\n| Edge Runtime | Node.js runtime | Compatible with Edge via adapters |\n\nQuick Start Migration\n\nBefore (Vercel AI SDK)\n\nAfter (NeuroLink)\n\nKey changes:\nSingle import instead of multiple packages\nUnified generate() method\ncontent instead of text property\nProvider specified in config, not per-call\n\nFeature-by-Feature Migration\nText Generation\n\nVercel AI SDK:\n\nNeuroLink:\nStreaming\n\nVercel AI SDK:\n\nNeuroLink:\n\nFull chunk data:\nTool Calling (Function Calling)\n\nVercel AI SDK:\n\nNeuroLink:\n\nBenefits:\nMCP servers provide 58+ pre-built integrations\nNo manual tool registration needed\nTools work with providers that support tool-calling\nStructured Output\n\nVercel AI SDK:\n\nNeuroLink:\n\nBenefits:\nType-safe results\nAutomatic validation\nWorks across providers that support structured output\nMulti-Provider Support\n\nVercel AI SDK:\n\nNeuroLink:\n\nWith automatic failover:\n\nBenefits:\nSingle package for supported providers\nRuntime provider switching\nAutomatic failover\nNo need to install separate packages\n\nNext.js Integration\n\nPattern 1: API Routes\n\nVercel AI SDK:\n\nNeuroLink:\n\nWith better error handling:\n\nPattern 2: Server Components\n\nVercel AI SDK:\n\nNeuroLink:\n\nWith caching:\n\nPattern 3: useChat Alternative\n\nVercel AI SDK:\n\nNeuroLink:\n\nOr create a custom hook:\n\nPattern 4: Server Actions\n\nVercel AI SDK:\n\nNeuroLink:\n\nWith user context:\n\nEdge Runtime Support\n\nVercel AI SDK:\n\nNeuroLink:\n\nRecommendation: NeuroLink works best with Node.js runtime. For Edge Runtime, consider using provider APIs directly or wait for Edge-compatible version.\n\nMultimodal Support\n\nVercel AI SDK:\n\nNeuroLink:\n\nWith file path:\n\nWith PDF:\n\nMigration Checklist\n[ ] Install NeuroLink: npm install @juspay/neurolink\n[ ] Setup Environment: Configure API keys in .env\n[ ] Test Basic Generation: Verify generate() works\n[ ] Migrate API Routes: Update /api routes\n[ ] Migrate Server Components: Update RSC usage\n[ ] Update Client Components: Replace useChat with custom hook\n[ ] Migrate Tool Calling: Convert functions to MCP tools\n[ ] Enable Conversation Memory: Add Redis if needed\n[ ] Update Streaming: Adapt streaming code\n[ ] Test Multi-Provider: Verify provider switching\n[ ] Update Types: Use NeuroLink types\n[ ] Remove Vercel AI SDK: Uninstall after migration\n\nPerformance Comparison\n\n| Metric | Vercel AI SDK | NeuroLink | Notes |\n| ---------------------- | ----------------- | -------------- | ------------------- |\n| Bundle Size (minified) | 890KB | 890KB | Similar |\n| First Response | 420ms | 420ms | Equivalent |\n| Streaming Latency | Excellent | Excellent | Both optimized |\n| Mult","hierarchy":{"lvl0":"Guides","lvl1":"Migrating from Vercel AI SDK to NeuroLink","lvl2":"","lvl3":""}},
7146
+ {"objectID":"1b4c7ad2fe68ede95233d4921cc923211694c7249534efac0b3439b82a924749","title":"Why Migrate?","url":"/docs/guides/migration/from-vercel-ai-sdk#why-migrate","content":"While Vercel AI SDK is excellent for Next.js applications, NeuroLink offers broader capabilities for enterprise and multi-framework applications:\n\n| Benefit | Vercel AI SDK | NeuroLink |\n| ----------------------- | ------------------------------ | ---------------------------------------- |\n| Multi-Provider | Separate packages per provider | Supported providers in a single package |\n| Framework Support | Optimized for Next.js | Next.js, SvelteKit, Express, any Node.js |\n| Tool Integration | Function calling only | MCP (58+ servers) + function calling |\n| Enterprise Features | Basic | HITL, Redis memory, middleware, failover |\n| Memory/State | useChat hook (client-side) | Redis-backed server-side memory |\n| Production Ready | Good for prototypes | In production use at Juspay |\n| Bundle Size | Moderate | Optimized, tree-shakeable |\n| Streaming | Excellent | Excellent (same quality) |\n\nMigration time: Most Next.js apps can migrate in 2-3 hours with feature parity and enhanced capabilities.","hierarchy":{"lvl0":"Guides","lvl1":"Migrating from Vercel AI SDK to NeuroLink","lvl2":"Why Migrate?","lvl3":""}},
7147
7147
  {"objectID":"45ac16cfbfed3ab649edf8f3cb66fffe76dd4446e73582343c4225919915cad6","title":"Concept Mapping","url":"/docs/guides/migration/from-vercel-ai-sdk#concept-mapping","content":"| Vercel AI SDK | NeuroLink | Notes |\n| ------------------------------------ | ----------------------- | ------------------------------------- |\n| generateText() | generate() | Similar API, unified across providers |\n| streamText() | stream() | Built-in streaming |\n| useChat() | Custom hook + API route | Server-side memory more robust |\n| CoreMessage | ChatMessage | Type compatible |\n| tool() function | MCP Tools | More powerful, 58+ servers |\n| Provider packages (@ai-sdk/openai) | provider parameter | Single package |\n| generateObject() | generate({ schema }) | Zod schema validation |\n| Edge Runtime | Node.js runtime | Compatible with Edge via adapters |","hierarchy":{"lvl0":"Guides","lvl1":"Migrating from Vercel AI SDK to NeuroLink","lvl2":"Concept Mapping","lvl3":""}},
7148
7148
  {"objectID":"8b57f0b23d734238e9e896bd1af76aa7af594859a81caa1a7ee4fe33eb6dfb18","title":"After (NeuroLink)","url":"/docs/guides/migration/from-vercel-ai-sdk#after-neurolink","content":"Key changes:\nSingle import instead of multiple packages\nUnified generate() method\ncontent instead of text property\nProvider specified in config, not per-call","hierarchy":{"lvl0":"Guides","lvl1":"Migrating from Vercel AI SDK to NeuroLink","lvl2":"After (NeuroLink)","lvl3":""}},
7149
7149
  {"objectID":"cc4b2aefbe72ff0244f0f19b2ea2a45fb107576b1bf0371309837ea5d4b6bd01","title":"1. Text Generation","url":"/docs/guides/migration/from-vercel-ai-sdk#1-text-generation","content":"Vercel AI SDK:\n\nNeuroLink:","hierarchy":{"lvl0":"Guides","lvl1":"Migrating from Vercel AI SDK to NeuroLink","lvl2":"1. Text Generation","lvl3":""}},
7150
7150
  {"objectID":"e70e97dcf0c8ada2971bb97b94b7d29147a40ecae922b2d744915bce0a729bb0","title":"2. Streaming","url":"/docs/guides/migration/from-vercel-ai-sdk#2-streaming","content":"Vercel AI SDK:\n\nNeuroLink:\n\nFull chunk data:","hierarchy":{"lvl0":"Guides","lvl1":"Migrating from Vercel AI SDK to NeuroLink","lvl2":"2. Streaming","lvl3":""}},
7151
- {"objectID":"57daefdaeea031a87618332ba19c5014e187e98826fd0dfc552dbbbf8f0db429","title":"3. Tool Calling (Function Calling)","url":"/docs/guides/migration/from-vercel-ai-sdk#3-tool-calling-function-calling","content":"Vercel AI SDK:\n\nNeuroLink:\n\nBenefits:\nMCP servers provide 58+ pre-built integrations\nNo manual tool registration needed\nTools work across all providers","hierarchy":{"lvl0":"Guides","lvl1":"Migrating from Vercel AI SDK to NeuroLink","lvl2":"3. Tool Calling (Function Calling)","lvl3":""}},
7152
- {"objectID":"4b0708b0531ad08599a7d18da29be132b5f0ae1ba12c4922c626ddc38b6a2f6e","title":"4. Structured Output","url":"/docs/guides/migration/from-vercel-ai-sdk#4-structured-output","content":"Vercel AI SDK:\n\nNeuroLink:\n\nBenefits:\nType-safe results\nAutomatic validation\nWorks across all providers","hierarchy":{"lvl0":"Guides","lvl1":"Migrating from Vercel AI SDK to NeuroLink","lvl2":"4. Structured Output","lvl3":""}},
7153
- {"objectID":"c0f99d59f8dee45796176094ef083365256925e85e064365a6360317ce6a7a0c","title":"5. Multi-Provider Support","url":"/docs/guides/migration/from-vercel-ai-sdk#5-multi-provider-support","content":"Vercel AI SDK:\n\nNeuroLink:\n\nWith automatic failover:\n\nBenefits:\nSingle package for all 44 providers\nRuntime provider switching\nAutomatic failover\nNo need to install separate packages","hierarchy":{"lvl0":"Guides","lvl1":"Migrating from Vercel AI SDK to NeuroLink","lvl2":"5. Multi-Provider Support","lvl3":""}},
7151
+ {"objectID":"57daefdaeea031a87618332ba19c5014e187e98826fd0dfc552dbbbf8f0db429","title":"3. Tool Calling (Function Calling)","url":"/docs/guides/migration/from-vercel-ai-sdk#3-tool-calling-function-calling","content":"Vercel AI SDK:\n\nNeuroLink:\n\nBenefits:\nMCP servers provide 58+ pre-built integrations\nNo manual tool registration needed\nTools work with providers that support tool-calling","hierarchy":{"lvl0":"Guides","lvl1":"Migrating from Vercel AI SDK to NeuroLink","lvl2":"3. Tool Calling (Function Calling)","lvl3":""}},
7152
+ {"objectID":"4b0708b0531ad08599a7d18da29be132b5f0ae1ba12c4922c626ddc38b6a2f6e","title":"4. Structured Output","url":"/docs/guides/migration/from-vercel-ai-sdk#4-structured-output","content":"Vercel AI SDK:\n\nNeuroLink:\n\nBenefits:\nType-safe results\nAutomatic validation\nWorks across providers that support structured output","hierarchy":{"lvl0":"Guides","lvl1":"Migrating from Vercel AI SDK to NeuroLink","lvl2":"4. Structured Output","lvl3":""}},
7153
+ {"objectID":"c0f99d59f8dee45796176094ef083365256925e85e064365a6360317ce6a7a0c","title":"5. Multi-Provider Support","url":"/docs/guides/migration/from-vercel-ai-sdk#5-multi-provider-support","content":"Vercel AI SDK:\n\nNeuroLink:\n\nWith automatic failover:\n\nBenefits:\nSingle package for supported providers\nRuntime provider switching\nAutomatic failover\nNo need to install separate packages","hierarchy":{"lvl0":"Guides","lvl1":"Migrating from Vercel AI SDK to NeuroLink","lvl2":"5. Multi-Provider Support","lvl3":""}},
7154
7154
  {"objectID":"2332537cf5704bfb605a46944d2479d5701e6714c1585ed98f9e40341f570dee","title":"Pattern 1: API Routes","url":"/docs/guides/migration/from-vercel-ai-sdk#pattern-1-api-routes","content":"Vercel AI SDK:\n\nNeuroLink:\n\nWith better error handling:","hierarchy":{"lvl0":"Guides","lvl1":"Migrating from Vercel AI SDK to NeuroLink","lvl2":"Pattern 1: API Routes","lvl3":""}},
7155
7155
  {"objectID":"2753cc3bc504abb74ae3ea6b888cbe3f1d4a5b7f259ea354e06ce035b9226848","title":"Pattern 2: Server Components","url":"/docs/guides/migration/from-vercel-ai-sdk#pattern-2-server-components","content":"Vercel AI SDK:\n\nNeuroLink:\n\nWith caching:","hierarchy":{"lvl0":"Guides","lvl1":"Migrating from Vercel AI SDK to NeuroLink","lvl2":"Pattern 2: Server Components","lvl3":""}},
7156
7156
  {"objectID":"f8bc77c1a27cb596cb8d0718fc4938d0579a2b1987b78101be4b6d2e7681ff55","title":"Pattern 3: useChat Alternative","url":"/docs/guides/migration/from-vercel-ai-sdk#pattern-3-usechat-alternative","content":"Vercel AI SDK:\n\nNeuroLink:\n\nOr create a custom hook:","hierarchy":{"lvl0":"Guides","lvl1":"Migrating from Vercel AI SDK to NeuroLink","lvl2":"Pattern 3: useChat Alternative","lvl3":""}},
@@ -7164,10 +7164,10 @@
7164
7164
  {"objectID":"fd83becf84da6888435c4f08567b0adddd12be63005c62d3a8625a2d8da2d4d4","title":"3. Structured Output","url":"/docs/guides/migration/from-vercel-ai-sdk#3-structured-output","content":"Before:\n\nAfter:","hierarchy":{"lvl0":"Guides","lvl1":"Migrating from Vercel AI SDK to NeuroLink","lvl2":"3. Structured Output","lvl3":""}},
7165
7165
  {"objectID":"521dfdf638bba7c1711fe44698aebd2562f811987346fad2509d5ba4168c69c2","title":"Getting Help","url":"/docs/guides/migration/from-vercel-ai-sdk#getting-help","content":"Documentation: https://neurolink.dev/docs\nMigration Support: GitHub Discussions\nExamples: Next.js Examples\nDiscord: Join community","hierarchy":{"lvl0":"Guides","lvl1":"Migrating from Vercel AI SDK to NeuroLink","lvl2":"Getting Help","lvl3":""}},
7166
7166
  {"objectID":"d2cfeb9f83e2dbf918d31efb6554b7cc2db6edea6c72b2c5e4a24bb991bcbf05","title":"See Also","url":"/docs/guides/migration/from-vercel-ai-sdk#see-also","content":"NeuroLink Getting Started\nNext.js Integration Guide\nAPI Reference\nStreaming Guide\nRedis Configuration\nProvider Comparison","hierarchy":{"lvl0":"Guides","lvl1":"Migrating from Vercel AI SDK to NeuroLink","lvl2":"See Also","lvl3":""}},
7167
- {"objectID":"536a8d5bedc06cfd1b013b8e97b89e8824816a5a2e37b6477d84816f6a985917","title":"Migration Guides","url":"/docs/guides/migration","content":"Migration Guides\n\nThis section contains guides for migrating to NeuroLink from other AI SDKs and frameworks.\n\nAvailable Migration Guides\nFrom LangChain - Migrate from LangChain to NeuroLink\nFrom Vercel AI SDK - Migrate from Vercel AI SDK to NeuroLink\n\nWhy Migrate to NeuroLink?\n\nNeuroLink offers several advantages over other AI SDKs:\nUniversal Provider Support - 44 AI providers through a single API\nMCP Integration - Full Model Context Protocol support with 58+ external servers\nEnterprise Ready - Production-tested at scale with Redis memory, failover, and telemetry\nProfessional CLI - Interactive command-line interface for development and testing\nTypeScript First - Full type safety with comprehensive type definitions\n\nGetting Help\n\nIf you encounter issues during migration:\nCheck the Troubleshooting Guide\nReview the API Reference\nJoin our community discussions","hierarchy":{"lvl0":"Guides","lvl1":"Migration Guides","lvl2":"","lvl3":""}},
7167
+ {"objectID":"536a8d5bedc06cfd1b013b8e97b89e8824816a5a2e37b6477d84816f6a985917","title":"Migration Guides","url":"/docs/guides/migration","content":"Migration Guides\n\nThis section contains guides for migrating to NeuroLink from other AI SDKs and frameworks.\n\nAvailable Migration Guides\nFrom LangChain - Migrate from LangChain to NeuroLink\nFrom Vercel AI SDK - Migrate from Vercel AI SDK to NeuroLink\n\nWhy Migrate to NeuroLink?\n\nNeuroLink offers several advantages over other AI SDKs:\nBroad Provider Support - Supported AI providers through a single API\nMCP Integration - Full Model Context Protocol support with 58+ external servers\nEnterprise Ready - Production-tested at scale with Redis memory, failover, and telemetry\nProfessional CLI - Interactive command-line interface for development and testing\nTypeScript First - Full type safety with comprehensive type definitions\n\nGetting Help\n\nIf you encounter issues during migration:\nCheck the Troubleshooting Guide\nReview the API Reference\nJoin our community discussions","hierarchy":{"lvl0":"Guides","lvl1":"Migration Guides","lvl2":"","lvl3":""}},
7168
7168
  {"objectID":"38502c9599731d7a721568a8427f541efbc0643e8a97796165cb6d9dde6da1b5","title":"Migration Guides","url":"/docs/guides/migration#migration-guides","content":"This section contains guides for migrating to NeuroLink from other AI SDKs and frameworks.","hierarchy":{"lvl0":"Guides","lvl1":"Migration Guides","lvl2":"Migration Guides","lvl3":""}},
7169
7169
  {"objectID":"f9c9dea1509377a27c2f9a5d1b81d433c1e594c1cc69c507253746886953ee77","title":"Available Migration Guides","url":"/docs/guides/migration#available-migration-guides","content":"From LangChain - Migrate from LangChain to NeuroLink\nFrom Vercel AI SDK - Migrate from Vercel AI SDK to NeuroLink","hierarchy":{"lvl0":"Guides","lvl1":"Migration Guides","lvl2":"Available Migration Guides","lvl3":""}},
7170
- {"objectID":"27a828af4dd86f7e966613d796b583f1412b09eef740530a0e763b1718aab47e","title":"Why Migrate to NeuroLink?","url":"/docs/guides/migration#why-migrate-to-neurolink","content":"NeuroLink offers several advantages over other AI SDKs:\nUniversal Provider Support - 44 AI providers through a single API\nMCP Integration - Full Model Context Protocol support with 58+ external servers\nEnterprise Ready - Production-tested at scale with Redis memory, failover, and telemetry\nProfessional CLI - Interactive command-line interface for development and testing\nTypeScript First - Full type safety with comprehensive type definitions","hierarchy":{"lvl0":"Guides","lvl1":"Migration Guides","lvl2":"Why Migrate to NeuroLink?","lvl3":""}},
7170
+ {"objectID":"27a828af4dd86f7e966613d796b583f1412b09eef740530a0e763b1718aab47e","title":"Why Migrate to NeuroLink?","url":"/docs/guides/migration#why-migrate-to-neurolink","content":"NeuroLink offers several advantages over other AI SDKs:\nBroad Provider Support - Supported AI providers through a single API\nMCP Integration - Full Model Context Protocol support with 58+ external servers\nEnterprise Ready - Production-tested at scale with Redis memory, failover, and telemetry\nProfessional CLI - Interactive command-line interface for development and testing\nTypeScript First - Full type safety with comprehensive type definitions","hierarchy":{"lvl0":"Guides","lvl1":"Migration Guides","lvl2":"Why Migrate to NeuroLink?","lvl3":""}},
7171
7171
  {"objectID":"11c8b39ce9c4ef40dd1ad9c23ad2da980a70650294d402c63f3fe0584a5991d8","title":"Getting Help","url":"/docs/guides/migration#getting-help","content":"If you encounter issues during migration:\nCheck the Troubleshooting Guide\nReview the API Reference\nJoin our community discussions","hierarchy":{"lvl0":"Guides","lvl1":"Migration Guides","lvl2":"Getting Help","lvl3":""}},
7172
7172
  {"objectID":"f1bf388ad531e7bf8a57be09eada81f24782a1c9fee6c74b08750daee692ebb1","title":"Migration Guide","url":"/docs/guides/migration-guide","content":"Migration Guide\n\nUse this guide when upgrading existing NeuroLink deployments to the latest release. The focus is on new capabilities (multimodal chat, auto evaluation, loop mode, orchestration) and the configuration changes required to adopt them safely.\n\nCompatibility Summary\n\n| Area | Status |\n| ------------- | -------------------------------------------------------------------------------------- |\n| Core SDK APIs | ✅ Backward compatible. generate() and stream() signatures are unchanged. |\n| CLI commands | ✅ Existing scripts continue to work. New options are opt-in. |\n| Configuration | ⚠️ New environment variables for evaluation and regional routing. Review .env files. |\n| Tooling | ✅ MCP, analytics, and telemetry remain compatible. |\n\nRecommended Upgrade Steps\nUpdate dependencies\nRefresh CLI binaries\nReview new environment variables\nAdd NEUROLINK_EVALUATION_PROVIDER, NEUROLINK_EVALUATION_MODEL, and NEUROLINK_EVALUATION_THRESHOLD if you enable the auto-evaluation engine.\nEnsure AWS_REGION / GOOGLE_VERTEX_LOCATION are set when targeting specific regions.\nProvide REDIS_URL if you want loop sessions to auto-mount persistent memory.\nAdopt multimodal support\nCLI: use --image (multiple allowed) with generate or stream.\nSDK: pass input.images (string path, HTTPS URL, or Buffer).\nUpdate downstream parsing to handle result.toolCalls on multimodal calls.\nLeverage auto evaluation (optional)\nCLI: add --enableEvaluation to commands or set it once inside neurolink loop (set enableEvaluation true).\nSDK: include enableEvaluation: true per request.\nCapture result.evaluation in logs or dashboards.\nIntroduce loop sessions to teams\nDocument the new loop workflow, especially how to set provider, set model, and export transcripts.\nConfigure Redis for persistent memory where collaboration spans multiple terminals.\nEnable orchestration (server workloads)\nInstantiate new NeuroLink({ enableOrchestration: true }) for services that benefit from automatic provider routing.\nMonitor debug logs (NEUROLINK_DEBUG=true) in staging before enabling in production.\n\nBehaviour Changes to Note\nEvaluation output – GenerateResult now includes toolCalls, toolResults, and richer analytics. Update any custom serializers accordingly.\nLoop session variables – The new session state respects set/unset commands. Scripts that previously relied on global env variables should be adjusted to set session variables explicitly.\nRedis auto-detect – Starting a loop with --auto-redis sets STORAGE_TYPE=redis automatically. Ensure Redis credentials are valid; otherwise disable with --no-auto-redis.\nRegional routing – Requests that include region now forward directly to the provider. Validate quota and model availability per region to avoid 404s.\n\nTesting Checklist\nRun npx @juspay/neurolink status --verbose after upgrading credentials.\nExecute a multimodal CLI call (generate --image) to confirm file uploads succeed.\nRun a sample with --enableEvaluation --format json and verify the evaluation block is emitted.\nStress-test loop mode with Redis by running memory stats and memory history.\nIf orchestration is enabled, tail logs for Orchestration route determined messages and confirm provider availability.\n\nRollback Plan\nKeep the previous CLI binary (npm install -g @juspay/neurolink@<old-version>) handy.\nMaintain separate .env files for pre- and post-upgrade configurations.\nDisable orchestration and evaluation env vars if you encounter regressions; core generation continues to work without them.\n\nFor additional support open an issue on GitHub or reach out via the Juspay developer channels.","hierarchy":{"lvl0":"Guides","lvl1":"Migration Guide","lvl2":"","lvl3":""}},
7173
7173
  {"objectID":"c7dc551305b16d451780208538f9e8324bc003ee01438a3e04c3c7e75124f06b","title":"Migration Guide","url":"/docs/guides/migration-guide#migration-guide","content":"Use this guide when upgrading existing NeuroLink deployments to the latest release. The focus is on new capabilities (multimodal chat, auto evaluation, loop mode, orchestration) and the configuration changes required to adopt them safely.","hierarchy":{"lvl0":"Guides","lvl1":"Migration Guide","lvl2":"Migration Guide","lvl3":""}},
@@ -7883,7 +7883,7 @@
7883
7883
  {"objectID":"eab1054b46ac95b776cdc6f442a35f85748f4658d409941418c58bcdf27dac1b","title":"Run the full RAG suite (canonical entry point)","url":"/docs/implementation-guides/14-rag-document-processing#run-the-full-rag-suite-canonical-entry-point","content":"pnpm run test:rag","hierarchy":{"lvl0":"Implementation Guides","lvl1":"RAG Document Processing - Implementation Guide","lvl2":"Run the full RAG suite (canonical entry point)","lvl3":""}},
7884
7884
  {"objectID":"1dfcdd7f939eaf1c928080629de1e038fd9baee40a31fad65557d587a7a80d66","title":"Run the suite directly with tsx if you want extra logging","url":"/docs/implementation-guides/14-rag-document-processing#run-the-suite-directly-with-tsx-if-you-want-extra-logging","content":"pnpm exec tsx test/continuous-test-suite-rag.ts\n\n\n> NeuroLink runs all suites via tsx; there is no vitest runner. RAG-specific scenarios (chunkers, rerankers, metadata) are exercised by continuous-test-suite-rag.ts`.","hierarchy":{"lvl0":"Implementation Guides","lvl1":"RAG Document Processing - Implementation Guide","lvl2":"Run the suite directly with tsx if you want extra logging","lvl3":""}},
7885
7885
  {"objectID":"95f574ed3e7979eee5be188ccd16efb2639e30e8258e55366d7ccd344bbc3126","title":"Related Documentation","url":"/docs/implementation-guides/14-rag-document-processing#related-documentation","content":"Vector Store Integrations\nEvaluation and Scoring\nMaster Implementation Guide","hierarchy":{"lvl0":"Implementation Guides","lvl1":"RAG Document Processing - Implementation Guide","lvl2":"Related Documentation","lvl3":""}},
7886
- {"objectID":"60877eba17c1fe5c9fda2100a737f42fddb5c4c7083297e61a66884dbe5c326e","title":"NeuroLink","url":"/docs/","content":"🧠 NeuroLink\n The Pipe Layer of an AI Nervous System\n Provider Neurons for Every Major AI Vendor | 3 Inference Types (generate · stream · decide) | Voice (TTS/STT/Realtime) | 58+ MCP Tools | HITL Security | Redis Persistence\n\nNeuroLink is the pipe layer of an AI nervous system: one interface connecting provider neurons — every major AI vendor and local runtime — to the applications that consume them. Built-in tooling and an opinionated factory architecture mean adding a new provider, or a new capability, never touches application code. NeuroLink ships as both a TypeScript SDK and a professional CLI so teams can build, operate, and iterate on AI features quickly.\n\n🧠 What is NeuroLink?\n\nNeuroLink is the pipe layer of an AI nervous system. Providers — OpenAI, Anthropic, Google, AWS, Azure, DeepSeek, NVIDIA NIM, local runtimes like Ollama and llama.cpp, and dozens more — are the neurons: each generates a different kind of intelligence, at a different cost and latency. NeuroLink is the vascular layer that carries that intelligence, as a stream, to the applications that consume it, across three inference types: generate and stream produce text, decide produces a calibrated boolean/choice/score judgment instead.\n\nExtracted from production systems at Juspay, NeuroLink provides a practical, TypeScript-first way to plug any application into that nervous system. Switch which neuron answers a request with a single parameter change — any provider you're building with, or any provider you add.\n\nWhy NeuroLink? Three genuine inference types, not one dressed up three ways — generate and stream produce text, while decide returns a typed, calibrated judgment (boolean / choice / score) with no text at all, for the routing and gating decisions the other two were never meant to make. Every neuron plugs into the same pipe. Switch providers with a single parameter change, leverage 64+ built-in tools and MCP servers, deploy with confidence using enterprise features like Redis memory and multi-provider failover, and optimize costs automatically with intelligent routing. Use it via our professional CLI or TypeScript SDK—whichever fits your workflow.\n\nWhere we're headed: We're building for the future of AI—edge-first execution and continuous streaming architectures that make AI practically free and universally available. Read our vision →\n\nGet Started in \\ Observability Guide\nServer Adapters -- Deploy NeuroLink as an HTTP API server with your framework of choice (Hono, Express, Fastify, Koa). Full CLI support with serve and server commands for foreground/background modes, route management, and OpenAPI generation. -> Server Adapters Guide\nTitle Generation Events -- Emit real-time events when conversation titles are auto-generated. Listen to conversation:titleGenerated for session tracking. -> Conversation Memory Guide\nCustom Title Prompts -- Customize conversation title generation with NEUROLINK_TITLE_PROMPT environment variable. Use ${userMessage} placeholder for dynamic prompts. -> Conversation Memory Guide\nVideo Generation -- Transform images into 8-second videos with synchronized audio using Google Veo 3.1 via Vertex AI. Supports 720p/1080p resolutions, portrait/landscape aspect ratios. -> Video Generation Guide\nImage Generation -- Generate images from text prompts using Gemini models via Vertex AI or Google AI Studio. Supports streaming mode with automatic file saving. -> Image Generation Guide\nHTTP/Streamable HTTP Transport for MCP -- Connect to remote MCP servers via HTTP with authentication headers, retry logic, and rate limiting. -> HTTP Transport Guide\nClaude Subscription (OAuth) Support -- Use your Claude Pro/Max/Team subscription with NeuroLink via OAuth authentication, no API key required. -> Subscription Guide\nGemini 3 Preview Support - Full support for gemini-3-flash-preview and gemini-3-pro-preview with extended thinking capabilities\nStructured Output with Zod Schemas -- Type-safe JSON generation with automatic validation using schema + output.format: \"json\" in generate(). -> Structured Output Guide\nCSV File Support -- Attach CSV files to prompts for AI-powered data analysis with auto-detection. -> CSV Guide\nPDF File Support -- Process PDF documents with native visual analysis for Vertex AI, Anthropic, Bedrock, AI Studio. -> PDF Guide\n50+ File Types -- Process Excel, Word, RTF, JSON, YAML, XML, HTML, SVG, Markdown, and 50+ code languages with intelligent content extraction. -> File Processors Guide\nLiteLLM Integration -- Access 100+ AI models from all major providers through unified interface. -> Setup Guide\nSageMaker Integration -- Deploy and use custom trained models on AWS infrastructure. -> Setup Guide\nOpenRouter Integration -- Access 300+ models from OpenAI, Anthropic, Google, Meta, and more through a single unified API. -> Setup Guide\nHuman-in-the-loop workflows -- Pause generation for user approval/input before tool execution. -> HITL Guide\nGuardrails middleware -- Block PII, profanity, and unsafe content with","hierarchy":{"lvl0":"Docs","lvl1":"NeuroLink","lvl2":"","lvl3":""}},
7886
+ {"objectID":"60877eba17c1fe5c9fda2100a737f42fddb5c4c7083297e61a66884dbe5c326e","title":"NeuroLink","url":"/docs/","content":"🧠 NeuroLink\n The Pipe Layer of an AI Nervous System\n Provider Neurons Across Major AI Vendors | 3 Inference Types (generate · stream · decide) | Voice (TTS/STT/Realtime) | 58+ MCP Tools | HITL Security | Redis Persistence\n\nNeuroLink is the pipe layer of an AI nervous system: one interface connecting provider neurons — major AI vendors and local runtimes — to the applications that consume them. Built-in tooling and an opinionated factory architecture mean adding a new provider, or a new capability, never touches application code. NeuroLink ships as both a TypeScript SDK and a professional CLI so teams can build, operate, and iterate on AI features quickly.\n\n🧠 What is NeuroLink?\n\nNeuroLink is the pipe layer of an AI nervous system. Providers — OpenAI, Anthropic, Google, AWS, Azure, DeepSeek, NVIDIA NIM, local runtimes like Ollama and llama.cpp, and dozens more — are the neurons: each generates a different kind of intelligence, at a different cost and latency. NeuroLink is the vascular layer that carries that intelligence, as a stream, to the applications that consume it, across three inference types: generate and stream produce text, decide produces a calibrated boolean/choice/score judgment instead.\n\nExtracted from production systems at Juspay, NeuroLink provides a practical, TypeScript-first way to plug any application into that nervous system. Switch which neuron answers a request with a single parameter change — any provider you're building with, or any provider you add.\n\nWhy NeuroLink? Three genuine inference types, not one dressed up three ways — generate and stream produce text, while decide returns a typed, calibrated judgment (boolean / choice / score) with no text at all, for the routing and gating decisions the other two were never meant to make. Every neuron plugs into the same pipe. Switch providers with a single parameter change, leverage 64+ built-in tools and MCP servers, deploy with confidence using enterprise features like Redis memory and multi-provider failover, and optimize costs automatically with intelligent routing. Use it via our professional CLI or TypeScript SDK—whichever fits your workflow.\n\nWhere we're headed: We're building for the future of AI—edge-first execution and continuous streaming architectures that make AI practically free and universally available. Read our vision →\n\nGet Started in \\ Observability Guide\nServer Adapters -- Deploy NeuroLink as an HTTP API server with your framework of choice (Hono, Express, Fastify, Koa). Full CLI support with serve and server commands for foreground/background modes, route management, and OpenAPI generation. -> Server Adapters Guide\nTitle Generation Events -- Emit real-time events when conversation titles are auto-generated. Listen to conversation:titleGenerated for session tracking. -> Conversation Memory Guide\nCustom Title Prompts -- Customize conversation title generation with NEUROLINK_TITLE_PROMPT environment variable. Use ${userMessage} placeholder for dynamic prompts. -> Conversation Memory Guide\nVideo Generation -- Transform images into 8-second videos with synchronized audio using Google Veo 3.1 via Vertex AI. Supports 720p/1080p resolutions, portrait/landscape aspect ratios. -> Video Generation Guide\nImage Generation -- Generate images from text prompts using Gemini models via Vertex AI or Google AI Studio. Supports streaming mode with automatic file saving. -> Image Generation Guide\nHTTP/Streamable HTTP Transport for MCP -- Connect to remote MCP servers via HTTP with authentication headers, retry logic, and rate limiting. -> HTTP Transport Guide\nClaude Subscription (OAuth) Support -- Use your Claude Pro/Max/Team subscription with NeuroLink via OAuth authentication, no API key required. -> Subscription Guide\nGemini 3 Preview Support - Full support for gemini-3-flash-preview and gemini-3-pro-preview with extended thinking capabilities\nStructured Output with Zod Schemas -- Type-safe JSON generation with automatic validation using schema + output.format: \"json\" in generate(). -> Structured Output Guide\nCSV File Support -- Attach CSV files to prompts for AI-powered data analysis with auto-detection. -> CSV Guide\nPDF File Support -- Process PDF documents with native visual analysis for Vertex AI, Anthropic, Bedrock, AI Studio. -> PDF Guide\n50+ File Types -- Process Excel, Word, RTF, JSON, YAML, XML, HTML, SVG, Markdown, and 50+ code languages with intelligent content extraction. -> File Processors Guide\nLiteLLM Integration -- Access 100+ AI models across a broad range of AI providers through unified interface. -> Setup Guide\nSageMaker Integration -- Deploy and use custom trained models on AWS infrastructure. -> Setup Guide\nOpenRouter Integration -- Access 300+ models from OpenAI, Anthropic, Google, Meta, and more through a single unified API. -> Setup Guide\nHuman-in-the-loop workflows -- Pause generation for user approval/input before tool execution. -> HITL Guide\nGuardrails middleware -- Block PII, profanity, and unsafe conten","hierarchy":{"lvl0":"Docs","lvl1":"NeuroLink","lvl2":"","lvl3":""}},
7887
7887
  {"objectID":"7bd402837d03dbfbb9586674bc914cfc6ee7691e33540eeabe6555363697375e","title":"🧠 What is NeuroLink?","url":"/docs/#-what-is-neurolink","content":"NeuroLink is the pipe layer of an AI nervous system. Providers — OpenAI, Anthropic, Google, AWS, Azure, DeepSeek, NVIDIA NIM, local runtimes like Ollama and llama.cpp, and dozens more — are the neurons: each generates a different kind of intelligence, at a different cost and latency. NeuroLink is the vascular layer that carries that intelligence, as a stream, to the applications that consume it, across three inference types: generate and stream produce text, decide produces a calibrated boolean/choice/score judgment instead.\n\nExtracted from production systems at Juspay, NeuroLink provides a practical, TypeScript-first way to plug any application into that nervous system. Switch which neuron answers a request with a single parameter change — any provider you're building with, or any provider you add.\n\nWhy NeuroLink? Three genuine inference types, not one dressed up three ways — generate and stream produce text, while decide returns a typed, calibrated judgment (boolean / choice / score) with no text at all, for the routing and gating decisions the other two were never meant to make. Every neuron plugs into the same pipe. Switch providers with a single parameter change, leverage 64+ built-in tools and MCP servers, deploy with confidence using enterprise features like Redis memory and multi-provider failover, and optimize costs automatically with intelligent routing. Use it via our professional CLI or TypeScript SDK—whichever fits your workflow.\n\nWhere we're headed: We're building for the future of AI—edge-first execution and continuous streaming architectures that make AI practically free and universally available. Read our vision →\n\nGet Started in \\<5 Minutes →","hierarchy":{"lvl0":"Docs","lvl1":"NeuroLink","lvl2":"🧠 What is NeuroLink?","lvl3":""}},
7888
7888
  {"objectID":"293082e7b04b9b0eb186f10fec40eefc1996d8eab9becff9e2b428731642291f","title":"What's New (Q1 2026)","url":"/docs/#whats-new-q1-2026","content":"| Feature | Version | Description | Guide |\n| ---------------------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| decide Inference Type | next | A third inference type alongside generate/stream: typed, calibrated boolean/choice/score judgments in one parallel pass, ~400ms and ~$0.00002 per decision. First provider is TypeSafe Jev; Laya, an open-weights model you run yourself, is the second. Fail-open — a no-op without a key. | Decide Guide \\| TypeSafe Provider \\| Laya Provider |\n| MCP Enhancements | v9.16.0 | Advanced MCP features: intelligent tool routing, result caching, request batching, tool annotations, elicitation protocol, custom server creation, multi-server management | MCP Enhancements Guide |\n| Co","hierarchy":{"lvl0":"Docs","lvl1":"NeuroLink","lvl2":"What's New (Q1 2026)","lvl3":""}},
7889
7889
  {"objectID":"3e5ecc512d348470d92717ef33a2ff5067ffdd99c7ea212613df7986db133390","title":"Enterprise Security: Human-in-the-Loop (HITL)","url":"/docs/#enterprise-security-human-in-the-loop-hitl","content":"NeuroLink includes a HITL (Human-in-the-Loop) system for regulated industries and high-stakes AI operations:\n\n| Capability | Description | Use Case |\n| --------------------------- | ----------------------------------------------------------------------- | ------------------------------------------ |\n| Tool Approval Workflows | Require human approval before AI executes sensitive tools | Financial transactions, data modifications |\n| Output Validation | Route AI outputs through human review pipelines | Medical diagnosis, legal documents |\n| Confidence Thresholds | Automatically trigger human review below confidence level | Critical business decisions |\n| Complete Audit Trail | Audit logging to support your compliance program (HIPAA / SOC 2 / GDPR) | Regulated industries |\n\nEnterprise HITL Guide | Quick Start","hierarchy":{"lvl0":"Docs","lvl1":"NeuroLink","lvl2":"Enterprise Security: Human-in-the-Loop (HITL)","lvl3":""}},
@@ -7891,10 +7891,10 @@
7891
7891
  {"objectID":"e9e7167316a23ea5fd5db23894b2e52405ba61f5ab57cc986d155490dd325674","title":"1. Run the interactive setup wizard (select providers, validate keys)","url":"/docs/#1-run-the-interactive-setup-wizard-select-providers-validate-keys","content":"pnpm dlx @juspay/neurolink setup","hierarchy":{"lvl0":"Docs","lvl1":"NeuroLink","lvl2":"1. Run the interactive setup wizard (select providers, validate keys)","lvl3":""}},
7892
7892
  {"objectID":"fc68ecabb9ba07088de748df52379e582eb59a0c7e3956e4ae9019b83c21bc9f","title":"2. Start generating with automatic provider selection","url":"/docs/#2-start-generating-with-automatic-provider-selection","content":"npx @juspay/neurolink generate \"Write a launch plan for multimodal chat\"\n\n\nNeed a persistent workspace? Launch loop mode with npx @juspay/neurolink loop` - Learn more →","hierarchy":{"lvl0":"Docs","lvl1":"NeuroLink","lvl2":"2. Start generating with automatic provider selection","lvl3":""}},
7893
7893
  {"objectID":"702d5549ff7c6e9c8c73c19ac80cf9a9d60fac944bb499da15362a04c94ada20","title":"🌟 Complete Feature Set","url":"/docs/#-complete-feature-set","content":"NeuroLink is a comprehensive AI development platform. Every feature below is available today and fully documented.","hierarchy":{"lvl0":"Docs","lvl1":"NeuroLink","lvl2":"🌟 Complete Feature Set","lvl3":""}},
7894
- {"objectID":"b454f2f78f04166cabaf3949bb32f9c49fac691c6c9bd01d3868bae867545a93","title":"🤖 AI Provider Integration","url":"/docs/#-ai-provider-integration","content":"Every provider neuron behind one API - Switch providers with a single parameter change.\n\n| Provider | Models | Free Tier | Tool Support | Status | Documentation |\n| --------------------- | -------------------------------------------------- | --------------- | ------------ | ------------- | ------------------------------------------------------------------------------------------------------------------- |\n| OpenAI | GPT-4o, GPT-4o-mini, o1 | ❌ | ✅ Full | ✅ Production | Setup Guide |\n| Anthropic | Claude 4.5 Opus/Sonnet/Haiku, Claude 4 Opus/Sonnet | ❌ | ✅ Full | ✅ Production | Setup Guide \\| Subscription Guide |\n| Google AI Studio | Gemini 3 Flash/Pro, Gemini 2.5 Flash/Pro | ✅ Free Tier | ✅ Full | ✅ Production | Setup Guide |\n| AWS Bedrock | Claude, Titan, Llama, Nova | ❌ | ✅ Full | ✅ Production | Setup Guide |\n| Google Vertex | Gemini 3/2.5 (gemini-3-\\*-preview) | ❌ | ✅ Full | ✅ Production | Setup Guide |\n| Azure OpenAI | GPT-4, GPT-4o, o1 | ❌ | ✅ Full | ✅ Production | Setup Guide |\n| LiteLLM | 100+ models unified | Varies | ✅ Full | ✅ Production | Setup Guide |\n| AWS SageMaker | Custom deployed models | ❌","hierarchy":{"lvl0":"Docs","lvl1":"NeuroLink","lvl2":"🤖 AI Provider Integration","lvl3":""}},
7895
- {"objectID":"403ffa1491c3f257a1a101286bb5bd23df516e8971a37b450fab64b1e1b9471f","title":"🔧 Built-in Tools & MCP Integration","url":"/docs/#-built-in-tools-mcp-integration","content":"6 Core Tools (work across all providers, zero configuration):\n\n| Tool | Purpose | Auto-Available | Documentation |\n| -------------------- | ------------------------ | ----------------------- | ------------------------------------- |\n| getCurrentTime | Real-time clock access | ✅ | Tool Reference |\n| readFile | File system reading | ✅ | Tool Reference |\n| writeFile | File system writing | ✅ | Tool Reference |\n| listDirectory | Directory listing | ✅ | Tool Reference |\n| calculateMath | Mathematical operations | ✅ | Tool Reference |\n| websearchGrounding | Google Vertex web search | ⚠️ Requires credentials | Tool Reference |\n\n58+ External MCP Servers supported (GitHub, PostgreSQL, Google Drive, Slack, and more):\n\nMCP Transport Options:\n\n| Transport | Use Case | Key Features |\n| ----------- | -------------- | ----------------------------------------------- |\n| stdio | Local servers | Command execution, environment variables |\n| http | Remote servers | URL-based, auth headers, retries, rate limiting |\n| sse | Event streams | Server-Sent Events, real-time updates |\n| websocket | Bi-directional | Full-duplex communication |\n\n📖 MCP Integration Guide - Setup external servers\n📖 HTTP Transport Guide - Remote MCP server configuration","hierarchy":{"lvl0":"Docs","lvl1":"NeuroLink","lvl2":"🔧 Built-in Tools & MCP Integration","lvl3":""}},
7894
+ {"objectID":"b454f2f78f04166cabaf3949bb32f9c49fac691c6c9bd01d3868bae867545a93","title":"🤖 AI Provider Integration","url":"/docs/#-ai-provider-integration","content":"Provider neurons behind one API - Switch providers with a single parameter change.\n\n| Provider | Models | Free Tier | Tool Support | Status | Documentation |\n| --------------------- | -------------------------------------------------- | --------------- | ------------ | ------------- | ------------------------------------------------------------------------------------------------------------------- |\n| OpenAI | GPT-4o, GPT-4o-mini, o1 | ❌ | ✅ Full | ✅ Production | Setup Guide |\n| Anthropic | Claude 4.5 Opus/Sonnet/Haiku, Claude 4 Opus/Sonnet | ❌ | ✅ Full | ✅ Production | Setup Guide \\| Subscription Guide |\n| Google AI Studio | Gemini 3 Flash/Pro, Gemini 2.5 Flash/Pro | ✅ Free Tier | ✅ Full | ✅ Production | Setup Guide |\n| AWS Bedrock | Claude, Titan, Llama, Nova | ❌ | ✅ Full | ✅ Production | Setup Guide |\n| Google Vertex | Gemini 3/2.5 (gemini-3-\\*-preview) | ❌ | ✅ Full | ✅ Production | Setup Guide |\n| Azure OpenAI | GPT-4, GPT-4o, o1 | ❌ | ✅ Full | ✅ Production | Setup Guide |\n| LiteLLM | 100+ models unified | Varies | ✅ Full | ✅ Production | Setup Guide |\n| AWS SageMaker | Custom deployed models | ❌ ","hierarchy":{"lvl0":"Docs","lvl1":"NeuroLink","lvl2":"🤖 AI Provider Integration","lvl3":""}},
7895
+ {"objectID":"403ffa1491c3f257a1a101286bb5bd23df516e8971a37b450fab64b1e1b9471f","title":"🔧 Built-in Tools & MCP Integration","url":"/docs/#-built-in-tools-mcp-integration","content":"6 Core Tools (work across supported providers, zero configuration):\n\n| Tool | Purpose | Auto-Available | Documentation |\n| -------------------- | ------------------------ | ----------------------- | ------------------------------------- |\n| getCurrentTime | Real-time clock access | ✅ | Tool Reference |\n| readFile | File system reading | ✅ | Tool Reference |\n| writeFile | File system writing | ✅ | Tool Reference |\n| listDirectory | Directory listing | ✅ | Tool Reference |\n| calculateMath | Mathematical operations | ✅ | Tool Reference |\n| websearchGrounding | Google Vertex web search | ⚠️ Requires credentials | Tool Reference |\n\n58+ External MCP Servers supported (GitHub, PostgreSQL, Google Drive, Slack, and more):\n\nMCP Transport Options:\n\n| Transport | Use Case | Key Features |\n| ----------- | -------------- | ----------------------------------------------- |\n| stdio | Local servers | Command execution, environment variables |\n| http | Remote servers | URL-based, auth headers, retries, rate limiting |\n| sse | Event streams | Server-Sent Events, real-time updates |\n| websocket | Bi-directional | Full-duplex communication |\n\n📖 MCP Integration Guide - Setup external servers\n📖 HTTP Transport Guide - Remote MCP server configuration","hierarchy":{"lvl0":"Docs","lvl1":"NeuroLink","lvl2":"🔧 Built-in Tools & MCP Integration","lvl3":""}},
7896
7896
  {"objectID":"c0de06d7a7c9beb962feb0931b65681b73ec5b9b4a922a75bf6f802b672de15c","title":"💻 Developer Experience Features","url":"/docs/#-developer-experience-features","content":"SDK-First Design with TypeScript, IntelliSense, and type safety:\n\n| Feature | Description | Documentation |\n| --------------------------- | ------------------------------------------------------------- | ---------------------------------------------------- |\n| Auto Provider Selection | Intelligent provider fallback | SDK Guide |\n| Streaming Responses | Real-time token streaming | Streaming Guide |\n| Conversation Memory | Automatic context management | Memory Guide |\n| Full Type Safety | Complete TypeScript types | Type Reference |\n| Error Handling | Graceful provider fallback | Error Guide |\n| Analytics & Evaluation | Usage tracking, quality scores | Analytics Guide |\n| Middleware System | Request/response hooks | Middleware Guide |\n| Framework Integration | Next.js, SvelteKit, Express | Framework Guides |\n| Extended Thinking | Native thinking/reasoning mode for Gemini 3 and Claude models | Thinking Guide |","hierarchy":{"lvl0":"Docs","lvl1":"NeuroLink","lvl2":"💻 Developer Experience Features","lvl3":""}},
7897
- {"objectID":"8dc8b0f07288ba8db03f6299c13406894fb88ad896b9c0a8b48506aa81053dea","title":"📁 Multimodal & File Processing","url":"/docs/#-multimodal-file-processing","content":"17 file processors across 6 categories (50+ total file types including code languages) with intelligent content extraction and provider-agnostic processing:\n\n| Category | Supported Types | Processing |\n| ------------- | ---------------------------------------------------------- | ----------------------------------- |\n| Documents | Excel (.xlsx, .xls), Word (.docx), RTF, OpenDocument | Sheet extraction, text extraction |\n| Data | JSON, YAML, XML | Validation, syntax highlighting |\n| Markup | HTML, SVG, Markdown, Text | OWASP-compliant sanitization |\n| Code | 50+ languages (TypeScript, Python, Java, Go, etc.) | Language detection, syntax metadata |\n| Config | .env, .ini, .toml, .cfg | Secure parsing |\n| Media | Images (PNG, JPEG, WebP, GIF), PDFs, CSV | Provider-specific formatting |\n\nKey Features:\nProcessorRegistry - Priority-based processor selection with fallback\nOWASP Security - HTML/SVG sanitization prevents XSS attacks\nAuto-detection - FileDetector identifies file types by extension and content\nProvider-agnostic - All processors work across every AI provider\n\n📖 File Processors Guide - Complete reference for all file types","hierarchy":{"lvl0":"Docs","lvl1":"NeuroLink","lvl2":"📁 Multimodal & File Processing","lvl3":""}},
7897
+ {"objectID":"8dc8b0f07288ba8db03f6299c13406894fb88ad896b9c0a8b48506aa81053dea","title":"📁 Multimodal & File Processing","url":"/docs/#-multimodal-file-processing","content":"17 file processors across 6 categories (50+ total file types including code languages) with intelligent content extraction and provider-agnostic processing:\n\n| Category | Supported Types | Processing |\n| ------------- | ---------------------------------------------------------- | ----------------------------------- |\n| Documents | Excel (.xlsx, .xls), Word (.docx), RTF, OpenDocument | Sheet extraction, text extraction |\n| Data | JSON, YAML, XML | Validation, syntax highlighting |\n| Markup | HTML, SVG, Markdown, Text | OWASP-compliant sanitization |\n| Code | 50+ languages (TypeScript, Python, Java, Go, etc.) | Language detection, syntax metadata |\n| Config | .env, .ini, .toml, .cfg | Secure parsing |\n| Media | Images (PNG, JPEG, WebP, GIF), PDFs, CSV | Provider-specific formatting |\n\nKey Features:\nProcessorRegistry - Priority-based processor selection with fallback\nOWASP Security - HTML/SVG sanitization prevents XSS attacks\nAuto-detection - FileDetector identifies file types by extension and content\nProvider-agnostic - Processors work across supported AI providers\n\n📖 File Processors Guide - Complete reference for all file types","hierarchy":{"lvl0":"Docs","lvl1":"NeuroLink","lvl2":"📁 Multimodal & File Processing","lvl3":""}},
7898
7898
  {"objectID":"9b491669ce96592057921c3c15201c9bc9dc018da856557f8be4c32707a708e2","title":"🏢 Enterprise & Production Features","url":"/docs/#-enterprise-production-features","content":"Capabilities for regulated industries:\n\n| Feature | Description | Use Case | Documentation |\n| --------------------------- | ---------------------------------- | ------------------------- | ------------------------------------------------------ |\n| Enterprise Proxy | Corporate proxy support | Behind firewalls | Proxy Setup |\n| Redis Memory | Distributed conversation state | Multi-instance deployment | Redis Guide |\n| Cost Optimization | Automatic cheapest model selection | Budget control | Cost Guide |\n| Multi-Provider Failover | Automatic provider switching | High availability | Failover Guide |\n| Telemetry & Monitoring | OpenTelemetry integration | Observability | Telemetry Guide |\n| Security Hardening | Credential management, auditing | Compliance | Security Guide |\n| Custom Model Hosting | SageMaker integration | Private models | SageMaker Guide |\n| Load Balancing | LiteLLM proxy integration | Scale & routing | Load Balancing |\n\nSecurity & Compliance:\n✅ Deployable within SOC 2 Type II environments — NeuroLink itself is not audited or certified\n✅ Deployable on ISO 27001-certified infrastructure — that certification is your infrastructure's, not NeuroLink's\n✅ GDPR-conscious data handling (EU-region providers selectable; you own compliance)\n✅ Deployable in HIPAA-aligned configurations — you are responsible for a compliant setup\n✅ Hardened OS verified (SELinux, AppArmor)\n✅ Zero credential logging\n✅ Encrypted configuration storage\n✅ Automatic context window management with 5-stage compaction pipeline and 80% budget gate\n\n📖 Enterprise Deployment Guide - Complete production checklist","hierarchy":{"lvl0":"Docs","lvl1":"NeuroLink","lvl2":"🏢 Enterprise & Production Features","lvl3":""}},
7899
7899
  {"objectID":"a2676fcb7f4199cd59d9eaebaecf9380331ef47488ba76a8ad4d75c93149b5e2","title":"Enterprise Persistence: Redis Memory","url":"/docs/#enterprise-persistence-redis-memory","content":"Distributed conversation state for multi-instance deployments:","hierarchy":{"lvl0":"Docs","lvl1":"NeuroLink","lvl2":"Enterprise Persistence: Redis Memory","lvl3":""}},
7900
7900
  {"objectID":"1c9a87da62dcfb96e53a612aa674d8978a705cf1b54e33e2cacd68b4a3dd2368","title":"Capabilities","url":"/docs/#capabilities","content":"| Feature | Description | Benefit |\n| ---------------------- | -------------------------------------------- | --------------------------- |\n| Distributed Memory | Share conversation context across instances | Horizontal scaling |\n| Session Export | Export full history as JSON | Analytics, debugging, audit |\n| Auto-Detection | Automatic Redis discovery from environment | Zero-config in containers |\n| Graceful Failover | Falls back to in-memory if Redis unavailable | High availability |\n| TTL Management | Configurable session expiration | Memory management |","hierarchy":{"lvl0":"Docs","lvl1":"NeuroLink","lvl2":"Capabilities","lvl3":""}},
@@ -7902,7 +7902,7 @@
7902
7902
  {"objectID":"694afd6df2beb3ccc7d1976aba4bb04a7229ebcdfa8a7f6065c7169fc63c41ed","title":"Start Redis","url":"/docs/#start-redis","content":"docker run -d --name neurolink-redis -p 6379:6379 redis:7-alpine","hierarchy":{"lvl0":"Docs","lvl1":"NeuroLink","lvl2":"Start Redis","lvl3":""}},
7903
7903
  {"objectID":"b789a8a40c12952da1963878a2ae86a1cf852979dbc69f150f6ea2d7e857dc48","title":"Start your application","url":"/docs/#start-your-application","content":"node your-app.js\n`\n\nRedis Setup Guide | Production Configuration | Migration Patterns","hierarchy":{"lvl0":"Docs","lvl1":"NeuroLink","lvl2":"Start your application","lvl3":""}},
7904
7904
  {"objectID":"e4e3ab976cdfbbe812dac2c3996bf20b2122fe84e030f579da93be3cbcf60c0e","title":"🎨 Professional CLI","url":"/docs/#-professional-cli","content":"34 commands for every workflow:\n\n| Command | Purpose | Example | Documentation |\n| ---------------- | ------------------------------------ | -------------------------- | ------------------------------------------- |\n| setup | Interactive provider configuration | neurolink setup | Setup Guide |\n| generate | Text generation | neurolink gen \"Hello\" | Generate |\n| stream | Streaming generation | neurolink stream \"Story\" | Stream |\n| status | Provider health check | neurolink status | Status |\n| loop | Interactive session | neurolink loop | Loop |\n| mcp | MCP server management | neurolink mcp discover | MCP CLI |\n| models | Model listing | neurolink models | Models |\n| eval | Model evaluation | neurolink eval | Eval |\n| serve | Start HTTP server in foreground mode | neurolink serve | Serve |\n| server start | Start HTTP server in background mode | neurolink server start | Server |\n| server stop | Stop running background server | neurolink server stop | Server |\n| server status | Show server status information | neurolink server status | Server |\n| server routes | List all registered API routes | neurolink server routes | Server |\n| server config | View or modify server configuration | neurolink server config | Server |\n| server openapi | Generate OpenAPI specification | neurolink server openapi | Server |\n\n📖 Complete CLI Reference - All commands and options","hierarchy":{"lvl0":"Docs","lvl1":"NeuroLink","lvl2":"🎨 Professional CLI","lvl3":""}},
7905
- {"objectID":"6eb25add47b9dd15d97f24cc81c458dfad37d279b768fd4e7ed245839e2decfb","title":"🤖 GitHub Action","url":"/docs/#-github-action","content":"Run AI-powered workflows directly in GitHub Actions with 40-provider support and automatic PR/issue commenting.\n\n| Feature | Description |\n| ---------------------- | ----------------------------------------------------------------------------------------- |\n| Multi-Provider | Every provider behind one unified interface |\n| PR/Issue Comments | Auto-post AI responses with intelligent updates |\n| Multimodal Support | Attach images, PDFs, CSVs, Excel, Word, JSON, YAML, XML, HTML, SVG, code files to prompts |\n| Cost Tracking | Built-in analytics and quality evaluation |\n| Extended Thinking | Deep reasoning with thinking tokens |\n\n📖 GitHub Action Guide - Complete setup and examples","hierarchy":{"lvl0":"Docs","lvl1":"NeuroLink","lvl2":"🤖 GitHub Action","lvl3":""}},
7905
+ {"objectID":"6eb25add47b9dd15d97f24cc81c458dfad37d279b768fd4e7ed245839e2decfb","title":"🤖 GitHub Action","url":"/docs/#-github-action","content":"Run AI-powered workflows directly in GitHub Actions with broad provider support and automatic PR/issue commenting.\n\n| Feature | Description |\n| ---------------------- | ----------------------------------------------------------------------------------------- |\n| Multi-Provider | Broad provider support behind one unified interface |\n| PR/Issue Comments | Auto-post AI responses with intelligent updates |\n| Multimodal Support | Attach images, PDFs, CSVs, Excel, Word, JSON, YAML, XML, HTML, SVG, code files to prompts |\n| Cost Tracking | Built-in analytics and quality evaluation |\n| Extended Thinking | Deep reasoning with thinking tokens |\n\n📖 GitHub Action Guide - Complete setup and examples","hierarchy":{"lvl0":"Docs","lvl1":"NeuroLink","lvl2":"🤖 GitHub Action","lvl3":""}},
7906
7906
  {"objectID":"82a443d203359b993d4da3826ade9a6be82571886cc2f1fd078d818f7530de00","title":"💰 Smart Model Selection","url":"/docs/#-smart-model-selection","content":"NeuroLink features intelligent model selection and cost optimization:","hierarchy":{"lvl0":"Docs","lvl1":"NeuroLink","lvl2":"💰 Smart Model Selection","lvl3":""}},
7907
7907
  {"objectID":"3f3a4ea8ad75c57bf1ec1a2803c22e72342f31375789a151242fcacb7988b853","title":"Cost Optimization Features","url":"/docs/#cost-optimization-features","content":"💰 Automatic Cost Optimization: Selects cheapest models for simple tasks\n🔄 LiteLLM Model Routing: Access 100+ models with automatic load balancing\n🔍 Capability-Based Selection: Find models with specific features (vision, function calling)\n⚡ Intelligent Fallback: Seamless switching when providers fail\n\n`bash","hierarchy":{"lvl0":"Docs","lvl1":"NeuroLink","lvl2":"Cost Optimization Features","lvl3":""}},
7908
7908
  {"objectID":"6a4da16491cb4c39d6eaaa646b0dfa1eacc321ffe1197c69ee35d6a95e81265e","title":"Cost optimization - automatically use cheapest model","url":"/docs/#cost-optimization---automatically-use-cheapest-model","content":"npx @juspay/neurolink generate \"Hello\" --optimize-cost","hierarchy":{"lvl0":"Docs","lvl1":"NeuroLink","lvl2":"Cost optimization - automatically use cheapest model","lvl3":""}},
@@ -7916,7 +7916,7 @@
7916
7916
  {"objectID":"29dbd46694d5379f7cdbcceb48d71151fd5fa01dec91ef1a7652f4b1ac140f7e","title":"Route to a specific provider/model","url":"/docs/#route-to-a-specific-providermodel","content":"npx @juspay/neurolink generate \"Summarize customer feedback\" \\\n --provider azure --model gpt-4o-mini","hierarchy":{"lvl0":"Docs","lvl1":"NeuroLink","lvl2":"Route to a specific provider/model","lvl3":""}},
7917
7917
  {"objectID":"1877c786a07e75144e81d15ac53ec7df5916b4a7a47d9a4d474a142ca192d0a1","title":"Turn on analytics + evaluation for observability","url":"/docs/#turn-on-analytics-evaluation-for-observability","content":"npx @juspay/neurolink generate \"Draft release notes\" \\\n --enable-analytics --enable-evaluation --format json\ntypescript\n\nconst neurolink = new NeuroLink({\n conversationMemory: {\n enabled: true,\n store: \"redis\",\n },\n enableOrchestration: true,\n});\n\nconst result = await neurolink.generate({\n input: {\n text: \"Create a comprehensive analysis\",\n files: [\n \"./sales_data.csv\", // Auto-detected as CSV\n \"examples/data/invoice.pdf\", // Auto-detected as PDF\n \"./diagrams/architecture.png\", // Auto-detected as image\n \"./report.xlsx\", // Auto-detected as Excel\n \"./config.json\", // Auto-detected as JSON\n \"./diagram.svg\", // Auto-detected as SVG (injected as text)\n \"./app.ts\", // Auto-detected as TypeScript code\n ],\n },\n provider: \"vertex\", // PDF-capable provider (see docs/features/pdf-support.md)\n enableEvaluation: true,\n region: \"us-east-1\",\n});\n\nconsole.log(result.content);\nconsole.log(result.evaluation?.overallScore);\n`","hierarchy":{"lvl0":"Docs","lvl1":"NeuroLink","lvl2":"Turn on analytics + evaluation for observability","lvl3":""}},
7918
7918
  {"objectID":"465ec37baf54875e8b6f7bec89b234a5948559d268bb7da7fcbc1e28df42c2c5","title":"Gemini 3 with Extended Thinking","url":"/docs/#gemini-3-with-extended-thinking","content":"Full command and API breakdown lives in docs/cli/commands.md and docs/sdk/api-reference.md.","hierarchy":{"lvl0":"Docs","lvl1":"NeuroLink","lvl2":"Gemini 3 with Extended Thinking","lvl3":""}},
7919
- {"objectID":"0b3ca8dabd93fb623251b649545083d11aa9108455c2700fe048c279660cd911","title":"Platform Capabilities at a Glance","url":"/docs/#platform-capabilities-at-a-glance","content":"| Capability | Highlights |\n| ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------- |\n| Provider unification | Every provider neuron behind one API, with automatic fallback, cost-aware routing, providerFallback policy, modelChain config. |\n| Multimodal pipeline | Stream images + CSV data + PDF documents across providers with local/remote assets. Auto-detection for mixed file types. |\n| Voice pipeline | TTS (6 providers) + STT (4 providers) + realtime APIs (OpenAI Realtime, Gemini Live). |\n| Quality & governance | Auto-evaluation engine (14 scorers), guardrails middleware, HITL workflows, audit logging. |\n| Memory & context | Per-user condensed memory (S3/Redis/SQLite), Redis session export, 5-stage context compaction. |\n| CLI tooling | Loop sessions, setup wizard, config validation, Redis auto-detect, JSON output, TTS/STT flags. |\n| Enterprise ops | Claude proxy, OTLP observability, OpenObserve dashboard, regional routing, credential management. |\n| Tool ecosystem | MCP auto discovery, HTTP/stdio/SSE/WebSocket transports, LiteLLM hub access, SageMaker custom deployment, web search. |","hierarchy":{"lvl0":"Docs","lvl1":"NeuroLink","lvl2":"Platform Capabilities at a Glance","lvl3":""}},
7919
+ {"objectID":"0b3ca8dabd93fb623251b649545083d11aa9108455c2700fe048c279660cd911","title":"Platform Capabilities at a Glance","url":"/docs/#platform-capabilities-at-a-glance","content":"| Capability | Highlights |\n| ------------------------ | ----------------------------------------------------------------------------------------------------------------------------- |\n| Provider unification | Provider neurons behind one API, with automatic fallback, cost-aware routing, providerFallback policy, modelChain config. |\n| Multimodal pipeline | Stream images + CSV data + PDF documents across providers with local/remote assets. Auto-detection for mixed file types. |\n| Voice pipeline | TTS (6 providers) + STT (4 providers) + realtime APIs (OpenAI Realtime, Gemini Live). |\n| Quality & governance | Auto-evaluation engine (14 scorers), guardrails middleware, HITL workflows, audit logging. |\n| Memory & context | Per-user condensed memory (S3/Redis/SQLite), Redis session export, 5-stage context compaction. |\n| CLI tooling | Loop sessions, setup wizard, config validation, Redis auto-detect, JSON output, TTS/STT flags. |\n| Enterprise ops | Claude proxy, OTLP observability, OpenObserve dashboard, regional routing, credential management. |\n| Tool ecosystem | MCP auto discovery, HTTP/stdio/SSE/WebSocket transports, LiteLLM hub access, SageMaker custom deployment, web search. |","hierarchy":{"lvl0":"Docs","lvl1":"NeuroLink","lvl2":"Platform Capabilities at a Glance","lvl3":""}},
7920
7920
  {"objectID":"a52c3e036c1ddd2b2c5b6e086b7c5b9228edfddd931b194c450c65a7a60cb4da","title":"Documentation Map","url":"/docs/#documentation-map","content":"| Area | When to Use | Link |\n| --------------- | ----------------------------------------------------- | ----------------------------------------------------------- |\n| Getting started | Install, configure, run first prompt | docs/getting-started/index.md |\n| Feature guides | Understand new functionality front-to-back | docs/features/index.md |\n| CLI reference | Command syntax, flags, loop sessions | docs/cli/index.md |\n| SDK reference | Classes, methods, options | docs/sdk/index.md |\n| Integrations | LiteLLM, SageMaker, MCP | docs/litellm-integration.md |\n| Advanced | Middleware, architecture, streaming patterns | docs/advanced/index.md |\n| Cookbook | Practical recipes for common patterns | docs/cookbook/index.md |\n| Guides | Migration, Redis, troubleshooting, provider selection | docs/guides/index.md |\n| Operations | Configuration, troubleshooting, provider matrix | docs/reference/index.md |","hierarchy":{"lvl0":"Docs","lvl1":"NeuroLink","lvl2":"Documentation Map","lvl3":""}},
7921
7921
  {"objectID":"8c1712021aa9be2eb9e7c0377096e6260c5cacd3b493cb81ba4fb71e3e91338e","title":"New in 2026: Enhanced Documentation","url":"/docs/#new-in-2026-enhanced-documentation","content":"Enterprise Features:\nEnterprise HITL Guide - Approval workflows for high-stakes operations\nInteractive CLI Guide - AI development environment\nMCP Tools Showcase - 58+ external tools & 6 built-in tools\n\nProvider Intelligence:\nProvider Capabilities Audit - Technical capabilities matrix\nProvider Selection Guide - Interactive decision wizard\nProvider Comparison - Feature & cost comparison\n\nMiddleware System:\nMiddleware Architecture - Complete lifecycle & patterns\nBuilt-in Middleware - Analytics, Guardrails, Evaluation\nCustom Middleware Guide - Build your own\n\nRedis & Persistence:\nRedis Quick Start - 5-minute setup\nRedis Configuration - Production deployment setup\nRedis Migration - Migration patterns\n\nMigration Guides:\nFrom LangChain - Complete migration guide\nFrom Vercel AI SDK - Next.js focused\n\nDeveloper Experience:\nCookbook - 15 practical recipes\nTroubleshooting Guide - Common issues & solutions","hierarchy":{"lvl0":"Docs","lvl1":"NeuroLink","lvl2":"New in 2026: Enhanced Documentation","lvl3":""}},
7922
7922
  {"objectID":"a66e51aab3feeb7357e7656b91e242e80a6d8ec7927328ffd2ad7e258c6b8008","title":"Integrations","url":"/docs/#integrations","content":"LiteLLM 100+ model hub – Unified access to third-party models via LiteLLM routing. → docs/litellm-integration.md\nAmazon SageMaker – Deploy and call custom endpoints directly from NeuroLink CLI/SDK. → docs/sagemaker-integration.md\nEnterprise proxy & security – Configure outbound policies and compliance posture. → docs/enterprise-proxy-setup.md\nConfiguration automation – Manage environments, regions, and credentials safely. → docs/configuration-management.md\nMCP tool ecosystem – Auto-discover Model Context Protocol tools and extend workflows. → docs/advanced/mcp-integration.md\nRemote MCP via HTTP – Connect to HTTP-based MCP servers with authentication, retries, and rate limiting. → docs/mcp-http-transport.md","hierarchy":{"lvl0":"Docs","lvl1":"NeuroLink","lvl2":"Integrations","lvl3":""}},
@@ -8943,7 +8943,7 @@
8943
8943
  {"objectID":"cbc4193e5e9ffb4c77dd167fe137bc62cfbab5adbe808e814a374670bef12175","title":"Shared adapter needed (9)","url":"/docs/provider-integration/migration-ledger#shared-adapter-needed-9","content":"Three adapter families, not nine one-off migrations:\n\nLocal-runtime adapter (ollama, lm-studio, llamacpp) — one OpenAI-compatible local-runtime adapter with optional auth, model discovery/probe, actionable transport errors, timeout policy, optional embeddings. Vendor-specific pull/diagnostic guidance becomes adapter data.\n\nEmbedding-only adapter (voyage, jina, cohere) — one embedding-only provider adapter parameterized by path, request shape, batch size, response-extraction/index policy, unsupported-surface messages. jina extends it with an optional rerank operation profile (don't force reranking into the boolean capability shape). cohere composes this with a generic OpenAI chat adapter (it has both /compatibility/v1 chat and native /v2/embed); preserve its batch limit and body-field quirks in the embedding profile.\n\nImage-generation adapter (stability, ideogram, recraft) — one image-generation adapter family: explicit multipart vs JSON request profile, base64-vs-URL response profile, custom auth-header support, model-path mapping as data. SSRF and bounded-read policy remain shared mandatory behavior, not per-vendor opt-outs.","hierarchy":{"lvl0":"Provider Integration","lvl1":"Provider Descriptor Migration Ledger","lvl2":"Shared adapter needed (9)","lvl3":""}},
8944
8944
  {"objectID":"14456bd556dd45363546785079362ce7acbd26bfa6a65a06c638acb656fbbce2","title":"Must remain class (13)","url":"/docs/provider-integration/migration-ledger#must-remain-class-13","content":"| Provider | Why |\n| ------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| bedrock | AWS SigV4/Converse protocol, custom loop, not OpenAI-compatible. Tier 4. |\n| openai | Chat portion is catalog-shaped, but embeddings, image generation, and OpenAI-specific telemetry/errors are executable behavior. |\n| vertex | Two native protocols (Google GenAI + Anthropic-on-Vertex) and multiple modality pipelines behind one provider identity. |\n| anthropic | Native Messages API auth/message/tool semantics are executable protocol behavior.","hierarchy":{"lvl0":"Provider Integration","lvl1":"Provider Descriptor Migration Ledger","lvl2":"Must remain class (13)","lvl3":""}},
8945
8945
  {"objectID":"a4f69e09308f075830f2efa7c1b0126236c5ec0fc12bfe08be21764a627e47a5","title":"Must remain core class (1)","url":"/docs/provider-integration/migration-ledger#must-remain-core-class-1","content":"| Provider | Why |\n| ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| openai-compatible | This is the generic protocol surface itself, not a direct vendor. It should consume shared descriptor/config primitives but must never become a fixed-vendor JSON row — collapsing it into the catalog would conflate \"the adapter\" with \"an entry in the adapter's catalog.\" |","hierarchy":{"lvl0":"Provider Integration","lvl1":"Provider Descriptor Migration Ledger","lvl2":"Must remain core class (1)","lvl3":""}},
8946
- {"objectID":"235850085d9102413140920b9d5e5e2ff6113d007c865f5d78012af80fbf1843","title":"Suggested execution order","url":"/docs/provider-integration/migration-ledger#suggested-execution-order","content":"Steps 1–2 below (mistral; huggingface, deepseek) are complete — see Migrated above. What remains:\nThree shared adapters (local-runtime, embedding-only, image-generation) — each unlocks 3 providers at once; build once, migrate three.\ngoogle-ai descriptor-only JSON metadata — proof of concept for moving static descriptor data out of a \"must remain class\" provider without touching its execution.\nDirect-vendor \"must remain class\" providers (bedrock, openai, vertex, anthropic, azure, sagemaker, nvidia-nim) get descriptor-only JSON metadata migrations, execution untouched — lower priority, cosmetic consolidation only.\nAggregators (litellm, openrouter), the core adapter (openai-compatible), and the decision-only providers (typesafe, laya) are excluded from the first-class-count migration priority entirely — the first three add no direct-vendor coverage however they're implemented, and typesafe/laya are decide-only providers with no generate/stream surface to migrate at all.","hierarchy":{"lvl0":"Provider Integration","lvl1":"Provider Descriptor Migration Ledger","lvl2":"Suggested execution order","lvl3":""}},
8946
+ {"objectID":"235850085d9102413140920b9d5e5e2ff6113d007c865f5d78012af80fbf1843","title":"Suggested execution order","url":"/docs/provider-integration/migration-ledger#suggested-execution-order","content":"The former steps 1–2 below (mistral; huggingface, deepseek) are complete — see Migrated above. What remains:\nThree shared adapters (local-runtime, embedding-only, image-generation) — each unlocks 3 providers at once; build once, migrate three.\ngoogle-ai descriptor-only JSON metadata — proof of concept for moving static descriptor data out of a \"must remain class\" provider without touching its execution.\nDirect-vendor \"must remain class\" providers (bedrock, openai, vertex, anthropic, azure, sagemaker, nvidia-nim) get descriptor-only JSON metadata migrations, execution untouched — lower priority, cosmetic consolidation only.\nAggregators (litellm, openrouter), the core adapter (openai-compatible), and the decision-only providers (typesafe, laya) are excluded from the first-class-count migration priority entirely — the first three add no direct-vendor coverage however they're implemented, and typesafe/laya are decide-only providers with no generate/stream surface to migrate at all.","hierarchy":{"lvl0":"Provider Integration","lvl1":"Provider Descriptor Migration Ledger","lvl2":"Suggested execution order","lvl3":""}},
8947
8947
  {"objectID":"6122b2e83358a45c64da87c1ca80a2d579cdfb087a6d9dc58b1e02805296b14a","title":"OpenAI-Compatible Provider Catalog","url":"/docs/provider-integration/openai-compat-catalog","content":"OpenAI-Compatible Provider Catalog\n\nSixteen OpenAI-compatible providers — API Route, Baseten, SambaNova,\nCerebras, Groq, xAI, Together AI, Fireworks AI, Perplexity, Mistral,\nCloudflare Workers AI, GMI Cloud, Inception Labs, io.net Intelligence,\nMancer, Upstage — are registered from one JSON file each, under\nsrc/lib/providers/catalog/<id>.json, and served by one generic class,\nConfiguredOpenAICompatProvider\n(src/lib/providers/configuredOpenAICompat.ts). Adding another provider to\nthis family means adding one JSON file — no subclass, no registry edit, no\nhand-written enum member, no test edit.\n\nThe JSON is the source of truth\n\nOPENAI_COMPAT_CATALOG still exists and keeps its name and element type,\nbut it is now built by the loader (src/lib/providers/catalog/loader.ts)\nfrom the JSON files rather than hand-written. Two consumers read the JSON:\nCodegen (pnpm run codegen:catalog) writes the compile-time\n artifacts into marked regions — the AIProviderName member, the\n <Name>Models enum, the NeurolinkCredentials key — plus the generated\n index. Pre-commit and CI fail on stale output.\nThe loader builds the runtime entry; the descriptor, config options,\n context windows, pricing, vision map and model-choice tables all derive\n from it, as do the provider test suites' rows and counts.\n\nEach file is validated by a zod schema (src/lib/providers/catalog/schema.ts)\nwith a mirrored provider-catalog.schema.json for editor squiggles.\nProbe evidence (roster/auth/billing dates, live-matrix result, PR URL)\nlives in the file's evidence block — the old\ndocs/provider-integration/manifests/<id>.json files were folded into it.\n\nField-by-field reference and the escape hatches:\ntiers/tier-2-catalog-entry.md. Design rationale and the approved rulings:\ndocs/superpowers/plans/2026-08-28-provider-json-catalog-spec.md.\n\nWhen a provider belongs in the catalog\n\nA provider belongs in the JSON catalog if it needs only:\na credential (API key, optionally an extra field like Cloudflare's account id)\na base URL (static default + optional env override, or computed from an\n extra credential field)\na default/fallback model\nerror-message classification (auth / rate-limit / invalid-model / generic)\na named, closed catalog quirk. DeepSeek is the worked example: it 400s on\n json_schema structured-output requests, so deepseek.json sets\n quirks.responseFormatDowngrade: \"json-schema-to-json-object\" and the\n generic ConfiguredOpenAICompatProvider downgrades to json_object before\n sending — no subclass. It also sets quirks.replayReasoningContent: true:\n DeepSeek documents that each assistant turn's reasoning_content must go\n back on later requests once tools are in play, so the shared message\n converter and the streaming tool loop send it — for this quirk only, since\n strict OpenAI-compatible backends reject the unknown field.\na wire-proven capability such as\n capabilities.structuredOutputWithTools. The generic provider suppresses\n response_format when tools are attached by default; an explicit true\n keeps it on the same generate() or stream() request. Set this only after\n a combined tools-plus-schema request returned successfully. Separate tool\n and structured-output probes are not evidence for the combined capability.\n A stale opt-in is still protected by the runtime conflict retry, which drops\n structured output and retries rather than losing the turn.\n\nThe currently opted-in providers are Baseten, DeepSeek, Fireworks AI, GMI\nCloud, Inception Labs, io.net Intelligence, Novita AI, Together AI, Upstage and\nxAI. API Route remains opted out because its evidence verifies the features\nseparately, not together in one request. Mistral remains opted out because its\ncombined probes returned 429 twice, not a successful capability response.\n\nWhen a provider needs a dedicated subclass instead\n\nAzure OpenAI is deliberately not in the catalog because it overrides real\nrequest-shaping behavior that no named catalog quirk expresses:\nAzure OpenAI (src/lib/providers/azureOpenai.ts) overrides four hooks:\n getChatCompletionsURL (deployment-name URL routing across two Azure\n endpoint schemes), getAuthHeaders (Azure's api-key header instead of\n Authorization: Bearer), adjustRequestBody (renames max_tokens to\n max_completion_tokens for o-series/gpt-5+ deployments), and\n suppressResponseFormatWithTools (Azure supports both at once).\n\nIf a future provider needs any hook beyond the 3 mandatory ones\n(getProviderName, getDefaultModel, formatProviderError) or the 2\npurely-declarative optional ones (getFallbackModelName,\ngetFallbackModels) and that hook is not already a named catalog quirk, it\nneeds either a new closed quirk (the DeepSeek route) or a dedicated subclass\n(the Azure OpenAI route).\n\nError-message fidelity\n\nEach entry's errorRules is a direct, order-preserving translation of its\noriginal subclass's formatProviderError if/else ladder into rule data\n(status code and/or case-insensitive pattern), classified via\nclassifyProviderError()\n(src/lib/utils/err","hierarchy":{"lvl0":"Provider Integration","lvl1":"OpenAI-Compatible Provider Catalog","lvl2":"","lvl3":""}},
8948
8948
  {"objectID":"9a91a5b4a32a9f1e89c6a28f762c3594c4a39d96d32cc9e6e1fa0f5cb3f609e4","title":"OpenAI-Compatible Provider Catalog","url":"/docs/provider-integration/openai-compat-catalog#openai-compatible-provider-catalog","content":"Sixteen OpenAI-compatible providers — API Route, Baseten, SambaNova,\nCerebras, Groq, xAI, Together AI, Fireworks AI, Perplexity, Mistral,\nCloudflare Workers AI, GMI Cloud, Inception Labs, io.net Intelligence,\nMancer, Upstage — are registered from one JSON file each, under\nsrc/lib/providers/catalog/<id>.json, and served by one generic class,\nConfiguredOpenAICompatProvider\n(src/lib/providers/configuredOpenAICompat.ts). Adding another provider to\nthis family means adding one JSON file — no subclass, no registry edit, no\nhand-written enum member, no test edit.","hierarchy":{"lvl0":"Provider Integration","lvl1":"OpenAI-Compatible Provider Catalog","lvl2":"OpenAI-Compatible Provider Catalog","lvl3":""}},
8949
8949
  {"objectID":"16e60ee66171009a6638b5110cc8693f90c1a2cfde796c6932c3512d7f7421fb","title":"The JSON is the source of truth","url":"/docs/provider-integration/openai-compat-catalog#the-json-is-the-source-of-truth","content":"OPENAI_COMPAT_CATALOG still exists and keeps its name and element type,\nbut it is now built by the loader (src/lib/providers/catalog/loader.ts)\nfrom the JSON files rather than hand-written. Two consumers read the JSON:\nCodegen (pnpm run codegen:catalog) writes the compile-time\n artifacts into marked regions — the AIProviderName member, the\n <Name>Models enum, the NeurolinkCredentials key — plus the generated\n index. Pre-commit and CI fail on stale output.\nThe loader builds the runtime entry; the descriptor, config options,\n context windows, pricing, vision map and model-choice tables all derive\n from it, as do the provider test suites' rows and counts.\n\nEach file is validated by a zod schema (src/lib/providers/catalog/schema.ts)\nwith a mirrored provider-catalog.schema.json for editor squiggles.\nProbe evidence (roster/auth/billing dates, live-matrix result, PR URL)\nlives in the file's evidence block — the old\ndocs/provider-integration/manifests/<id>.json files were folded into it.\n\nField-by-field reference and the escape hatches:\ntiers/tier-2-catalog-entry.md. Design rationale and the approved rulings:\ndocs/superpowers/plans/2026-08-28-provider-json-catalog-spec.md.","hierarchy":{"lvl0":"Provider Integration","lvl1":"OpenAI-Compatible Provider Catalog","lvl2":"The JSON is the source of truth","lvl3":""}},
@@ -9095,8 +9095,8 @@
9095
9095
  {"objectID":"61a3976ba8f1c5eeed456f7af64d3274a0fd5bf8ee77fe201de27295f5b403cb","title":"8. Documentation Verification","url":"/docs/rag/VERIFICATION#8-documentation-verification","content":"| Document | Exists | Accurate | Complete | Status |\n| ---------------- | ------ | -------- | -------- | ------ |\n| TESTING.md | [ ] | [ ] | [ ] | [ ] |\n| CONFIGURATION.md | [ ] | [ ] | [ ] | [ ] |\n| VERIFICATION.md | [ ] | [ ] | [ ] | [ ] |\n| CLI-COVERAGE.md | [ ] | [ ] | [ ] | [ ] |","hierarchy":{"lvl0":"Rag","lvl1":"RAG Processing - Manual Verification Checklist","lvl2":"8. Documentation Verification","lvl3":""}},
9096
9096
  {"objectID":"83f7357fa2d3b81496d704bba2ae12343314f32e2ccec6dae2248e63867cddca","title":"Sign-off","url":"/docs/rag/VERIFICATION#sign-off","content":"| Role | Name | Date | Signature |\n| --------- | ---- | ---- | --------- |\n| Developer | | | |\n| QA | | | |\n| Tech Lead | | | |","hierarchy":{"lvl0":"Rag","lvl1":"RAG Processing - Manual Verification Checklist","lvl2":"Sign-off","lvl3":""}},
9097
9097
  {"objectID":"574e58b2065b4cf4518e5cbf15dfd86d2bea4091d742c3eeb19a4f89f28fbfc5","title":"Notes","url":"/docs/rag/VERIFICATION#notes","content":"Add any observations, issues, or recommendations here:","hierarchy":{"lvl0":"Rag","lvl1":"RAG Processing - Manual Verification Checklist","lvl2":"Notes","lvl3":""}},
9098
- {"objectID":"9b3ba67e38b636436e6b2f378b85e8b14b45f30f68b91afe7597703a50c9d82a","title":"Analytics Reference","url":"/docs/reference/analytics","content":"Analytics Reference\n\nNeuroLink provides comprehensive analytics capabilities for tracking token usage, costs, performance metrics, and quality evaluation across all AI provider interactions.\n\nOverview\n\nThe analytics system in NeuroLink consists of several interconnected components:\n\n| Component | Purpose |\n| -------------------------- | --------------------------------------------------------------- |\n| Token Usage Tracking | Monitor input/output tokens, cache tokens, and reasoning tokens |\n| Cost Analytics | Estimate and track costs across providers and models |\n| Performance Metrics | Measure response times, throughput, and memory usage |\n| Quality Evaluation | Assess response relevance, accuracy, and completeness |\n| Middleware Integration | Automatic analytics collection via middleware |\n\nToken Usage Tracking\n\nBasic Token Usage\n\nNeuroLink automatically tracks token usage for every generation:\n\nTokenUsage Type\n\nThe TokenUsage type provides detailed token information:\n\nCache Token Tracking\n\nFor providers that support prompt caching (Anthropic, Google), NeuroLink tracks cache metrics:\n\nReasoning Token Tracking\n\nFor models with extended thinking capabilities (OpenAI o1, Anthropic Claude with thinking, Gemini 3):\n\nCost Analytics\n\nAutomatic Cost Estimation\n\nNeuroLink automatically estimates costs based on provider pricing:\n\nCost Calculation Formula\n\nCosts are calculated using per-token pricing:\n\nProvider Pricing Configuration\n\nNeuroLink uses configurable pricing for each provider:\n\n| Provider | Default Input Cost (per 1K) | Default Output Cost (per 1K) |\n| ------------- | --------------------------- | ---------------------------- |\n| OpenAI | $0.00015 | $0.0006 |\n| Anthropic | $0.0015 | $0.0075 |\n| Google AI | $0.000075 | $0.0003 |\n| Google Vertex | $0.000075 | $0.0003 |\n| Bedrock | $0.0015 | $0.0075 |\n| Azure | $0.00015 | $0.0006 |\n| Mistral | $0.0001 | $0.0003 |\n| HuggingFace | $0.0002 | $0.0008 |\n| Ollama | $0 | $0 |\n\nCustom Cost Configuration\n\nOverride default pricing via environment variables:\n\nAggregating Costs\n\nTrack cumulative costs across multiple requests:\n\nPerformance Metrics\n\nResponse Time Tracking\n\nEvery request automatically tracks response time:\n\nAnalyticsData Structure\n\nThe complete analytics data structure:\n\nPerformance Metrics Type\n\nFor advanced performance tracking:\n\nStream Performance Metrics\n\nFor streaming requests, additional metrics are available:\n\nStreaming Example\n\nQuality Evaluation\n\nEnabling Evaluation\n\nNeuroLink can automatically evaluate response quality:\n\nEvaluationData Structure\n\nDomain-Aware Evaluation\n\nConfigure evaluation for specific domains:\n\nEvaluation Providers\n\nEvaluation can use different providers:\n\nAnalytics Middleware\n\nUsing Analytics Middleware\n\nNeuroLink provides built-in analytics middleware:\n\nMiddleware Metadata\n\nThe analytics middleware provides:\n\nCustom Analytics Collection\n\nImplement custom analytics collection:\n\nAnalytics Utilities\n\nFormatting Utilities\n\nValidation Utilities\n\nIntegration with Observability Tools\n\nOpenTelemetry Integration\n\nExport analytics to OpenTelemetry:\n\nPrometheus Metrics\n\nExport metrics to Prometheus:\n\nDataDog Integration\n\nSend analytics to DataDog:\n\nCustom Logging\n\nStructured logging with analytics:\n\nUsage Statistics\n\nTracking Usage Over Time\n\nBuild usage dashboards with aggregated statistics:\n\nRate Limiting Based on Usage\n\nImplement rate limiting using analytics:\n\nCLI Analytics\n\nViewing Analytics in CLI\n\nVerbose Analytics\n\nBest Practices\nAlways Enable Analytics in Production\nMonitor Cost Alerts\nTrack Token Efficiency\nImplement Budget Controls\n\nRelated Documentation\nConfiguration Reference - Configure analytics settings\nProvider Comparison - Compare provider costs\nTroubleshooting - Debug analytics issues\nError Codes - Analytics-related error codes","hierarchy":{"lvl0":"Reference","lvl1":"Analytics Reference","lvl2":"","lvl3":""}},
9099
- {"objectID":"0926aba6cc673644c3648445ea2da40fb83fabeb6f365c4e889c094c3560fb9d","title":"Analytics Reference","url":"/docs/reference/analytics#analytics-reference","content":"NeuroLink provides comprehensive analytics capabilities for tracking token usage, costs, performance metrics, and quality evaluation across all AI provider interactions.","hierarchy":{"lvl0":"Reference","lvl1":"Analytics Reference","lvl2":"Analytics Reference","lvl3":""}},
9098
+ {"objectID":"9b3ba67e38b636436e6b2f378b85e8b14b45f30f68b91afe7597703a50c9d82a","title":"Analytics Reference","url":"/docs/reference/analytics","content":"Analytics Reference\n\nNeuroLink provides comprehensive analytics capabilities for tracking token usage, costs, performance metrics, and quality evaluation across your configured AI provider interactions.\n\nOverview\n\nThe analytics system in NeuroLink consists of several interconnected components:\n\n| Component | Purpose |\n| -------------------------- | --------------------------------------------------------------- |\n| Token Usage Tracking | Monitor input/output tokens, cache tokens, and reasoning tokens |\n| Cost Analytics | Estimate and track costs across providers and models |\n| Performance Metrics | Measure response times, throughput, and memory usage |\n| Quality Evaluation | Assess response relevance, accuracy, and completeness |\n| Middleware Integration | Automatic analytics collection via middleware |\n\nToken Usage Tracking\n\nBasic Token Usage\n\nNeuroLink automatically tracks token usage for every generation:\n\nTokenUsage Type\n\nThe TokenUsage type provides detailed token information:\n\nCache Token Tracking\n\nFor providers that support prompt caching (Anthropic, Google), NeuroLink tracks cache metrics:\n\nReasoning Token Tracking\n\nFor models with extended thinking capabilities (OpenAI o1, Anthropic Claude with thinking, Gemini 3):\n\nCost Analytics\n\nAutomatic Cost Estimation\n\nNeuroLink automatically estimates costs based on provider pricing:\n\nCost Calculation Formula\n\nCosts are calculated using per-token pricing:\n\nProvider Pricing Configuration\n\nNeuroLink uses configurable pricing for each provider:\n\n| Provider | Default Input Cost (per 1K) | Default Output Cost (per 1K) |\n| ------------- | --------------------------- | ---------------------------- |\n| OpenAI | $0.00015 | $0.0006 |\n| Anthropic | $0.0015 | $0.0075 |\n| Google AI | $0.000075 | $0.0003 |\n| Google Vertex | $0.000075 | $0.0003 |\n| Bedrock | $0.0015 | $0.0075 |\n| Azure | $0.00015 | $0.0006 |\n| Mistral | $0.0001 | $0.0003 |\n| HuggingFace | $0.0002 | $0.0008 |\n| Ollama | $0 | $0 |\n\nCustom Cost Configuration\n\nOverride default pricing via environment variables:\n\nAggregating Costs\n\nTrack cumulative costs across multiple requests:\n\nPerformance Metrics\n\nResponse Time Tracking\n\nEvery request automatically tracks response time:\n\nAnalyticsData Structure\n\nThe complete analytics data structure:\n\nPerformance Metrics Type\n\nFor advanced performance tracking:\n\nStream Performance Metrics\n\nFor streaming requests, additional metrics are available:\n\nStreaming Example\n\nQuality Evaluation\n\nEnabling Evaluation\n\nNeuroLink can automatically evaluate response quality:\n\nEvaluationData Structure\n\nDomain-Aware Evaluation\n\nConfigure evaluation for specific domains:\n\nEvaluation Providers\n\nEvaluation can use different providers:\n\nAnalytics Middleware\n\nUsing Analytics Middleware\n\nNeuroLink provides built-in analytics middleware:\n\nMiddleware Metadata\n\nThe analytics middleware provides:\n\nCustom Analytics Collection\n\nImplement custom analytics collection:\n\nAnalytics Utilities\n\nFormatting Utilities\n\nValidation Utilities\n\nIntegration with Observability Tools\n\nOpenTelemetry Integration\n\nExport analytics to OpenTelemetry:\n\nPrometheus Metrics\n\nExport metrics to Prometheus:\n\nDataDog Integration\n\nSend analytics to DataDog:\n\nCustom Logging\n\nStructured logging with analytics:\n\nUsage Statistics\n\nTracking Usage Over Time\n\nBuild usage dashboards with aggregated statistics:\n\nRate Limiting Based on Usage\n\nImplement rate limiting using analytics:\n\nCLI Analytics\n\nViewing Analytics in CLI\n\nVerbose Analytics\n\nBest Practices\nAlways Enable Analytics in Production\nMonitor Cost Alerts\nTrack Token Efficiency\nImplement Budget Controls\n\nRelated Documentation\nConfiguration Reference - Configure analytics settings\nProvider Comparison - Compare provider costs\nTroubleshooting - Debug analytics issues\nError Codes - Analytics-related error codes","hierarchy":{"lvl0":"Reference","lvl1":"Analytics Reference","lvl2":"","lvl3":""}},
9099
+ {"objectID":"0926aba6cc673644c3648445ea2da40fb83fabeb6f365c4e889c094c3560fb9d","title":"Analytics Reference","url":"/docs/reference/analytics#analytics-reference","content":"NeuroLink provides comprehensive analytics capabilities for tracking token usage, costs, performance metrics, and quality evaluation across your configured AI provider interactions.","hierarchy":{"lvl0":"Reference","lvl1":"Analytics Reference","lvl2":"Analytics Reference","lvl3":""}},
9100
9100
  {"objectID":"2405c488fbebcf4cfe8245a94e5fe3eb106a312cde6bd795c0b2710362507e6f","title":"Overview","url":"/docs/reference/analytics#overview","content":"The analytics system in NeuroLink consists of several interconnected components:\n\n| Component | Purpose |\n| -------------------------- | --------------------------------------------------------------- |\n| Token Usage Tracking | Monitor input/output tokens, cache tokens, and reasoning tokens |\n| Cost Analytics | Estimate and track costs across providers and models |\n| Performance Metrics | Measure response times, throughput, and memory usage |\n| Quality Evaluation | Assess response relevance, accuracy, and completeness |\n| Middleware Integration | Automatic analytics collection via middleware |","hierarchy":{"lvl0":"Reference","lvl1":"Analytics Reference","lvl2":"Overview","lvl3":""}},
9101
9101
  {"objectID":"4de3db21ab73ce27bed5f620bc7d11d61e84931962cde34efcd084c976a22c99","title":"Basic Token Usage","url":"/docs/reference/analytics#basic-token-usage","content":"NeuroLink automatically tracks token usage for every generation:","hierarchy":{"lvl0":"Reference","lvl1":"Analytics Reference","lvl2":"Basic Token Usage","lvl3":""}},
9102
9102
  {"objectID":"d302c2db932a3c1f2cd6ef8a1567009be278c1867fff07ecf773e9f3ff58f85f","title":"TokenUsage Type","url":"/docs/reference/analytics#tokenusage-type","content":"The TokenUsage type provides detailed token information:","hierarchy":{"lvl0":"Reference","lvl1":"Analytics Reference","lvl2":"TokenUsage Type","lvl3":""}},
@@ -9294,8 +9294,8 @@
9294
9294
  {"objectID":"f705cae26765f2bdb94a4dc49e67d394278cc85069e644d650664fde0da7f72f","title":"General Guidelines","url":"/docs/reference/provider-behavior#general-guidelines","content":"Provider Rotation: Use multiple providers for resilience\nImplementation guide: API Reference\nInput Validation: Validate inputs for provider compatibility\nSee provider-specific sections above for validation patterns\nError Handling: Implement graceful fallbacks\nFollow Streaming Guide patterns\nPerformance Monitoring: Track provider metrics\nSetup: API Reference\nCost Management: Monitor token usage across providers\nTools: CLI Guide\nTesting Strategy: Use provider-appropriate test cases\nReference Testing Recommendations above","hierarchy":{"lvl0":"Reference","lvl1":"Provider Behavior Guide","lvl2":"General Guidelines","lvl3":""}},
9295
9295
  {"objectID":"7c1bdfe928229df8f4d6d3375d8594e82e0e617e9bbe28603b42a79ab3bd42ec","title":"Performance Optimization","url":"/docs/reference/provider-behavior#performance-optimization","content":"Caching: Implement response caching for repeated requests\nBatch Processing: Use batch operations where supported\nProvider Selection: Choose optimal providers per use case\nInput Optimization: Format inputs for best provider performance","hierarchy":{"lvl0":"Reference","lvl1":"Provider Behavior Guide","lvl2":"Performance Optimization","lvl3":""}},
9296
9296
  {"objectID":"1afce612558be9b133b9de7bde88177bb2dc76472b7d658c0b91a64bcc8219af","title":"See Also","url":"/docs/reference/provider-behavior#see-also","content":"API Reference - Complete API documentation and configuration\nCLI Guide - Command-line interface and provider testing\nFactory Pattern Migration - Advanced factory pattern usage\nStreaming Guide - Streaming functionality and error handling\nMain Documentation - Getting started guide and overview\n\nThis guide is maintained as part of the NeuroLink provider ecosystem. For updates or provider-specific issues, please refer to the individual provider documentation or submit an issue in the project repository.","hierarchy":{"lvl0":"Reference","lvl1":"Provider Behavior Guide","lvl2":"See Also","lvl3":""}},
9297
- {"objectID":"b53c0f743f426caf768be3e0994ad8a094a9abcf2c2643f69440b32cbf0a4daa","title":"Provider Capabilities Audit","url":"/docs/reference/provider-capabilities-audit","content":"Provider Capabilities Audit\n\nCapability audit for the 13 text/multimodal AI providers historically tracked in this matrix. NeuroLink ships 44 providers in total — the additional providers added since this audit was first written (DeepSeek, NVIDIA NIM, LM Studio, llama.cpp, xAI, Groq, Cerebras, SambaNova, Together AI, Fireworks, Perplexity, Cloudflare, Cohere, TypeSafe Jev, and more), the voice providers (OpenAI TTS, ElevenLabs, Deepgram, Azure Speech, Whisper, OpenAI Realtime, Gemini Live), and the embedding/media-only providers are documented in the per-provider docs under /docs/getting-started/providers/ and the Voice Features index, not in this capability matrix.\n\nFor the canonical product surface, see the README.\n\nLast Updated: May 2026\nNeuroLink Version: 9.62.0\n\nCapability Matrix\n\n| Provider | Text Gen | Streaming | Tools | Vision | PDF | Thinking | Structured Output | Auth Required |\n| ----------------- | -------- | --------- | ----- | ------ | --- | -------- | ----------------- | ------------------ |\n| OpenAI | ✓ | ✓ | ✓ | ✓ | ✗ | ✗ | ✓ | API Key |\n| Anthropic | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | API Key |\n| Google AI Studio | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ⚠️ | API Key |\n| Google Vertex | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ⚠️ | Service Account |\n| Amazon Bedrock | ✓ | ✓ | ✓ | ⚠️ | ✓ | ✗ | ✓ | AWS Credentials |\n| Amazon SageMaker | ✓ | ⚠️ | ✓ | ✗ | ✗ | ✗ | ✗ | AWS Credentials |\n| Azure OpenAI | ✓ | ✓ | ✓ | ✓ | ✗ | ✗ | ✓ | API Key + Endpoint |\n| Mistral | ✓ | ✓ | ✓ | ⚠️ | ✗ | ✗ | ✓ | API Key |\n| HuggingFace | ✓ | ✓ | ⚠️ | ✗ | ✗ | ✗ | ✗ | API Key |\n| LiteLLM | ✓ | ✓ | ✓ | ⚠️ | ✗ | ✗ | ✓ | Custom |\n| Ollama | ✓ | ✓ | ✓ | ⚠️ | ✗ | ✗ | ✗ | None |\n| OpenAI Compatible | ✓ | ✓ | ✓ | ⚠️ | ✗ | ✗ | ✓ | Custom |\n| OpenRouter | ✓ | ✓ | ⚠️ | ⚠️ | ✗ | ✗ | ✓ | API Key |\n\nLegend:\n✓ Full Support\n⚠️ Partial/Model-Dependent Support\n✗ Not Supported\nOpenAI Provider\n\nFile: src/lib/providers/openAI.ts\nProvider Name: openai\nDefault Model: gpt-4o\n\nCapabilities\n\nText Generation ✓\nFull support for all GPT models\nSupports temperature, maxTokens, top_p parameters\nMulti-turn conversations\n\nStreaming ✓\nReal-time token streaming via Server-Sent Events (SSE)\nChunk-by-chunk response delivery\nFull analytics support\n\nTool Calling ✓\nNative function calling support\nAutomatic tool execution\nMulti-step tool workflows\nTool choice: auto, required, none\n\nVision/Multimodal ✓\n\nSupported Models:\nGPT-5.2 series (gpt-5.2, gpt-5.2-pro) - Latest flagship\nGPT-5 series (gpt-5, gpt-5-pro, gpt-5-mini, gpt-5-nano)\nGPT-4.1 series (gpt-4.1, gpt-4.1-mini, gpt-4.1-nano)\nO-series reasoning models (o3, o3-mini, o3-pro, o4, o4-mini)\nGPT-4o, GPT-4o-mini, GPT-4-turbo, GPT-4-vision-preview\n\nImage Support:\nUp to 10 images per request\nFormats: PNG, JPEG, WEBP, GIF\nBase64 and URL input\n\nPDF Processing ✗\nNot natively supported\nRequires external preprocessing\n\nExtended Thinking ✗\nStandard reasoning only\nNo extended thinking capability\n\nStructured Output ✓\nJSON schema validation\nType-safe responses via Zod\nResponse format enforcement\n\nConfiguration\n\nKnown Limitations\nPDF files require preprocessing to text/images\nNo native extended thinking mode\nRate limits apply per API key tier\nContext window varies by model (128K for GPT-4o)\nAnthropic Provider\n\nFile: src/lib/providers/anthropic.ts\nProvider Name: anthropic\nDefault Model: claude-sonnet-4-5-20250929\n\nCapabilities\n\nText Generation ✓\nAll Claude models (3.x, 4.x, 4.5)\nAdvanced reasoning capabilities\nLong context support (200K tokens)\n\nStreaming ✓\nReal-time streaming with SSE\nTool execution during streaming\nAnalytics tracking\n\nTool Calling ✓\nNative tool use support\nMulti-step agentic workflows\nTool result caching\nParallel tool execution\n\nVision/Multimodal ✓\n\nSupported Models:\nClaude 4.5 series (Sonnet, Opus, Haiku)\nClaude 4.1 and 4.0 series\nClaude 3.7 series\nClaude 3.5 series\nClaude 3 series (Opus, Sonnet, Haiku)\n\nImage Support:\nUp to 20 images per request\nFormats: PNG, JPEG, WEBP, GIF\nBase64 encoding required\n\nPDF Processing ✓\nNative PDF document understanding\nNo preprocessing required\nExtract text, tables, and structure\nVisual analysis of PDF pages\n\nExtended Thinking ✓\n\nSupported Models:\nClaude 4.5 Sonnet (latest)\nClaude 4.5 Opus\nCla","hierarchy":{"lvl0":"Reference","lvl1":"Provider Capabilities Audit","lvl2":"","lvl3":""}},
9298
- {"objectID":"6111cbb24bb4b7856293e429071c5c9836d1bfdbd2fcdb7d156d6cfe4fec1ba0","title":"Provider Capabilities Audit","url":"/docs/reference/provider-capabilities-audit#provider-capabilities-audit","content":"Capability audit for the 13 text/multimodal AI providers historically tracked in this matrix. NeuroLink ships 44 providers in total — the additional providers added since this audit was first written (DeepSeek, NVIDIA NIM, LM Studio, llama.cpp, xAI, Groq, Cerebras, SambaNova, Together AI, Fireworks, Perplexity, Cloudflare, Cohere, TypeSafe Jev, and more), the voice providers (OpenAI TTS, ElevenLabs, Deepgram, Azure Speech, Whisper, OpenAI Realtime, Gemini Live), and the embedding/media-only providers are documented in the per-provider docs under /docs/getting-started/providers/ and the Voice Features index, not in this capability matrix.\n\nFor the canonical product surface, see the README.\n\nLast Updated: May 2026\nNeuroLink Version: 9.62.0","hierarchy":{"lvl0":"Reference","lvl1":"Provider Capabilities Audit","lvl2":"Provider Capabilities Audit","lvl3":""}},
9297
+ {"objectID":"b53c0f743f426caf768be3e0994ad8a094a9abcf2c2643f69440b32cbf0a4daa","title":"Provider Capabilities Audit","url":"/docs/reference/provider-capabilities-audit","content":"Provider Capabilities Audit\n\nCapability audit for the 13 text/multimodal AI providers historically tracked in this matrix. NeuroLink ships many provider integrations — the additional providers added since this audit was first written (DeepSeek, NVIDIA NIM, LM Studio, llama.cpp, xAI, Groq, Cerebras, SambaNova, Together AI, Fireworks, Perplexity, Cloudflare, Cohere, TypeSafe Jev, and more), the voice providers (OpenAI TTS, ElevenLabs, Deepgram, Azure Speech, Whisper, OpenAI Realtime, Gemini Live), and the embedding/media-only providers are documented in the per-provider docs under /docs/getting-started/providers/ and the Voice Features index, not in this capability matrix.\n\nFor the canonical product surface, see the README.\n\nLast Updated: May 2026\nNeuroLink Version: 9.62.0\n\nCapability Matrix\n\n| Provider | Text Gen | Streaming | Tools | Vision | PDF | Thinking | Structured Output | Auth Required |\n| ----------------- | -------- | --------- | ----- | ------ | --- | -------- | ----------------- | ------------------ |\n| OpenAI | ✓ | ✓ | ✓ | ✓ | ✗ | ✗ | ✓ | API Key |\n| Anthropic | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | API Key |\n| Google AI Studio | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ⚠️ | API Key |\n| Google Vertex | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ⚠️ | Service Account |\n| Amazon Bedrock | ✓ | ✓ | ✓ | ⚠️ | ✓ | ✗ | ✓ | AWS Credentials |\n| Amazon SageMaker | ✓ | ⚠️ | ✓ | ✗ | ✗ | ✗ | ✗ | AWS Credentials |\n| Azure OpenAI | ✓ | ✓ | ✓ | ✓ | ✗ | ✗ | ✓ | API Key + Endpoint |\n| Mistral | ✓ | ✓ | ✓ | ⚠️ | ✗ | ✗ | ✓ | API Key |\n| HuggingFace | ✓ | ✓ | ⚠️ | ✗ | ✗ | ✗ | ✗ | API Key |\n| LiteLLM | ✓ | ✓ | ✓ | ⚠️ | ✗ | ✗ | ✓ | Custom |\n| Ollama | ✓ | ✓ | ✓ | ⚠️ | ✗ | ✗ | ✗ | None |\n| OpenAI Compatible | ✓ | ✓ | ✓ | ⚠️ | ✗ | ✗ | ✓ | Custom |\n| OpenRouter | ✓ | ✓ | ⚠️ | ⚠️ | ✗ | ✗ | ✓ | API Key |\n\nLegend:\n✓ Full Support\n⚠️ Partial/Model-Dependent Support\n✗ Not Supported\nOpenAI Provider\n\nFile: src/lib/providers/openAI.ts\nProvider Name: openai\nDefault Model: gpt-4o\n\nCapabilities\n\nText Generation ✓\nFull support for all GPT models\nSupports temperature, maxTokens, top_p parameters\nMulti-turn conversations\n\nStreaming ✓\nReal-time token streaming via Server-Sent Events (SSE)\nChunk-by-chunk response delivery\nFull analytics support\n\nTool Calling ✓\nNative function calling support\nAutomatic tool execution\nMulti-step tool workflows\nTool choice: auto, required, none\n\nVision/Multimodal ✓\n\nSupported Models:\nGPT-5.2 series (gpt-5.2, gpt-5.2-pro) - Latest flagship\nGPT-5 series (gpt-5, gpt-5-pro, gpt-5-mini, gpt-5-nano)\nGPT-4.1 series (gpt-4.1, gpt-4.1-mini, gpt-4.1-nano)\nO-series reasoning models (o3, o3-mini, o3-pro, o4, o4-mini)\nGPT-4o, GPT-4o-mini, GPT-4-turbo, GPT-4-vision-preview\n\nImage Support:\nUp to 10 images per request\nFormats: PNG, JPEG, WEBP, GIF\nBase64 and URL input\n\nPDF Processing ✗\nNot natively supported\nRequires external preprocessing\n\nExtended Thinking ✗\nStandard reasoning only\nNo extended thinking capability\n\nStructured Output ✓\nJSON schema validation\nType-safe responses via Zod\nResponse format enforcement\n\nConfiguration\n\nKnown Limitations\nPDF files require preprocessing to text/images\nNo native extended thinking mode\nRate limits apply per API key tier\nContext window varies by model (128K for GPT-4o)\nAnthropic Provider\n\nFile: src/lib/providers/anthropic.ts\nProvider Name: anthropic\nDefault Model: claude-sonnet-4-5-20250929\n\nCapabilities\n\nText Generation ✓\nAll Claude models (3.x, 4.x, 4.5)\nAdvanced reasoning capabilities\nLong context support (200K tokens)\n\nStreaming ✓\nReal-time streaming with SSE\nTool execution during streaming\nAnalytics tracking\n\nTool Calling ✓\nNative tool use support\nMulti-step agentic workflows\nTool result caching\nParallel tool execution\n\nVision/Multimodal ✓\n\nSupported Models:\nClaude 4.5 series (Sonnet, Opus, Haiku)\nClaude 4.1 and 4.0 series\nClaude 3.7 series\nClaude 3.5 series\nClaude 3 series (Opus, Sonnet, Haiku)\n\nImage Support:\nUp to 20 images per request\nFormats: PNG, JPEG, WEBP, GIF\nBase64 encoding required\n\nPDF Processing ✓\nNative PDF document understanding\nNo preprocessing required\nExtract text, tables, and structure\nVisual analysis of PDF pages\n\nExtended Thinking ✓\n\nSupported Models:\nClaude 4.5 Sonnet (latest)\nClaude 4.5 Opu","hierarchy":{"lvl0":"Reference","lvl1":"Provider Capabilities Audit","lvl2":"","lvl3":""}},
9298
+ {"objectID":"6111cbb24bb4b7856293e429071c5c9836d1bfdbd2fcdb7d156d6cfe4fec1ba0","title":"Provider Capabilities Audit","url":"/docs/reference/provider-capabilities-audit#provider-capabilities-audit","content":"Capability audit for the 13 text/multimodal AI providers historically tracked in this matrix. NeuroLink ships many provider integrations — the additional providers added since this audit was first written (DeepSeek, NVIDIA NIM, LM Studio, llama.cpp, xAI, Groq, Cerebras, SambaNova, Together AI, Fireworks, Perplexity, Cloudflare, Cohere, TypeSafe Jev, and more), the voice providers (OpenAI TTS, ElevenLabs, Deepgram, Azure Speech, Whisper, OpenAI Realtime, Gemini Live), and the embedding/media-only providers are documented in the per-provider docs under /docs/getting-started/providers/ and the Voice Features index, not in this capability matrix.\n\nFor the canonical product surface, see the README.\n\nLast Updated: May 2026\nNeuroLink Version: 9.62.0","hierarchy":{"lvl0":"Reference","lvl1":"Provider Capabilities Audit","lvl2":"Provider Capabilities Audit","lvl3":""}},
9299
9299
  {"objectID":"f159e66270db61eafa05392a306861fec8f7a2e0444a35eac61d7f69fb4bdaa0","title":"Capability Matrix","url":"/docs/reference/provider-capabilities-audit#capability-matrix","content":"| Provider | Text Gen | Streaming | Tools | Vision | PDF | Thinking | Structured Output | Auth Required |\n| ----------------- | -------- | --------- | ----- | ------ | --- | -------- | ----------------- | ------------------ |\n| OpenAI | ✓ | ✓ | ✓ | ✓ | ✗ | ✗ | ✓ | API Key |\n| Anthropic | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | API Key |\n| Google AI Studio | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ⚠️ | API Key |\n| Google Vertex | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ⚠️ | Service Account |\n| Amazon Bedrock | ✓ | ✓ | ✓ | ⚠️ | ✓ | ✗ | ✓ | AWS Credentials |\n| Amazon SageMaker | ✓ | ⚠️ | ✓ | ✗ | ✗ | ✗ | ✗ | AWS Credentials |\n| Azure OpenAI | ✓ | ✓ | ✓ | ✓ | ✗ | ✗ | ✓ | API Key + Endpoint |\n| Mistral | ✓ | ✓ | ✓ | ⚠️ | ✗ | ✗ | ✓ | API Key |\n| HuggingFace | ✓ | ✓ | ⚠️ | ✗ | ✗ | ✗ | ✗ | API Key |\n| LiteLLM | ✓ | ✓ | ✓ | ⚠️ | ✗ | ✗ | ✓ | Custom |\n| Ollama | ✓ | ✓ | ✓ | ⚠️ | ✗ | ✗ | ✗ | None |\n| OpenAI Compatible | ✓ | ✓ | ✓ | ⚠️ | ✗ | ✗ | ✓ | Custom |\n| OpenRouter | ✓ | ✓ | ⚠️ | ⚠️ | ✗ | ✗ | ✓ | API Key |\n\nLegend:\n✓ Full Support\n⚠️ Partial/Model-Dependent Support\n✗ Not Supported","hierarchy":{"lvl0":"Reference","lvl1":"Provider Capabilities Audit","lvl2":"Capability Matrix","lvl3":""}},
9300
9300
  {"objectID":"0b07a322aabded7f495c4fc4bbb73234eacdb4329509db76d40791302afe96ae","title":"1. OpenAI Provider","url":"/docs/reference/provider-capabilities-audit#1-openai-provider","content":"File: src/lib/providers/openAI.ts\nProvider Name: openai\nDefault Model: gpt-4o","hierarchy":{"lvl0":"Reference","lvl1":"Provider Capabilities Audit","lvl2":"1. OpenAI Provider","lvl3":""}},
9301
9301
  {"objectID":"d40476ea729258da73cf30b5f05f91a086a3f437f87e8920f8afc5968bdb82c0","title":"Text Generation ✓","url":"/docs/reference/provider-capabilities-audit#text-generation-","content":"Full support for all GPT models\nSupports temperature, maxTokens, top_p parameters\nMulti-turn conversations","hierarchy":{"lvl0":"Reference","lvl1":"Provider Capabilities Audit","lvl2":"Text Generation ✓","lvl3":""}},
@@ -9409,7 +9409,7 @@
9409
9409
  {"objectID":"57edd72dc0b0fb65b68b5e57456ff39c3594044e057a0c9f400d56e3f00f2ecd","title":"Optional","url":"/docs/reference/provider-capabilities-audit#optional-8","content":"HUGGINGFACE_MODEL=meta-llama/Llama-3.1-8B-Instruct\n`","hierarchy":{"lvl0":"Reference","lvl1":"Provider Capabilities Audit","lvl2":"Optional","lvl3":""}},
9410
9410
  {"objectID":"00e9fdfa28b58332a57920b583b79130bc1bb44eb8aed5b7cfaaab9f4cada7e1","title":"Known Limitations","url":"/docs/reference/provider-capabilities-audit#known-limitations-8","content":"Tool calling only on specific models\nNo vision/multimodal support\nNo PDF processing\nModel quality varies significantly\nSome models require approval/licensing","hierarchy":{"lvl0":"Reference","lvl1":"Provider Capabilities Audit","lvl2":"Known Limitations","lvl3":""}},
9411
9411
  {"objectID":"04d2e2c20a3389f61b4c17b9343a8be54da444d4498d209da9a80712d01fdfd6","title":"10. LiteLLM Provider","url":"/docs/reference/provider-capabilities-audit#10-litellm-provider","content":"File: src/lib/providers/litellm.ts\nProvider Name: litellm\nDefault Model: openai/gpt-4o-mini","hierarchy":{"lvl0":"Reference","lvl1":"Provider Capabilities Audit","lvl2":"10. LiteLLM Provider","lvl3":""}},
9412
- {"objectID":"15786417ffa8dedd19c6b2d04075e0d8b79b20e4dd18b72809197941b48eaad4","title":"Text Generation ✓","url":"/docs/reference/provider-capabilities-audit#text-generation--9","content":"Access to 100+ models via proxy\nUnified interface for all providers\nCost tracking and analytics","hierarchy":{"lvl0":"Reference","lvl1":"Provider Capabilities Audit","lvl2":"Text Generation ✓","lvl3":""}},
9412
+ {"objectID":"15786417ffa8dedd19c6b2d04075e0d8b79b20e4dd18b72809197941b48eaad4","title":"Text Generation ✓","url":"/docs/reference/provider-capabilities-audit#text-generation--9","content":"Access to 100+ models via proxy\nUnified interface across supported providers\nCost tracking and analytics","hierarchy":{"lvl0":"Reference","lvl1":"Provider Capabilities Audit","lvl2":"Text Generation ✓","lvl3":""}},
9413
9413
  {"objectID":"8d3815bc05b5debe37477d87b7366812bc28771f327a3321cc8f11b7d736f47d","title":"Streaming ✓","url":"/docs/reference/provider-capabilities-audit#streaming--9","content":"Real-time streaming\nProxies to underlying provider streams","hierarchy":{"lvl0":"Reference","lvl1":"Provider Capabilities Audit","lvl2":"Streaming ✓","lvl3":""}},
9414
9414
  {"objectID":"e6e7c85d9213ced11351038c56bdbdc39eed388e0fe7939aef76394d2ca24ac7","title":"Tool Calling ✓","url":"/docs/reference/provider-capabilities-audit#tool-calling--9","content":"Full tool support\nDepends on backend model capabilities","hierarchy":{"lvl0":"Reference","lvl1":"Provider Capabilities Audit","lvl2":"Tool Calling ✓","lvl3":""}},
9415
9415
  {"objectID":"126c9e59cea53d252bd1708c42134ee49378fef56708389e27f92378085e62b6","title":"Vision/Multimodal ⚠️","url":"/docs/reference/provider-capabilities-audit#visionmultimodal--9","content":"Depends on backend model\nIf proxying to GPT-4o: Vision supported\nIf proxying to Gemini: Vision supported\nVaries by configured model","hierarchy":{"lvl0":"Reference","lvl1":"Provider Capabilities Audit","lvl2":"Vision/Multimodal ⚠️","lvl3":""}},
@@ -9462,7 +9462,7 @@
9462
9462
  {"objectID":"b56c347380ced6e279ad9d196fdfdba993f4a7f15e85683e4624a121e58f8817","title":"Best for Cost Optimization","url":"/docs/reference/provider-capabilities-audit#best-for-cost-optimization","content":"Google AI Studio - Free tier available\nOpenRouter - Access to free models\nLiteLLM - Cost tracking, routing","hierarchy":{"lvl0":"Reference","lvl1":"Provider Capabilities Audit","lvl2":"Best for Cost Optimization","lvl3":""}},
9463
9463
  {"objectID":"c1f7447cca016bbda5fea1bb0caabfbeb8e6b24a35c56e02320ec0709b5a1f35","title":"Best for Extended Thinking","url":"/docs/reference/provider-capabilities-audit#best-for-extended-thinking","content":"Anthropic - Native extended thinking\nGoogle AI Studio - Gemini 2.5+, 3.0 thinking\nGoogle Vertex - Same as AI Studio","hierarchy":{"lvl0":"Reference","lvl1":"Provider Capabilities Audit","lvl2":"Best for Extended Thinking","lvl3":""}},
9464
9464
  {"objectID":"7efbbc06ad947faa35d1cf608b3b70c4d06fca56d30350b1603d0d5987307c95","title":"Authentication Quick Reference","url":"/docs/reference/provider-capabilities-audit#authentication-quick-reference","content":"| Provider | Auth Type | Env Vars | Complexity |\n| ----------------- | ------------------ | --------------------------------------------------------- | ---------- |\n| OpenAI | API Key | OPENAI_API_KEY | Low |\n| Anthropic | API Key | ANTHROPIC_API_KEY | Low |\n| Google AI Studio | API Key | GOOGLE_AI_API_KEY | Low |\n| Google Vertex | Service Account | GOOGLE_APPLICATION_CREDENTIALS | High |\n| Amazon Bedrock | AWS Credentials | AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY | Medium |\n| Amazon SageMaker | AWS Credentials | AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY | High |\n| Azure OpenAI | API Key + Endpoint | AZURE_OPENAI_API_KEY, AZURE_OPENAI_ENDPOINT | Medium |\n| Mistral | API Key | MISTRAL_API_KEY | Low |\n| HuggingFace | API Key | HUGGINGFACE_API_KEY | Low |\n| LiteLLM | Custom | LITELLM_BASE_URL, LITELLM_API_KEY | Medium |\n| Ollama | None | Optional OLLAMA_BASE_URL | Low |\n| OpenAI Compatible | Custom | OPENAI_COMPATIBLE_BASE_URL, OPENAI_COMPATIBLE_API_KEY | Medium |\n| OpenRouter | API Key | OPENROUTER_API_KEY | Low |","hierarchy":{"lvl0":"Reference","lvl1":"Provider Capabilities Audit","lvl2":"Authentication Quick Reference","lvl3":""}},
9465
- {"objectID":"c40df63a426faedd4a62613b8abffb49168a65fc9ad8eb773371ce029553e450","title":"BaseProvider Architecture","url":"/docs/reference/provider-capabilities-audit#baseprovider-architecture","content":"All providers extend BaseProvider class which provides:\nUnified interface for text generation and streaming\nTool registration and execution\nMiddleware support\nAnalytics and telemetry\nError handling\nMessage building for multimodal content","hierarchy":{"lvl0":"Reference","lvl1":"Provider Capabilities Audit","lvl2":"BaseProvider Architecture","lvl3":""}},
9465
+ {"objectID":"c40df63a426faedd4a62613b8abffb49168a65fc9ad8eb773371ce029553e450","title":"BaseProvider Architecture","url":"/docs/reference/provider-capabilities-audit#baseprovider-architecture","content":"Providers extend the BaseProvider class, which provides:\nUnified interface for text generation and streaming\nTool registration and execution\nMiddleware support\nAnalytics and telemetry\nError handling\nMessage building for multimodal content","hierarchy":{"lvl0":"Reference","lvl1":"Provider Capabilities Audit","lvl2":"BaseProvider Architecture","lvl3":""}},
9466
9466
  {"objectID":"89919a058b907858961d8bc0c5f5bdb7b7bf90ce902807b7e60eac8aaf69a9e9","title":"Dynamic Provider Loading","url":"/docs/reference/provider-capabilities-audit#dynamic-provider-loading","content":"Providers are registered via dynamic imports in ProviderRegistry:\nAvoids circular dependencies\nLazy loading for better performance\nClean provider isolation","hierarchy":{"lvl0":"Reference","lvl1":"Provider Capabilities Audit","lvl2":"Dynamic Provider Loading","lvl3":""}},
9467
9467
  {"objectID":"7eeabea19fc2d4a88ed1f7e7210455ca022997af57fc310d93009193f69f2a87","title":"Tool Execution Flow","url":"/docs/reference/provider-capabilities-audit#tool-execution-flow","content":"Tools registered with MCPToolRegistry\nProvider calls getAllTools() to get available tools\nAI model receives tool definitions\nModel calls tools during generation\nTool results sent back to model\nProcess repeats until completion","hierarchy":{"lvl0":"Reference","lvl1":"Provider Capabilities Audit","lvl2":"Tool Execution Flow","lvl3":""}},
9468
9468
  {"objectID":"912ca4c33c9178b968f8115502950b168b759c64defbab38c6961d04b4c26198","title":"Version History","url":"/docs/reference/provider-capabilities-audit#version-history","content":"v9.62.0 (May 2026) - Multi-provider voice (TTS/STT/realtime); 24 providers\nv9.60.0 (April 2026) - Added DeepSeek, NVIDIA NIM, LM Studio, llama.cpp providers\nv9.59.0 - Typed ModelAccessDeniedError + sdk.checkCredentials()\nv9.58.0 - providerFallback callback + modelChain config\nv9.53.0 - AutoResearch autonomous experiment engine\nv9.52.0 - Per-request and per-instance credentials for all providers\nv8.26.1 (January 2026) - 13 providers (historical)\nv8.26.0 - Added video output types\nv8.25.0 - Gemini 3 support improvements\nv8.24.0 - Enhanced provider capabilities\n\nNext Steps:\nSee Provider Comparison Guide for feature matrix\nSee Provider Selection Wizard for recommendations\nSee API Reference for usage examples","hierarchy":{"lvl0":"Reference","lvl1":"Provider Capabilities Audit","lvl2":"Version History","lvl3":""}},
@@ -9472,7 +9472,7 @@
9472
9472
  {"objectID":"9974fc2be3942f172d7a0f4ed23f28266fd280e9add6a4dfb5dbeb3ce61e17bb","title":"Pay-per-Token Providers","url":"/docs/reference/provider-comparison#pay-per-token-providers","content":"| Provider | Input (per 1M tokens) | Output (per 1M tokens) | Vision | Best Value Model |\n| -------------------- | --------------------- | ---------------------- | -------------- | ----------------------------- |\n| OpenAI | $2.50 - $60.00 | $10.00 - $180.00 | $5.00 - $60.00 | GPT-4o-mini: $0.15/$0.60 |\n| Anthropic ^2^ | $3.00 - $15.00 | $15.00 - $75.00 | Same | Claude Haiku: $0.25/$1.25 |\n| Google AI Studio | FREE - $7.00 | FREE - $21.00 | FREE - $7.00 | Gemini 2.5 Flash: FREE |\n| Google Vertex | $0.35 - $35.00 | $1.05 - $105.00 | $0.35 - $35.00 | Gemini 2.5 Flash: $0.35/$1.05 |\n| Amazon Bedrock | $3.00 - $15.00 | $15.00 - $75.00 | $3.00 - $15.00 | Claude Haiku: $0.25/$1.25 |\n| Azure OpenAI | $2.50 - $60.00 | $10.00 - $180.00 | $5.00 - $60.00 | GPT-4o-mini: $0.15/$0.60 |\n| Mistral | $0.25 - $8.00 | $0.75 - $24.00 | $0.25 - $8.00 | Mistral Small: $0.20/$0.60 |\n| HuggingFace | FREE - $1.00 | FREE - $1.00 | N/A | Qwen 2.5 72B: FREE |\n| OpenRouter | $0.00 - $60.00 | $0.00 - $180.00 | Varies | Many free models |\n| DeepSeek | $0.14 - $2.19 | $0.28 - $8.75 | N/A | deepseek-chat: $0.14/$0.28 |\n| NVIDIA NIM | Varies by model | Varies by model | Varies | Free credits for new users |\n\n^2^ Anthropic also offers subscription-based pricing as an alternative to per-token API pricing: Free tier (limited), Pro ($20/mo), Max ($100+/mo with 5x-20x usage). NeuroLink supports both API key and OAuth (subscription) authentication. See Anthropic Deep Dive.","hierarchy":{"lvl0":"Reference","lvl1":"AI Provider Comparison Guide","lvl2":"Pay-per-Token Providers","lvl3":""}},
9473
9473
  {"objectID":"eaaf3da103a1b5c86eb52913a92b81ebbd7592ed9a20caac997dd6533bb14df9","title":"Self-Hosted / Custom Pricing","url":"/docs/reference/provider-comparison#self-hosted-custom-pricing","content":"| Provider | Model | Cost Structure | Notes |\n| --------------------- | ------ | ------------------------ | ------------------------------------------------- |\n| Amazon SageMaker | Custom | Instance hours + storage | Varies by instance type (ml.g5.xlarge: ~$1.41/hr) |\n| LiteLLM | Proxy | Backend provider costs | No additional fee, proxy overhead only |\n| Ollama | Local | Hardware costs only | FREE (uses local compute) |\n| OpenAI Compatible | Custom | Backend-dependent | Varies by endpoint provider |\n| LM Studio | Local | Hardware costs only | FREE (uses local compute) |\n| llama.cpp | Local | Hardware costs only | FREE (uses local compute) |","hierarchy":{"lvl0":"Reference","lvl1":"AI Provider Comparison Guide","lvl2":"Self-Hosted / Custom Pricing","lvl3":""}},
9474
9474
  {"objectID":"684dd4b3da0cb2e1e1891410e99d8cbd99de4d78f3cc95a99ec6eaa872c1ae93","title":"Free Tier Details","url":"/docs/reference/provider-comparison#free-tier-details","content":"Anthropic (via Claude subscription):\nFree tier available via OAuth authentication (claude.ai account)\nLimited daily messages and lower rate limits\nAccess to Claude Haiku models\nNo API key required (uses OAuth 2.0 flow)\n\nGoogle AI Studio:\n15 requests/minute\n1,500 requests/day\nUp to 1M tokens/day\nGemini 2.5 Flash completely FREE\n\nHuggingFace:\nRate-limited free tier\n1,000 requests/month on free models\nInference API access\n\nMistral:\nLimited free tier for testing\nMistral Small free quota\n\nOllama:\nCompletely FREE\nUses local compute\nNo API limits\n\nLM Studio:\nCompletely FREE\nUses local compute (GPU or CPU)\nNo API limits or network dependency\nRequires LM Studio desktop app\n\nllama.cpp:\nCompletely FREE\nUses local compute (GPU or CPU)\nNo API limits or network dependency\nRequires llama-server binary\n\nOpenRouter:\nMany FREE models available:\nGoogle Gemini 2.0 Flash (free)\nMeta Llama 3.3 70B (free)\nQwen models (free)","hierarchy":{"lvl0":"Reference","lvl1":"AI Provider Comparison Guide","lvl2":"Free Tier Details","lvl3":""}},
9475
- {"objectID":"93a2f35abedbd18c00588f2923f40ae8fb2e997246d20bd74f6349dfaf55d890","title":"Text Generation","url":"/docs/reference/provider-comparison#text-generation","content":"All providers support text generation, but quality varies:\n\nTier 1 (Highest Quality):\nOpenAI GPT-4o, GPT-5 series\nAnthropic Claude 4.5 series\nGoogle Gemini 3 Pro\n\nTier 2 (High Quality):\nAzure OpenAI (same as OpenAI)\nGoogle Gemini 2.5 Pro\nAnthropic Claude 4.0 Sonnet\n\nTier 3 (Good Quality):\nMistral Large\nAmazon Bedrock (Claude models)\nOpenRouter (Claude/GPT-4 routing)\n\nTier 4 (Variable Quality):\nHuggingFace (model-dependent)\nOllama (model-dependent)\nLiteLLM (backend-dependent)","hierarchy":{"lvl0":"Reference","lvl1":"AI Provider Comparison Guide","lvl2":"Text Generation","lvl3":""}},
9475
+ {"objectID":"93a2f35abedbd18c00588f2923f40ae8fb2e997246d20bd74f6349dfaf55d890","title":"Text Generation","url":"/docs/reference/provider-comparison#text-generation","content":"Providers support text generation, but quality varies:\n\nTier 1 (Highest Quality):\nOpenAI GPT-4o, GPT-5 series\nAnthropic Claude 4.5 series\nGoogle Gemini 3 Pro\n\nTier 2 (High Quality):\nAzure OpenAI (same as OpenAI)\nGoogle Gemini 2.5 Pro\nAnthropic Claude 4.0 Sonnet\n\nTier 3 (Good Quality):\nMistral Large\nAmazon Bedrock (Claude models)\nOpenRouter (Claude/GPT-4 routing)\n\nTier 4 (Variable Quality):\nHuggingFace (model-dependent)\nOllama (model-dependent)\nLiteLLM (backend-dependent)","hierarchy":{"lvl0":"Reference","lvl1":"AI Provider Comparison Guide","lvl2":"Text Generation","lvl3":""}},
9476
9476
  {"objectID":"328df74f14cc4329c5260b898968e5cccb79ca3fd529d1052c6a7604e0b293c3","title":"Streaming Support","url":"/docs/reference/provider-comparison#streaming-support","content":"Full Streaming (Real-time SSE):\n✓ OpenAI\n✓ Anthropic\n✓ Google AI Studio\n✓ Google Vertex\n✓ Amazon Bedrock\n✓ Azure OpenAI\n✓ Mistral\n✓ HuggingFace\n✓ LiteLLM\n✓ Ollama\n✓ OpenAI Compatible\n✓ OpenRouter\n✓ DeepSeek\n✓ NVIDIA NIM\n✓ LM Studio\n✓ llama.cpp\n\nPartial/Limited Streaming:\n⚠️ Amazon SageMaker (not fully implemented in v8.26.1)","hierarchy":{"lvl0":"Reference","lvl1":"AI Provider Comparison Guide","lvl2":"Streaming Support","lvl3":""}},
9477
9477
  {"objectID":"64c8513d79573595bd25cf0d845b49f256c3cf9de8563ac2436454e2b1e09451","title":"Tool Calling / Function Calling","url":"/docs/reference/provider-comparison#tool-calling-function-calling","content":"Native Full Support:\n✓ OpenAI - Industry-leading function calling\n✓ Anthropic - Advanced tool use, parallel execution\n✓ Azure OpenAI - Same as OpenAI\n✓ Mistral - Native function calling\n✓ Google Vertex - Gemini + Claude models\n✓ Google AI Studio - Gemini models\n✓ Amazon Bedrock - Converse API tool support\n✓ LiteLLM - Proxies to backend providers\n✓ DeepSeek - Both deepseek-chat and deepseek-reasoner\n\nModel-Dependent Support:\n⚠️ NVIDIA NIM - Depends on hosted model (Llama 3.x: yes; embedding-only models: no)\n⚠️ LM Studio - Depends on loaded model (Llama 3.1+, Mistral 7B Instruct v0.3, etc.)\n⚠️ llama.cpp - Requires --jinja server flag; depends on loaded model\n⚠️ HuggingFace - Only specific models:\nLlama 3.1+ series\nHermes 3 models\nCodeLlama 34B\nMistral 7B Instruct v0.3\n⚠️ Ollama - Only compatible models:\nLlama 3.1+\nGemma 3 with tool training\n⚠️ OpenRouter - Check model capabilities:\nClaude models: ✓\nGPT-4 models: ✓\nGemini models: ✓\nMany others vary\n⚠️ OpenAI Compatible - Depends on backend\n⚠️ Amazon SageMaker - Depends on custom endpoint","hierarchy":{"lvl0":"Reference","lvl1":"AI Provider Comparison Guide","lvl2":"Tool Calling / Function Calling","lvl3":""}},
9478
9478
  {"objectID":"1f40384e83724e7342fc4f35571f89a9d311598beddf5e55ef662095a3b09b39","title":"Vision / Multimodal Capabilities","url":"/docs/reference/provider-comparison#vision-multimodal-capabilities","content":"Native Vision Support:\n\nTier 1 (Best Vision):\nOpenAI - GPT-4o, GPT-5 series, O-series\n10 images max\nPNG, JPEG, WEBP, GIF\nAnthropic - Claude 4.5 Sonnet/Haiku, Claude 4.0 Opus/Sonnet\n20 images max\nExcellent vision quality\nGoogle Vertex/AI Studio - Gemini 2.5+, 3.x\n16 images max\nNative multimodal architecture\n\nTier 2 (Good Vision):\nAzure OpenAI - Same models as OpenAI\n10 images max\nMistral - Small 2506, Pixtral\n10 images max (conservative)\n\nModel-Dependent Vision:\n⚠️ LiteLLM - Depends on backend (e.g., GPT-4o via LiteLLM = vision)\n⚠️ Ollama - LLaVA, Llama 3.2 Vision, Gemini models\n⚠️ OpenAI Compatible - Backend-dependent\n⚠️ OpenRouter - Model-dependent (Claude, GPT-4o, Gemini support vision)\n⚠️ Amazon Bedrock - Claude models support vision\n⚠️ NVIDIA NIM - Depends on hosted model (e.g., Phi-3-vision, Llama 3.2 Vision)\n⚠️ LM Studio - Depends on loaded model (LLaVA, Llama 3.2 Vision, Qwen-VL, etc.)\n⚠️ llama.cpp - Depends on loaded model (LLaVA, Llama 3.2 Vision, etc.)\n\nNo Vision Support:\n✗ HuggingFace\n✗ Amazon SageMaker\n✗ DeepSeek (API does not accept image input)","hierarchy":{"lvl0":"Reference","lvl1":"AI Provider Comparison Guide","lvl2":"Vision / Multimodal Capabilities","lvl3":""}},
@@ -9488,7 +9488,7 @@
9488
9488
  {"objectID":"f636c4cf951c77fc1393a8aa26d6dc6d8439a6d2901d4c277cff25d613e396ce","title":"7. Azure OpenAI","url":"/docs/reference/provider-comparison#7-azure-openai","content":"Provider ID: azure\nDefault Model: gpt-4o-mini\n\nStrengths:\nEnterprise security and compliance\nMicrosoft ecosystem integration\nSLA guarantees\nSame models as OpenAI\n\nWeaknesses:\nMost complex setup of all providers\nRequires Azure subscription\nDeployment configuration required\nLimited regional availability\n\nBest For:\nEnterprise Microsoft shops\nWhen you need SLAs and support\nAzure-based infrastructure\nRegulated industries\n\nPricing:\nSame as OpenAI pricing\nBilled through Azure subscription\nGPT-4o: $2.50/$10.00 per 1M tokens\nGPT-4o-mini: $0.15/$0.60 per 1M tokens","hierarchy":{"lvl0":"Reference","lvl1":"AI Provider Comparison Guide","lvl2":"7. Azure OpenAI","lvl3":""}},
9489
9489
  {"objectID":"c5e759ab7c08fa2d722d410eb402591832ba635ef37c3bcdd061ef19743920f2","title":"8. Mistral","url":"/docs/reference/provider-comparison#8-mistral","content":"Provider ID: mistral\nDefault Model: mistral-large-latest\n\nStrengths:\nGDPR compliant (European data centers)\nCompetitive pricing\nVision support (Small 2506+)\nOpen-weight models available\n\nWeaknesses:\nSmaller model selection than OpenAI\nLess ecosystem support\nVision only on specific models\nNo PDF or extended thinking\n\nBest For:\nEuropean compliance needs (GDPR)\nCost-conscious deployments\nWhen you prefer European hosting\nOpen-source friendly organizations\n\nPricing:\nMistral Small: $0.20/$0.60 per 1M tokens\nMistral Medium: $2.50/$7.50 per 1M tokens\nMistral Large: $8.00/$24.00 per 1M tokens","hierarchy":{"lvl0":"Reference","lvl1":"AI Provider Comparison Guide","lvl2":"8. Mistral","lvl3":""}},
9490
9490
  {"objectID":"5efe9c164eeb695c24441543d2b9e405cd3bebee8400fdc95db2addd6ca3fda7","title":"9. HuggingFace","url":"/docs/reference/provider-comparison#9-huggingface","content":"Provider ID: huggingface\nDefault Model: Qwen/Qwen2.5-72B-Instruct\n\nStrengths:\nAccess to 100,000+ models\nOpen-source focus\nCommunity-driven\nFree tier available\n\nWeaknesses:\nVariable model quality\nTool calling only on specific models\nNo vision or multimodal\nRate limits on free tier\n\nBest For:\nResearch and experimentation\nOpen-source projects\nTesting cutting-edge models\nBudget-constrained projects\n\nPricing:\nFree tier: 1,000 requests/month\nInference API: From FREE to ~$1.00 per 1M tokens\nPRO tier: $9/month for higher limits","hierarchy":{"lvl0":"Reference","lvl1":"AI Provider Comparison Guide","lvl2":"9. HuggingFace","lvl3":""}},
9491
- {"objectID":"855ebeb25b3b66642ba01add893f396635da4e4e28e2f5b3ad310ad67cf38c21","title":"10. LiteLLM","url":"/docs/reference/provider-comparison#10-litellm","content":"Provider ID: litellm\nDefault Model: openai/gpt-4o-mini\n\nStrengths:\nAccess to 100+ models via proxy\nUnified interface for all providers\nCost tracking and analytics\nLoad balancing and failover\n\nWeaknesses:\nRequires proxy server running\nAdds proxy overhead\nConfiguration complexity\nCapabilities depend on backend\n\nBest For:\nMulti-provider strategies\nCost optimization and tracking\nLoad balancing across providers\nA/B testing different models\n\nPricing:\nNo additional cost (uses backend provider pricing)\nSelf-hosted proxy is FREE\nCloud-hosted option available","hierarchy":{"lvl0":"Reference","lvl1":"AI Provider Comparison Guide","lvl2":"10. LiteLLM","lvl3":""}},
9491
+ {"objectID":"855ebeb25b3b66642ba01add893f396635da4e4e28e2f5b3ad310ad67cf38c21","title":"10. LiteLLM","url":"/docs/reference/provider-comparison#10-litellm","content":"Provider ID: litellm\nDefault Model: openai/gpt-4o-mini\n\nStrengths:\nAccess to 100+ models via proxy\nUnified interface across supported providers\nCost tracking and analytics\nLoad balancing and failover\n\nWeaknesses:\nRequires proxy server running\nAdds proxy overhead\nConfiguration complexity\nCapabilities depend on backend\n\nBest For:\nMulti-provider strategies\nCost optimization and tracking\nLoad balancing across providers\nA/B testing different models\n\nPricing:\nNo additional cost (uses backend provider pricing)\nSelf-hosted proxy is FREE\nCloud-hosted option available","hierarchy":{"lvl0":"Reference","lvl1":"AI Provider Comparison Guide","lvl2":"10. LiteLLM","lvl3":""}},
9492
9492
  {"objectID":"c04a3e9c8e8c597b1e26d8c7d257b0dee1421be0112550a54760eaa54749c97c","title":"11. Ollama","url":"/docs/reference/provider-comparison#11-ollama","content":"Provider ID: ollama\nDefault Model: llama3.2:latest\n\nStrengths:\nCompletely FREE (local execution)\nMaximum privacy (no data sent to cloud)\nWorks offline\nFast local inference\nNo API rate limits\n\nWeaknesses:\nRequires local compute resources\nModel quality varies\nManual model management\nVision only on specific models\n\nBest For:\nPrivacy-critical applications\nOffline/air-gapped environments\nCost-sensitive projects\nDevelopment and testing\n\nPricing:\nFREE (hardware costs only)\nRequires local GPU for best performance\nNo API costs or rate limits","hierarchy":{"lvl0":"Reference","lvl1":"AI Provider Comparison Guide","lvl2":"11. Ollama","lvl3":""}},
9493
9493
  {"objectID":"5850b5e6ab599e2c9e2952653e0db0616ccd777c908edd1b43dd4381d0d1eab7","title":"12. OpenAI Compatible","url":"/docs/reference/provider-comparison#12-openai-compatible","content":"Provider ID: openai-compatible\nDefault Model: Auto-discovered\n\nStrengths:\nWorks with any OpenAI-compatible endpoint\nvLLM, FastChat, LocalAI support\nCustom deployment flexibility\nAuto-discovers available models\n\nWeaknesses:\nCapabilities entirely backend-dependent\nNo standardized capability detection\nConfiguration varies by provider\nAuthentication varies\n\nBest For:\nCustom deployments (vLLM, FastChat)\nInternal model serving\nPrivate cloud deployments\nWhen you control the backend\n\nPricing:\nDepends entirely on backend provider\nSelf-hosted: Infrastructure costs only\nCloud-hosted: Provider-specific pricing","hierarchy":{"lvl0":"Reference","lvl1":"AI Provider Comparison Guide","lvl2":"12. OpenAI Compatible","lvl3":""}},
9494
9494
  {"objectID":"260fb153eca401bd1ca6ed426b7f594aba2907dd9389b79d0bfe62380fc8a7be","title":"13. OpenRouter","url":"/docs/reference/provider-comparison#13-openrouter","content":"Provider ID: openrouter\nDefault Model: anthropic/claude-3-5-sonnet\n\nStrengths:\nAccess to 300+ models from 60+ providers\nMany FREE models available\nAutomatic failover\nUnified API for all models\nCost tracking\n\nWeaknesses:\nTool support varies by model\nVision support varies by model\nCredit-based pricing system\nModel availability can change\n\nBest For:\nAccess to many providers via one API\nCost optimization (free models available)\nRapid prototyping\nWhen you want provider flexibility\n\nPricing:\nFree models available:\nGoogle Gemini 2.0 Flash: FREE\nMeta Llama 3.3 70B: FREE\nQwen models: FREE\nPaid models:\nClaude 3.5 Sonnet: $3.00/$15.00 per 1M tokens\nGPT-4o: $2.50/$10.00 per 1M tokens","hierarchy":{"lvl0":"Reference","lvl1":"AI Provider Comparison Guide","lvl2":"13. OpenRouter","lvl3":""}},
@@ -9511,8 +9511,8 @@
9511
9511
  {"objectID":"819f5500ab1f564fc56981047c1041d24961f38ee1ce212cd6d0e4dfe85266d1","title":"Text-to-Speech (TTS)","url":"/docs/reference/provider-comparison#text-to-speech-tts","content":"Best quality: openai-tts with model tts-1-hd\n\nBest multilingual: elevenlabs\n\nElevenLabs supports the widest range of languages and voice cloning, making it the default choice for multilingual or branded voice experiences.\n\nMost cost-effective: google-ai (1M chars free tier)\n\nGoogle Cloud Text-to-Speech provides a generous free tier (1M characters/month for standard voices) and is ideal for high-volume applications on GCP.\n\nEnterprise: azure-tts (SSML support)\n\nAzure Cognitive Services TTS has the most comprehensive SSML support, including fine-grained prosody control, making it the standard choice for enterprise IVR and accessibility pipelines.","hierarchy":{"lvl0":"Reference","lvl1":"AI Provider Comparison Guide","lvl2":"Text-to-Speech (TTS)","lvl3":""}},
9512
9512
  {"objectID":"d04a59a4ae2fb4ca3fa13fc4106849621ee8f2cb81c70c59e94f4c0ec6f23e3a","title":"Speech-to-Text (STT)","url":"/docs/reference/provider-comparison#speech-to-text-stt","content":"Best accuracy: whisper (OpenAI)\n\nOpenAI Whisper consistently ranks highest on transcription benchmarks across languages and noisy environments.\n\nBest streaming: deepgram (WebSocket real-time)\n\nDeepgram is the only STT provider with native WebSocket streaming support, enabling sub-300 ms word-level transcription for live audio.\n\nBest for Google Cloud users: google-stt\n\nTight integration with GCP infrastructure, support for 125+ languages, and speaker diarization make google-stt the natural choice when already on Google Cloud.\n\nEnterprise: azure-stt\n\nAzure Cognitive Services STT offers custom model training, batch transcription, and fine-grained compliance controls for regulated industries.","hierarchy":{"lvl0":"Reference","lvl1":"AI Provider Comparison Guide","lvl2":"Speech-to-Text (STT)","lvl3":""}},
9513
9513
  {"objectID":"7c24fb05591146773070a723173cb03919f5c01575bb32563a53a2b677fa25d2","title":"Conclusion","url":"/docs/reference/provider-comparison#conclusion","content":"Choose based on priorities:\nBudget Priority → Google AI Studio (free) or OpenRouter (free models) or Anthropic Free tier (via OAuth)\nQuality Priority → OpenAI or Anthropic\nPrivacy Priority → Ollama / LM Studio / llama.cpp (local)\nReasoning Priority → Anthropic (extended thinking) or DeepSeek-R1 (cost-efficient)\nDocument Priority → Anthropic or Google AI Studio (PDF support)\nCompliance Priority → Azure OpenAI or Bedrock\nFlexibility Priority → OpenRouter (300+ models) or NVIDIA NIM (curated NVIDIA-hosted models)\nFlat-Rate Pricing → Anthropic subscription (Pro $20/mo, Max $100+/mo)\nZero Cloud Cost → LM Studio or llama.cpp (local execution)\nTTS Quality → openai-tts (tts-1-hd) or elevenlabs (multilingual)\nTTS Cost → google-ai TTS (1M chars/month free tier)\nSTT Accuracy → whisper (OpenAI)\nSTT Streaming → deepgram (WebSocket, sub-300 ms)\nRealtime Voice → openai-realtime or gemini-live\n\nNeuroLink Advantage:\nSwitch providers anytime (single line of code)\nUse multiple providers simultaneously\nTest and compare providers easily\nNo vendor lock-in\n\nSee also:\nProvider Capabilities Audit - Detailed technical capabilities\nProvider Selection Wizard - Interactive decision guide\nClaude Subscription Support - OAuth authentication and subscription tiers for Anthropic\nVoice Provider Selection - TTS, STT, and Realtime provider recommendations\nVoice Providers Index - Voice provider setup cards","hierarchy":{"lvl0":"Reference","lvl1":"AI Provider Comparison Guide","lvl2":"Conclusion","lvl3":""}},
9514
- {"objectID":"1e3dc7b8cb1389cf04be5a320a1ba8e0662e49f7331ec2757e3ba0ef65e18166","title":"Provider Feature Compatibility Reference","url":"/docs/reference/provider-feature-compatibility","content":"Provider Feature Compatibility Reference\n\nThis is a dated point-in-time test run covering the providers listed below, not all 44 providers NeuroLink ships today. For the current full roster, see Provider Setup and the Provider Capabilities Audit.\n\nLast Updated: 2025-12-31\nTest Suite: continuous-test-suite.ts (19 comprehensive tests)\nProviders Tested: 11 providers across CSV, PDF, MCP tools, business tools, and enterprise features\n\nExecutive Summary\n\nAfter comprehensive testing across 11 AI providers (plus 4 newly integrated providers), we have identified 4 production-ready providers with 100% feature compatibility and documented specific technical limitations and configuration requirements for all others.\n\nProduction-Ready Providers (100% Compatibility) ⭐⭐⭐\n\n| Provider | Test Score | Duration | Status | Best For |\n| -------------------- | ------------ | -------- | ---------- | --------------------------------------------- |\n| Google AI Studio | 19/19 (100%) | 401s | ✅ Perfect | Fast prototyping, full multimodal support |\n| Vertex AI | 19/19 (100%) | 449s | ✅ Perfect | Enterprise deployments, excellent performance |\n| OpenAI | 19/19 (100%) | 1413s | ✅ Perfect | Industry standard, comprehensive features |\n| LiteLLM | 19/19 (100%) | 552s | ✅ Perfect | Universal proxy for 100+ models |\n\nAll features supported:\n✅ CSV processing (6/6 tests)\n✅ PDF processing (6/6 tests)\n✅ MCP external tools (4/4 tests)\n✅ Business tools (2/2 tests)\n✅ Enterprise features (1/1 test)\n\nComplete Feature Support Matrix\n\n| Provider | CSV | PDF | MCP Tools | Business Tools | Structured Output | Enterprise | Score | Status |\n| -------------------- | -------- | ------ | --------- | -------------- | ----------------- | ---------- | --------- | ------------ |\n| Google AI Studio | ✅ 6/6 | ✅ 6/6 | ✅ 4/4 | ✅ 2/2 | ⚠️ Partial\\ | ✅ 1/1 | 19/19* | Production |\n| Vertex AI | ✅ 6/6 | ✅ 6/6 | ✅ 4/4 | ✅ 2/2 | ⚠️ Partial\\ | ✅ 1/1 | 19/19* | Production |\n| LiteLLM | ✅ 6/6 | ✅ 6/6 | ✅ 4/4 | ✅ 2/2 | ✅ Full | ✅ 1/1 | 19/19 | Production |\n| OpenAI | ✅ 6/6 | ✅ 6/6 | ✅ 4/4 | ✅ 2/2 | ✅ Full | ✅ 1/1 | 19/19 | Production |\n| Azure OpenAI | ✅ 6/6 | ❌ 0/6 | ✅ 4/4 | ✅ 2/2 | ✅ Full | ✅ 1/1 | 13/19 | Production\\* |\n| Mistral | ✅ 6/6 | ❌ 0/6 | ⚠️ 2/4 | ❌ 0/2 | ✅ Full | ✅ 1/1 | 9/19 | Development |\n| Ollama | ⚠️ 3/6 | ⚠️ 1/6 | ❌ 0/4 | ❌ 0/2 | ⚠️ Limited | ✅ 1/1 | 7/19 | Development |\n| Anthropic | 🔧 0/6 | 🔧 0/6 | 🔧 0/4 | 🔧 0/2 | ✅ Full | ✅ 1/1 | 2/19\\\\ | Config |\n| Bedrock | 🔧 0/6 | 🔧 0/6 | 🔧 0/4 | 🔧 0/2 | ✅ Full | ✅ 1/1 | 2/19\\\\ | Config |\n| Hugging Face | 🔧 0/6 | 🔧 0/6 | 🔧 0/4 | 🔧 0/2 | ⚠️ Limited | ✅ 1/1 | 2/19\\\\ | Config |\n| SageMaker | 🔧 0/6 | 🔧 0/6 | 🔧 0/4 | 🔧 0/2 | ⚠️ Limited | ✅ 1/1 | 2/19\\\\ | Config |\n| DeepSeek | ✅ 6/6 | ❌ 0/6 | ✅ 4/4 | ✅ 2/2 | ✅ Full | ✅ 1/1 | N/A† | Cloud |\n| NVIDIA NIM | ✅ 6/6 | ❌ 0/6 | ⚠️ Model | ⚠️ Model | ⚠️ Model | ✅ 1/1 | N/A† | Cloud |\n| LM Studio | ⚠️ Model | ❌ 0/6 | ⚠️ Model | ⚠️ Model | ⚠️ Model | ✅ 1/1 | N/A† | Local |\n| llama.cpp | ⚠️ Model | ❌ 0/6 | ⚠️ Model | ⚠️ Model | ⚠️ Model | ✅ 1/1 | N/A† | Local |\n\n\\*Google providers: Cannot combine tools + schemas (use disableTools: true). Google API limitation, not NeuroLink bug.\n\n†Not yet run through the standard 19-test suite. Capability flags based on provider source code audit (PR #997).\n\nLegend:\n✅ Fully supported\n⚠️ Partially supported\n❌ Not supported (technical limitation)\n🔧 Configuration/billing issue\n\\* Production-ready for non-PDF workloads\n\\\\ Configuration issue, not technical limitation\n\nModel-Level Feature Compatibility\n\nGemini 3 Models\n\n| Model | Streaming | Tools | Vision | Extended Thinking | JSON Schema |\n| ------------------ | --------- | ----- | ------ | ----------------- | ----------- |\n| gemini-3-flash | ✓ | ✓ | ✓ | ✓ | ✓† |\n| gemini-3-pro | ✓ | ✓ | ✓ | ✓ | ✓† |\n\n†JSON Schema Limitation: Gemini 3 models support JSON Schema for structured output, but cannot combine tools with JSON Schema in the same request. When using structured output with a schema, you must disable tools by setting disableTools: true. This is a Google API limitation, not a NeuroLink bug.\n\nExample Usage:\n\nProvider Tier Classification\n\nTier 1: Perfect (100%) - Production Ready for A","hierarchy":{"lvl0":"Reference","lvl1":"Provider Feature Compatibility Reference","lvl2":"","lvl3":""}},
9515
- {"objectID":"3891f4aa5da834ab9cb8755ce122930a4c1dbe4b91ab0de927111dd2e6661935","title":"Provider Feature Compatibility Reference","url":"/docs/reference/provider-feature-compatibility#provider-feature-compatibility-reference","content":"This is a dated point-in-time test run covering the providers listed below, not all 44 providers NeuroLink ships today. For the current full roster, see Provider Setup and the Provider Capabilities Audit.\n\nLast Updated: 2025-12-31\nTest Suite: continuous-test-suite.ts (19 comprehensive tests)\nProviders Tested: 11 providers across CSV, PDF, MCP tools, business tools, and enterprise features","hierarchy":{"lvl0":"Reference","lvl1":"Provider Feature Compatibility Reference","lvl2":"Provider Feature Compatibility Reference","lvl3":""}},
9514
+ {"objectID":"1e3dc7b8cb1389cf04be5a320a1ba8e0662e49f7331ec2757e3ba0ef65e18166","title":"Provider Feature Compatibility Reference","url":"/docs/reference/provider-feature-compatibility","content":"Provider Feature Compatibility Reference\n\nThis is a dated point-in-time test run covering the providers listed below, not the broader set of provider integrations NeuroLink ships today. For the current roster, see Provider Setup and the Provider Capabilities Audit.\n\nLast Updated: 2025-12-31\nTest Suite: continuous-test-suite.ts (19 comprehensive tests)\nProviders Tested: 11 providers across CSV, PDF, MCP tools, business tools, and enterprise features\n\nExecutive Summary\n\nAfter comprehensive testing across 11 AI providers (plus 4 newly integrated providers), we have identified 4 production-ready providers with 100% feature compatibility and documented specific technical limitations and configuration requirements for all others.\n\nProduction-Ready Providers (100% Compatibility) ⭐⭐⭐\n\n| Provider | Test Score | Duration | Status | Best For |\n| -------------------- | ------------ | -------- | ---------- | --------------------------------------------- |\n| Google AI Studio | 19/19 (100%) | 401s | ✅ Perfect | Fast prototyping, full multimodal support |\n| Vertex AI | 19/19 (100%) | 449s | ✅ Perfect | Enterprise deployments, excellent performance |\n| OpenAI | 19/19 (100%) | 1413s | ✅ Perfect | Industry standard, comprehensive features |\n| LiteLLM | 19/19 (100%) | 552s | ✅ Perfect | Universal proxy for 100+ models |\n\nAll features supported:\n✅ CSV processing (6/6 tests)\n✅ PDF processing (6/6 tests)\n✅ MCP external tools (4/4 tests)\n✅ Business tools (2/2 tests)\n✅ Enterprise features (1/1 test)\n\nComplete Feature Support Matrix\n\n| Provider | CSV | PDF | MCP Tools | Business Tools | Structured Output | Enterprise | Score | Status |\n| -------------------- | -------- | ------ | --------- | -------------- | ----------------- | ---------- | --------- | ------------ |\n| Google AI Studio | ✅ 6/6 | ✅ 6/6 | ✅ 4/4 | ✅ 2/2 | ⚠️ Partial\\ | ✅ 1/1 | 19/19* | Production |\n| Vertex AI | ✅ 6/6 | ✅ 6/6 | ✅ 4/4 | ✅ 2/2 | ⚠️ Partial\\ | ✅ 1/1 | 19/19* | Production |\n| LiteLLM | ✅ 6/6 | ✅ 6/6 | ✅ 4/4 | ✅ 2/2 | ✅ Full | ✅ 1/1 | 19/19 | Production |\n| OpenAI | ✅ 6/6 | ✅ 6/6 | ✅ 4/4 | ✅ 2/2 | ✅ Full | ✅ 1/1 | 19/19 | Production |\n| Azure OpenAI | ✅ 6/6 | ❌ 0/6 | ✅ 4/4 | ✅ 2/2 | ✅ Full | ✅ 1/1 | 13/19 | Production\\* |\n| Mistral | ✅ 6/6 | ❌ 0/6 | ⚠️ 2/4 | ❌ 0/2 | ✅ Full | ✅ 1/1 | 9/19 | Development |\n| Ollama | ⚠️ 3/6 | ⚠️ 1/6 | ❌ 0/4 | ❌ 0/2 | ⚠️ Limited | ✅ 1/1 | 7/19 | Development |\n| Anthropic | 🔧 0/6 | 🔧 0/6 | 🔧 0/4 | 🔧 0/2 | ✅ Full | ✅ 1/1 | 2/19\\\\ | Config |\n| Bedrock | 🔧 0/6 | 🔧 0/6 | 🔧 0/4 | 🔧 0/2 | ✅ Full | ✅ 1/1 | 2/19\\\\ | Config |\n| Hugging Face | 🔧 0/6 | 🔧 0/6 | 🔧 0/4 | 🔧 0/2 | ⚠️ Limited | ✅ 1/1 | 2/19\\\\ | Config |\n| SageMaker | 🔧 0/6 | 🔧 0/6 | 🔧 0/4 | 🔧 0/2 | ⚠️ Limited | ✅ 1/1 | 2/19\\\\ | Config |\n| DeepSeek | ✅ 6/6 | ❌ 0/6 | ✅ 4/4 | ✅ 2/2 | ✅ Full | ✅ 1/1 | N/A† | Cloud |\n| NVIDIA NIM | ✅ 6/6 | ❌ 0/6 | ⚠️ Model | ⚠️ Model | ⚠️ Model | ✅ 1/1 | N/A† | Cloud |\n| LM Studio | ⚠️ Model | ❌ 0/6 | ⚠️ Model | ⚠️ Model | ⚠️ Model | ✅ 1/1 | N/A† | Local |\n| llama.cpp | ⚠️ Model | ❌ 0/6 | ⚠️ Model | ⚠️ Model | ⚠️ Model | ✅ 1/1 | N/A† | Local |\n\n\\*Google providers: Cannot combine tools + schemas (use disableTools: true). Google API limitation, not NeuroLink bug.\n\n†Not yet run through the standard 19-test suite. Capability flags based on provider source code audit (PR #997).\n\nLegend:\n✅ Fully supported\n⚠️ Partially supported\n❌ Not supported (technical limitation)\n🔧 Configuration/billing issue\n\\* Production-ready for non-PDF workloads\n\\\\ Configuration issue, not technical limitation\n\nModel-Level Feature Compatibility\n\nGemini 3 Models\n\n| Model | Streaming | Tools | Vision | Extended Thinking | JSON Schema |\n| ------------------ | --------- | ----- | ------ | ----------------- | ----------- |\n| gemini-3-flash | ✓ | ✓ | ✓ | ✓ | ✓† |\n| gemini-3-pro | ✓ | ✓ | ✓ | ✓ | ✓† |\n\n†JSON Schema Limitation: Gemini 3 models support JSON Schema for structured output, but cannot combine tools with JSON Schema in the same request. When using structured output with a schema, you must disable tools by setting disableTools: true. This is a Google API limitation, not a NeuroLink bug.\n\nExample Usage:\n\nProvider Tier Classification\n\nTier 1: Perfect (100%) - Pro","hierarchy":{"lvl0":"Reference","lvl1":"Provider Feature Compatibility Reference","lvl2":"","lvl3":""}},
9515
+ {"objectID":"3891f4aa5da834ab9cb8755ce122930a4c1dbe4b91ab0de927111dd2e6661935","title":"Provider Feature Compatibility Reference","url":"/docs/reference/provider-feature-compatibility#provider-feature-compatibility-reference","content":"This is a dated point-in-time test run covering the providers listed below, not the broader set of provider integrations NeuroLink ships today. For the current roster, see Provider Setup and the Provider Capabilities Audit.\n\nLast Updated: 2025-12-31\nTest Suite: continuous-test-suite.ts (19 comprehensive tests)\nProviders Tested: 11 providers across CSV, PDF, MCP tools, business tools, and enterprise features","hierarchy":{"lvl0":"Reference","lvl1":"Provider Feature Compatibility Reference","lvl2":"Provider Feature Compatibility Reference","lvl3":""}},
9516
9516
  {"objectID":"239b138dc93623d9a904157ce4a5bdc994cdb7993f767f1a9c6de47b50a4f674","title":"Executive Summary","url":"/docs/reference/provider-feature-compatibility#executive-summary","content":"After comprehensive testing across 11 AI providers (plus 4 newly integrated providers), we have identified 4 production-ready providers with 100% feature compatibility and documented specific technical limitations and configuration requirements for all others.","hierarchy":{"lvl0":"Reference","lvl1":"Provider Feature Compatibility Reference","lvl2":"Executive Summary","lvl3":""}},
9517
9517
  {"objectID":"125021efa5db1e2d872c148d730b4aee7ac3522b0b52387d79777f2067bcb1c8","title":"Production-Ready Providers (100% Compatibility) ⭐⭐⭐","url":"/docs/reference/provider-feature-compatibility#production-ready-providers-100-compatibility-","content":"| Provider | Test Score | Duration | Status | Best For |\n| -------------------- | ------------ | -------- | ---------- | --------------------------------------------- |\n| Google AI Studio | 19/19 (100%) | 401s | ✅ Perfect | Fast prototyping, full multimodal support |\n| Vertex AI | 19/19 (100%) | 449s | ✅ Perfect | Enterprise deployments, excellent performance |\n| OpenAI | 19/19 (100%) | 1413s | ✅ Perfect | Industry standard, comprehensive features |\n| LiteLLM | 19/19 (100%) | 552s | ✅ Perfect | Universal proxy for 100+ models |\n\nAll features supported:\n✅ CSV processing (6/6 tests)\n✅ PDF processing (6/6 tests)\n✅ MCP external tools (4/4 tests)\n✅ Business tools (2/2 tests)\n✅ Enterprise features (1/1 test)","hierarchy":{"lvl0":"Reference","lvl1":"Provider Feature Compatibility Reference","lvl2":"Production-Ready Providers (100% Compatibility) ⭐⭐⭐","lvl3":""}},
9518
9518
  {"objectID":"4434cdc7f4be5d72212e891e3b95224491160571e1d6969095f46536d708e229","title":"Complete Feature Support Matrix","url":"/docs/reference/provider-feature-compatibility#complete-feature-support-matrix","content":"| Provider | CSV | PDF | MCP Tools | Business Tools | Structured Output | Enterprise | Score | Status |\n| -------------------- | -------- | ------ | --------- | -------------- | ----------------- | ---------- | --------- | ------------ |\n| Google AI Studio | ✅ 6/6 | ✅ 6/6 | ✅ 4/4 | ✅ 2/2 | ⚠️ Partial\\ | ✅ 1/1 | 19/19* | Production |\n| Vertex AI | ✅ 6/6 | ✅ 6/6 | ✅ 4/4 | ✅ 2/2 | ⚠️ Partial\\ | ✅ 1/1 | 19/19* | Production |\n| LiteLLM | ✅ 6/6 | ✅ 6/6 | ✅ 4/4 | ✅ 2/2 | ✅ Full | ✅ 1/1 | 19/19 | Production |\n| OpenAI | ✅ 6/6 | ✅ 6/6 | ✅ 4/4 | ✅ 2/2 | ✅ Full | ✅ 1/1 | 19/19 | Production |\n| Azure OpenAI | ✅ 6/6 | ❌ 0/6 | ✅ 4/4 | ✅ 2/2 | ✅ Full | ✅ 1/1 | 13/19 | Production\\* |\n| Mistral | ✅ 6/6 | ❌ 0/6 | ⚠️ 2/4 | ❌ 0/2 | ✅ Full | ✅ 1/1 | 9/19 | Development |\n| Ollama | ⚠️ 3/6 | ⚠️ 1/6 | ❌ 0/4 | ❌ 0/2 | ⚠️ Limited | ✅ 1/1 | 7/19 | Development |\n| Anthropic | 🔧 0/6 | 🔧 0/6 | 🔧 0/4 | 🔧 0/2 | ✅ Full | ✅ 1/1 | 2/19\\\\ | Config |\n| Bedrock | 🔧 0/6 | 🔧 0/6 | 🔧 0/4 | 🔧 0/2 | ✅ Full | ✅ 1/1 | 2/19\\\\ | Config |\n| Hugging Face | 🔧 0/6 | 🔧 0/6 | 🔧 0/4 | 🔧 0/2 | ⚠️ Limited | ✅ 1/1 | 2/19\\\\ | Config |\n| SageMaker | 🔧 0/6 | 🔧 0/6 | 🔧 0/4 | 🔧 0/2 | ⚠️ Limited | ✅ 1/1 | 2/19\\\\ | Config |\n| DeepSeek | ✅ 6/6 | ❌ 0/6 | ✅ 4/4 | ✅ 2/2 | ✅ Full | ✅ 1/1 | N/A† | Cloud |\n| NVIDIA NIM | ✅ 6/6 | ❌ 0/6 | ⚠️ Model | ⚠️ Model | ⚠️ Model | ✅ 1/1 | N/A† | Cloud |\n| LM Studio | ⚠️ Model | ❌ 0/6 | ⚠️ Model | ⚠️ Model | ⚠️ Model | ✅ 1/1 | N/A† | Loca","hierarchy":{"lvl0":"Reference","lvl1":"Provider Feature Compatibility Reference","lvl2":"Complete Feature Support Matrix","lvl3":""}},
@@ -9563,7 +9563,7 @@
9563
9563
  {"objectID":"098d221678a87157295b371e3d609ce13446e21727d45349b0f93a99e974b435","title":"1. Quality and Accuracy","url":"/docs/reference/provider-selection#1-quality-and-accuracy","content":"When output quality is paramount, consider these factors:\n\n| Provider | Quality Tier | Best Models | Strengths |\n| ------------------------ | ------------ | ---------------------------- | ----------------------------------------------------- |\n| OpenAI | Tier 1 | GPT-4o, GPT-5, O-series | Industry-leading accuracy, extensive training data |\n| Anthropic | Tier 1 | Claude 4.5 Opus, Sonnet | Superior reasoning, safety-focused, extended thinking |\n| Google | Tier 1-2 | Gemini 3 Pro, Gemini 2.5 Pro | Native multimodal, large context windows |\n| Mistral | Tier 2 | Mistral Large | European-trained, efficient architecture |\n| Meta (via providers) | Tier 2-3 | Llama 3.3 70B | Open-source leader, good general performance |","hierarchy":{"lvl0":"Reference","lvl1":"Provider Selection Guide","lvl2":"1. Quality and Accuracy","lvl3":""}},
9564
9564
  {"objectID":"fb7452decbe1811e113701b33adf80eb196823c057368314b642425ab9b84ed3","title":"2. Cost Optimization","url":"/docs/reference/provider-selection#2-cost-optimization","content":"Choose providers based on your budget constraints:\n\n| Budget Level | Recommended Provider | Monthly Cost (1M tokens) | Notes |\n| -------------------- | ------------------------ | ------------------------ | -------------------------------------- |\n| Free | Google AI Studio | $0 | 1M tokens/day free limit |\n| Free | OpenRouter (free models) | $0 | Gemini, Llama, Qwen models |\n| Free | Ollama | $0 | Hardware costs only |\n| Low ($0-50) | Mistral Small | ~$20 | Good quality, European compliance |\n| Medium ($50-200) | GPT-4o-mini | ~$75 | Excellent quality/cost ratio |\n| High ($200+) | Claude 4.5 Sonnet | ~$180 | Premium quality with extended thinking |\n| Enterprise | Azure/Bedrock | Negotiated | Volume discounts, SLA guarantees |","hierarchy":{"lvl0":"Reference","lvl1":"Provider Selection Guide","lvl2":"2. Cost Optimization","lvl3":""}},
9565
9565
  {"objectID":"c1fc79f60024d628c9fd9603846eb97e190d2f1b51ec9bea890b17e499f53a68","title":"3. Latency and Performance","url":"/docs/reference/provider-selection#3-latency-and-performance","content":"Time-to-first-token (TTFT) and throughput considerations:\n\n| Provider | Average TTFT | Tokens/sec | Best For |\n| -------------------- | ------------ | ---------- | --------------------------------- |\n| Ollama (Local) | 50-200ms | 30-50 | Local development, lowest latency |\n| Google AI Studio | 300-700ms | 45-65 | Fast cloud inference |\n| OpenAI | 300-800ms | 40-60 | Balanced performance |\n| Anthropic | 400-900ms | 35-55 | Complex reasoning tasks |\n| Azure OpenAI | 350-850ms | 40-60 | Enterprise with SLA |","hierarchy":{"lvl0":"Reference","lvl1":"Provider Selection Guide","lvl2":"3. Latency and Performance","lvl3":""}},
9566
- {"objectID":"1efa58bcda6a14b07a2cabd56771c201c1c60abdf49aff31b61f3d5f6a63d63e","title":"4. Feature Requirements","url":"/docs/reference/provider-selection#4-feature-requirements","content":"Match provider capabilities to your feature needs:\n\n| Feature | Full Support | Partial Support | No Support |\n| --------------------- | ------------------------------------------------------------ | ------------------------------------------------------ | ----------------------------------------------------------- |\n| Streaming | All providers | SageMaker | - |\n| Tool Calling | OpenAI, Anthropic, Google, Azure, Bedrock, Mistral, DeepSeek | HuggingFace, Ollama, NIM†, LM Studio†, llama.cpp† | SageMaker |\n| Vision | OpenAI, Anthropic, Google, Azure | Mistral, Ollama, LiteLLM, NIM†, LM Studio†, llama.cpp† | HuggingFace, SageMaker, DeepSeek |\n| PDF Native | Anthropic, Google AI Studio, Vertex | Bedrock (Claude) | OpenAI, Azure, Mistral, DeepSeek, NIM, LM Studio, llama.cpp |\n| Extended Thinking | Anthropic, Google (Gemini 2.5+), DeepSeek (R1), NVIDIA NIM‡ | LM Studio†, llama.cpp† | Others |\n| Structured Output | OpenAI, Anthropic, Azure, Mistral, DeepSeek | Google\\*, NIM†, LM Studio†, llama.cpp† | HuggingFace, Ollama |\n| Local Execution | Ollama, LM Studio, llama.cpp | - | All cloud providers |\n| Zero API Cost | Ollama, LM Studio, llama.cpp | - ","hierarchy":{"lvl0":"Reference","lvl1":"Provider Selection Guide","lvl2":"4. Feature Requirements","lvl3":""}},
9566
+ {"objectID":"1efa58bcda6a14b07a2cabd56771c201c1c60abdf49aff31b61f3d5f6a63d63e","title":"4. Feature Requirements","url":"/docs/reference/provider-selection#4-feature-requirements","content":"Match provider capabilities to your feature needs:\n\n| Feature | Full Support | Partial Support | No Support |\n| --------------------- | ------------------------------------------------------------ | ------------------------------------------------------ | ----------------------------------------------------------- |\n| Streaming | All except SageMaker | SageMaker | - |\n| Tool Calling | OpenAI, Anthropic, Google, Azure, Bedrock, Mistral, DeepSeek | HuggingFace, Ollama, NIM†, LM Studio†, llama.cpp† | SageMaker |\n| Vision | OpenAI, Anthropic, Google, Azure | Mistral, Ollama, LiteLLM, NIM†, LM Studio†, llama.cpp† | HuggingFace, SageMaker, DeepSeek |\n| PDF Native | Anthropic, Google AI Studio, Vertex | Bedrock (Claude) | OpenAI, Azure, Mistral, DeepSeek, NIM, LM Studio, llama.cpp |\n| Extended Thinking | Anthropic, Google (Gemini 2.5+), DeepSeek (R1), NVIDIA NIM‡ | LM Studio†, llama.cpp† | Others |\n| Structured Output | OpenAI, Anthropic, Azure, Mistral, DeepSeek | Google\\*, NIM†, LM Studio†, llama.cpp† | HuggingFace, Ollama |\n| Local Execution | Ollama, LM Studio, llama.cpp | - | All cloud providers |\n| Zero API Cost | Ollama, LM Studio, llama.cpp | - ","hierarchy":{"lvl0":"Reference","lvl1":"Provider Selection Guide","lvl2":"4. Feature Requirements","lvl3":""}},
9567
9567
  {"objectID":"fdabbd2dfcab20be5dc428797866185229cb755a64abed488f863d401a0d2dee","title":"5. Compliance and Security","url":"/docs/reference/provider-selection#5-compliance-and-security","content":"Choose based on regulatory and security requirements:\n\n| Requirement | Best Providers | Configuration Notes |\n| ---------------------- | ----------------------------- | ------------------------------------------ |\n| GDPR | Mistral, Ollama | European data centers, no US data transfer |\n| HIPAA | Azure OpenAI, Bedrock, Vertex | Requires BAA agreement |\n| SOC 2 | All major cloud providers | Available on enterprise tiers |\n| Data Privacy | Ollama, Self-hosted | Zero data transmission |\n| Air-gapped | Ollama, SageMaker | On-premise deployment |\n| Financial Services | Azure OpenAI, Bedrock | Enterprise compliance packages |","hierarchy":{"lvl0":"Reference","lvl1":"Provider Selection Guide","lvl2":"5. Compliance and Security","lvl3":""}},
9568
9568
  {"objectID":"f7522ef43ce2cbd68588101a79eea303cc8adf49e9428a7844ba1b34a78b04b5","title":"Startup / MVP Development","url":"/docs/reference/provider-selection#startup-mvp-development","content":"Recommended Stack:\n\nCost Projection:\nDevelopment: $0/month (Google AI Studio free tier)\nProduction (10K users): ~$50-150/month (GPT-4o-mini)","hierarchy":{"lvl0":"Reference","lvl1":"Provider Selection Guide","lvl2":"Startup / MVP Development","lvl3":""}},
9569
9569
  {"objectID":"adefcedd575b72009c4bc0f61997c4250040929f014824c6c6cdbbe7fa0ef1e6","title":"Enterprise Production","url":"/docs/reference/provider-selection#enterprise-production","content":"Recommended Stack:\n\nEnterprise Requirements Checklist:\n[x] SLA guarantees (99.9%+)\n[x] HIPAA/SOC2 compliance\n[x] Multi-region deployment\n[x] Provider failover strategy\n[x] Cost monitoring and alerts","hierarchy":{"lvl0":"Reference","lvl1":"Provider Selection Guide","lvl2":"Enterprise Production","lvl3":""}},
@@ -10161,11 +10161,11 @@
10161
10161
  {"objectID":"1e36a63233195289c4e20fb69b9e64481099840f66d8c22e5026d33cc9edea44","title":"or use vercel.json","url":"/docs/sdk/framework-integration#or-use-verceljson","content":"{\n \"env\": {\n \"OPENAIAPIKEY\": \"@openai-api-key\",\n \"AWSACCESSKEY_ID\": \"@aws-access-key-id\",\n \"AWSSECRETACCESS_KEY\": \"@aws-secret-access-key\"\n }\n}\n`","hierarchy":{"lvl0":"Sdk","lvl1":"🏗️ Framework Integration Guide","lvl2":"or use vercel.json","lvl3":""}},
10162
10162
  {"objectID":"a39a140e5bea9b5f4c9c0925dbd0e8d2790f52a62979ad27ffb0bfc870a76072","title":"Docker Deployment","url":"/docs/sdk/framework-integration#docker-deployment","content":"`dockerfile\nFROM node:18-alpine\n\nWORKDIR /app\nCOPY package*.json ./\nRUN npm ci --only=production\n\nCOPY . .\nRUN npm run build","hierarchy":{"lvl0":"Sdk","lvl1":"🏗️ Framework Integration Guide","lvl2":"Docker Deployment","lvl3":""}},
10163
10163
  {"objectID":"c75f4cdc82e6aa111fffcb3a1bac81a34a8740b35f749726a590ffcbc6f59832","title":"Set environment variables","url":"/docs/sdk/framework-integration#set-environment-variables","content":"ENV OPENAIAPIKEY=\"\"\nENV AWSACCESSKEY_ID=\"\"\nENV AWSSECRETACCESS_KEY=\"\"\n\nEXPOSE 3000\nCMD [\"npm\", \"start\"]\n`\n\n← Back to Main README | Next: Provider Configuration →","hierarchy":{"lvl0":"Sdk","lvl1":"🏗️ Framework Integration Guide","lvl2":"Set environment variables","lvl3":""}},
10164
- {"objectID":"5d9cafa86655ee984056465d75f0b2825f11f7aa790f777411223b8472d82e3f","title":"SDK Reference","url":"/docs/sdk","content":"SDK Reference\n\nThe NeuroLink SDK provides a TypeScript-first programmatic interface for integrating AI capabilities into your applications.\n\nOverview\n\nThe SDK is designed for:\nWeb applications (React, Vue, Svelte, Angular)\nBackend services (Node.js, Express, Fastify)\nServerless functions (Vercel, Netlify, AWS Lambda)\nDesktop applications (Electron, Tauri)\n\nQuick Start\n\nDocumentation Sections\nAPI Reference — Complete TypeScript API documentation with interfaces, types, and method signatures.\nFramework Integration — Integration guides for Next.js, SvelteKit, React, Vue, and other popular frameworks.\nCustom Tools — How to create and register custom tools for enhanced AI capabilities.\n\nCore Architecture\n\nThe SDK uses a Factory Pattern architecture that provides:\nUnified Interface: All providers implement the same AIProvider interface\nType Safety: Full TypeScript support with IntelliSense\nAutomatic Fallback: Seamless provider switching on failures\nBuilt-in Tools: 6 core tools available across all providers\n\nConfiguration\n\nThe SDK automatically detects configuration from:\n\nAdvanced Features\n\nAuto Provider Selection {#auto-selection}\n\nNeuroLink automatically selects the best available AI provider based on your configuration:\n\nSelection Priority:\nOpenAI (most reliable)\nAnthropic (high quality)\nGoogle AI Studio (free tier)\nOther configured providers\n\nCustom Priority:\n\nLearn more: Provider Orchestration Guide\n\nConversation Memory {#memory}\n\nAutomatic context management for multi-turn conversations:\n\nMemory Types:\nIn-Memory: Fast, single-instance only\nRedis: Distributed, persistent across restarts\n\nFeatures:\nAutomatic context window management\nSession isolation by ID\nExport/import conversation history\nContext summarization for long sessions\n\nLearn more:\nConversation Memory Deep Dive\nRedis Configuration\nContext Summarization\n\nAnalytics & Evaluation\n\nCustom Tools\n\nContext Integration\n\nFramework Examples\n\nRelated Resources\nExamples & Tutorials - Practical implementation examples\nAdvanced Features - MCP integration, analytics, streaming\nTroubleshooting - Common issues and solutions","hierarchy":{"lvl0":"Sdk","lvl1":"SDK Reference","lvl2":"","lvl3":""}},
10164
+ {"objectID":"5d9cafa86655ee984056465d75f0b2825f11f7aa790f777411223b8472d82e3f","title":"SDK Reference","url":"/docs/sdk","content":"SDK Reference\n\nThe NeuroLink SDK provides a TypeScript-first programmatic interface for integrating AI capabilities into your applications.\n\nOverview\n\nThe SDK is designed for:\nWeb applications (React, Vue, Svelte, Angular)\nBackend services (Node.js, Express, Fastify)\nServerless functions (Vercel, Netlify, AWS Lambda)\nDesktop applications (Electron, Tauri)\n\nQuick Start\n\nDocumentation Sections\nAPI Reference — Complete TypeScript API documentation with interfaces, types, and method signatures.\nFramework Integration — Integration guides for Next.js, SvelteKit, React, Vue, and other popular frameworks.\nCustom Tools — How to create and register custom tools for enhanced AI capabilities.\n\nCore Architecture\n\nThe SDK uses a Factory Pattern architecture that provides:\nUnified Interface: Providers implement the same AIProvider interface\nType Safety: Full TypeScript support with IntelliSense\nAutomatic Fallback: Seamless provider switching on failures\nBuilt-in Tools: 6 core tools available across supported providers\n\nConfiguration\n\nThe SDK automatically detects configuration from:\n\nAdvanced Features\n\nAuto Provider Selection {#auto-selection}\n\nNeuroLink automatically selects the best available AI provider based on your configuration:\n\nSelection Priority:\nOpenAI (most reliable)\nAnthropic (high quality)\nGoogle AI Studio (free tier)\nOther configured providers\n\nCustom Priority:\n\nLearn more: Provider Orchestration Guide\n\nConversation Memory {#memory}\n\nAutomatic context management for multi-turn conversations:\n\nMemory Types:\nIn-Memory: Fast, single-instance only\nRedis: Distributed, persistent across restarts\n\nFeatures:\nAutomatic context window management\nSession isolation by ID\nExport/import conversation history\nContext summarization for long sessions\n\nLearn more:\nConversation Memory Deep Dive\nRedis Configuration\nContext Summarization\n\nAnalytics & Evaluation\n\nCustom Tools\n\nContext Integration\n\nFramework Examples\n\nRelated Resources\nExamples & Tutorials - Practical implementation examples\nAdvanced Features - MCP integration, analytics, streaming\nTroubleshooting - Common issues and solutions","hierarchy":{"lvl0":"Sdk","lvl1":"SDK Reference","lvl2":"","lvl3":""}},
10165
10165
  {"objectID":"cd8d604c6512d8000130a068f168252d64ca9d8cbc82096eeab361d5a892f06a","title":"SDK Reference","url":"/docs/sdk#sdk-reference","content":"The NeuroLink SDK provides a TypeScript-first programmatic interface for integrating AI capabilities into your applications.","hierarchy":{"lvl0":"Sdk","lvl1":"SDK Reference","lvl2":"SDK Reference","lvl3":""}},
10166
10166
  {"objectID":"ff71918330cc890387e3a1ef64113ac2b3dd3ccb1b9ded2b5dc44adb48949671","title":"Overview","url":"/docs/sdk#overview","content":"The SDK is designed for:\nWeb applications (React, Vue, Svelte, Angular)\nBackend services (Node.js, Express, Fastify)\nServerless functions (Vercel, Netlify, AWS Lambda)\nDesktop applications (Electron, Tauri)","hierarchy":{"lvl0":"Sdk","lvl1":"SDK Reference","lvl2":"Overview","lvl3":""}},
10167
10167
  {"objectID":"eab2dda644f157a183417bd5a62e6b89ad2969b851553857c430fb4c0d97a822","title":"Documentation Sections","url":"/docs/sdk#documentation-sections","content":"API Reference — Complete TypeScript API documentation with interfaces, types, and method signatures.\nFramework Integration — Integration guides for Next.js, SvelteKit, React, Vue, and other popular frameworks.\nCustom Tools — How to create and register custom tools for enhanced AI capabilities.","hierarchy":{"lvl0":"Sdk","lvl1":"SDK Reference","lvl2":"Documentation Sections","lvl3":""}},
10168
- {"objectID":"2e3627725e27cb6b405351c23ebea13afe1328e72e8f6563ad5ac419ae259a76","title":"Core Architecture","url":"/docs/sdk#core-architecture","content":"The SDK uses a Factory Pattern architecture that provides:\nUnified Interface: All providers implement the same AIProvider interface\nType Safety: Full TypeScript support with IntelliSense\nAutomatic Fallback: Seamless provider switching on failures\nBuilt-in Tools: 6 core tools available across all providers","hierarchy":{"lvl0":"Sdk","lvl1":"SDK Reference","lvl2":"Core Architecture","lvl3":""}},
10168
+ {"objectID":"2e3627725e27cb6b405351c23ebea13afe1328e72e8f6563ad5ac419ae259a76","title":"Core Architecture","url":"/docs/sdk#core-architecture","content":"The SDK uses a Factory Pattern architecture that provides:\nUnified Interface: Providers implement the same AIProvider interface\nType Safety: Full TypeScript support with IntelliSense\nAutomatic Fallback: Seamless provider switching on failures\nBuilt-in Tools: 6 core tools available across supported providers","hierarchy":{"lvl0":"Sdk","lvl1":"SDK Reference","lvl2":"Core Architecture","lvl3":""}},
10169
10169
  {"objectID":"68026f701cebc6b98ea96c9e72cf6fedc9ee6e9e40a5ca1f521ce8d132c4cb0a","title":"Configuration","url":"/docs/sdk#configuration","content":"The SDK automatically detects configuration from:","hierarchy":{"lvl0":"Sdk","lvl1":"SDK Reference","lvl2":"Configuration","lvl3":""}},
10170
10170
  {"objectID":"ce4be95a86c0aeace766e4f1b7537e817661c75e0b13161c2c142f76c7e46e1c","title":"Auto Provider Selection {#auto-selection}","url":"/docs/sdk#auto-provider-selection-auto-selection","content":"NeuroLink automatically selects the best available AI provider based on your configuration:\n\nSelection Priority:\nOpenAI (most reliable)\nAnthropic (high quality)\nGoogle AI Studio (free tier)\nOther configured providers\n\nCustom Priority:\n\nLearn more: Provider Orchestration Guide","hierarchy":{"lvl0":"Sdk","lvl1":"SDK Reference","lvl2":"Auto Provider Selection {#auto-selection}","lvl3":""}},
10171
10171
  {"objectID":"22692664f53f5bf1fdc0b0e6b6b738b01db36ec4451e0454394e40a0e7e0fe9f","title":"Conversation Memory {#memory}","url":"/docs/sdk#conversation-memory-memory","content":"Automatic context management for multi-turn conversations:\n\nMemory Types:\nIn-Memory: Fast, single-instance only\nRedis: Distributed, persistent across restarts\n\nFeatures:\nAutomatic context window management\nSession isolation by ID\nExport/import conversation history\nContext summarization for long sessions\n\nLearn more:\nConversation Memory Deep Dive\nRedis Configuration\nContext Summarization","hierarchy":{"lvl0":"Sdk","lvl1":"SDK Reference","lvl2":"Conversation Memory {#memory}","lvl3":""}},
@@ -10196,14 +10196,14 @@
10196
10196
  {"objectID":"f2ff95a8517aa1bc258524b78aac7ade9816a77b7432d61a3b412f397f7d689b","title":"Client-bundle dependencies — needs-review","url":"/docs/security/subpackage-advisories#client-bundle-dependencies-needs-review","content":"| Severity | Module | GHSA | Chain | Why it's different | Triage |\n| --- | --- | --- | --- | --- | --- |\n| Moderate | @opentelemetry/core | GHSA-8988-4f7v-96qf | posthog-js > @opentelemetry/exporter-logs-otlp-http > @opentelemetry/core (2 paths) | posthog-js ships in the browser bundle for analytics; this specific package is the OTLP log-export path, which sends telemetry out, it doesn't parse attacker-supplied baggage headers inbound. | Accept-risk — outbound-only code path; re-review if posthog-js is ever used to ingest, not just emit, telemetry. |\n| Moderate | protobufjs | GHSA-j3f2-48v5-ccww, GHSA-jfj6-75fj-8934 | posthog-js > @opentelemetry/exporter-logs-otlp-http > @opentelemetry/otlp-transformer > protobufjs | Same outbound-only OTLP export path as above. | Accept-risk, same reasoning. |\n| Moderate | fflate | GHSA-px8p-9vwx-vf98 | posthog-js > fflate | Ships in the client bundle; posthog-js uses it for its own asset compression, not for parsing user-supplied archives. | Accept-risk, low reachability. |\n| Moderate | dompurify | GHSA-55q2-fjhq-7xh7, GHSA-cmwh-pvxp-8882 | isomorphic-dompurify > dompurify | Sanitizes HTML that ends up rendered in the browser. Content sanitized here is this repo's own authored MDX/docs, not arbitrary visitor input — but a sanitizer bypass is exactly the class of bug that matters most if that assumption ever changes. | Needs-upgrade. A fixed dompurify is published (>=3.4.13 / >=3.4.11); whatever pulls isomorphic-dompurify should get it bumped, or the dependency dropped if it renders nothing but static build-time content. |\n| Low | dompurify | GHSA-c2j3-45gr-mqc4 | isomorphic-dompurify > dompurify | Same chain as above. | Needs-upgrade, same fix as the moderate dompurify rows. |","hierarchy":{"lvl0":"Security","lvl1":"Subpackage Dependency Advisories","lvl2":"Client-bundle dependencies — needs-review","lvl3":""}},
10197
10197
  {"objectID":"d060d41f0402f33d02d94eeae0d16c494860addcf47ca14b51ab2fabef4ee1ce","title":"Recommendation","url":"/docs/security/subpackage-advisories#recommendation","content":"No action required to keep the critical-only gate green — it already\n is, in both trees, and stays that way regardless of anything in this\n document.\nlanding/: the next time landing/package.json is edited, add\n brace-expansion: \">=5.0.9\" and fflate: \">=0.8.3\" to its existing\n pnpm.overrides block (it already carries five other overrides for the\n same class of transitive-vulnerability problem — tar, devalue,\n rollup, minimatch, cookie, esbuild — so this is precedent, not a\n new pattern). That closes all 4 brace-expansion findings and the one\n runtime-reachable finding in either tree.\ndocs-site/: find and either upgrade or remove whatever pulls in\n isomorphic-dompurify; it is the only docs-site/ finding with a\n reachable-in-the-browser exploit class (XSS) and an available fix.\n Everything else in docs-site/ tracks @docusaurus/core's own upstream\n releases — re-measure after the next Docusaurus bump rather than chasing\n individual transitive pins.\nRaising --audit-level from critical to high in ci.yml needs the\n two needs-upgrade items above resolved first (per ci.yml's own\n comment); the accept-risk rows would still need an explicit\n pnpm audit --ignore (or equivalent) per advisory to avoid re-blocking on\n findings this document already reviewed. Not done as part of this pass —\n flagged here for whoever picks that decision up.","hierarchy":{"lvl0":"Security","lvl1":"Subpackage Dependency Advisories","lvl2":"Recommendation","lvl3":""}},
10198
10198
  {"objectID":"1080399eefc78beb7860fc2379dec788e8e825df30255c2e9061b40fbbdc767b","title":"Next review","url":"/docs/security/subpackage-advisories#next-review","content":"Re-run the Methodology commands: at minimum whenever\nlanding/pnpm-lock.yaml or docs-site/pnpm-lock.yaml changes, and\notherwise on the same quarterly cadence as docs/development/package-overrides.md.","hierarchy":{"lvl0":"Security","lvl1":"Subpackage Dependency Advisories","lvl2":"Next review","lvl3":""}},
10199
- {"objectID":"2d54764a0f90619f4dfe26cb0c85428f75091a63091f6cc73b70defe3139e6a8","title":"NeuroLink Usage Guide","url":"/docs/skills/neurolink-guide/SKILL","content":"NeuroLink Usage Guide\n\nNeuroLink is an enterprise AI development platform providing unified access to 44 AI providers (text, decision-making, voice, multimodal) through a single API. It ships as both a TypeScript SDK (@juspay/neurolink) and a professional CLI.\n\nQuick Navigation\n\nBased on your query, I'll guide you to the right documentation:\nGetting Started → Read sdk-quickstart.md\nProvider Setup → Read providers.md\nMultimodal (images, PDFs, files) → Read multimodal.md\nMCP Tools Integration → Read tools-mcp.md\nRAG Pipelines → Read rag-integration.md\nConversation Memory → Read memory-conversations.md\nCLI Commands → Read cli-reference.md\nAdvanced Features → Read advanced-features.md\nTroubleshooting → Read troubleshooting.md\n\nTopic Routing\n\nIf the user asked about $ARGUMENTS:\n\n| Topic Keywords | Reference File |\n| -------------------------------------------------------------------------- | ----------------------- |\n| install, setup, start, begin, quickstart | sdk-quickstart.md |\n| provider, openai, anthropic, vertex, bedrock, azure, gemini, claude, model | providers.md |\n| image, pdf, csv, excel, document, file, multimodal, vision | multimodal.md |\n| tool, mcp, server, GitHub, external, function | tools-mcp.md |\n| rag, retrieval, chunk, vector, embed, document search | rag-integration.md |\n| memory, conversation, history, session, redis, context | memory-conversations.md |\n| cli, command, terminal, generate, stream, loop, serve | cli-reference.md |\n| hitl, workflow, agent, observe, telemetry, deploy, server | advanced-features.md |\n| error, issue, problem, fix, debug, not working | troubleshooting.md |\n\nInstallation\n\nMinimal Example\n\nKey Capabilities\n\n| Feature | Description |\n| ----------------- | ---------------------------------------------------------------- |\n| 40 Providers | OpenAI, Anthropic, Vertex, Bedrock, Azure, Mistral, Ollama, etc. |\n| Multimodal | Images, PDFs, CSV, Excel, Word, 50+ file types |\n| MCP Tools | 58+ tools via Model Context Protocol |\n| RAG | Built-in chunking, embedding, vector search |\n| Memory | Conversation history with Redis support |\n| Streaming | Real-time token streaming |\n| HITL | Human-in-the-loop approval workflows |\n| Observability | Langfuse, OpenTelemetry integration |\n\nCode Templates\n\nReady-to-use examples in templates/:\ntemplates/basic-setup.ts - Basic SDK initialization\ntemplates/streaming.ts - Streaming responses\ntemplates/with-tools.ts - Tool integration\ntemplates/rag-pipeline.ts - RAG usage\ntemplates/server-deploy.ts - HTTP server deployment\n\nCLI Quick Reference\n\nEnvironment Variables\n\nSet up your provider credentials:\n\nType Imports\n\nGetting Help\nCheck the relevant reference file above\nReview troubleshooting.md for common issues\nLook at code templates in templates/\nRead the full CLAUDE.md in the project root for architecture details\n\nInstructions for Claude: Based on the user's query about $ARGUMENTS, read the appropriate reference file and provide specific guidance. If no topic is specified, give a general overview of NeuroLink capabilities and ask what they'd like help with.","hierarchy":{"lvl0":"Skills","lvl1":"NeuroLink Usage Guide","lvl2":"","lvl3":""}},
10200
- {"objectID":"96aa85169d914ba98c31e12923e593471d8584415add8a7583153796c856955d","title":"NeuroLink Usage Guide","url":"/docs/skills/neurolink-guide/SKILL#neurolink-usage-guide","content":"NeuroLink is an enterprise AI development platform providing unified access to 44 AI providers (text, decision-making, voice, multimodal) through a single API. It ships as both a TypeScript SDK (@juspay/neurolink) and a professional CLI.","hierarchy":{"lvl0":"Skills","lvl1":"NeuroLink Usage Guide","lvl2":"NeuroLink Usage Guide","lvl3":""}},
10199
+ {"objectID":"2d54764a0f90619f4dfe26cb0c85428f75091a63091f6cc73b70defe3139e6a8","title":"NeuroLink Usage Guide","url":"/docs/skills/neurolink-guide/SKILL","content":"NeuroLink Usage Guide\n\nNeuroLink is an enterprise AI development platform providing unified access to supported AI providers (text, decision-making, voice, multimodal) through a single API. It ships as both a TypeScript SDK (@juspay/neurolink) and a professional CLI.\n\nQuick Navigation\n\nBased on your query, I'll guide you to the right documentation:\nGetting Started → Read sdk-quickstart.md\nProvider Setup → Read providers.md\nMultimodal (images, PDFs, files) → Read multimodal.md\nMCP Tools Integration → Read tools-mcp.md\nRAG Pipelines → Read rag-integration.md\nConversation Memory → Read memory-conversations.md\nCLI Commands → Read cli-reference.md\nAdvanced Features → Read advanced-features.md\nTroubleshooting → Read troubleshooting.md\n\nTopic Routing\n\nIf the user asked about $ARGUMENTS:\n\n| Topic Keywords | Reference File |\n| -------------------------------------------------------------------------- | ----------------------- |\n| install, setup, start, begin, quickstart | sdk-quickstart.md |\n| provider, openai, anthropic, vertex, bedrock, azure, gemini, claude, model | providers.md |\n| image, pdf, csv, excel, document, file, multimodal, vision | multimodal.md |\n| tool, mcp, server, GitHub, external, function | tools-mcp.md |\n| rag, retrieval, chunk, vector, embed, document search | rag-integration.md |\n| memory, conversation, history, session, redis, context | memory-conversations.md |\n| cli, command, terminal, generate, stream, loop, serve | cli-reference.md |\n| hitl, workflow, agent, observe, telemetry, deploy, server | advanced-features.md |\n| error, issue, problem, fix, debug, not working | troubleshooting.md |\n\nInstallation\n\nMinimal Example\n\nKey Capabilities\n\n| Feature | Description |\n| -------------------- | ---------------------------------------------------------------- |\n| Provider Support | OpenAI, Anthropic, Vertex, Bedrock, Azure, Mistral, Ollama, etc. |\n| Multimodal | Images, PDFs, CSV, Excel, Word, 50+ file types |\n| MCP Tools | 58+ tools via Model Context Protocol |\n| RAG | Built-in chunking, embedding, vector search |\n| Memory | Conversation history with Redis support |\n| Streaming | Real-time token streaming |\n| HITL | Human-in-the-loop approval workflows |\n| Observability | Langfuse, OpenTelemetry integration |\n\nCode Templates\n\nReady-to-use examples in templates/:\ntemplates/basic-setup.ts - Basic SDK initialization\ntemplates/streaming.ts - Streaming responses\ntemplates/with-tools.ts - Tool integration\ntemplates/rag-pipeline.ts - RAG usage\ntemplates/server-deploy.ts - HTTP server deployment\n\nCLI Quick Reference\n\nEnvironment Variables\n\nSet up your provider credentials:\n\nType Imports\n\nGetting Help\nCheck the relevant reference file above\nReview troubleshooting.md for common issues\nLook at code templates in templates/\nRead the full CLAUDE.md in the project root for architecture details\n\nInstructions for Claude: Based on the user's query about $ARGUMENTS, read the appropriate reference file and provide specific guidance. If no topic is specified, give a general overview of NeuroLink capabilities and ask what they'd like help with.","hierarchy":{"lvl0":"Skills","lvl1":"NeuroLink Usage Guide","lvl2":"","lvl3":""}},
10200
+ {"objectID":"96aa85169d914ba98c31e12923e593471d8584415add8a7583153796c856955d","title":"NeuroLink Usage Guide","url":"/docs/skills/neurolink-guide/SKILL#neurolink-usage-guide","content":"NeuroLink is an enterprise AI development platform providing unified access to supported AI providers (text, decision-making, voice, multimodal) through a single API. It ships as both a TypeScript SDK (@juspay/neurolink) and a professional CLI.","hierarchy":{"lvl0":"Skills","lvl1":"NeuroLink Usage Guide","lvl2":"NeuroLink Usage Guide","lvl3":""}},
10201
10201
  {"objectID":"21b1f230a7feb082ffa13eb9ce75c5ec9268a2a0d7eac96bb086d500d9f3e6c7","title":"Quick Navigation","url":"/docs/skills/neurolink-guide/SKILL#quick-navigation","content":"Based on your query, I'll guide you to the right documentation:\nGetting Started → Read sdk-quickstart.md\nProvider Setup → Read providers.md\nMultimodal (images, PDFs, files) → Read multimodal.md\nMCP Tools Integration → Read tools-mcp.md\nRAG Pipelines → Read rag-integration.md\nConversation Memory → Read memory-conversations.md\nCLI Commands → Read cli-reference.md\nAdvanced Features → Read advanced-features.md\nTroubleshooting → Read troubleshooting.md","hierarchy":{"lvl0":"Skills","lvl1":"NeuroLink Usage Guide","lvl2":"Quick Navigation","lvl3":""}},
10202
10202
  {"objectID":"e605615042f0ca67afbb7328516b1ae5c0f0863857354643925f4b34f31bc28a","title":"Topic Routing","url":"/docs/skills/neurolink-guide/SKILL#topic-routing","content":"If the user asked about $ARGUMENTS:\n\n| Topic Keywords | Reference File |\n| -------------------------------------------------------------------------- | ----------------------- |\n| install, setup, start, begin, quickstart | sdk-quickstart.md |\n| provider, openai, anthropic, vertex, bedrock, azure, gemini, claude, model | providers.md |\n| image, pdf, csv, excel, document, file, multimodal, vision | multimodal.md |\n| tool, mcp, server, GitHub, external, function | tools-mcp.md |\n| rag, retrieval, chunk, vector, embed, document search | rag-integration.md |\n| memory, conversation, history, session, redis, context | memory-conversations.md |\n| cli, command, terminal, generate, stream, loop, serve | cli-reference.md |\n| hitl, workflow, agent, observe, telemetry, deploy, server | advanced-features.md |\n| error, issue, problem, fix, debug, not working | troubleshooting.md |","hierarchy":{"lvl0":"Skills","lvl1":"NeuroLink Usage Guide","lvl2":"Topic Routing","lvl3":""}},
10203
10203
  {"objectID":"e16256b54ee1cd840e3970192de5a57174044100e1c685badadf0e717b4b3a00","title":"Installation","url":"/docs/skills/neurolink-guide/SKILL#installation","content":"`bash\nnpm install @juspay/neurolink","hierarchy":{"lvl0":"Skills","lvl1":"NeuroLink Usage Guide","lvl2":"Installation","lvl3":""}},
10204
10204
  {"objectID":"90d0cc22bb8b605323ec98ea6e43db5a596b931d0b41e310504be40d6ff4f0cc","title":"or","url":"/docs/skills/neurolink-guide/SKILL#or","content":"pnpm add @juspay/neurolink","hierarchy":{"lvl0":"Skills","lvl1":"NeuroLink Usage Guide","lvl2":"or","lvl3":""}},
10205
10205
  {"objectID":"d1eb1a2c3cefd0cd4e82e8e0ec91fdd2d3425bf01fb2afdc9abc85ee3afff52a","title":"or","url":"/docs/skills/neurolink-guide/SKILL#or-1","content":"yarn add @juspay/neurolink\n`","hierarchy":{"lvl0":"Skills","lvl1":"NeuroLink Usage Guide","lvl2":"or","lvl3":""}},
10206
- {"objectID":"b83b01d704e8b8b320f14011bcefb90b05a6145656cbe07f1eaa885a91416a1e","title":"Key Capabilities","url":"/docs/skills/neurolink-guide/SKILL#key-capabilities","content":"| Feature | Description |\n| ----------------- | ---------------------------------------------------------------- |\n| 40 Providers | OpenAI, Anthropic, Vertex, Bedrock, Azure, Mistral, Ollama, etc. |\n| Multimodal | Images, PDFs, CSV, Excel, Word, 50+ file types |\n| MCP Tools | 58+ tools via Model Context Protocol |\n| RAG | Built-in chunking, embedding, vector search |\n| Memory | Conversation history with Redis support |\n| Streaming | Real-time token streaming |\n| HITL | Human-in-the-loop approval workflows |\n| Observability | Langfuse, OpenTelemetry integration |","hierarchy":{"lvl0":"Skills","lvl1":"NeuroLink Usage Guide","lvl2":"Key Capabilities","lvl3":""}},
10206
+ {"objectID":"b83b01d704e8b8b320f14011bcefb90b05a6145656cbe07f1eaa885a91416a1e","title":"Key Capabilities","url":"/docs/skills/neurolink-guide/SKILL#key-capabilities","content":"| Feature | Description |\n| -------------------- | ---------------------------------------------------------------- |\n| Provider Support | OpenAI, Anthropic, Vertex, Bedrock, Azure, Mistral, Ollama, etc. |\n| Multimodal | Images, PDFs, CSV, Excel, Word, 50+ file types |\n| MCP Tools | 58+ tools via Model Context Protocol |\n| RAG | Built-in chunking, embedding, vector search |\n| Memory | Conversation history with Redis support |\n| Streaming | Real-time token streaming |\n| HITL | Human-in-the-loop approval workflows |\n| Observability | Langfuse, OpenTelemetry integration |","hierarchy":{"lvl0":"Skills","lvl1":"NeuroLink Usage Guide","lvl2":"Key Capabilities","lvl3":""}},
10207
10207
  {"objectID":"7c62327f85fac881c0aac6f869de31dc4136684a6a52de22a2e71ee7b5c42249","title":"Code Templates","url":"/docs/skills/neurolink-guide/SKILL#code-templates","content":"Ready-to-use examples in templates/:\ntemplates/basic-setup.ts - Basic SDK initialization\ntemplates/streaming.ts - Streaming responses\ntemplates/with-tools.ts - Tool integration\ntemplates/rag-pipeline.ts - RAG usage\ntemplates/server-deploy.ts - HTTP server deployment","hierarchy":{"lvl0":"Skills","lvl1":"NeuroLink Usage Guide","lvl2":"Code Templates","lvl3":""}},
10208
10208
  {"objectID":"d246524cc9ee34af8df00dea1fed367e2889a07e140681aa82675e41294c0ee7","title":"CLI Quick Reference","url":"/docs/skills/neurolink-guide/SKILL#cli-quick-reference","content":"`bash","hierarchy":{"lvl0":"Skills","lvl1":"NeuroLink Usage Guide","lvl2":"CLI Quick Reference","lvl3":""}},
10209
10209
  {"objectID":"d3f7af50ff6bbbb77e5eee065fed0c6a826ef462086f48c15eb152f7b5629f05","title":"Generate content","url":"/docs/skills/neurolink-guide/SKILL#generate-content","content":"neurolink generate \"Your prompt\"","hierarchy":{"lvl0":"Skills","lvl1":"NeuroLink Usage Guide","lvl2":"Generate content","lvl3":""}},
@@ -10772,6 +10772,116 @@
10772
10772
  {"objectID":"25e1ac265c89596a09bce35c4ba7b8d82ccf92f016708d1f6f4826b290af00ae","title":"Delivery","url":"/docs/superpowers/specs/2026-09-23-proxy-account-routing-policies-design#delivery","content":"juspay/neurolink merges one commit per PR, so two PRs:\nRefactor, no behaviour change: extract the comparator into accountRanking.ts and count in-flight on the unlimited lease. Proven by the replay and the existing route tests.\nPolicies: headroom-first, prefer-primary, session affinity, spill, config, telemetry, /status, and the documentation correction below.","hierarchy":{"lvl0":"Superpowers","lvl1":"Proxy Account Routing Policies Design","lvl2":"Delivery","lvl3":""}},
10773
10773
  {"objectID":"06eb4e8ea79a4077f7cb445c1ec17985516046ab28d49d3c87b85ade0155f2c1","title":"Documentation","url":"/docs/superpowers/specs/2026-09-23-proxy-account-routing-policies-design#documentation","content":"docs/features/claude-proxy-config-reference.md gains the five keys. The primary-account text and source comments that still say the primary is \"tried first under fill-first\" are corrected: with quota routing the primary is the final tiebreaker unless prefer-primary is set.","hierarchy":{"lvl0":"Superpowers","lvl1":"Proxy Account Routing Policies Design","lvl2":"Documentation","lvl3":""}},
10774
10774
  {"objectID":"1cf022d6f43b961b6fd1c13d8a5677077f9109584a3a5e67d837c4d5f6e613da","title":"Out of scope","url":"/docs/superpowers/specs/2026-09-23-proxy-account-routing-policies-design#out-of-scope","content":"Per-model policies, weighted scoring, persisting affinity across restarts, an account reserve, and changes to cooldown classification, in-stream rate-limit handling or state persistence. Those last three are separate designs.","hierarchy":{"lvl0":"Superpowers","lvl1":"Proxy Account Routing Policies Design","lvl2":"Out of scope","lvl3":""}},
10775
+ {"objectID":"f0109d9239beed7372578f5d0ad41b745b321c526407db0d3bbb32adced24e2e","title":"Codex Outbound Fallback — Design","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design","content":"Codex Outbound Fallback — Design\n\nStatus: design complete, implementation not started. Produced by 22 parallel agents\n(6 grounding, 8 design, 8 adversarial review) plus 8 resolution passes; every design\nclaim below was checked against the code by a reviewer whose brief was to refute it.\n\nGoal\n\nA native Codex client request that its own account pool cannot serve currently fails to the\nclient. This design gives the Codex engine an outbound fallback chain to the Anthropic OAuth\npool and to Vertex, so the request is served instead — with prompt caching preserved across\nthe hop, tool calls translated faithfully in both directions, and no client-visible protocol\nanomaly.\n\nEvidence\nsrc/lib/server/routes/codexProxyRoutes.ts has no outbound fallback. Its only fallback\n references are a string-default helper (line 138) and code recognising when the Codex engine\n is itself invoked as an inner Anthropic fallback (lines 666, 817, CODEX_FALLBACK_METADATA_KEY\n at 109). On pool exhaustion it returns a terminal error: buildCodexErrorResponse\n (1458-1462), or buildCodexQuotaExhaustedResponse (909-914) when every account is already\n cooling.\nThree directions exist and work: Claude Code → Anthropic pool; Claude/Anthropic → Codex\n (executeClaudeCodexFallback, claudeProxyRoutes.ts:5499, called at 6131, in-process — no\n HTTP hop); Claude/Anthropic → Vertex (vertexAnthropicFallback.ts:611, gated on\n isVertexAnthropicModel, 576).\nThree do not exist: Vertex → Anthropic, native Codex → Anthropic, native Codex →\n Vertex. PR #1782 fixed translation defects in the existing Claude → Vertex direction; it\n did not add a reverse path.\nCodex prompt caching is live but partial. proxy_tokens_cache_read by model:\n gpt-5.6-sol 566,657,536; gpt-6-astra 3,285,888; gpt-5.6-terra 490,752;\n gpt-5.6-luna 5,888. proxy_tokens_cache_creation is 0 for every Codex series, which is\n correct — OpenAI caching is automatic and has no explicit write.\nThe caching asymmetry is the central design constraint. Anthropic caching is explicit:\n up to 4 cache_control breakpoints over a tools → system → messages prefix, write at\n 1.25x base input (5-minute TTL) or 2x (1-hour), read at 0.1x, and each account holds its\n own cache. A Codex request translated to Anthropic arrives with no breakpoints at all,\n so it would be cached not at all unless the translator inserts them deliberately.\nSince Claude-on-Vertex speaks the Anthropic Messages wire format, one Codex→Anthropic\n translator covers both targets. There is no smaller Vertex-only variant of this work.\n\nBuild order\n\nDependency-ordered; each step is one reviewable PR under the one-commit-per-PR policy. Default\noff at every step, so behaviour is byte-for-byte unchanged until the final enable.\n\n| # | PR | Depends on | Gate |\n| --- | ------------------------------------------------------------------- | ---------- | -------------------------------------------- |\n| 1 | IR types + codec contract (src/lib/types/proxyIR.ts) | — | typecheck; exhaustiveness is a compile error |\n| 2 | Request codec Codex → Anthropic (codexOutboundFallback.ts) | 1 | offline shape suite |\n| 3 | Response/stream codec Anthropic → Codex | 1 | offline event-order suite |\n| 4 | Tool fidelity + id correlation | 2, 3 | offline round-trip suite |\n| 5 | Cache breakpoints + prefix byte-stability (codexOutboundCache.ts) | 2 | byte-stability assertion across two turns |\n| 6 | Trigger policy, commitment rule, loop prevention, accounting | 2-4 | totality + commitment suites |\n| 7 | Config keys, kill switch, metrics | 6 | config validation suite |\n| 8 | Enable + live model matrix | all | live pass criteria |\n\nOpen questions gating the build\n\nEvery one needs the same thing: real captured native Codex traffic. The repo has 4 synthetic\nfixtures, one real single-turn capture (~/.neurolink/reference/codex-cli-wire-sample.json,\ncaptured 2026-09-21), a real usage-frame capture (test/fixtures/codex-response-usage.sse,\ncaptured 2026-08-21), and one real controlled bisection experiment against the actual\ncodex_exec/0.155.1 binary (scripts/codex-replay-listener.ts, test/fixtures/sse-bisection-findings.md,\nrun 2026-09-27). Two questions are now settled; the rest are listed here because they can still\ninvalidate a whole section, so they should be settled before the PRs that depend on them are\nwritten.\n\n| Question | Blocks | Settled by |\n| ---------","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"","lvl3":""}},
10776
+ {"objectID":"6034ef59cb5b3d2520fa92f2f181aca534a58aa28338f3411aa9d28d998e487e","title":"Codex Outbound Fallback — Design","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#codex-outbound-fallback-design","content":"Status: design complete, implementation not started. Produced by 22 parallel agents\n(6 grounding, 8 design, 8 adversarial review) plus 8 resolution passes; every design\nclaim below was checked against the code by a reviewer whose brief was to refute it.","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"Codex Outbound Fallback — Design","lvl3":""}},
10777
+ {"objectID":"580c5a06163d1e603bb34f5f3b51c78e4efa36e12426cf22b63706680af0ea56","title":"Goal","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#goal","content":"A native Codex client request that its own account pool cannot serve currently fails to the\nclient. This design gives the Codex engine an outbound fallback chain to the Anthropic OAuth\npool and to Vertex, so the request is served instead — with prompt caching preserved across\nthe hop, tool calls translated faithfully in both directions, and no client-visible protocol\nanomaly.","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"Goal","lvl3":""}},
10778
+ {"objectID":"ed180fb4ca61ad0027c4359503ac6ea54b391281020d32b2a9b498cd6c83abeb","title":"Evidence","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#evidence","content":"src/lib/server/routes/codexProxyRoutes.ts has no outbound fallback. Its only fallback\n references are a string-default helper (line 138) and code recognising when the Codex engine\n is itself invoked as an inner Anthropic fallback (lines 666, 817, CODEX_FALLBACK_METADATA_KEY\n at 109). On pool exhaustion it returns a terminal error: buildCodexErrorResponse\n (1458-1462), or buildCodexQuotaExhaustedResponse (909-914) when every account is already\n cooling.\nThree directions exist and work: Claude Code → Anthropic pool; Claude/Anthropic → Codex\n (executeClaudeCodexFallback, claudeProxyRoutes.ts:5499, called at 6131, in-process — no\n HTTP hop); Claude/Anthropic → Vertex (vertexAnthropicFallback.ts:611, gated on\n isVertexAnthropicModel, 576).\nThree do not exist: Vertex → Anthropic, native Codex → Anthropic, native Codex →\n Vertex. PR #1782 fixed translation defects in the existing Claude → Vertex direction; it\n did not add a reverse path.\nCodex prompt caching is live but partial. proxy_tokens_cache_read by model:\n gpt-5.6-sol 566,657,536; gpt-6-astra 3,285,888; gpt-5.6-terra 490,752;\n gpt-5.6-luna 5,888. proxy_tokens_cache_creation is 0 for every Codex series, which is\n correct — OpenAI caching is automatic and has no explicit write.\nThe caching asymmetry is the central design constraint. Anthropic caching is explicit:\n up to 4 cache_control breakpoints over a tools → system → messages prefix, write at\n 1.25x base input (5-minute TTL) or 2x (1-hour), read at 0.1x, and each account holds its\n own cache. A Codex request translated to Anthropic arrives with no breakpoints at all,\n so it would be cached not at all unless the translator inserts them deliberately.\nSince Claude-on-Vertex speaks the Anthropic Messages wire format, one Codex→Anthropic\n translator covers both targets. There is no smaller Vertex-only variant of this work.","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"Evidence","lvl3":""}},
10779
+ {"objectID":"a5aa19ce68fa1175c4bade50ae303cc0a954bf1128588e294af993c049e2f466","title":"Build order","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#build-order","content":"Dependency-ordered; each step is one reviewable PR under the one-commit-per-PR policy. Default\noff at every step, so behaviour is byte-for-byte unchanged until the final enable.\n\n| # | PR | Depends on | Gate |\n| --- | ------------------------------------------------------------------- | ---------- | -------------------------------------------- |\n| 1 | IR types + codec contract (src/lib/types/proxyIR.ts) | — | typecheck; exhaustiveness is a compile error |\n| 2 | Request codec Codex → Anthropic (codexOutboundFallback.ts) | 1 | offline shape suite |\n| 3 | Response/stream codec Anthropic → Codex | 1 | offline event-order suite |\n| 4 | Tool fidelity + id correlation | 2, 3 | offline round-trip suite |\n| 5 | Cache breakpoints + prefix byte-stability (codexOutboundCache.ts) | 2 | byte-stability assertion across two turns |\n| 6 | Trigger policy, commitment rule, loop prevention, accounting | 2-4 | totality + commitment suites |\n| 7 | Config keys, kill switch, metrics | 6 | config validation suite |\n| 8 | Enable + live model matrix | all | live pass criteria |","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"Build order","lvl3":""}},
10780
+ {"objectID":"db4fcb5c145b85c8e756be096fdda4d88c5f6fc576ec62653a8545735ff1a653","title":"Open questions gating the build","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#open-questions-gating-the-build","content":"Every one needs the same thing: real captured native Codex traffic. The repo has 4 synthetic\nfixtures, one real single-turn capture (~/.neurolink/reference/codex-cli-wire-sample.json,\ncaptured 2026-09-21), a real usage-frame capture (test/fixtures/codex-response-usage.sse,\ncaptured 2026-08-21), and one real controlled bisection experiment against the actual\ncodex_exec/0.155.1 binary (scripts/codex-replay-listener.ts, test/fixtures/sse-bisection-findings.md,\nrun 2026-09-27). Two questions are now settled; the rest are listed here because they can still\ninvalidate a whole section, so they should be settled before the PRs that depend on them are\nwritten.\n\n| Question | Blocks | Settled by |\n| ---------------------------------------------------------------------------------------------- | ------- | ------------------------------------------------------------- |\n| Does the real Codex CLI accept a call_id it did not mint (a toolu_-shaped id)? | PR 4 | SETTLED (2026-09-27) — yes, verbatim. codex-replay-listener.ts --script tool-call against real codex_exec/0.155.1: the CLI's follow-up function_call_output carried call_id: \"toolu_replay0000000000000000\" unmodified (own id field is CLI-minted fco_-prefixed; call_id is untouched). See test/fixtures/sse-bisection-findings.md, \"tool-call script — real result\". |\n| Does Anthropic/Vertex accept a non-toolu_-shaped tool_use.id in history? | PR 4 | one live call with such an id in history — still open; the bisection listener above can't test this direction (it stands in for the Codex backend, not Anthropic's) |\n| Are the developer-role prefix blocks byte-identical turn to turn? | PR 5 | capture 2 turns of one session, diff input[0..4] — still open; the 2026-09-21 capture is single-turn |\n| Does a genuine first-turn request omit al","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"Open questions gating the build","lvl3":""}},
10781
+ {"objectID":"a85c34c0265b0c27d696611075427124ef72062ef3e1248bf75ddc2f859229d0","title":"Contents","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#contents","content":"Translation layer: canonical IR and codec contract\nRequest translation: Codex Responses → Anthropic Messages\nResponse translation: Anthropic → Codex wire format\nTool-call fidelity in both directions\nPreserving prompt caching across the hop\nTrigger policy, commitment safety, loop prevention, accounting\nConfiguration surface and staged rollout\nValidation plan","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"Contents","lvl3":""}},
10782
+ {"objectID":"62546125e30c54bebd2104e396943d1fb60478f7d22873e75792c81c408d2791","title":"Consolidated unresolved items","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#consolidated-unresolved-items","content":"ir-and-types — whether native Codex ever sends top-level reasoning/tools on a genuine inbound request — the one check that would settle it is a live-captured native Codex CLI request with non-default reasoning effort set.\nir-and-types — whether Anthropic's live API ever rejects consecutive same-role messages in some edge case — the one check that would settle it is a probe request against the real API with two consecutive user messages.\nir-and-types — the storage/lifetime contract for a resumed session's id map spanning multiple proxy requests — the one check that would settle it is reading how originSessionId/originThreadId are persisted by the session-affinity\nir-and-types — above.\nrequest-translation — in §10. It converts an unknown into a loud, caller-visible failure instead of a silent one, which is what the \"nothing may break silently\" requirement demands even without live traffic.\nrequest-translation — whether additional_tools/developer items can appear anywhere other than before the first user item in real traffic — the one check that would settle it: capture one real Codex CLI multi-turn session with a mid-conv\nrequest-translation — whether a resumed-session request's input is genuinely full-history or incremental — the one check that would settle it: capture one real resumed-session Codex Responses request (the referenced ~/.neurolink/reference/\n- **request-translation** — whether toolchoice or reasoning ever appear on genuine inbound requests at all (absent from all 4 fixtures) — the one check that would settle it: grep captured production Codex traffic logs (once available) for eith\n- **request-translation** — whether more than one additionaltools item can appear in one request — the one check that would settle it: same real-traffic capture as (1).\n- **response-translation** — a genuine live-captured native Codex Responses SSE transcript (text, tool-call, incomplete/error cases) — the check that would settle it is running a real Codex client through this","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"Consolidated unresolved items","lvl3":""}},
10783
+ {"objectID":"b890fc666ae87c04302cb9122b852c6e394f3a6eb3ad2c2a3b90aed60a49e057","title":"Decision (kept)","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#decision-kept","content":"Single canonical IR, not ClaudeRequest-as-hub, not pairwise codecs. Verified: openaiFormat.ts/geminiFormat.ts already use ClaudeRequest as an implicit hub only because it is also the literal Anthropic wire type; codexFallback.ts already needs a role cast ((message.role as string) !== \"system\", line 154) to special-case Claude Code's inline-system convention inside a converter meant to be neutral. A new file, src/lib/types/proxyIR.ts, holds a real wire-neutral IR. ClaudeRequest/ClaudeResponse (proxy.ts:154, :187) stay untouched — the Anthropic hot path (claudeProxyRoutes.ts) never changes.\n\nVertex needs no separate codec. Confirmed: executeVertexAnthropicFallback (vertexAnthropicFallback.ts:605-665) forwards the upstream body/stream untouched with a code comment that it is \"already Anthropic-shaped\"; buildVertexAnthropicPayload (line 399) only strips UNSUPPORTED_FIELDS = [\"model\", \"context_management\"] (line 42). Vertex reuses anthropicMessagesIRCodec.buildRequest's output as-is.","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"Decision (kept)","lvl3":""}},
10784
+ {"objectID":"a1d8a0c721ce132a2ececad931143e90dddbb50e47f04652ec692c3c3e12a040","title":"codexFallback.ts: left unrefactored this PR","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#codexfallbackts-left-unrefactored-this-pr","content":"It already implements, in the new vocabulary, the codex-responses request builder (convertClaudeRequestToCodex, line 407) and response parser (parseCodexFallbackSSE line 592, createCodexFallbackStream line 719) — never a request parser or response renderer, since Codex there is a fallback target, not a served client. Deferred to a named follow-up PR (one-commit-per-PR; mixing a mechanical port with new functional work is out of scope). Coexistence cost: convertClaudeRequestToCodex and the new anthropicMessagesIRCodec/codexNativeRequestCodec independently implement the same tool_choice bijection (any↔required, tool↔function) and the same reasoning-effort concept in reverse; a fix to one will not propagate until the follow-up ports codexFallback.ts onto the same 4 capabilities, verified byte-for-byte against test/continuous-test-suite-codex.ts.","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"codexFallback.ts: left unrefactored this PR","lvl3":""}},
10785
+ {"objectID":"6a41248b50b7d11345c624537be172f4317d8a583d937c841b1f804ccfe4397f","title":"Grounding notes from the fixtures (all 4 read in full)","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#grounding-notes-from-the-fixtures-all-4-read-in-full","content":"test/fixtures/codex-request-{exec-mode,interactive-mode,resumed-session,tool-result-turn}.json. Each fixture's body.input[0] is one {type:\"additional_tools\", role:\"developer\", tools:{functions:[...], collaboration:[...]}} item. Correction to the original design's blanket claim (\"no Anthropic tool shape maps to collaboration, genuinely unmappable\"): the collaboration bucket is not grammar-only. In all 4 fixtures it holds exactly two tools — exec (type:\"custom\", has a grammar string, no parameters) and request_review (no type tag, has a plain JSON-Schema parameters object, no grammar — structurally identical to a functions entry, just filed under the wrong bucket on the wire). Mappability is a per-tool fact keyed on presence of grammar, never inferable from which array a tool sits in.\n\nfunction_call.arguments is not guaranteed JSON: codex-request-tool-result-turn.json's function_call (call_id:\"call_synthetic_0001\", name:\"exec\") has arguments: \"ls -la\" — a bare string, since exec is grammar-typed. codexFallback.ts's parseFunctionArguments (line 466) throws today on exactly this input (JSON.parse(\"ls -la\") fails, hits catch, throws) — confirmed by reading the function. A tool-call IR part therefore needs argumentsRaw: string as the source of truth always, argumentsJson only when it happens to parse as an object.\n\nAll 4 fixtures: additional_tools is the single, first input item; 4 contiguous developer-role message items follow (indices 1-4); then 2 consecutive user-role message items (confirmed non-hypothetical — tool-result-turn's second user item carries an <environment_context> block, not a second real user turn); tool-result-turn additionally has one function_call/function_call_output pair. No fixture shows an assistant-role message item, even resumed-session. Top-level body keys across all 4: {model, stream, store, input} plus {session_id, thread_id} only on resumed-session — never top-level tools or reasoning.","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"Grounding notes from the fixtures (all 4 read in full)","lvl3":""}},
10786
+ {"objectID":"424fc6f4902b0c29d8dd38467ae0905dd58e47c6770b0e69d5a0fd3cdd4d0218","title":"Exact IR types — new file src/lib/types/proxyIR.ts (barrel-exported via src/lib/types/index.ts)","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#exact-ir-types-new-file-srclibtypesproxyirts-barrel-exported-via-srclibtypesindexts","content":"UsageContext reused verbatim (confirmed at src/lib/types/proxy.ts:2254): {inputIncludesCachedTokens?, inputTokens, outputTokens, cacheCreationTokens, cacheReadTokens, cacheReadTokensObserved?, cacheCreationTokensObserved?, reasoningTokens?, rateLimitAfter5h?, rateLimitAfter7d?} — do not reshape it; proxyTokenUsage() (src/lib/proxy/proxyTokenUsage.ts) already consumes this exact shape and stays provider-agnostic.","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"Exact IR types — new file src/lib/types/proxyIR.ts (barrel-exported via src/lib/types/index.ts)","lvl3":""}},
10787
+ {"objectID":"3a41ee7a4a999b3a77bdac7946a4b90ddf99b33d7aa45a38dc6d1285d8db3790","title":"Codec contract — 4 independent capability types (not one monolith)","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#codec-contract-4-independent-capability-types-not-one-monolith","content":"Matches what is true per format today: Anthropic needs a parser+builder+response-parser+renderer (all net new — grep confirms zero existing outbound-fallback or additional_tools/session_id/developer-role parsing anywhere in src/lib/server/routes/codexProxyRoutes.ts); Codex-native needs a parser (net new) and a renderer (net new, CodexResponsesStreamSerializer) but never a builder or a buffered/stream response parser in this PR (Codex is never dispatched to as the IR target here, only received from).","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"Codec contract — 4 independent capability types (not one monolith)","lvl3":""}},
10788
+ {"objectID":"6c48b495bf6af1232e29b65dc2d8e19afc2e2b0be7fe2c0bfffae21f74a34f8b","title":"Native-Codex request wire type — superseded by the tool-fidelity section's corrected types","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#native-codex-request-wire-type-superseded-by-the-tool-fidelity-sections-corrected-types","content":"Reconciliation (post-review): this subsection originally proposed CodexNativeToolFunction, CodexNativeGrammarTool, CodexNativeAdditionalToolsItem, CodexNativeMessageItem, CodexNativeFunctionCallItem, CodexNativeFunctionCallOutputItem, CodexNativeInputItem and CodexNativeRequestBody, grounded only against the 4 synthetic fixtures. The tool-call-fidelity section later read the real captured wire sample (~/.neurolink/reference/codex-cli-wire-sample.json) and found two of this block's assumptions wrong: additional_tools.tools is an array of {type:\"namespace\", ...} objects, not a flat {functions, collaboration} object, and the identity fields (session_id/thread_id) live nested inside client_metadata, never at the top level CodexNativeRequestBody claimed. Its own \"§8. Types — exact, corrected\" is the single authoritative version (CodexNativeRole, CodexNativeMessageInputItem, CodexNativeFunctionToolDeclaration, CodexNativeCustomToolFormat, CodexNativeCustomToolDeclaration, CodexNativeToolDeclaration, CodexNativeToolNamespace, CodexNativeAdditionalToolsInputItem, CodexNativeFunctionCallInputItem, CodexNativeFunctionCallOutputInputItem, CodexNativeInputItem, CodexNativeToolChoice, CodexNativeRequest) — reuse those names verbatim; nothing in this subsection's original block ships.\n\nThis PR (PR 1, already merged) never added any of these types in the first place — only the wire-neutral IR (src/lib/proxy/proxyIR.ts, src/lib/types/proxyIR.ts) shipped. The Codex-native wire types belong to PR 4 (tool fidelity) and are added there, in their corrected form, not here.\n\nNo collisions: CodexContentPart, CodexResponsesInputItem, CodexReasoningEffort, CodexResponsesRequest, CodexFallbackResult/CodexFallbackStream are all distinct existing exports (confirmed via full read of src/lib/types/codex.ts, 218 lines) and stay untouched regardless of which generation of Codex-native types lands.\n\nUnresolved, provisional: whether additional_tools is always exactly one item and always first — 4 syn","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"Native-Codex request wire type — superseded by the tool-fidelity section's corrected types","lvl3":""}},
10789
+ {"objectID":"2cb07e4755f10b979b80fb885e75b1b1b2c71c67dd08d2c5876f81704b5eca62","title":"Exhaustiveness and the 3 tiers of explicit unmappable handling","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#exhaustiveness-and-the-3-tiers-of-explicit-unmappable-handling","content":"New runtime module src/lib/proxy/proxyIR.ts:\n\nBlocker resolved (adopted, refined by code check): the review is right that blanket Tier-1-fatal rejection of every custom_grammar tool defeats the feature on almost all real traffic — exec is present in all 4 fixtures and its grammar (start: command\\ncommand: WORD (\" \" ARG)*) is a single free-text argument. Adopt the review's fix with one refinement the code check surfaced: request_review, despite living in the wire's collaboration bucket, is not a custom_grammar tool at all — it has parameters, not grammar, so it already maps as ProxyIRFunctionToolDeclaration and never reaches this gate. So the gate only ever needs to special-case tools that genuinely carry a grammar field:\nTier 1 (fatal, whole-request, pre-dispatch): a custom_grammar tool whose grammar is NOT a single free-text argument (isDegradableSingleArgGrammar — a narrow EBNF check for exactly one WORD/ARG-style free-text production; anything with more structure is rejected). Thrown before buildRequest runs, before any account slot or Vertex call is spent — joins the existing pre-dispatch gate list in proxyTranslationEngine.ts next to ProxyContextPreflightError (proxyContextPreflight.ts:17) and getProxyTokenBudgetError (proxyTokenBudget.ts:56) — both confirmed present and already checked together at multiple sites in that engine.\nDegraded-but-working mapping (new, adopted from the review): a custom_grammar tool that IS a single free-text argument (covers exec in all 4 fixtures) maps to {kind:\"function\", name, description, parametersSchema:{type:\"object\", properties:{command:{type:\"string\"}}, required:[\"command\"], additionalProperties:false}}. anthropicMessagesIRCodec.buildRequest renders this as an ordinary ClaudeTool; the reverse mapping on tool-call parsing keeps the single argument as the raw command string under argumentsRaw.\nTier 2 (per-field, non-fatal, explicit sentinel): unparsed tool-call arguments and any ProxyIRUnmappedPart — raw wire bytes are always","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"Exhaustiveness and the 3 tiers of explicit unmappable handling","lvl3":""}},
10790
+ {"objectID":"df66cce92162a94b26da8402634198b3fb0198e511e280aca2b8c8666e5c3c0a","title":"Developer/system-role hoisting (major finding — adopted in full)","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#developersystem-role-hoisting-major-finding-adopted-in-full","content":"Resolved: confirmed by reading codexFallback.ts:134-148 (buildSystemInstructions joins all system/developer text with \"\\n\\n\", discarding position — the review correctly ties this to the repo's own prior ~41% caching-hit-rate regression) and by the fixture read (4 separate contiguous developer-role items in every fixture). Adopted rule for codexNativeRequestCodec.parseRequest → ProxyIRRequest.messages, and for anthropicMessagesIRCodec.buildRequest's IR→ClaudeRequest.system step:\nClaudeMessage.role is a closed \"user\" | \"assistant\" union (confirmed, proxy.ts:132-135) with no system/developer member, so hoisting is mandatory, not optional.\nDeveloper/system-role IR messages are hoisted to ClaudeRequest.system as an array of one ClaudeTextBlock per original segment (never one joined string), preserving segment boundaries so applyClaudeRequestCacheBreakpoints (anthropicCacheBreakpoints.ts:217, confirmed pure, clone-based, idempotent via countAnthropicCacheMarkers at line 97) can mark the correct sub-boundary.\nPosition rule: a developer-role IR message NOT contiguous at the head (position 0) is a protocol violation for this PR's scope — parseRequest throws ProxyIRUnmappableRequestError naming the offending index, rather than silently merging-forward or reordering. All 4 fixtures show developer messages contiguous at head only, so this is a documented refusal for a shape nothing here has observed, not a live-traffic-blocking restriction today.","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"Developer/system-role hoisting (major finding — adopted in full)","lvl3":""}},
10791
+ {"objectID":"39ba5a50c2b29553399249537678355899e65a4c040ae32d2278c685eecfced8","title":"Consecutive same-role messages (minor finding — adopted)","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#consecutive-same-role-messages-minor-finding-adopted","content":"Resolved: confirmed non-hypothetical (tool-result-turn.json input indices 5-6, both role:\"user\", the second carrying an <environment_context> block). Rule: anthropicMessagesIRCodec.buildRequest does not merge adjacent same-role IR messages — it emits separate consecutive ClaudeMessage entries. Anthropic's Messages API accepts consecutive same-role messages (no strict alternation requirement), and merging would invent a content-block-join rule with no wire precedent; separate entries are the identity mapping and the lower-risk default. UNRESOLVED: whether Anthropic's live API ever rejects consecutive same-role messages in some edge case — the one check that would settle it is a probe request against the real API with two consecutive user messages.","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"Consecutive same-role messages (minor finding — adopted)","lvl3":""}},
10792
+ {"objectID":"8ae7d0bf29a2d6dea60be8efbfe308cd1aadd4502fee43ac7f1d64714ed23bb0","title":"Tool-call id correlation (major finding — adopted, scoped)","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#tool-call-id-correlation-major-finding-adopted-scoped","content":"Resolved: confirmed gap — CodexResponsesInputItem's function_call/function_call_output variants (codex.ts:155-165) and the tool-fidelity section's corrected CodexNativeFunctionCallInputItem/CodexNativeFunctionCallOutputInputItem are both keyed by a single opaque call_id string; nothing in codex.ts types an id-translation record, and tool-result-turn.json (call_id:\"call_synthetic_0001\") must round-trip unchanged across the pair while also surviving translation to/from an Anthropic toolu_* id on the fallback hop. ProxyIRToolCallPart.callId is scoped to this section only as the id the IR received from its source wire — never reused as the id sent to a different target wire. Add:\n\nSubstitution boundary: anthropicMessagesIRCodec.buildRequest mints a fresh toolu_* id per tool call via the existing generateToolUseId (confirmed exported from claudeFormat.ts, already imported by codexFallback.ts) and records {inboundWireId: irPart.callId, outboundWireId: mintedId}; the response codec looks up by outboundWireId to restore inboundWireId before rendering a tool_call_done/function_call_output pair to the original Codex client. The map is request-scoped only — cross-turn/resumed-session persistence is out of scope here. UNRESOLVED: the storage/lifetime contract for a resumed session's id map spanning multiple proxy requests — the one check that would settle it is reading how originSessionId/originThreadId are persisted by the session-affinity design (cache-anthropic/cache-codex-prefix, named below).","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"Tool-call id correlation (major finding — adopted, scoped)","lvl3":""}},
10793
+ {"objectID":"a523897bed279d26de1747bb37395902d0fd9945c6bf8012654c8667bbb571ca","title":"Stream serializer reuse (major finding — adopted, FILES corrected)","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#stream-serializer-reuse-major-finding-adopted-files-corrected","content":"Resolved: confirmed by reading claudeFormat.ts:441-530 — ClaudeStreamSerializer's constructor takes (model, inputTokens) and ensureMessageStarted emits message_start/ping events shaped exactly like the Anthropic Messages API (SSEMessageStart wrapping a ClaudeResponse-shaped message). It is not reused for the native-Codex-inbound direction, since that direction never emits Anthropic-shaped SSE — a native Codex client only ever needs Codex-Responses-shaped SSE. Corrected FILES entry: claudeFormat.ts is reused only for its generateToolUseId helper (already imported by codexFallback.ts) and stays otherwise untouched; the outbound-to-Codex-client stream is rendered exclusively by the new CodexResponsesStreamSerializer inside codexNativeRequestCodec.ts.","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"Stream serializer reuse (major finding — adopted, FILES corrected)","lvl3":""}},
10794
+ {"objectID":"68bb4710fa66eaf0eb9924248640f292aa7e1a11e01fce9dd0ae985692eac0c7","title":"Files","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#files","content":"| Path | Action | Purpose |\n| ------------------------------------------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| src/lib/types/proxyIR.ts | create | Canonical wire-neutral request/response IR types + 4-capability codec contract |\n| src/lib/types/codex.ts | modify | Add CodexNative* types, additive only; existing types untouched |\n| src/lib/types/index.ts | modify | Add export * from \"./proxyIR.js\"; per barrel-only rule 10 |\n| src/lib/proxy/proxyIR.ts | create | assertProxyIRExhaustive, assertProxyIRRequestMappable, ProxyIRUnmappableRequestError,","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"Files","lvl3":""}},
10795
+ {"objectID":"ed2d1dd1f2268b6ea569df738cb11af721dea28a0871c007992141dd05a480a4","title":"Tests","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#tests","content":"All assertions below live in one new file, test/continuous-test-suite-proxy-ir-codec.ts — a new determinism-exception suite (pure translation-table functions; header names the exception per the repo's own convention documented for the vector-store suites):\nGolden-fixture round-trip for all 4 test/fixtures/codex-request-*.json: codexNativeRequestCodec.parseRequest → ProxyIRRequest → anthropicMessagesIRCodec.buildRequest → exactly one cache_control marker present on the last system-derived ClaudeTextBlock, and 1:1 tool/message order preservation (array length and per-index role/kind match input).\nA custom_grammar tool with a multi-token grammar (a synthetic fixture variant, not exec) must throw ProxyIRUnmappableRequestError before buildRequest/parseResponseStream is ever called — assert via a spy/counter that the downstream call was never invoked, not just that the throw happened.\nexec's function_call (arguments: \"ls -la\") from codex-request-tool-result-turn.json renders through anthropicMessagesIRCodec as ClaudeToolUseBlock.input = {[UNPARSED_TOOL_ARGUMENTS_KEY]: \"ls -la\"} — assert the exact key and value, never an empty object and never a thrown error.\nrequest_review (from any fixture's collaboration array) is classified as ProxyIRFunctionToolDeclaration, not ProxyIRCustomGrammarToolDeclaration — assert tool.kind === \"function\" and tool.parametersSchema matches its fixture parameters object verbatim.\nThe 4 contiguous developer messages in codex-request-exec-mode.json map to 4 distinct ClaudeTextBlock entries in ClaudeRequest.system (array length 4), never one joined string.\nThe 2 consecutive user messages in codex-request-tool-result-turn.json map to 2 separate ClaudeMessage entries (array length 2 at that position), not one merged message.\nExhaustiveness: a ProxyIRContentPart variant added to the union without a matching case in every consumer switch must fail tsc, verified by a // @ts-expect-error fixture asserting assertProxyIRExhaustive is the reachable default ","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"Tests","lvl3":""}},
10796
+ {"objectID":"4a5660476c63fddef96520cc9eea37fdd9fb8bcad379ba2ddec1e7ff23716c67","title":"Dependencies on other sections (named, unresolved here by design)","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#dependencies-on-other-sections-named-unresolved-here-by-design","content":"cache-anthropic / cache-codex-prefix (session-affinity): consumes originSessionId/originThreadId/promptCachePrefixKey; this section only guarantees those values survive parseRequest, and owns the cross-turn ProxyIRToolCallIdMap persistence question left UNRESOLVED above.\ncache-vertex: must confirm the same-wire-codec-as-Anthropic simplification holds; if Vertex ever needs a field Anthropic's wire lacks, that assumption breaks and Vertex needs its own thin adapter.\nFailure-taxonomy/commit-boundary design: owns exactly where ProxyIRUnmappableRequestError is checked relative to ProxyContextPreflightError/getProxyTokenBudgetError in proxyTranslationEngine.ts, and the pre-commit/post-commit split for the new response stream — parseResponseStream is a plain AsyncGenerator specifically so a caller can peek-then-commit like existing preflight stream buffering.\nproxy-waste (fallback telemetry): the new Codex-outbound leg needs its own attempt-recording call (zero call sites exist today in codexProxyRoutes.ts, confirmed via grep); this section only notes the codec boundary is the natural place to hang it.","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"Dependencies on other sections (named, unresolved here by design)","lvl3":""}},
10797
+ {"objectID":"f3c9478912b34e48a4808d6325e810e74f96737c04909bcf2a0b8611caaa3bf3","title":"Risks (kept, one added)","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#risks-kept-one-added","content":"Native Codex requests may not always place additional_tools as the single first input item — 4 synthetic, not live-captured, fixtures only.\nReasoning-effort-to-thinking-budget mapping has no existing precedent here; any bucketing table is new policy needing owner sign-off, not decided here.\nLeaving codexFallback.ts unrefactored means two independently maintained tool_choice/reasoning bijections exist until the named follow-up PR.\nTier-3 thinking-to-Codex rendering has no verified real wire target; shipping a guess risks an SSE frame no real Codex CLI understands — worse than withholding, so withholding stays the default.\nAdded: the collaboration-bucket/grammar-field distinction (this section's own code-check finding) is grounded in only 4 fixtures with only 2 collaboration tools (exec, request_review); a third collaboration tool with a different shape (parameters AND grammar both present, or a multi-token grammar) is unverified and needs isDegradableSingleArgGrammar to handle it explicitly rather than silently misclassifying it as a plain function.","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"Risks (kept, one added)","lvl3":""}},
10798
+ {"objectID":"b735a043f1f3af7383db3a2ba9533c4837eee9bb9a838d781a546da7e823afaf","title":"Request translation: Codex Responses request → ClaudeRequest","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#request-translation-codex-responses-request-clauderequest","content":"Recovered section for \"Codex outbound fallback\" (native Codex client → Anthropic/Vertex fallback). Grounded against /Users/sachinsharma/Developer/Official/fix/proxy-ci-gaps-and-dead-leg-alert (read-only).","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"Request translation: Codex Responses request → ClaudeRequest","lvl3":""}},
10799
+ {"objectID":"712eb4de989934c49bc5d08130e851855d1f6f76130b968f28e06e244cb3bc2c","title":"0. Boundary","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#0-boundary","content":"Owns one thing: untrusted inbound Codex Responses JSON → a typed ClaudeRequest. Does not own: target/model selection (orchestration section supplies target: {provider, model}), response/stream translation back to Codex wire format (sibling section owns ClaudeThinkingBlock, ClaudeStreamSerializer), tool execution, or dispatch/HTTP. Vertex/Anthropic dispatch is named in §6 only to fix a wrong hand-off found in review; this section still does not own it.","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"0. Boundary","lvl3":""}},
10800
+ {"objectID":"44d4e6a3c5e7beda3f95d4ab3e78954b9616be8ae4d49d5c947efde1b75af32b","title":"1. Ground truth (re-verified directly against test/fixtures/codex-request-{interactive-mode,tool-result-turn,resumed-session,exec-mode}.json, generated by scripts/generate-codex-fixtures.mjs)","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#1-ground-truth-re-verified-directly-against-testfixturescodex-request-interactive-modetool-result-turnresumed-sessionexec-modejson-generated-by-scriptsgenerate-codex-fixturesmjs","content":"Top level: { model, stream, store, input } (+ session_id/thread_id only on codex-request-resumed-session.json). No top-level tools/instructions in any of the 4.\ninput is flat. Tool declarations ride inside one { type: \"additional_tools\", role: \"developer\", tools: { functions, collaboration } } item, never a top-level field.\n4 separate developer-role message items per fixture (persona / sandbox policy / tool-usage rule / output-format rule), all before the first user item in all 4 fixtures.\nEvery fixture has two consecutive user items (real prompt, then a synthetic <environment_context>...</environment_context> message) — the concrete proof that the flat stream violates Anthropic's strict user/assistant alternation unless coalesced.\nContent parts observed: input_text only, in all 4 fixtures — 0 occurrences of output_text or input_image, and 0 assistant-role message items. Correction to the first design pass, which claimed all three CodexContentPart variants were \"confirmed against the fixtures\": only input_text is fixture-confirmed; output_text/input_image handling is carried over from the pre-existing CodexContentPart type (src/lib/types/codex.ts:144-147) by structural assumption, not fixture evidence. Flagged in §10.\ntest/fixtures/codex-request-tool-result-turn.json (not exec-mode.json — corrected misread: exec-mode.json contains no function_call item at all, verified by listing its input array) is the one fixture with a function_call/function_call_output pair: {\"type\":\"function_call\",\"call_id\":\"call_synthetic_0001\",\"name\":\"exec\",\"arguments\":\"ls -la\"} — a raw shell string, not JSON.\nadditional_tools.tools.collaboration is a mixed-shape array, verified in codex-request-interactive-mode.json: entry 1 is {\"name\":\"exec\",\"type\":\"custom\",\"description\":...,\"grammar\":\"start: command\\n...\"} (no JSON schema); entry 2 is {\"name\":\"request_review\",\"description\":...,\"parameters\":{\"type\":\"object\",\"properties\":{\"summary\":{\"type\":\"string\"}},\"required\":[\"summary\"],\"additionalPropert","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"1. Ground truth (re-verified directly against test/fixtures/codex-request-{interactive-mode,tool-result-turn,resumed-session,exec-mode}.json, generated by scripts/generate-codex-fixtures.mjs)","lvl3":""}},
10801
+ {"objectID":"f9de43f2eeb41f722c0e053c6f5ba6ee0456f248944e59932babb9dfa80eaa68","title":"2. Types — superseded by the tool-fidelity section's corrected types (reconciled post-review)","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#2-types-superseded-by-the-tool-fidelity-sections-corrected-types-reconciled-post-review","content":"This subsection's original type block does not ship. It was grounded only against the 4 synthetic fixtures and named CodexNativeAdditionalToolsItem (a flat, required {functions, collaboration} object) — the same review pass that flagged this (finding, PR #1825) confirmed the tool-fidelity section independently read the real captured wire sample and found that shape wrong: real traffic's additional_tools.tools is an array of {type:\"namespace\", name, description, tools} objects, discriminated per-declaration by each tool's own type field, never by which bucket it sits in. That section's \"§8. Types — exact, corrected\" (CodexNativeRole, CodexNativeMessageInputItem, CodexNativeFunctionToolDeclaration, CodexNativeCustomToolFormat, CodexNativeCustomToolDeclaration, CodexNativeToolDeclaration, CodexNativeToolNamespace, CodexNativeAdditionalToolsInputItem, CodexNativeFunctionCallInputItem, CodexNativeFunctionCallOutputInputItem, CodexNativeInputItem, CodexNativeToolChoice, CodexNativeRequest) is the single source of truth; CodexReasoningEffort/CodexContentPart/CodexResponsesInputItem/CodexResponsesRequest stay untouched and out of scope for this reconciliation, exactly as originally stated.\n\n§3.1's guard and §3.4's tool mapping below are rewritten to import and use those corrected names directly, rather than duplicating or re-deriving them here.\n\nConfig key (reconciled, see also the rollout-and-config section): the codexFallbackChain?: FallbackEntry[] field this subsection originally proposed for src/lib/types/subscription.ts is superseded by the rollout-and-config section's three-key scheme — codexOutboundFallbackEnabled/codexOutboundFallbackTargets/codexOutboundFallbackModelMappings on ProxyRoutingConfig, kebab-cased as codex-outbound-fallback-{enabled,targets,model-mappings} in proxy-config.yaml — which is the canonical, later-written, and more completely integrated design (it is read through the same readRoutingPolicyKey/hot-reload wiring every existing routing key uses,","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"2. Types — superseded by the tool-fidelity section's corrected types (reconciled post-review)","lvl3":""}},
10802
+ {"objectID":"16682080b9d0bc79b91c88dc0d4fedb4ab8fe44601741fd804855196db7f0f34","title":"3. New module — src/lib/proxy/codexOutboundFallback.ts (create)","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#3-new-module-srclibproxycodexoutboundfallbackts-create","content":"Named to mirror the existing asymmetry (codexFallback.ts = Claude engine's fallback into Codex; this file = Codex engine's fallback out).\n\nBoth return a Result union — never throw — resolving review's major finding (\"no runtime validation boundary\"; a type is compile-time only, and a malformed/duck-typed inbound body would otherwise throw an uncaught TypeError deep inside the translator). parseCodexNativeRequest is the untrusted-JSON→typed boundary; translateCodexRequestToClaude assumes an already-narrowed CodexNativeRequest and only fails on the partial-history check in §5.\nInternal (not exported): isRecord, isCodexContentPart, isCodexNativeToolDeclaration, isCodexNativeToolNamespace, isCodexNativeInputItem, isCodexNativeToolChoice, isCodexNativeReasoning, coalesceCodexInputToClaudeMessages, toClaudeContentPart, mapCodexFunctionToolToClaude, mapCodexCustomToolToClaude, mapCodexToolDeclarationToClaude, mapCodexToolChoiceToClaude, mapCodexReasoningToThinking, parseInboundToolArguments, hasFreshSessionPreamble.","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"3. New module — src/lib/proxy/codexOutboundFallback.ts (create)","lvl3":""}},
10803
+ {"objectID":"8edd7cc6d36eaf7260ff16e35617ecbe01208c21528c0d37c6e33cd71d15a0e0","title":"3.1 parseCodexNativeRequest","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#31-parsecodexnativerequest","content":"(Structural narrowing only, no field-by-field cast beyond the final assignment, which is sound because every field was checked above — this is the one place as is acceptable, since it follows, not replaces, exhaustive narrowing.)","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"3.1 parseCodexNativeRequest","lvl3":""}},
10804
+ {"objectID":"3d0ff8e0bdbbde880b04406c71a3bd999dc3e73ca2ffd805f32717b40c651ee2","title":"3.2 Field-by-field mapping (translateCodexRequestToClaude, after the guard in §3.5)","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#32-field-by-field-mapping-translatecodexrequesttoclaude-after-the-guard-in-35","content":"| Codex field | Anthropic field | Rule |\n| ---------------------------------------------------------------------------- | ------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| (routing) | model | target.model, passed in; never invented here. |\n| input[] where role:\"developer\" | system: ClaudeTextBlock[] | One block per developer message, original order, array form (§4 — required for cache-breakpoint eligibility). |\n| input[] message/function_call/function_call_output | messages: ClaudeMessage[] | Coalesced by logical role, §4. |\n| content parts | ClaudeTextBlock/ClaudeImageBlock | toClaudeContentPart, §3.7 (data-URI fix). ","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"3.2 Field-by-field mapping (translateCodexRequestToClaude, after the guard in §3.5)","lvl3":""}},
10805
+ {"objectID":"bdf260c076ed776a9f41958b5ac59bfa2f1f5adc68bcc24688d1410badfe4337","title":"3.3 tool_choice — exact inversion of codexFallback.ts:445-456","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#33-tool_choice-exact-inversion-of-codexfallbackts445-456","content":"| Codex tool_choice | Anthropic tool_choice |\n| ---------------------------- | ------------------------ |\n| \"required\" | { type: \"any\" } |\n| { type: \"function\", name } | { type: \"tool\", name } |\n| \"auto\" | { type: \"auto\" } |\n| \"none\" | { type: \"none\" } |\n| absent | omit field |\n\nUnobserved in all 4 fixtures — the table is derived correctly from the existing forward code but not empirically confirmed on genuine traffic (§10).","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"3.3 tool_choice — exact inversion of codexFallback.ts:445-456","lvl3":""}},
10806
+ {"objectID":"96f6c9a3725d152c9185173a6fd6478d2923eee9e61415407c98b7dd425f823c","title":"3.4 Tools: flattened across namespaces, split by each declaration's own type (corrected — was per-namespace)","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#34-tools-flattened-across-namespaces-split-by-each-declarations-own-type-corrected-was-per-namespace","content":"Reconciled with the tool-fidelity section's real-capture correction: the prior version of this subsection discriminated by which bucket a tool sat in (functions vs collaboration), grounded only against the 4 synthetic fixtures. The real captured wire sample shows the opposite: additional_tools.tools is an array of namespaces (e.g. \"functions\", \"collaboration\"), and inside a namespace, individual declarations can be either kind — in the real capture, the \"functions\" namespace holds two type:\"function\" tools (wait, request_user_input) and one type:\"custom\" tool (exec, grammar-based). Discriminating by namespace name would have misclassified exec. The correct split reads each declaration's own type field, across every namespace, in namespace order then declaration order:\n\nThe input key in the custom-tool branch's schema is deliberate: it must match what parseInboundToolArguments (§3.6) synthesizes for that tool's non-JSON function_call.arguments — the schema and the argument fallback are two halves of one contract.\nCardinality: only one additional_tools item is handled (last one wins if more than one appears — unobserved whether that's possible, §10); this should become a hard MALFORMED_REQUEST once real traffic confirms the cardinality, rather than silently dropping a tool set.","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"3.4 Tools: flattened across namespaces, split by each declaration's own type (corrected — was per-namespace)","lvl3":""}},
10807
+ {"objectID":"70b3041ee1546d049ae4cae0d253a97d82aa469ecdbb8a895b4f4fc92bdd78d3","title":"3.5 Reasoning: reasoning.effort → thinking","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#35-reasoning-reasoningeffort-thinking","content":"No existing precedent (zero references anywhere in the codebase) — novel and unvalidated against real responses.\n\n| effort | thinking |\n| ----------------- | ------------------------------------------- |\n| none, minimal | omit |\n| low | { type: \"enabled\", budget_tokens: 4096 } |\n| medium | { type: \"enabled\", budget_tokens: 8192 } |\n| high | { type: \"enabled\", budget_tokens: 16384 } |\n| xhigh | { type: \"enabled\", budget_tokens: 24576 } |\n| max | { type: \"enabled\", budget_tokens: 32768 } |\n\nClaudeRequest.thinking.type is a loose string, not a literal union, in the pre-existing shared type (src/lib/types/proxy.ts:168) — not fixed here; other call sites share it.","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"3.5 Reasoning: reasoning.effort → thinking","lvl3":""}},
10808
+ {"objectID":"d9b395b9e31a46c2a1c39966b7a0570f26b83e253ca9f747e48c81dea6fcc576","title":"3.6 Non-JSON function_call.arguments","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#36-non-json-function_callarguments","content":"The existing parseFunctionArguments() (src/lib/proxy/codexFallback.ts:466-482) throws on non-JSON and must not be reused — it parses the response-side leg (Codex's own model output, always valid JSON), whereas this leg parses a client-supplied history replay, which for exec is a raw shell string (arguments: \"ls -la\", confirmed in test/fixtures/codex-request-tool-result-turn.json).\n\nNever throws. { input: raw } matches §3.4's grammar-tool schema exactly.","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"3.6 Non-JSON function_call.arguments","lvl3":""}},
10809
+ {"objectID":"f029310667c9be66e1ee89127b06183f34f9a5e5e63561fa67db9e5fc050fbd4","title":"3.7 Content parts, with the image fix","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#37-content-parts-with-the-image-fix","content":"Major finding resolved: the first design pass mapped every input_image.image_url to {type:\"url\", url: image_url}. But Codex's own image_url field routinely carries a data: base64 URI — proven by this same codebase's opposite-direction code, imageUrlForBlock (src/lib/proxy/codexFallback.ts:171-180), which constructs data:${media_type};base64,${data} when going Claude→Codex. Feeding that string into Anthropic's url source variant is invalid; it must become the base64 variant.\n\nNo fixture contains an input_image part (§1) — this branch is untested by any existing fixture; §9 adds an inline-constructed test case for it since no fixture covers it.","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"3.7 Content parts, with the image fix","lvl3":""}},
10810
+ {"objectID":"2249cd74240d9d808f8a5fef515aa1bd9e5c1d4c1bf107628a8607be140e164d","title":"4. Role-alternation coalescing","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#4-role-alternation-coalescing","content":"Anthropic enforces strict user/assistant alternation; the fixtures prove Codex's flat stream does not (two consecutive user items in all 4). The algorithm walks input once, appending to or flushing one \"open group,\" never reordering:\n\nTwo consecutive user items → one message, two text blocks (fixture-proven). N consecutive function_call → one assistant message with N tool_use blocks, id = verbatim call_id (this is Anthropic's parallel-tool-call shape, no separate code path). N consecutive function_call_output → one user message with N tool_result blocks, tool_use_id matching verbatim.\nUnresolved, not silently assumed (§10): every fixture puts all developer items before the first user item; the algorithm folds every developer item into the system prefix regardless of position, which is only correct if real traffic never sends a mid-conversation developer nudge.","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"4. Role-alternation coalescing","lvl3":""}},
10811
+ {"objectID":"b724788e010b711c8df065aadaa32d68058d50f1c93ceb45d8c3b7a12f1cc06d","title":"5. Blocker resolved: resumed-session history contract","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#5-blocker-resolved-resumed-session-history-contract","content":"The first design pass's translator silently assumed input always holds full conversation history, even on a resumed session. codex-request-resumed-session.json replays an input array identical to codex-request-interactive-mode.json's (same 7 items, same roles) while carrying session_id/thread_id — but the generator's own header states these are hand-built approximations of a wire sample \"NOT available in this environment,\" so this is the fixture generator's assumption, not observed Codex CLI behavior. Given the Responses API's stateful design (session_id/thread_id imply server-side memory) and Anthropic's Messages API having none, a resumed request that in reality carries only incremental turns would make this translator silently produce an amnesiac ClaudeRequest with no visible error.\nResolution adopted (review's option (a) fail-loud, not option (b) history-cache — a persisted-history cache is a stateful, session-routing concern that belongs with the orchestration/affinity section, not a pure translator): detect the shape and refuse translation rather than guess.\n\nThis is a static best-effort guard, not proof of the real wire contract — see UNRESOLVED in §10. It converts an unknown into a loud, caller-visible failure instead of a silent one, which is what the \"nothing may break silently\" requirement demands even without live traffic.","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"5. Blocker resolved: resumed-session history contract","lvl3":""}},
10812
+ {"objectID":"60e9333a338ac3f72459202b690775115c51efb22bc8c13c60628cbc17634508","title":"6. Vertex delta — corrected hand-off","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#6-vertex-delta-corrected-hand-off","content":"ClaudeRequest has no output_config field (src/lib/types/proxy.ts:154-169); output_config is a Claude-Code-CLI-specific dial that buildVertexAnthropicPayload (src/lib/proxy/vertexAnthropicFallback.ts:399-428) hoists/strips on its own untyped passthrough path — unrelated to thinking. buildVertexAnthropicPayload only reads/rewrites model (dropped — Vertex encodes it in the URL, UNSUPPORTED_FIELDS at line 42), context_management, output_config, messages, system; it never inspects thinking, so thinking.budget_tokens flows through untouched as the same standard Anthropic field. No second reasoning table needed for Vertex.\nMajor finding resolved: the first design pass's illustrative dispatch code called buildVertexAnthropicPayload/buildVertexAnthropicUrl directly and did a raw fetch(...) — that omits Google ADC bearer-token acquisition, non-2xx error handling, and usage telemetry, all of which the already-exported executeVertexAnthropicFallback (src/lib/proxy/vertexAnthropicFallback.ts:611-666) provides; confirmed its real signature is (args: { body: Readonly<Record<string, unknown>>; model: string; signal?: AbortSignal; onTerminal?: (t: VertexPassthroughTerminal) => void }) => Promise<Response> — it resolves projectId/location itself via resolveVertexTarget() and calls dispatchVertexAnthropicPassthrough internally, so those two builders are implementation details, not a standalone caller's building blocks:\n\ntranslated.value.model is required by the type and used for the Anthropic-direct leg/logging, but must never be read back out for the Vertex model — Vertex resolves its own target.model independently (the dropped field, per UNSUPPORTED_FIELDS).","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"6. Vertex delta — corrected hand-off","lvl3":""}},
10813
+ {"objectID":"d90f2bab67865a3271d300b6ec12f3a2412ac5f481479abe2d9cb1259dc59ed3","title":"7. Determinism ledger (cache-prefix stability), with the corrected marker claim","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#7-determinism-ledger-cache-prefix-stability-with-the-corrected-marker-claim","content":"Tool array order: namespace order, then declaration order within each namespace, via nested .flatMap(), never through a name-keyed Map (corrected — §3.4).\nMessage/system order preserved 1:1 from input; coalescing merges only adjacent same-role items.\ntool_use.id/tool_result.tool_use_id = verbatim Codex call_id — never generateToolUseId() (src/lib/proxy/claudeFormat.ts:35-37, randomBytes-based, confirmed non-deterministic); this module imports nothing from it.\ngenerateMessageId() (claudeFormat.ts:28) is response-serializer-only, never imported here.\nsystem must be array-form, never a string — minor finding resolved on where the marker actually lands: applyClaudeRequestCacheBreakpoints (src/lib/utils/anthropicCacheBreakpoints.ts:217-271) marks the last system block whenever Array.isArray(out.system) && out.system.length > 0 (line 244), and only falls through to marking the last tool when system is absent/empty (line 252) — a branch that is unreachable for any translated request here, since every genuine Codex request carries ≥1 developer message and this design always emits array-form system. The first design pass's ledger framed tool-array order as the operative cache-key constraint in the common case; corrected: for real Codex-origin traffic the marker lands on the last system block, and tool-array order matters only for the (here, unreachable) empty-system path. Tool-array ordering (point 1) still matters for its own sake (a stable tools array is part of what gets hashed into the prefix even when the breakpoint itself sits on system).\nNo cache-key derivation on this leg — codexPromptCacheKey/codexCachePrefix exist only for the other (Claude→Codex, OpenAI-caching) direction; Anthropic's caching is marker-based and needs none invented here.","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"7. Determinism ledger (cache-prefix stability), with the corrected marker claim","lvl3":""}},
10814
+ {"objectID":"b2e2c7923039d9a884b29933f4a378d010bab5bc9c58da7b27b2029a27b82b7f","title":"8. CI gating gap found by grounding (not in either design or review pass)","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#8-ci-gating-gap-found-by-grounding-not-in-either-design-or-review-pass","content":"The design's file list creates test/continuous-test-suite-codex-outbound-translation.ts but never wires it to run. scripts/run-proxy-reliability.mjs's checks array is a hardcoded list — a new file in test/ runs in CI only if added there (or to another script+workflow step). Precedent: this exact wrapper's own comment explains it added test/continuous-test-suite-vertex-anthropic-fallback.ts for the identical reason (\"It had no npm script and no workflow reference, so its 51 cases never ran anywhere\"). This section's suite must be added the same way:\n\nscripts/run-proxy-reliability.mjs (modify): add [\"tsx\", \"test/continuous-test-suite-codex-outbound-translation.ts\"] to the checks array (same pattern as the vertex-anthropic-fallback entry, with a comment stating why it's not proxy-*-templated). This keeps it gated by test:proxy-reliability (package.json:170) → .github/workflows/ci.yml:445 inside provider-safety-net-shards (matrix rest) → required provider-safety-net job, satisfying the repo's \"npm script AND workflow runs it\" gating rule.\n\nscripts/generate-codex-fixtures.mjs (modify): none of the 4 existing fixtures exercise N-parallel tool calls. Generalize the two zero-arg helpers with defaults that reproduce today's output byte-for-byte (functionCallItem(callId = \"call_synthetic_0001\", name = \"exec\", args = \"ls -la\"), functionCallOutputItem(callId = \"call_synthetic_0001\", output = JSON.stringify({stdout:\"total 0\\ndrwxr-xr-x 2 codex staff 64 Jan 1 00:00 .\\n\",stderr:\"\",exit_code:0}))), then append one new fixtures[] entry, codex-request-parallel-tool-calls.json, with extraInputItems: [functionCallItem(\"call_synthetic_0001\",\"exec\",\"ls -la\"), functionCallItem(\"call_synthetic_0002\",\"read_file\", JSON.stringify({path:\"src/index.ts\"})), functionCallOutputItem(\"call_synthetic_0001\"), functionCallOutputItem(\"call_synthetic_0002\", JSON.stringify({content:\"export {};\\n\"}))] — 2 consecutive function_call then 2 consecutive function_call_output, one JSON args one non-JSON args","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"8. CI gating gap found by grounding (not in either design or review pass)","lvl3":""}},
10815
+ {"objectID":"0786d2230d6d50da3ac9c06fba3f2135868a43e69c7e525bf5ebfec680214899","title":"9. Tests","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#9-tests","content":"All in test/continuous-test-suite-codex-outbound-translation.ts (new; #!/usr/bin/env tsx, plain test()/asyncTest() + passed counter + console.log(\"Passed: N; Failed: 0; RESULT: PASS\") pattern, matching test/continuous-test-suite-vertex-anthropic-fallback.ts):\nparseCodexNativeRequest returns ok:false, code:\"MALFORMED_REQUEST\" for a body missing input, and ok:true for all 5 fixture bodies (4 existing + new parallel-tool-calls one).\nFeed all 5 fixtures through translateCodexRequestToClaude twice each; assert JSON.stringify equality both times (determinism).\nAssert .value.system is always ClaudeTextBlock[], never a string, for every fixture (cache-breakpoint array-gate dependency, §7 point 5).\ncodex-request-interactive-mode.json: assert its two consecutive user items collapse into one Claude message with exactly two content blocks (alternation invariant), and that its namespace's mixed-kind declarations map to two ClaudeTools where the type:\"custom\" entry's input_schema is the single-input-string fallback schema and the type:\"function\" entry's input_schema equals its original parameters object byte-for-byte (per-declaration-type split, §3.4). Depends on the fixture regeneration tool-fidelity §10 test #26 already tracks — today's test/fixtures/codex-request-*.json still use the flat, pre-correction {functions, collaboration} shape (confirmed \"still wrong relative to the real capture\"), so this assertion cannot pass until those fixtures are regenerated to the namespace-array shape; it is not a new gap introduced here.\nNew codex-request-parallel-tool-calls.json: assert the 2 consecutive function_call items become one assistant message with 2 tool_use blocks whose ids are call_synthetic_0001/call_synthetic_0002 verbatim, and the 2 function_call_output items become one user message with 2 tool_result blocks whose tool_use_ids match; assert call_synthetic_0001's parsed input is {input: \"ls -la\"} and call_synthetic_0002's is {path: \"src/index.ts\"} (both JSON and non-JSON argum","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"9. Tests","lvl3":""}},
10816
+ {"objectID":"1c25d7cf90dac3c24fe3aacba825502c32e23103138a39f3c4715f7e40eb8c4c","title":"10. Explicitly missing facts","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#10-explicitly-missing-facts","content":"UNRESOLVED: whether additional_tools/developer items can appear anywhere other than before the first user item in real traffic — the one check that would settle it: capture one real Codex CLI multi-turn session with a mid-conversation system nudge (e.g. a compaction event) and inspect its input ordering.\nUNRESOLVED: whether a resumed-session request's input is genuinely full-history or incremental — the one check that would settle it: capture one real resumed-session Codex Responses request (the referenced ~/.neurolink/reference/codex-cli-wire-sample.json is not available in this environment) and compare its input.length against the same session's prior turn.\nUNRESOLVED: whether tool_choice or reasoning ever appear on genuine inbound requests at all (absent from all 4 fixtures) — the one check that would settle it: grep captured production Codex traffic logs (once available) for either key.\nUNRESOLVED: whether more than one additional_tools item can appear in one request — the one check that would settle it: same real-traffic capture as (1).\nProduct sign-off still needed on the lossy grammar→single-string-parameter mapping in §3.4 (behavior-changing, not just encoding) and on the {input: raw} non-JSON fallback's downstream effect on tool execution (owned by the tool-fidelity section).","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"10. Explicitly missing facts","lvl3":""}},
10817
+ {"objectID":"bf904f3a68ba7f893922b7bfb2cbc7f96184272624bef1401a06de08af93bb14","title":"11. Files this section touches","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#11-files-this-section-touches","content":"src/lib/types/codex.ts (append types, per the tool-fidelity section's §8 — see the reconciliation note above), src/lib/proxy/codexOutboundFallback.ts (create), scripts/generate-codex-fixtures.mjs (generalize two helpers, add one fixture), test/fixtures/codex-request-parallel-tool-calls.json (generated, not hand-authored), test/continuous-test-suite-codex-outbound-translation.ts (create), scripts/run-proxy-reliability.mjs (add the new suite to checks), eslint.config.js (add the new suite to neurolink/e2e-tests-only allow). The config key lives in src/lib/proxy/proxyConfig.ts/runtimeConfig.ts per the rollout-and-config section's codex-outbound-fallback-{enabled,targets,model-mappings}, not src/lib/types/subscription.ts/codexFallbackChain? as this subsection originally proposed.","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"11. Files this section touches","lvl3":""}},
10818
+ {"objectID":"9071e70cbb3446b69f045596793feee6859618efbc074d93e1a96029486e268c","title":"Response translation: Anthropic → Codex wire format","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#response-translation-anthropic-codex-wire-format","content":"Wire-level translation from an Anthropic-shaped upstream result (ClaudeResponse JSON, or the\nAnthropic SSE vocabulary message_start/content_block_start/content_block_delta/content_block_stop/\nmessage_delta/message_stop/ping) into the Codex Responses shape a native Codex client expects\n(response.* SSE events, or one non-streaming Response JSON body). Out of scope: engine selection /\nfallback trigger, OAuth/account selection, retry/cooldown policy, analytics recording — owned by sibling\nsections proxy-waste, cache-anthropic, cache-vertex. Assumes an outer route already has an\nAnthropic-shaped Response (from the Claude Code OAuth pool or Vertex) to translate; this section does not\ntouch src/lib/server/routes/codexProxyRoutes.ts.","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"Response translation: Anthropic → Codex wire format","lvl3":""}},
10819
+ {"objectID":"9d2410fda9c55c78bd2184a368781a456c353350ac9ae2154480c17eb42f00af","title":"1. Grounded facts (verified against /Users/sachinsharma/Developer/Official/fix/proxy-ci-gaps-and-dead-leg-alert)","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#1-grounded-facts-verified-against-userssachinsharmadeveloperofficialfixproxy-ci-gaps-and-dead-leg-alert","content":"ClaudeUsage (src/lib/types/proxy.ts:177) = { input_tokens, output_tokens, cache_creation_input_tokens?, cache_read_input_tokens? }. ClaudeThinkingBlock (:118) = { type:\"thinking\"; thinking: string }, no signature. ClaudeContentBlock (:124) union has no refusal variant. ClaudeToolUseBlock.input (:103) is Record<string, unknown>, never undefined — so JSON.stringify(block.input ?? {}) is defensive-only, not load-bearing.\nCorrected citation (was Blocker, resolved): message_start carries input_tokens/cache_creation_input_tokens/cache_read_input_tokens; message_delta carries only the running output_tokens total. Verified directly in this repo's own reader for the identical Anthropic-shape wire, readUsageEvent (src/lib/proxy/vertexAnthropicFallback.ts:669-696): it sets input+cache fields only inside if (event.type === \"message_start\"), and unconditionally overwrites outputTokens from message_delta/message_start's usage.output_tokens. The original draft of this section called message_start a no-op and read cache fields from message_delta; that was backwards and would have zeroed cache accounting on every response. Fixed in §4/§5 below.\nSSEContentBlockDescriptor (proxy.ts:203-206) gives tool id/name at content_block_start, so the Codex function_call item can be opened immediately, not deferred to block close.\nSSEDeltaDescriptor (proxy.ts:208-212) = text_delta | thinking_delta | input_json_delta; input_json_delta.partial_json is a plain string, not individually valid JSON — confirmed against this repo's own reverse-direction parser, parseFunctionArguments (src/lib/proxy/codexFallback.ts:466-484), which requires a fully-accumulated string before JSON.parse. A serializer method that validates JSON per-chunk cannot forward these incrementally; §3 fixes this with a raw-chunk delta method (was Major finding).\nSSEPing (proxy.ts:266-268) is a real member of SSEEvent, and this repo's own emitter proves it is not rare: ClaudeStreamSerializer.ensureMessageStarted (src/lib/proxy/claudeF","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"1. Grounded facts (verified against /Users/sachinsharma/Developer/Official/fix/proxy-ci-gaps-and-dead-leg-alert)","lvl3":""}},
10820
+ {"objectID":"373c6bf35b43bb70b4f709b8b3d5c60c65f74b2759c0f18dc8fd903a35933c67","title":"5. Concrete event-to-event mapping (streaming path)","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#5-concrete-event-to-event-mapping-streaming-path","content":"Ordering invariants (asserted by construction of closedItems/outputIndex, not just described):\nExactly one response.created precedes every other response.* event.\nresponse.output_item.added for output_index=i precedes any content_part.*/output_text.*/function_call_arguments.* carrying that same i.\nItems never interleave (external knowledge: Anthropic's public streaming contract — see §1 correction).\nExactly one terminal event (response.completed XOR response.incomplete XOR response.failed) is last; any push after it throws (assertNotTerminal).\nA terminal event's response.output[] equals, in order, exactly this.closedItems — true by construction (both are populated by the same close calls), not by analogy to the reverse direction.\n\nText block, itemId = generateCodexItemId(\"message\"):\n\nTool-use block, itemId = generateCodexItemId(\"function_call\"), call_id = codexCallIdFromToolUseId(block.id):\n\nAlways emit at least one function_call_arguments.delta even for a zero-argument tool call (mirrors ClaudeStreamSerializer.pushToolUse never skipping emission for empty input, claudeFormat.ts:634-650).\n\nUnmapped events (fixes former Major finding — now explicit, not implicit): ping, thinking_delta, content_block_start type:\"thinking\", and any other event type not named above are consumed and produce zero Codex-shape frames. This is what makes ClaudeStreamSerializer.ensureMessageStarted's guaranteed post-message_start ping (claudeFormat.ts:511) harmless rather than a crash via assertNotTerminal.\n\nThinking block: not translated — ClaudeThinkingBlock has no signature (nothing to represent faithfully as a reasoning item), and no reasoning-stream event name is evidenced in this repo (§1). Extended-thinking content silently disappears across this fallback hop; flagged for reviewer awareness even though omission is the safest available choice.\n\nTool-call id decision: reuse tool_use.id (toolu_...) verbatim as call_id. Reason: nothing in this codebase validates call_id format on the way i","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"5. Concrete event-to-event mapping (streaming path)","lvl3":""}},
10821
+ {"objectID":"0d0fa858e150b3b657632b4f4581cce1989db31d05cd336d49e9d45e0a040e6a","title":"6. Failure handling and the commit boundary","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#6-failure-handling-and-the-commit-boundary","content":"Pre-commit (nothing flushed): preflightAnthropicStream classifies sse_error/transport_error/empty before serializer.start() ever runs. The driver throws AnthropicFallbackStreamError/AnthropicFallbackResponseError; the (sibling-owned) outer route may try the next engine.\nPost-commit (≥1 frame flushed): a silent swap is impossible. serializer.emitFailure(status, message, code) closes any open item as status:\"incomplete\" (now typeable, §2) and emits one response.failed, never a bare error frame.\nMalformed tool-call JSON (fixes former Major finding — was unhandled): closeToolCall() throws when JSON.parse(this.argsAccum || \"{}\") fails. The driver's content_block_stop branch for an open function_call must try/catch this specific throw and route it through serializer.emitFailure(502, \"Codex fallback tool arguments were not valid JSON\", \"invalid_tool_arguments\") — a named case, not a fallthrough unhandled exception, mirroring parseFunctionArguments's discipline that the caller must never retry after emitting output (codexFallback.ts:715-718).\nGotcha specific to this direction: preflight's buffered chunks must run THROUGH the interpreter before the live remainder — never replayed raw, unlike the Claude-facing route where upstream shape equals client shape.","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"6. Failure handling and the commit boundary","lvl3":""}},
10822
+ {"objectID":"7faba2a26c3700bb7e5476a985c323b6e2d2251a93f939b592ffe36d6c9df3b7","title":"7. Non-streaming JSON path","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#7-non-streaming-json-path","content":"When the inbound Codex request's stream is falsy/absent, return serializeCodexResponse(claudeResponse, model) directly as the HTTP JSON body (Content-Type: application/json) — the document root IS a CodexResponseEnvelope, the same shape carried inside response.completed.response. buildCodexResponseItem is shared with the streaming path so item shape is defined once. Resolved (§1): codexProxyRoutes.ts hardcodes stream: true and has no branch reading an inbound stream field, so this path is currently unreachable from the native Codex route — implement it for completeness and for a future client, but do not write a test asserting it is exercised end-to-end through that route today (there is no such route yet).","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"7. Non-streaming JSON path","lvl3":""}},
10823
+ {"objectID":"54527782a3cd8670d5ab329c9e7b09cc2c22401e0937132fc7b70b98f022d5e8","title":"8. Scope boundary on CodexResponseEnvelope's fields","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#8-scope-boundary-on-codexresponseenvelopes-fields","content":"Real OpenAI Responses API envelopes carry more fields (temperature, tool_choice, tools, metadata, previous_response_id, parallel_tool_calls, truncation, text, reasoning, user, …). This design specifies only id, object, created_at, status, model, output, usage, incomplete_details, error — the minimal subset a client needs for content/tool-calls/usage/status. Echoing more fields back from the original inbound request is an optional enhancement (the outer route would need to retain that request), not a gap.","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"8. Scope boundary on CodexResponseEnvelope's fields","lvl3":""}},
10824
+ {"objectID":"8f54aa72a39df6d3a6d0b8b26e154c9f1b05dc6a26837f3b4a2d15f9469fbe25","title":"9. Tests and CI gating","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#9-tests-and-ci-gating","content":"New fixture test/fixtures/anthropic-to-codex-golden.sse: one synthetic Anthropic SSE transcript (text + tool_use blocks, including a ping and a multi-chunk input_json_delta) with its exact expected Codex-shape SSE output, byte-for-byte.\n\nNew suite test/continuous-test-suite-codex-response-translation.ts (create). Must open with a \"Determinism exception (CLAUDE.md rule 15)\" header mirroring test/continuous-test-suite-codex.ts:5-19 (importing codexResponsesFormat.js/codexToAnthropicFallback.js internals directly to unit-test deterministic SSE translation and ordering invariants — a live backend cannot be made to emit a specific malformed-JSON or interleaved-ping sequence on demand). Defines its own local HTTP-fixture helper (not imported — withHttpFixture in continuous-test-suite-proxy-telemetry.ts:698 is unexported).\ntest/continuous-test-suite-codex-response-translation.ts: \"golden frame byte comparison\" — feed the fixture transcript through createAnthropicFallbackStream, join emitted frames, assert exact string equality against anthropic-to-codex-golden.sse.\ntest/continuous-test-suite-codex-response-translation.ts: \"message_start populates cache usage\" — feed a transcript whose message_start.message.usage has cache_read_input_tokens:900, cache_creation_input_tokens:100, input_tokens:500 and whose message_delta omits both cache fields; assert the terminal envelope's usage.input_tokens_details equals {cached_tokens:900, cache_write_tokens:100} (fixes the former Blocker — this assertion fails against the pre-fix no-op design).\ntest/continuous-test-suite-codex-response-translation.ts: \"tool-call arguments forward incrementally, not buffered\" — feed 3 separate input_json_delta frames for one tool call; assert 3 distinct response.function_call_arguments.delta SSE frames are emitted (not 1), each carrying its own raw chunk unmodified.\ntest/continuous-test-suite-codex-response-translation.ts: \"malformed tool JSON routes to response.failed\" — feed an input_json_delta sequenc","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"9. Tests and CI gating","lvl3":""}},
10825
+ {"objectID":"71cd62de4c2b9cb70c38378938a4bc8e81eb3f29493489b515d0b7deb357054b","title":"10. Dependencies on sibling sections","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#10-dependencies-on-sibling-sections","content":"cache-anthropic: whether request-side cache_control breakpoints are inserted determines whether cache_read_input_tokens/cache_creation_input_tokens are ever populated on the Anthropic response this section reads from message_start. This section's mapping is correct either way (absent fields omitted, never zeroed).\ncache-codex-prefix: owns Codex-side prompt_cache_key/prefix mechanics; relevant only if a fallback chain nests.\ncache-vertex: this layer is upstream-provider-agnostic — it consumes only the ClaudeResponse/SSE shape — provided cache-vertex's own normalization funnels Vertex output into that same shape before it reaches this driver.\nproxy-waste: owns engine selection, when to trigger fallback, and pre-commit/post-commit routing. This section provides consumeAnthropicFallbackResponse/createAnthropicFallbackStream and the §6 boundary contract; it does not decide when to retry another engine, and does not touch codexProxyRoutes.ts.","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"10. Dependencies on sibling sections","lvl3":""}},
10826
+ {"objectID":"0ce17a82c7bfe7fd513a44a2736440b45ff9ff6394f996af91a3c473d419b488","title":"11. Files this section touches","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#11-files-this-section-touches-1","content":"src/lib/types/codex.ts — modify, add the 8 types in §2.\nsrc/lib/proxy/codexResponsesFormat.ts — create, §3.\nsrc/lib/proxy/codexToAnthropicFallback.ts — create, §4.\nscripts/run-proxy-reliability.mjs — modify, one new checks entry (§9).\ntest/fixtures/anthropic-to-codex-golden.sse — create.\ntest/continuous-test-suite-codex-response-translation.ts — create.\n\nNot touched by this section (sibling-owned): src/lib/server/routes/codexProxyRoutes.ts, src/lib/proxy/codexFallback.ts (the recommended sseFrameScanner.ts extraction remains an optional, explicitly-deferred follow-up — duplicating the carry/searchFrom loop once more in codexToAnthropicFallback.ts is acceptable if the implementation PR must be strictly additive; state which option was taken in the PR description).","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"11. Files this section touches","lvl3":""}},
10827
+ {"objectID":"bf0c0fa9b8ff68aed588ac3eecb3f98aa37146306a1f2f140bcd4158f6ff3048","title":"Tool-call fidelity (Codex-outbound fallback) — resolved","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#tool-call-fidelity-codex-outbound-fallback-resolved","content":"Scope: the tool-related constructs for a native Codex Responses-API request served, transparently, by the Anthropic OAuth pool or Vertex-Claude. Declarations, tool_choice/parallel_tool_calls, model-emitted calls, client results, argument parsing, schema limits, and the request/response boundary those depend on. General plain-text message-role mapping (developer/user/assistant → Claude system/user/assistant) is the sibling Request translation section's mandate; this section only reaches into it where a tool-call grouping fix cannot be made without touching the same array (see §2).\n\nAll facts below were re-verified this session directly against /Users/sachinsharma/Developer/Official/fix/proxy-ci-gaps-and-dead-leg-alert (read-only) and against ~/.neurolink/reference/codex-cli-wire-sample.json (a real captured Codex CLI 0.155.1 request, body.* nesting). Every resolution below is inline; there is no separate changelog.","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"Tool-call fidelity (Codex-outbound fallback) — resolved","lvl3":""}},
10828
+ {"objectID":"96e436064b53fd332f9f6b5d58ab76bf5c6d91bae91527569b91bc9e56e61b85","title":"0. Baseline facts confirmed this pass","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#0-baseline-facts-confirmed-this-pass","content":"src/lib/types/codex.ts (219 lines) has no CodexNative* name yet — zero collision risk. Barrel line: src/lib/types/index.ts:19 (export * from \"./codex.js\";).\nsrc/lib/types/proxy.ts:154-170 — current ClaudeRequest.tool_choice is {type:\"auto\"|\"any\"|\"none\"} | {type:\"tool\"; name}, no disable_parallel_tool_use. ClaudeTool (138-143), ClaudeToolUseBlock (103-108), ClaudeToolResultBlock (111-116), ClaudeMessage (132-135), ClaudeUsage (177-182), ProxyMetrics (2177-2194) all confirmed as designed.\nsrc/lib/proxy/codexFallback.ts: convertClaudeMessage (226-288) — one-to-many split via a flushMessage closure (238-241) that batches plain content into one Codex item and emits function_call/function_call_output as their own items; buildSystemInstructions (134-168) extracts every Claude system-role message's text (wherever it appears in messages) and joins with \"\\n\\n\" into Codex's flat instructions string; parseFunctionArguments (466-483) is module-private (grepped every ^export line: only CodexFallbackResponseError, CodexFallbackStreamError, codexPromptCacheKey, convertClaudeRequestToCodex, parseCodexFallbackSSE, consumeCodexFallbackResponse, createCodexFallbackStream are exported).\nnode_modules/.pnpm/@anthropic-ai+sdk@0.102.0_zod@4.3.6/.../resources/messages/messages.d.ts:1247-1300 — real SDK: ToolChoiceAuto/ToolChoiceAny/ToolChoiceTool each carry disable_parallel_tool_use?: boolean; ToolChoiceNone does not. Same file, MessageCreateParams.messages doc: \"Consecutive user or assistant turns in your request will be combined into a single turn\" — a real safety net, not a reason to skip correct grouping (see §2).\n~/.neurolink/reference/codex-cli-wire-sample.json: body top-level keys are client_metadata, include, input, model, parallel_tool_calls, prompt_cache_key, reasoning, store, stream, text, tool_choice — no top-level session_id/thread_id. body.client_metadata = {thread_id, turn_id, root_turn_id, session_id, x-codex-installation-id, x-codex-window-id, x-codex-turn-metadata}, and bo","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"0. Baseline facts confirmed this pass","lvl3":""}},
10829
+ {"objectID":"c2e5c7087b40a1031b4cb0acd97fa1bfe013a8a76797afb29c9f26bf50094489","title":"1. Tool declaration (unchanged from prior design, confirmed sound)","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#1-tool-declaration-unchanged-from-prior-design-confirmed-sound","content":"Real wire shape: one input item {type:\"additional_tools\", id, role:\"developer\", tools: CodexNativeToolNamespace[]}, each namespace {type:\"namespace\", name, description, tools: CodexNativeToolDeclaration[]}, each declaration {type:\"function\", name, description?, strict, parameters} or {type:\"custom\", name, description?, format:{type:\"grammar\", syntax:\"lark\"|\"regex\", definition}}.\n\nMapping Codex→Claude: flatten every namespace's tools in order (namespace order, then declaration order) into one ClaudeTool[] via .map()/concat, never a Record keyed by name (would silently alphabetize and break cache-breakpoint-pinned-to-last-tool). function → {name, description, input_schema: parameters}, strict dropped with reason:\"strict_mode_flag_dropped\". custom → degrade, never drop: {name, description: (description ?? \"\") + \"\\n\\n[Argument grammar, enforced by the original client, not by this model]:\\n\" + format.definition, input_schema: {type:\"object\", properties:{input:{type:\"string\"}}, required:[\"input\"], additionalProperties:false}}, reason:\"custom_tool_wrapped\". Resolves minor finding: description is optional on CodexNativeCustomToolDeclaration (confirmed) — the concatenation must use ??, not bare +, or an omitted description silently becomes the literal string \"undefined\\n\\n...\". Namespace grouping does not round-trip; state that plainly, no reconstruction attempt.","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"1. Tool declaration (unchanged from prior design, confirmed sound)","lvl3":""}},
10830
+ {"objectID":"e7488830efba84257b169f8aeb55da12214c3b226b65670de30cfb945bf5c1d6","title":"2. tool_choice + parallel_tool_calls — corrected as one mapping, not two","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#2-tool_choice-parallel_tool_calls-corrected-as-one-mapping-not-two","content":"Resolves major finding: the prior design called parallel_tool_calls: false unrepresentable and specified dropping it with a counter. That is factually wrong — confirmed directly in the installed SDK (messages.d.ts:1264,1277,1300): Anthropic's tool_choice carries disable_parallel_tool_use?: boolean on the auto/any/tool variants (inverted polarity: disable_parallel_tool_use: true ≡ parallel_tool_calls: false), just not on none. src/lib/types/proxy.ts's own ClaudeRequest.tool_choice doesn't model the field yet — a type-completeness gap in this repo, not evidence the protocol lacks it.\n\nType change, src/lib/types/proxy.ts:165-167 (replacing the existing 3-line union in place):\n\nmapCodexToolChoiceToClaude now takes both source fields, because the flag rides on the same object the bijection produces:\n\nBijection table (base cases, unchanged — matches codexFallback.ts:436-446 convertClaudeRequestToCodex's inverse and openaiFormat.ts:674-686 convertOpenAIToClaudeRequest's identical precedent, both confirmed verbatim this session):\n\n| Codex native | Claude tool_choice |\n| ------------------------- | --------------------- |\n| \"auto\" / absent | {type:\"auto\"} |\n| \"required\" | {type:\"any\"} |\n| \"none\" | {type:\"none\"} |\n| {type:\"function\", name} | {type:\"tool\", name} |\n\nNo counter fires for parallel_tool_calls any more — it is translated, not degraded, so proxy_codex_outbound_unsupported_field_total drops the parallel_tool_calls reason entirely (§6 shrinks by one label value).","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"2. tool_choice + parallel_tool_calls — corrected as one mapping, not two","lvl3":""}},
10831
+ {"objectID":"57100b7a1b6caea08aedb70914bf077b92b81152d9cbe2faef8d60fd410e9397","title":"3. Model-emitted tool call / client tool result (unchanged, confirmed sound)","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#3-model-emitted-tool-call-client-tool-result-unchanged-confirmed-sound","content":"ClaudeToolUseBlock{type:\"tool_use\", id, name, input} ↔ Codex {type:\"function_call\", call_id, name, arguments: string}: id ↔ call_id verbatim, no re-minting (Design 1, §5). input → arguments: JSON.stringify(input) unless name was declared custom this turn, then bare String(input.input ?? \"\"), using the same per-request toolKindByName map built at request-translation time.\n\nClaudeToolResultBlock{tool_use_id, content: string | ClaudeContentBlock[]} ↔ Codex {type:\"function_call_output\", call_id, output: string} (confirmed hard string-only ceiling, codex.ts:161-165): call_id ↔ tool_use_id verbatim, output ↔ content as the identical string.","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"3. Model-emitted tool call / client tool result (unchanged, confirmed sound)","lvl3":""}},
10832
+ {"objectID":"49a0e637681813144714917cfa9d862d8d7b8c1b6a17f793ee70a7f5d41497e4","title":"4. Parallel/multiple tool calls — corrected grouping (resolves the blocker)","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#4-parallelmultiple-tool-calls-corrected-grouping-resolves-the-blocker","content":"The finding: a per-item function convertCodexInputItemToClaudeMessages(item, toolKindByName): ClaudeMessage[] cannot produce test-required grouping — two sibling function_call items followed by two sibling function_call_output items must collapse into one assistant message (2 tool_use blocks) then one user message (2 tool_result blocks), not four separate messages. A per-item function can only emit 0-1 messages per call, i.e. four messages (assistant, assistant, user, user) for that shape.\n\nAdopted correction, mirroring convertClaudeMessage's flush-accumulator (codexFallback.ts:226-288) run in reverse (many-source-items → one-destination-message instead of one-source-message → many-destination-items):\n\nTwo further corrections (review findings, reconciled against the request-translation section's own §4, which solved both of these already for its own, differently-shaped function):\nAdjacent same-role plain messages must coalesce. The version below originally pushed each plain user/assistant item as its own ClaudeMessage. The real capture and every fixture send two consecutive user items (a real prompt, then a synthetic <environment_context> message) — exactly the shape assertClaudeMessagesAlternate (cache-preservation section) rejects. A third run buffer, messageRun, coalesces by role the same way the tool-call runs already do. It is flushed only when a tool-call run needs to start (the two kinds of run cannot coexist) — not on additional_tools/developer, for the same reason the tool-call runs are not flushed there either: a developer item never itself becomes a messages entry, so flushing early would only reopen a fresh, wrongly-separate group for the next same-role item.\nDeveloper text must stay in array form. systemTexts.push(flattenCodexContentParts(...)) joined every developer message into one string. The request-translation section's cache contract (§2, §4 there) requires one ClaudeTextBlock per developer segment for cache-breakpoint eligibility — a string here ","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"4. Parallel/multiple tool calls — corrected grouping (resolves the blocker)","lvl3":""}},
10833
+ {"objectID":"4db3603d29927aec3d3788b582f9716c855b573098d2ace819bddbc309a29743","title":"5. Empty/malformed arguments and oversized payloads (unchanged in substance, function renamed)","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#5-emptymalformed-arguments-and-oversized-payloads-unchanged-in-substance-function-renamed","content":"name resolves to custom this turn → arguments is opaque text, wrap {input: arguments}.\nname resolves to function, arguments === \"\" → {}.\nname resolves to function, JSON.parse fails → never throw; degrade to {input: <raw text>}, reason:\"malformed_arguments_wrapped\". This is deliberately asymmetric with parseFunctionArguments (codexFallback.ts:466, which throws): that function sits on the model-output-parsing hot path where a hard failure is correct; this sits on request-ingestion, where fabricating a well-formed fallback and continuing is correct, because failing here fails the whole incoming request pre-dispatch.\nname does not resolve to any currently-declared tool → still emit the best-guess wrapped pair; dropping produces an unbalanced tooluse/toolresult set Anthropic's own validation rejects, strictly worse than a degraded-but-present pair.\n\nResolves minor finding on \"reuse, not duplicate\": the prior design claimed parseCodexNativeFunctionArguments \"reuses parseFunctionArguments via a shared helper\" — false, since parseFunctionArguments is module-private and no shared module was ever named. Rejecting the reviewer's alternative (a) (extract an exported helper both directions import) for a technical reason: the two functions have deliberately opposite failure-mode contracts by design (§1.6 of the original / §5 here) — one throws on purpose, one must never throw — and the only line-for-line-shared logic is a single JSON.parse(x || \"{}\") try/catch (~4 lines); forcing both through one function needs a boolean/enum mode flag coupling two independently-evolving call sites for a four-line saving, which is a worse trade than accepting the small, documented duplication. Adopted correction: new, independent function in a new module, and the false \"reuse\" claim is dropped, not carried forward.\n\nSize ceilings: reuse the existing numeric constants from codexFallback.ts (maxChars = 16 * 1024 * 1024, toolCalls.size >= 4096 — cited, not re-verified line-for-line this pass) via a ","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"5. Empty/malformed arguments and oversized payloads (unchanged in substance, function renamed)","lvl3":""}},
10834
+ {"objectID":"1c404502e5139a9e2b23ddb7a10b5919e560f43f42f32b1f469b2c39dc96aa87","title":"6. Identifier mapping — unchanged (Design 1), cross-turn key corrected","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#6-identifier-mapping-unchanged-design-1-cross-turn-key-corrected","content":"Design 1 stands: pass tool_use.id/call_id straight through, no re-minting, no map, in both this new response serializer and the new request translator — mirrors this repo's own dominant idiom (openaiFormat.ts:266, tc.toolCallId || generateOpenAIToolCallId() — prefer real id, mint only as fallback) rather than codexFallback.ts's response-streaming re-mint, which is the outlier here, not the rule.\n\nResolves major finding on session/thread scoping: the prior design claimed \"top-level session_id/thread_id fields (confirmed live)\" on genuine Codex requests. False — re-parsed the real capture directly: body.session_id/body.thread_id are both absent; the only place those identifiers exist is nested, body.client_metadata.{thread_id, turn_id, root_turn_id, session_id}, and body.prompt_cache_key is set to the exact same string as client_metadata.thread_id. The top-level-fields shape belongs only to test/fixtures/codex-request-resumed-session.json, an admittedly-synthetic fixture (_fixtureMeta.basedOn: \"shape only, not copied verbatim\"). Correction adopted: CodexNativeRequest (§7) drops the speculative top-level session_id?/thread_id? fields entirely — client_metadata?: Record<string, unknown> already covers the real shape structurally, no type change needed there, only the false \"top-level, confirmed live\" prose is removed. Design 2 (the id-remapping fallback, not the default — kept unchanged in shape) should key its Map<anthropicToolUseId, codexCallId> by client_metadata.thread_id (or simply the already-present prompt_cache_key, verified to carry the same value), not by invented top-level fields.\n\nResolves major finding on \"resent verbatim every turn\": the prior design told the cache-codex-prefix section it could skip its own dedup/hash logic because \"the whole additional_tools item is resent verbatim by the Codex client on every turn of one thread (confirmed structurally)\". Downgraded: the one real capture is a single first-turn request with zero function_call/function_call","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"6. Identifier mapping — unchanged (Design 1), cross-turn key corrected","lvl3":""}},
10835
+ {"objectID":"5f7d76935018ad2c8e0a940bacaf46457ff7f85b68a6cb14f78fe3e1dcc5a2e6","title":"7. JSON-schema translation limits (unchanged, confirmed sound)","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#7-json-schema-translation-limits-unchanged-confirmed-sound","content":"| Construct | Decision | Mechanism |\n| ---------------------------------- | --------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| plain object/array/required/enum | PASSTHROUGH | input_schema = parameters unchanged |\n| strict:true + all-required trick | PASSTHROUGH, drift undocumented in-band | out of scope to reverse-engineer the nullable-optional trick |\n| format keyword | PASSTHROUGH | not independently verified against live Anthropic this session |\n| oneOf/anyOf/allOf | PASSTHROUGH | not observed in the one real sample; absence isn't proof of absence |\n| $ref/$defs/definitions | FLATTEN | call inlineJsonSchema (src/lib/utils/schemaConversion.ts:105) directly, confirmed exported, confirmed signature (schema, definitions?, visited?, rootSchema?): Record<string, unknown> |\n| circular $ref | DEGRADE | inlineJsonSchema's existing {type:\"object","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"7. JSON-schema translation limits (unchanged, confirmed sound)","lvl3":""}},
10836
+ {"objectID":"b5df2b5ba85927a731ef6ea194054367843b175b0ed01649a010f138e7e2923e","title":"8. Types — exact, corrected (src/lib/types/codex.ts, add)","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#8-types-exact-corrected-srclibtypescodexts-add","content":"(CodexReasoningEffort already exists, codex.ts:168-175, reused as-is.)\n\nsrc/lib/types/proxy.ts — modify ClaudeRequest.tool_choice in place at lines 165-167 (exact replacement text in §2).\nsrc/lib/types/proxy.ts — modify ProxyMetrics (2177-2194): add schemaDegradedTotal: Counter; and unsupportedFieldTotal: Counter;.","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"8. Types — exact, corrected (src/lib/types/codex.ts, add)","lvl3":""}},
10837
+ {"objectID":"56d1ba0024a783227c2920a17c276b69022fdf2bbf2b9ae6f5a5eb0e64bb53c0","title":"9. New files and exact signatures","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#9-new-files-and-exact-signatures","content":"src/lib/proxy/streamLimits.ts (new) — §5.\nsrc/lib/proxy/argumentParsing.ts (new) — §5, exports parseToolArguments only (kept private: isPlainRecord).\n\nsrc/lib/proxy/codexRequestTranslator.ts (new):\n\nconvertCodexNativeRequestToClaude calls flattenCodexToolNamespaces on the additional_tools item (there is at most one per request, confirmed), then convertCodexInputItemsToClaudeMessages on the full input array, then sets claudeRequest.system = systemBlocks (array assignment, no join) when systemBlocks.length > 0, then mapCodexToolChoiceToClaude(body.tool_choice, body.parallel_tool_calls).\n\nsrc/lib/proxy/codexResponseSerializer.ts (new — tool-frame shapes only; the driving byte-buffering/commit-boundary loop is out of scope, owned elsewhere):\n\nsrc/lib/proxy/proxyTracer.ts (modify, alongside proxyTracer.ts:135-148):\n\nTypes introduced: CodexNativeRole, CodexNativeMessageInputItem, CodexNativeFunctionToolDeclaration, CodexNativeCustomToolFormat, CodexNativeCustomToolDeclaration, CodexNativeToolDeclaration, CodexNativeToolNamespace, CodexNativeAdditionalToolsInputItem, CodexNativeFunctionCallInputItem, CodexNativeFunctionCallOutputInputItem, CodexNativeInputItem, CodexNativeToolChoice, CodexNativeToolKind, CodexNativeRequest, CodexNativeStreamError — all globally unique (grepped, zero collisions in src/lib/types/).","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"9. New files and exact signatures","lvl3":""}},
10838
+ {"objectID":"d03a06aa285913166a0a136707c39fc8dd13194a9606c1bdebb350cd01e12ff0","title":"10. Test matrix — test/continuous-test-suite-codex-outbound-tool-fidelity.ts (new)","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#10-test-matrix-testcontinuous-test-suite-codex-outbound-tool-fidelityts-new","content":"Header carries the mandatory determinism-exception note (rule 15's allow-list contract, confirmed pattern at test/continuous-test-suite-proxy-fallback-errors.ts:1-4): \"Determinism exception: exact tool-declaration/argument/id-passthrough shapes need controlled Codex-native request bodies a live model cannot reliably reproduce turn-for-turn; imports only the isolated src/ module graph, mirroring continuous-test-suite-proxy-fallback-errors.ts.\" All assertions below live in this one file unless noted.\ntool_declaration_function_roundtrip — one type:\"function\" tool, plain schema → ClaudeTool.input_schema deep-equals parameters; name/description preserved.\ntool_declaration_order_preserved_across_namespaces — 2 namespaces × 2+ tools, alphabetical-by-name order ≠ declaration order → output order is declaration order, never alphabetical.\ntool_declaration_custom_grammar_degrades_not_drops — real exec/lark shape → tool still emitted, wrapped single-string schema, reason:\"custom_tool_wrapped\" fires.\ntool_declaration_custom_grammar_wrap_survives_missing_description — same shape with description omitted → wrapped description is exactly the grammar-notice text, never contains the literal substring \"undefined\" (resolves the ?? finding).\ntool_choice_bijection — table-driven \"auto\"|\"required\"|\"none\"|{type:\"function\",name}, parallel_tool_calls absent → exact base tool_choice per case, no disable_parallel_tool_use key present in any case.\ntool_choice_absent_defaults_auto — no top-level field → explicit {type:\"auto\"}, not undefined.\nparallel_tool_calls_false_sets_disable_flag_on_auto — tool_choice absent, parallel_tool_calls:false → {type:\"auto\", disable_parallel_tool_use:true} (resolves the blocker-adjacent major finding; no counter fires, since this is a full mapping, not a drop).\nparallel_tool_calls_false_sets_disable_flag_on_required_and_function — same, for \"required\" → {type:\"any\", disable_parallel_tool_use:true} and {type:\"function\",name} → {type:\"tool\", name, disable_parallel_to","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"10. Test matrix — test/continuous-test-suite-codex-outbound-tool-fidelity.ts (new)","lvl3":""}},
10839
+ {"objectID":"24ca22601e1616507858cc4c55c3f62dc6fcf8a69052458145b0f551f39c6f5e","title":"11. CI wiring — the part that makes any of this gated","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#11-ci-wiring-the-part-that-makes-any-of-this-gated","content":"None of the above runs in CI merely by existing in test/ or by having an npm script. Confirmed the required path: provider-safety-net (required check, .github/workflows/ci.yml:330) needs provider-safety-net-shards (350-352, matrix [contract, rest]) to succeed; the rest shard's step at .github/workflows/ci.yml:446-448 runs pnpm run test:proxy-reliability, which is node scripts/run-proxy-reliability.mjs (package.json:170), a hardcoded array of suites (scripts/run-proxy-reliability.mjs:4-21) — adding a file under test/ or even a new package.json script does not add it to that array.\n\nRequired change: append one entry to scripts/run-proxy-reliability.mjs's checks array (after the existing non-proxy-* entry, following the exact precedent already in that file for continuous-test-suite-vertex-anthropic-fallback.ts, which is not name-templated because it also isn't a proxy-* suite):\n\nNo ci.yml change needed — this reuses the existing required rest shard step verbatim. (The alternative — a standalone test:codex-outbound-tool-fidelity script plus a new ci.yml step under matrix.group == 'rest', mirroring how test:codex is wired at ci.yml:450-452 — is viable but adds a second CI touchpoint for no benefit here, since this suite's runtime cost is comparable to the other wrapper entries; not adopted.)","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"11. CI wiring — the part that makes any of this gated","lvl3":""}},
10840
+ {"objectID":"819b151980a89f6934e20b1c96a1d3f58f89f40bdf002b24ad0ba6d17864953f","title":"12. Dependencies on other design sections (unchanged except where corrected)","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#12-dependencies-on-other-design-sections-unchanged-except-where-corrected","content":"cache-anthropic / cache-vertex: flattenCodexToolNamespaces still produces a ClaudeTool[] in stable, deterministic order (never a Record), unchanged.\ncache-codex-prefix: session/thread-affinity fact corrected per §6 — use client_metadata.thread_id or prompt_cache_key (verified identical), not invented top-level fields; tool-list turn-over-turn stability is assumed, not confirmed (§6) — that section should not skip its own dedup/hash logic on the strength of this design alone.\nproxy-waste: the two new counters (§7, §9) must still conform to whatever label-cardinality standard that section sets.\nmain / streaming-loop owner: CodexNativeStreamSerializer is still a pure, stateless-per-call emitter, driven by that section's byte-buffering/commit-boundary loop; id-passthrough (§6) remains loop/routing-agnostic.\nRequest translation section: owns codexContentPartToClaudeBlock/plain content-part mapping that convertCodexInputItemsToClaudeMessages (§4) calls into for non-tool message items — this section only owns the tool-call grouping and developer→system extraction inside that same array walk, and hands off content-part-level mapping rather than re-specifying it.","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"12. Dependencies on other design sections (unchanged except where corrected)","lvl3":""}},
10841
+ {"objectID":"843927e6ac7457b0a3397cd146775412ac4ffbff1dd35785b43071b7a7835bea","title":"13. Facts still unresolved","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#13-facts-still-unresolved","content":"UNRESOLVED: whether the real Codex CLI validates/enforces any format on a function_call.call_id it did not itself mint — the linchpin of Design 1 (§6). The one check that would settle it: serve a turn through this fallback so Anthropic mints a toolu_-shaped id, emit it as call_id to a real Codex CLI, confirm it's accepted unmodified on the next turn.\nUNRESOLVED: whether Anthropic's real Messages API enforces any format constraint on an inbound (history) tool_use.id/tool_result.tool_use_id. The one check that would settle it: a live call with a deliberately non-toolu_-shaped id embedded in history, confirming 200 not 400.\nUNRESOLVED: whether Vertex's Claude backend has the same tolerance as #2. The one check that would settle it: the same live-id test run against the Vertex path specifically.\nUNRESOLVED: whether OpenAI's real custom-tool format union has variants beyond the single {type:\"grammar\", syntax:\"lark\", definition} observed. The one check that would settle it: a second real capture containing a custom tool declared without a grammar (e.g. free-text).\nUNRESOLVED: whether a genuine Codex CLI ever nests a namespace inside another, or declares more than the two observed (functions, collaboration). The one check that would settle it: a real capture from a session with MCP servers or many plugins attached.\nUNRESOLVED: whether tool-list content is truly stable turn-over-turn in one thread (§6, downgraded this pass from \"confirmed\" to \"assumed\"). The one check that would settle it: a real multi-turn capture (2+ turns, same thread) to diff additional_tools items across turns.","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"13. Facts still unresolved","lvl3":""}},
10842
+ {"objectID":"b929fcfbba7f7643df68339e3f78539325b88df64ac2935c7cfa8f31fea3392b","title":"Codex→Anthropic fallback: preserving prompt caching across the hop","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#codexanthropic-fallback-preserving-prompt-caching-across-the-hop","content":"Resolved section for cache-preservation. Depends on cache-codex-prefix for CodexNativeRequest and convertCodexRequestToClaudeRequest; both are cross-section contracts, not code that exists today (confirmed: zero hits for either name under test/ or src/lib/proxy/*.ts).","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"Codex→Anthropic fallback: preserving prompt caching across the hop","lvl3":""}},
10843
+ {"objectID":"99c1a0c1a0b3328b4edececb48a8caf62224168f6fde1a8b664a1be0281a1978","title":"0. Grounding corrections (read before the rest)","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#0-grounding-corrections-read-before-the-rest","content":"Two corrections to the original design's own grounding, found by spot-checking real data that already sits in this environment — neither was carried into the design, and both are load-bearing.\n\nA real Codex wire capture exists and was not consulted. scripts/generate-codex-fixtures.mjs's header comment says the shape is \"modeled on a real redacted codex_exec/0.155.1 capture (~/.neurolink/reference/codex-cli-wire-sample.json), which is NOT available in this environment.\" That file is present (note: \"Real Codex CLI 0.155.1 /responses request captured 2026-09-21 via a local listener\", read directly this pass). It changes two assumptions:\nIdentity fields are nested, not top-level. The real capture has body.prompt_cache_key: \"01a0c461-7737-7350-9e45-27875f2a6f40\" and body.client_metadata: { thread_id: \"01a0c461-...\", session_id: \"01a0c461-...\", turn_id, root_turn_id, ... } (prompt_cache_key === client_metadata.thread_id verbatim) — there is no top-level body.thread_id/body.session_id. The synthetic test/fixtures/codex-request-resumed-session.json puts session_id/thread_id at the top level of body, which this one real sample does not corroborate. Every affinity-key check must read client_metadata, not top-level fields (§6 below fixes this — resolves review Finding 3, adopted).\nThe functions/collaboration split is per-tool, not per-namespace. additional_tools.tools in the real capture is an array of two {type:\"namespace\", name, tools:[...]} objects. Inside the \"functions\" namespace: wait and request_user_input are type:\"function\" (JSON-schema parameters), but exec is type:\"custom\" with format:{type:\"grammar\", syntax:\"lark\", definition:\"...\"} — grammar, not JSON schema. Inside \"collaboration\": all six tools (followup_task, interrupt_agent, list_agents, send_message, spawn_agent, wait_agent) are type:\"function\" with normal parameters. This is the opposite of the synthetic generator's modeled assumption (\"the exec tool lives in collaboration, is type:custom\") and of the origin","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"0. Grounding corrections (read before the rest)","lvl3":""}},
10844
+ {"objectID":"9251bfea08d8fd0980ec18ec3f71cf753c0aafc26288f5906cd4ff275e483a09","title":"1. Types (add to src/lib/types/proxy.ts; already barrel-exported)","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#1-types-add-to-srclibtypesproxyts-already-barrel-exported","content":"src/lib/types/index.ts:65 already has export * from \"./proxy.js\" — no index.ts edit is needed (the original design listed it as a file to modify; dropped, it was redundant with the existing wildcard export).\n\nNote (resolves review Finding 6, adopted): ClaudeCacheControl (src/lib/types/proxy.ts:73-81) already has ttl?: \"5m\" | \"1h\" with a doc comment describing the 1.25x/2x tradeoff — confirmed zero live producers repo-wide (grep -rn '\"1h\"' src/lib hits only this type declaration and unrelated timeRange/timeout-string types). The real gap is narrower than \"add a field to the wire type\": it's that no function threads a caller-supplied ttl into the existing field.","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"1. Types (add to src/lib/types/proxy.ts; already barrel-exported)","lvl3":""}},
10845
+ {"objectID":"4a6e2cf01e9eb178bc84bd288224335a6dc3c5abfdd5364c41733a25ce8e5454","title":"2. Breakpoint placement + enforced system-shape invariant","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#2-breakpoint-placement-enforced-system-shape-invariant","content":"Given ClaudeRequest (from cache-codex-prefix) with tools: ClaudeTool[] and system: ClaudeTextBlock[] (ClaudeRequest.system?: string | ClaudeTextBlock[], src/lib/types/proxy.ts:158):\n\nContract cache-codex-prefix must satisfy, enforced defensively here (resolves review Finding 1, adopted): system contains exactly the developer-role-derived blocks and nothing else — today length === 4, confirmed across all 4 synthetic fixtures and the one real capture (§0). environment_context and any other per-turn payload belong in messages, never appended to system. system[system.length-1] is only a safe breakpoint-1 anchor while this invariant holds; trusting it silently is exactly the \"silent length change with no visible symptom other than a slow cache-hit-rate metric\" the review flagged.\n\nPlacement (unchanged mechanism, now guarded):\nBreakpoint 1: call assertClaudeSystemPrefixShape(request.system, 4) first; on success mark cache_control on system[system.length-1] — exactly applyClaudeRequestCacheBreakpoints's existing branch (src/lib/utils/anthropicCacheBreakpoints.ts:244-251, Array.isArray(out.system) && out.system.length > 0 && existing === 0). Because Anthropic renders tools → system → messages, this one marker covers the tool-declarations prefix and all four developer blocks together. No change needed to this branch itself.\nBreakpoints 2-4: exactly applyClaudeHistoryBreakpoints (anthropicCacheBreakpoints.ts:287-324) — walks messages from the tail, marks the last text/tool_result block of up to 3 messages, skips a message with no markable block without spending budget. Unchanged.\n\nRequired code change: CLAUDE_EPHEMERAL (anthropicCacheBreakpoints.ts:273, { type: \"ephemeral\" }, no ttl) means every call gets the 5-minute default. Thread an optional TTL into breakpoint 1 only:\n\nAdd function ephemeral(ttl?: \"5m\" | \"1h\"): ClaudeCacheControl { return ttl ? { type: \"ephemeral\", ttl } : CLAUDE_EPHEMERAL; }, used only for breakpoint 1 (the system/tools branch at line 244-251 and the ar","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"2. Breakpoint placement + enforced system-shape invariant","lvl3":""}},
10846
+ {"objectID":"8c09a99076f710a38637f03840911ef761fa74f01b04f14a815f85f40c5aa30b","title":"3. TTL choice: 1 hour on breakpoint 1, 5 minutes on breakpoints 2-4","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#3-ttl-choice-1-hour-on-breakpoint-1-5-minutes-on-breakpoints-2-4","content":"Verified rates, src/lib/utils/pricing.ts:170-175 (claude-sonnet-5): input $2.00/MTok, output $10.00/MTok, cache read $0.20/MTok (0.1x), cache write $2.50/MTok at 5m (1.25x). CATALOG_PRICING's type (pricing.ts:31-40) has a single cacheCreation?: number field, applied unconditionally in the cost formula regardless of the request's actual TTL (pricing.ts:1061-1064, verified: cost += usage.cacheCreationTokens * (rates.cacheCreation ?? rates.input) with no TTL branch) — there is no distinct 1-hour rate field today; a 1h-TTL write is silently billed at the 5m/1.25x rate unless pricing.ts gains one (Risk, unresolved by this section — belongs to whoever owns cost tracking).\n\nUsing codexFallback.ts's own measured stable-head size (3,700 tokens, cited at codexFallback.ts:340-361) as the worked example, 20 turns:\nAll gaps 5 min (codexFallback.ts:296-298: \"a fallback that arrives in bursts separated by long gaps\" — confirmed, this exact phrase is in the file): 5m TTL pays a second write: 2 writes + 18 reads = $0.0330. 1h TTL unchanged at $0.0288 — now cheaper, and every additional gap widens the gap further.\n\nChoice: 1-hour TTL on breakpoint 1 only (tools+system prefix, the segment §0 shows is plausibly stable in shape and, per the still-open turn-to-turn question, at least stable in developer-block count); 5-minute default (unchanged) on breakpoints 2-4, which slide forward every turn or two (§7) — paying 2x to protect a marker about to be superseded is pure waste. What this gives up: if Codex-fallback bursts always land inside 5 minutes of each other, this costs ~24% more on breakpoint 1's write for zero benefit — an assumption from codexFallback.ts's own comment about the opposite-direction traffic pattern, not a measured fact for this direction (no baseline exists; the feature doesn't exist yet). Revisit using §8's measurement once live.","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"3. TTL choice: 1 hour on breakpoint 1, 5 minutes on breakpoints 2-4","lvl3":""}},
10847
+ {"objectID":"9344170e321d638525649dd89fe78ee85d350131e6470bc2f4114323c75b6d0f","title":"4. Role-alternation precondition (resolves review blocker 2, corrected)","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#4-role-alternation-precondition-resolves-review-blocker-2-corrected","content":"The hazard is real. Anthropic requires alternating user/assistant roles in messages; this codebase already treats consecutive same-role messages as a defect elsewhere: src/lib/context/stages/slidingWindowTruncator.ts:29-38 (validateRoleAlternation, which warns Role alternation broken at index ${i}), src/lib/providers/anthropic/client.ts:2417 (\"Anthropic requires user/assistant alternation around tool blocks\"), test/continuous-test-suite-tasks.ts:2466 (asserts alternation as an invariant). Per §0, the real capture's input[5]/input[6] are both role:\"user\" back to back (an auto-injected <recommended_plugins> notice, then the literal user text \"say OK\", no assistant turn between) — the same hazard shape as the synthetic fixtures' user-ask-then-environment_context pair, just in reverse order. If cache-codex-prefix maps these 1:1 into two separate ClaudeMessage entries, the request has two back-to-back user messages and Anthropic returns 400 on every Codex-fallback request that hits it.\n\nCorrection to the review's own fix: the review cited openaiFormat.ts:604-654 as \"the pattern this same repo's OpenAI bridge already uses for tool-role folding\" — verified false. Read directly: that block pushes one separate {role:\"user\", content:[...]} message per OpenAI \"tool\"-role input (openaiFormat.ts:652-662), with no merge/coalesce step anywhere in the file (grep -n \"messages\\[messages.length - 1\\]\\|merge\\|fold\" src/lib/proxy/openaiFormat.ts → zero hits). Multiple consecutive OpenAI tool messages would produce the identical back-to-back-user hazard in the existing, shipped bridge — there is no working precedent to reuse; the repo-wide search for any merge/coalesce helper (mergeConsecutive|foldConsecutive|coalesceMessages|mergeSameRole) matches only the truncator's warn-only validateRoleAlternation.\n\nResolution, scoped to avoid regressing the existing OpenAI bridge: do not add a hard throw inside the shared applyClaudeRequestCacheBreakpoints (it would newly reject already-shipped, al","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"4. Role-alternation precondition (resolves review blocker 2, corrected)","lvl3":""}},
10848
+ {"objectID":"06b4d4d74c1d28bd3985348f5f6cfcacbd6f4ee5cb4671ea467a6ef527feffe6","title":"5. Prefix determinism as an enforceable property + test","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#5-prefix-determinism-as-an-enforceable-property-test","content":"Property: for two consecutive turns of the same conversation with no tool added/removed, tools and system (all 4 elements, per §2's enforced invariant) must serialize to byte-identical JSON. messages is explicitly excluded — it's expected to vary.\n\nWhat must be byte-stable: no timestamp, request id, or per-turn nonce anywhere in tools or system. None of the fixtures nor the one real sample currently carry one; the hazard is a future Codex CLI version injecting one, which nothing in this repo can prevent upstream — only detect via this test.\n\nTest — test/continuous-test-suite-codex.ts (CI-gated: package.json:173 defines \"test:codex\": \"pnpm exec tsx test/continuous-test-suite-codex.ts\"; .github/workflows/ci.yml:452 runs pnpm run test:codex under the provider-safety-net-shards job's matrix.group == 'rest' — same job, same shard group, as test:proxy-reliability at ci.yml:445, so both are gated together). Uses the file's actual idiom, verified by reading it: import { assert, assertEqual, defineSuite, runCLI } from \"./helpers/harness.js\" (line 87), const { test, runSuite } = defineSuite(\"Codex Pool Engine\", { offline: true }) (line 89) — not raw node:assert.\n\nJSON.stringify is safe here (no canonical serializer needed) only because every object on this path is built via .map()/spread over source arrays in fixed field order (§2's ordering constraint) — if cache-codex-prefix ever stages a field through a Record, this equality check goes flaky on key order and must switch to a sorted-key serializer. Needs new fixture test/fixtures/codex-request-turn2-same-session.json (see Files).\n\nNaming contract on cache-codex-prefix (resolves review Finding 5, adopted — neither helper exists today, confirmed via grep): loadCodexFixture(name: string): CodexNativeRequest and convertCodexRequestToClaudeRequest(native: CodexNativeRequest): ClaudeRequest are net-new; this section only names and consumes them, it does not own their implementation.","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"5. Prefix determinism as an enforceable property + test","lvl3":""}},
10849
+ {"objectID":"2672bf49096d7f39fe0c3a0c661cdfff223c1a06b455e7f3e0e2d181796d2161","title":"6. Account cache locality (affinity)","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#6-account-cache-locality-affinity","content":"Verified: selectClaudeProxyAccountOrder's sessionId param (src/lib/server/routes/claudeProxyRoutes.ts:2638-2645) is a plain string | undefined with zero format validation, flowing straight into sessionAffinity.get(sessionId, now, idleTtlMs) / .bind(sessionId, accountKey, now) (src/lib/proxy/sessionAffinity.ts:13,32 — both plain-string keyed, no parsing). The only restriction to Claude-Code-shaped ids lives entirely in extractSnapshotBody (claudeProxyRoutes.ts:3133) → parseClaudeCodeUserId (src/lib/auth/anthropicOAuth.ts:143, requiring metadata.user_id to parse as {device_id: 64-hex, account_uuid: uuid, session_id: uuid}). The storage/routing layer needs no changes; the gap is only that nothing hands it a key for Codex-origin traffic today.\n\nIdentity a Codex request can supply — corrected against the real capture (resolves review Finding 3, adopted): the original design's priority list (body.thread_id, then body.session_id, both top-level, from the synthetic resumed-session fixture) is contradicted by the one real sample, which has neither top-level field but does have body.prompt_cache_key (top-level) and body.client_metadata.thread_id / body.client_metadata.session_id (nested), with prompt_cache_key === client_metadata.thread_id verbatim. Prefer the client's own pre-computed key — it is already exactly the signal being reconstructed, and it's the same key the real Codex client uses for its own infra affinity:\n\nThe three-way prefix (codex-thread:/codex-session:/codex-prefix:) keeps this from colliding with a Claude-Code metadata.user_id-derived UUID or with itself across cases. Reserve the codex-prefix: hash fallback for when the wire genuinely carries none of prompt_cache_key/client_metadata.thread_id/client_metadata.session_id — UNRESOLVED: whether a genuinely first-turn native Codex request ever omits all three — the one real sample has all three populated. The check that would settle it: capture one real first-turn (no prior /backend-api/codex call in that sessi","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"6. Account cache locality (affinity)","lvl3":""}},
10850
+ {"objectID":"67524fc996c119db0518a5872294d5cc29a6c67e83aed840d35ba49956ce95bd","title":"7. How breakpoints move as the conversation grows","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#7-how-breakpoints-move-as-the-conversation-grows","content":"No new mechanism: applyClaudeHistoryBreakpoints (§2.2) already rolls forward every turn — it re-marks the last block of the newest ~3 messages each call; a byte-identical previously-marked prefix from last turn is a cache read this turn, not a re-write, so re-marking it is free. The stable head (breakpoint 1) never moves. Depends on cache-compaction: if compaction rewrites or drops messages inside the currently-marked rolling window (rather than only older, already-unmarked history), every breakpoint at or after the rewritten point misses for that turn — inherent to Anthropic's byte-identity cache semantics. cache-compaction's design should prefer compacting only messages strictly older than the last-3-marked window, or account for the resulting cache-miss cost explicitly.","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"7. How breakpoints move as the conversation grows","lvl3":""}},
10851
+ {"objectID":"3d1f1497e53e438047d4a4922022c85f719ac41d33aa4d9f9a0b33ec3e6244fd","title":"8. Expected cache-hit outcome and the exact measurement","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#8-expected-cache-hit-outcome-and-the-exact-measurement","content":"Fix: widen proxyTracer.ts's tokenLabels (verified exact shape, src/lib/proxy/proxyTracer.ts:891-893: { model: this.model, account: this.accountEmail ?? \"unknown\" }, no origin field) with one new low-cardinality field, mirroring the existing setServedAccount (proxyTracer.ts:502) / setModelSubstitution (proxyTracer.ts:638) pattern — both verified real, both mutate a private field then call this.rootSpan.setAttribute(...):\n\nCall tracer.setRequestOrigin(\"codex-fallback\") at the point the new outbound path enters the Anthropic dispatch — same unresolved entry-point location as §6.\n\nExpected outcome: proxy_tokens_cache_read for origin='codex-fallback' should become non-zero and dominate over proxy_tokens_cache_creation after the first turn of each conversation/prefix-bucket. No specific target ratio is asserted — no baseline exists for this direction yet.\n\nPost-rollout query (columns previously verified live against this environment's metrics store; cumulative-monotonic counter, so MAX(value) per series key before summing, never SUM(value) directly):\n\nRun identically against proxy_tokens_cache_creation; hit rate = cache_read / (cache_read + cache_creation). Pair with the same WHERE/GROUP against proxy_tokens_input as a sanity control — an empty result on the cache queries is \"not measured,\" not \"zero,\" unless the input-token control for the same filter is non-empty (proving traffic flowed at all). Not done in this pass: no live baseline query was run — the origin label doesn't exist yet.","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"8. Expected cache-hit outcome and the exact measurement","lvl3":""}},
10852
+ {"objectID":"fe3f1b672ec6687f716ce5c95641ad2af12f53fe38d35c0174b7a6455b6fc457","title":"Files","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#files-1","content":"| Path | Action | Purpose |\n| ----------------------------------------------------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| src/lib/utils/anthropicCacheBreakpoints.ts | modify | Add optional ClaudeCacheBreakpointOptions param to applyClaudeRequestCacheBreakpoints, applied only to breakpoint 1 via a new ephemeral(ttl?) builder; breakpoints 2-4 unchanged. |\n| src/lib/proxy/codexOutboundCache.ts | create | assertClaudeSystemPrefixShape, assertClaudeMessagesAlternate, codexAnthropicAffinityKey, ClaudeSystemPrefixShapeError. |\n| src/lib/types/proxy.ts | modify | Add ProxyRequestOrigin, ClaudeCacheBreakpointOptions, CodexAnthropicAffinityKey. |\n| src/lib/proxy/proxyTracer.ts | modify | Add requestOrigin field (default \"native\"), setRequestOrigin(), widen tokenLabels on the token/cost counters at lines 891-922. |\n| test/continuous-test-suite-codex.ts | modify | Add §5's determinism + placement test, using the file's existing defineSuite/test/assertEqual/assert idiom (imported line 87, instantiated line 89). |\n| test/fixtures/codex-request-turn2-same-session.json | create | Second-turn fixture: same tools + 4 developer messages as codex-request-interactive-mode.js","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"Files","lvl3":""}},
10853
+ {"objectID":"63d19325ea8b0ea3f493aca4cc3efa4a4fafb6646af6297666c8b9996e577bb3","title":"Tests","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#tests-1","content":"Byte-stability + placement determinism — test/continuous-test-suite-codex.ts, new test(...) block (§5): two consecutive-turn fixtures with unchanged tools/developer-messages produce (a) system.length === 4 on both turns, (b) JSON.stringify-identical tools and system, (c) system[3].cache_control.ttl === \"1h\" on both — not just prefix-slice equality, which would pass even with a misplaced marker (Finding 4 fix).\nTTL selection — same file: applyClaudeRequestCacheBreakpoints(request, { ttl: \"1h\" }) sets system[system.length-1].cache_control.ttl === \"1h\" on breakpoint 1 while rolling message breakpoints 2-4 keep cache_control.ttl undefined (5m default).\nBudget ceiling — same file: a Codex-shaped request already carrying one cache_control marker in its message history never exceeds ANTHROPIC_MAX_CACHE_BREAKPOINTS (4, anthropicCacheBreakpoints.ts:32) after applyClaudeRequestCacheBreakpoints runs, reusing the existing countAnthropicCacheMarkers (anthropicCacheBreakpoints.ts:97) invariant.\nSystem-shape guard — same file: assertClaudeSystemPrefixShape throws ClaudeSystemPrefixShapeError when given a system array of length 5 (simulating environment_context leaking into system), and passes silently at length 4.\nRole-alternation guard — same file: assertClaudeMessagesAlternate throws naming the offending index on a [user, user] messages array (the exact real-capture and synthetic-fixture shape from §4), and passes on a well-formed alternating array.\nAffinity-key derivation — same file: four fixtures (has prompt_cache_key / has only client_metadata.thread_id / has only client_metadata.session_id / has none) produce correctly-prefixed codexAnthropicAffinityKey values (codex-thread:/codex-thread:/codex-session:/codex-prefix:); two \"none\" fixtures with identical tools+developer-messages but different environment_context/user turns produce the same codex-prefix: key, proving it is prefix-derived, not full-body-derived.\nPost-rollout live measurement (not a unit test, an explicit accep","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"Tests","lvl3":""}},
10854
+ {"objectID":"d9e5c4fb16eb23fa18343d304300da51315a3f7e739b75e62249044245095b77","title":"Risks","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#risks","content":"1-hour TTL on breakpoint 1 costs ~24% more than 5-minute if Codex-fallback bursts always land under 5 minutes apart — an assumption borrowed from codexFallback.ts's comment about the opposite-direction traffic pattern, not a measured fact for this direction; no baseline exists yet (§3).\nFirst-turn Codex session identity beyond prompt_cache_key/client_metadata is still unverified against more than one live capture (§0, §6 UNRESOLVED) — if it is ever genuinely absent, concurrent distinct conversations sharing one Codex agent config collide into the same prefix-derived affinity bucket until each gets its own id.\nHard architectural blocker, unchanged: codexAnthropicAffinityKey can only reach selectClaudeProxyAccountOrder/bindSessionAfterServe if the not-yet-decided Anthropic dispatch entry point exposes an explicit sessionAffinityKey override seam instead of hardcoding extractSnapshotBody(body) — verified current call site (claudeProxyRoutes.ts:5364-5366) has no such seam today.\npricing.ts has no dedicated 1-hour cache-write rate field (verified, §3) — any cost computation for this path that doesn't add one silently uses the 5-minute (1.25x) rate and under-reports actual spend on 1h-TTL writes.\nIf cache-compaction rewrites a message inside the currently-marked rolling window, every breakpoint at or after that point misses simultaneously for that turn — a full-price spike indistinguishable from normal operation unless the new origin-labeled counters (§8) are actively watched for a drop-then-plateau pattern.\nWidening proxyTracer's tokenLabels with a new origin field changes the label set of an already-live, already-queried OTLP counter — confirm no existing dashboard/alert assumes exactly {model, account} as the complete label set before shipping.\nThe role-alternation guard (§4) and system-shape guard (§2) are scoped to the new Codex-fallback entry point only, by design, to avoid regressing the existing OpenAI bridge's already-shipped (separately latent, out-of-scope-here","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"Risks","lvl3":""}},
10855
+ {"objectID":"df035c62f0167fe540ffd558b538382bef1d43eb53c97d1989ad4159183c789c","title":"Codex Outbound Fallback — Trigger Policy, In-Flight Commitment Safety, Loop Prevention, Accounting","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#codex-outbound-fallback-trigger-policy-in-flight-commitment-safety-loop-prevention-accounting","content":"Resolved section for \"Codex outbound fallback\" (native Codex client request falls back to Anthropic/Vertex). All line numbers below are approximate (~) pointers verified against /Users/sachinsharma/Developer/Official/fix/proxy-ci-gaps-and-dead-leg-alert on 2026-09-27; re-grep before wiring, this repo's own CI-reading lessons apply to source line drift too.","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"Codex Outbound Fallback — Trigger Policy, In-Flight Commitment Safety, Loop Prevention, Accounting","lvl3":""}},
10856
+ {"objectID":"aa4bc8159eafd24e706ac51252e8c06f580647a3cb2445aa1e9a9c585e5c2cfb","title":"0. Corrections carried in from design + review, confirmed by direct read this session","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#0-corrections-carried-in-from-design-review-confirmed-by-direct-read-this-session","content":"Four pre-commit insertion points, not two (design's own correction, re-verified): codexProxyRoutes.ts:878 (accounts.length===0), :895-896 (eligible.length===0), :1057-1076 (non-retryable transport error inside the inner per-account fetch catch, un-rotated single-account terminal return), :1454-1458 (end-of-account-loop fallthrough). Confirmed the third site verbatim: the catch block computes errorCode, and only rotates (break) when errorCode is one of UND_ERR_CONNECT_TIMEOUT|ECONNREFUSED|ENOTFOUND|EAI_AGAIN; every other transport error hits return buildCodexErrorResponse(502, ...) immediately, trying no other account.\nProxyContextPreflightError/token-budget errors are not \"re-thrown past\" the fallback sites — they never reach them. Corrected from the design's own §1 table: codexProxyRoutes.ts:850-861 catches ProxyContextPreflightError locally and returns buildCodexErrorResponse directly inside dispatch()'s own outer try, before any account is even loaded; :961-972 does the same for getProxyTokenBudgetError. Both are independent, self-contained terminal returns, not exceptions that skip past the four insertion points listed above — they simply never touch those four call sites at all. The trigger-table conclusion (never fall back) is unchanged; only the mechanism description changes.\nServerContext.metadata is Record<string, unknown> at src/lib/types/server.ts:291 (design cited :256; corrected pointer, same fact).\nrecordFallbackAttempt's shape, classifyProxyFailureCode's vocabulary, preflightAnthropicStream's four-kind result, buildProxyTranslationPlan's single-entry dedup, executeClaudeCodexFallback's nested-ctx pattern (${ctx.requestId}:codex-fallback), and test:codex → test/continuous-test-suite-codex.ts — all re-read this session and match exactly as designed/reviewed.\nCI job naming (review's minor finding, adopted): the required check is provider-safety-net (ci.yml:330), which is a thin needs:[provider-safety-net-shards] pass-through with if: always(). The actual","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"0. Corrections carried in from design + review, confirmed by direct read this session","lvl3":""}},
10857
+ {"objectID":"b7f180f9d8a074c15628193e2b7b0db775850568f4aae519251dfbec51372b8b","title":"1. Trigger policy — total function over a classified error","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#1-trigger-policy-total-function-over-a-classified-error","content":"New type, src/lib/types/codex.ts (named export, type alias only — no interface, per repo rule 7):\n\n\"context_preflight\" and \"token_budget\" are dropped from this union (review-adjacent correction, §0): those two conditions never reach a call site that would construct a CodexOutboundFailureInput at all (see §0), so encoding them as classifier inputs was dead code the classifier could never receive. Not modeled ⇒ not silently mis-triggered.\n\nNew function, src/lib/proxy/codexOutboundFallback.ts (new file):\n\nclassifyProxyFailureCode is reused unchanged from src/lib/proxy/proxyFailureDetails.ts:4-29 (confirmed vocabulary: cyber_policy|content_policy_violation|content_filter|safety_violation → {403,false}; max_output_tokens|context_length_exceeded|invalid_request_error|empty_response → {undefined,false}; else {status: code==='rate_limit_exceeded'?429:undefined, retryable:undefined}).\n\nTrigger/no-trigger table:\n| Condition | Fallback? | Why |\n|---|---|---|\n| no_accounts / all_accounts_cooling | yes | unconditionally terminal today; says nothing about request validity |\n| 429 on an account, mid-rotation | no fallback here | existing cooldown+rotate already tries the next Codex account; only account_loop_exhausted with a still-429-shaped lastStatus triggers fallback |\n| 401/403 exhausted after refresh+rotate | yes, via account_loop_exhausted | credential failure on Codex's OAuth pool says nothing about Anthropic's |\n| 5xx exhausted after rotation | yes, via account_loop_exhausted | classic provider-outage case |\n| non-retryable transport error, single account | yes, via network_error_unretryable | corrected insertion point #3; today silently terminal, zero retries |\n| retryable transport error | no fallback here | existing same-account/rotate logic handles it; only exhaustion reaches account_loop_exhausted |\n| deliberate 4xx about request validity (any code classifyProxyFailureCode marks non-retryable, or an unrecognized code with lastStatus in 400-499 excluding 429) | never |","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"1. Trigger policy — total function over a classified error","lvl3":""}},
10858
+ {"objectID":"34488fbb61f78386866bbc43fa18d62d49c42f1e2f39daedae7ad8b6e4b63372","title":"2. Streaming commitment semantics","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#2-streaming-commitment-semantics","content":"Corrected commit point (review [blocker] + [major], both adopted — this materially changes the design from the prior draft):\n\nThe prior draft planned to re-run preflightAnthropicStream(reader) on the value returned by handleAnthropicRoutedClaudeRequest and to treat kind:\"transport_error\" the same as empty/sse_error (both \"safe to try next leg\"). Both are wrong, confirmed by direct read:\nhandleAnthropicRoutedClaudeRequest already ran the full account loop internally, including preflightAnthropicStream, before ever returning to its caller (claudeProxyRoutes.ts:10949, return successResult.response; — the loop only exits once an account's attempt is fully resolved as served/terminal). Re-running the preflight on the returned value re-buffers bytes that already passed and cannot produce a different verdict, and has no way to unwind an already-finalized account selection if it tried to. Do not call preflightAnthropicStream a second time anywhere in the Codex-outbound path.\nhandleAnthropicStreamingSuccessResponse's own transport_error branch (claudeProxyRoutes.ts:7106-7135) is categorically terminal, never rotated, with an explicit comment: \"The POST has already returned a response. The upstream may have started processing it, so replaying it on another account could duplicate work\" → it returns served:false via finalizeAnthropicTerminalTransportError, which itself is folded into whatever handleAnthropicRoutedClaudeRequest ultimately returns as a terminal failure, not a retry signal. The ambiguous-side-effects concern is generic to \"did the POST already leave the process,\" not specific to same-vs-cross-engine, so it transfers unchanged to this hop: Codex must not further rotate to Vertex/a different Anthropic account past this outcome either. Because it is already terminal inside handleAnthropicRoutedClaudeRequest, no special casing is needed at the Codex-outbound layer — it simply falls out of the ordinary \"did this call succeed\" check in §4 below as a failure with status","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"2. Streaming commitment semantics","lvl3":""}},
10859
+ {"objectID":"8f67bd3d725852b79afe878544b4af7a1bad8a426ffefe6f47555bc14a460b99","title":"3. Loop prevention","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#3-loop-prevention","content":"Existing state (confirmed): CODEX_FALLBACK_METADATA_KEY = \"neurolink.codexFallback\" (codexProxyRoutes.ts:109), read at :542,:556,:670 (accounting/logging only, no routing gate). isFallbackRequest computed at :669-670. buildProxyTranslationPlan (routingPolicy.ts:33-75, confirmed) dedupes only an exact match against primary {provider,model}; appends auto-provider only when allowAutoFallback is explicitly true and the chain is empty/already-deduped-to-one. No chain-wide visited-set.\n\nInvariant: at most one engine crossing per client request per direction; a leg that is itself already an inner fallback of the other engine may never itself fall outbound. Formally: the ordered sequence of engines serving any one client request has length ≤ 2 with no repeat — [codex], [anthropic], [codex,anthropic], [anthropic,codex] are the only allowed sequences.\n\nTwo independent mechanisms:\nMarker-based cut (primary).\nAt the top of dispatch() in codexProxyRoutes.ts, where isFallbackRequest is already computed (:669-670): if isFallbackRequest === true, skip every call to classifyCodexOutboundFailure/attemptCodexOutboundFallback unconditionally at all four insertion points — they fall straight through to their existing terminal responses, unchanged.\nattemptCodexOutboundFallback builds the nested Anthropic-facing ServerContext (mirrors executeClaudeCodexFallback's nested-ctx construction, codexProxyRoutes.ts pattern at claudeProxyRoutes.ts:5564-5619, inverted) and sets:\n \n on the same untyped ServerContext.metadata bag (types/server.ts:291) — no type change, matching the \"neurolink.codexFallback\" convention exactly.\nOne additive line inside handleAnthropicRoutedClaudeRequest (claudeProxyRoutes.ts:10241, its existing buildProxyTranslationPlan call):\n \n buildProxyTranslationPlan's signature is untouched. Confirmed grep -rn '\"neurolink.codexOutboundFallback\"' returns zero existing writers today, so this filter is provably a no-op for every current caller.\nDepth counter (defens","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"3. Loop prevention","lvl3":""}},
10860
+ {"objectID":"946d37ca9df040de443c00067c0e76808ee77cb46209fbad6aa54fab1d2868ba","title":"4. Accounting","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#4-accounting","content":"Decision: mirror the nested-ctx pattern (Codex-as-fallback-target), inverted — not the flat/shared-ctx Vertex pattern. Anthropic's own account rotation (ranking, admission leases, cooldowns, session affinity) is reachable only through a route-shaped, currently-unexported function (handleAnthropicRoutedClaudeRequest, confirmed not exported today), structurally identical to why Codex needed the heavier pattern in the existing Claude→Codex direction. The lightweight Vertex pattern is unavailable without duplicating Anthropic's rotation logic in codexProxyRoutes.ts (rejected) or genuinely reusing the route function (this design).\n\nNew minimal export, src/lib/server/routes/claudeProxyRoutes.ts:\n\nEvery routing/account-strategy field mirrors handleAnthropicRoutedClaudeRequest's own parameter list exactly (confirmed at claudeProxyRoutes.ts:10193-10214) and must be read from the same live ProxyRuntimeConfigSnapshot the real /v1/messages handler resolves (requestRouting at the route registration, :11241) — never hand-rolled defaults, or the two paths drift.\n\nNew type, src/lib/types/codex.ts:\n\nStatus recovery — the corrected mechanism (§0's new finding drives this; the prior draft's plan to read outcome.status off a uniform shape does not survive contact with the code):\n\nexecuteAnthropicRoutedRequestForFallback builds its own child runtime context via createClaudeRequestRuntimeContext with one additive, optional field:\n\nWhen true, the returned logFinalRequest closure (built at claudeProxyRoutes.ts:9316-9333) becomes a no-op for the client-facing final-request-log row and this leg's own span-end only. It must NOT be a pure no-op: executeAnthropicRoutedRequestForFallback wraps it in its own outer closure that captures the call arguments into a local variable before discarding them, because logFinalRequest(status, accountLabel, accountType, errorType?, errorMessage?, extra?) is confirmed to be called synchronously, on every exit path except one, with the real numeric status, befo","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"4. Accounting","lvl3":""}},
10861
+ {"objectID":"610f05cb555bbf7c9d413bd14f4b98d80438ffbc77ff71462f071ca59aa386b7","title":"Risks / open items","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#risks-open-items","content":"The native Codex passthrough path (upstream.ok) still has no preflight-buffering equivalent to preflightAnthropicStream; unrelated pre-existing gap, not fixed here.\ntest/continuous-test-suite-proxy.ts is not invoked by any CI workflow; any new determinism case must land in test/continuous-test-suite-codex.ts or it gates nothing.\nproxy_fallback_* keeps {provider, model} labels; per-account attribution requires correlating against proxy_cost_usd_total instead.\nThis section assumes a translated ClaudeRequest and CodexResponsesStreamSerializer/translateAnthropicToCodexResponse already exist by the time attemptCodexOutboundFallback runs; both are explicitly owned by the translation-layer section.\nUNRESOLVED: whether a genuine native Codex client ever sends stream:false — the repo shows convertClaudeRequestToCodex always setting stream:true for the existing, opposite-direction leg, but nothing in this repo constrains what a real Codex CLI client sends inbound. The one check that would settle it: read the Codex Responses API client behavior directly (upstream OpenAI docs or a captured real request), not this repo, since this repo is the proxy, not the client.\nUNRESOLVED: the exact Response-vs-plain-object status of tryConfiguredClaudeFallbackChain's own .response field was not traced to its own terminal builder in this pass (time-bounded); §4's result instanceof Response / captured-logFinalRequest discriminator is designed to cover it either way, but the one check that would settle it with certainty is reading tryConfiguredClaudeFallbackChain (claudeProxyRoutes.ts:6035 onward) end to end before implementation.","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"Risks / open items","lvl3":""}},
10862
+ {"objectID":"0c56ec28b220ccaf05ed1d82358778678878bfc0414bfa2de8bb1a9873f7bf94","title":"Configuration surface, staged rollout — Codex outbound fallback","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#configuration-surface-staged-rollout-codex-outbound-fallback","content":"Scope: config schema, validation, runtime wiring, kill switch, PR sequencing, observability, docs. Does\nnot own translation (Codex Responses ⇄ Anthropic Messages body/stream), tool-call fidelity, or\ncache-breakpoint placement — those belong to cache-codex-prefix / cache-anthropic / cache-vertex. Every\ncitation below was re-read from .../fix/proxy-ci-gaps-and-dead-leg-alert on 2026-09-27; where the prior\ndesign's citation was off, the number here is the one actually in the file.","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"Configuration surface, staged rollout — Codex outbound fallback","lvl3":""}},
10863
+ {"objectID":"2d83e96fc0cc8aab2b8cb841ab658256fd8c98bbf95477af98105ba95561a576","title":"A. Types","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#a-types","content":"src/lib/types/subscription.ts, new type placed beside ModelMapping (1186–1190) and\nFallbackEntry (1193–1198), inside ProxyRoutingConfig (1201–1256, spillInflight is its last field\nat 1255):\n\nAdd to ProxyRoutingConfig after spillInflight (after line 1255):\n\nFallbackEntry reuse was checked and rejected — it carries reasoningEffort (\"Explicit Codex fallback\neffort\"), meaningless once the request is already Anthropic-format. ModelMapping's generic\n{from,to,provider} is reused for the override map — no direction-specific semantics baked in.\n\nsrc/lib/types/proxy.ts, ProxyRequestRoutingSnapshot (3744–3761) — add the same 3 fields,\nnon-optional/defaulted (request-time code reads via ProxyRuntimeConfigProvider = () =>\nProxyRequestRoutingSnapshot, 3819):\n\nProxyRuntimeConfigSnapshot = ProxyRequestRoutingSnapshot & {...} (3768) inherits them automatically —\nno separate edit there.","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"A. Types","lvl3":""}},
10864
+ {"objectID":"63260f4c94ef47b8181dfc8f45559626aac250bdde0e1b3427293c36bc36aa85","title":"B. Config parsing — src/lib/proxy/proxyConfig.ts","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#b-config-parsing-srclibproxyproxyconfigts","content":"Kebab keys: codex-outbound-fallback-enabled, codex-outbound-fallback-targets,\ncodex-outbound-fallback-model-mappings. All three read via readRoutingPolicyKey() (325–333,\npresence-based, explicit null rejected) — not readLegacyRoutingKey() (303–315, null-means-unset),\nwhich exists only for keys predating the routing-policy convention.\n\nHard validator, inside validateProxyConfig (339+), insert after the spill-inflight block (568–578,\nbefore line 579's closing brace of the hasRouting block):\n\nMAX_CODEX_OUTBOUND_FALLBACK_TARGETS = 8 is a new module constant next to MIN_SPILL_INFLIGHT/\nMAX_SPILL_INFLIGHT (274–277) — the prior design left this uncapped and flagged it as an open risk\n(unbounded chain degrades worst-case exhausted-turn latency linearly); 8 is a deliberate decision here (2\nproviders × up to 4 models each is generous headroom), following this file's precedent of small named\nMIN/MAX constants for array-shaped routing keys.\n\nSoft parser, inside parseRoutingConfig (684–1024, returns Partial<ProxyRoutingConfig> | undefined),\ninsert right before return result; (1024). Correction to the prior design: it cited account-allowlist's\nsoft-parse as the \"per-entry-drop\" precedent; re-read, account-allowlist (928–932) does no per-entry\nvalidation — it just coerces every entry to a trimmed string via String(entry).trim(). The real\nper-entry-drop precedent is model-mappings/fallback-chain (700–726, 730–760): each maps every entry,\ndrops ones missing required string fields with a logger.warn, filters nulls — the pattern to copy:\n\nNote (unchanged from prior design, re-verified): the two validators intentionally disagree on\nstrictness — hard validator rejects outright, soft parser drops the one bad entry — matching this file's\nexisting convention for the other 5 routing-policy keys.","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"B. Config parsing — src/lib/proxy/proxyConfig.ts","lvl3":""}},
10865
+ {"objectID":"8d534dc0d39936fdf8de1682a7584fa4bb73fe2c818737d071d252df6b7d1280","title":"C. Runtime wiring","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#c-runtime-wiring","content":"src/lib/proxy/runtimeConfig.ts, buildCandidate() (236–345): routing there is\nproxyConfig?.routing (287), typed Partial<ProxyRoutingConfig> | undefined, so\nrouting?.codexOutboundFallbackTargets etc. type-check once section A lands. Add, next to the existing\nspillInflight read (358):\n\n...then add all three to fingerprintSource's JSON.stringify (359–373 — already includes routing:\nrouting ?? null, so raw values are change-covered; the extra fields just give request-time code one\nalready-defaulted read) and to the frozen snapshot return (Object.freeze({...}), 376–400), in the same\nposition spillInflight occupies in each — copy-paste-and-rename, not a new mechanism.\n\nKill switch, mirroring resolveQuotaRoutingEnabled (62–70) with one deliberate default difference:\n\nEnv var NEUROLINK_PROXY_CODEX_OUTBOUND_FALLBACK — no collision with NEUROLINK_PROXY_CODEX_CAPTURE\n(unrelated debug flag, codexUsage.ts:211) or the mirrored precedent NEUROLINK_PROXY_QUOTA_ROUTING\n(runtimeConfig.ts:312). Env wins whenever set, identical precedence to quota routing.","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"C. Runtime wiring","lvl3":""}},
10866
+ {"objectID":"cb97cd01523849f93508e9bb06f26653a08ac66c697de22270abd670c0a702a8","title":"D. The two call sites that need a runtimeConfigProvider — corrected scope","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#d-the-two-call-sites-that-need-a-runtimeconfigprovider-corrected-scope","content":"Review finding, CONFIRMED by direct read, adopted: the prior design's PR2 claimed\nroutes/index.ts:75 could \"just also pass the existing runtimeConfigProvider\" into\ncreateCodexProxyRoutes alongside the other engines. That is false. There are two independent call\npaths, and only one of them has a provider today:\nsrc/cli/commands/proxy.ts (neurolink proxy start, live path) — runtimeConfigProvider IS\n built here, at 2209 (runtimeConfigStore ? () => runtimeConfigStore.getSnapshot() : undefined), and IS\n already passed to createClaudeProxyRoutes (2212–2222), createOpenAIProxyRoutes (2226–2231, 5th arg\n (request) => app.fetch(request), confirmed in-process not a socket call), and createGeminiProxyRoutes\n (2236–2240). createCodexProxyRoutes(\"\") at line 2235 is the one call passing only basePath — the\n real \"just thread the existing provider\" site, one line: createCodexProxyRoutes(\"\", runtimeConfigProvider).\nsrc/lib/server/routes/index.ts, createAllRoutes() (40–83) — the SDK-embeddable path. No\n engine receives a provider here: createClaudeProxyRoutes(undefined, basePath) (67),\n createOpenAIProxyRoutes(undefined, basePath) (71), createCodexProxyRoutes(basePath) (75),\n createGeminiProxyRoutes(undefined, basePath) (79) are all 2-arg calls, and CreateRoutesOptions\n (src/lib/types/server.ts:1410–1426) has no field for one — a pre-existing gap, not Codex-specific.\n\nResolution (scoped narrowly — no retroactive fix to openai/gemini's gap, out of scope here and risks a\nbehavior change on two engines nobody asked to touch): add one optional field to CreateRoutesOptions and\nthread it only to Codex:\n\nAn SDK consumer of createAllRoutes who never passes runtimeConfigProvider gets undefined threaded\nthrough exactly as codexProxyRoutes.ts already treats an absent provider (§E) — zero behavior change for\nevery existing caller.","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"D. The two call sites that need a runtimeConfigProvider — corrected scope","lvl3":""}},
10867
+ {"objectID":"35f1811a690ce842a5f2d72eeaf42861cf1ac0d83634e22bf8c208f65d7d27ec","title":"E. createCodexProxyRoutes signature extension — src/lib/server/routes/codexProxyRoutes.ts","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#e-createcodexproxyroutes-signature-extension-srclibserverroutescodexproxyroutests","content":"Confirmed: export function createCodexProxyRoutes(basePath: string = \"\"): RouteGroup (1666), handlers\n(ctx) => handleCodexResponsesRequest(ctx) / (ctx) => handleCodexModelsRequest(ctx) — single-arg,\nnothing closed over. RouteGroup (src/lib/types/server.ts:443–457) has no config-provider slot, unlike\nopenaiProxyRoutes.ts/geminiProxyRoutes.ts (explicit positional param) or claudeProxyRoutes.ts (union\n6th param AccountAllowlist | ClaudeProxyRouteRuntimeOptions, disambiguated by\nisClaudeProxyRouteRuntimeOptions() at 11097). Decision (re-verified sound): plain optional 2nd\nparameter, matching openai/gemini — Codex has no allowlist to disambiguate against, so Claude's\nunion-type trick is pure overhead here:\n\nThreaded down: handleCodexResponsesRequest(ctx, runtimeConfigProvider?) (539) →\nexecuteCodexResponsesRequest(ctx, runtimeConfigProvider?) (623, currently single-arg).","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"E. createCodexProxyRoutes signature extension — src/lib/server/routes/codexProxyRoutes.ts","lvl3":""}},
10868
+ {"objectID":"af188c55bf16f287c28724969ae67edea089750934253d0936134977f126a528","title":"F. Insertion points and the budget-lease requirement they must satisfy","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#f-insertion-points-and-the-budget-lease-requirement-they-must-satisfy","content":"Two insertion points, both confirmed by direct read:\n~895–896: if (eligible.length === 0) { ... } — today, an immediate buildCodexQuotaExhaustedResponse\n (429). New: before building that response, if runtimeConfigProvider?.().codexOutboundFallbackEnabled\n AND targets non-empty AND !isFallbackRequest, attempt the outbound chain instead.\n~1458–1461: end of the for (const account of eligible) loop —\n await recordFinalOutcome(lastAttemptedAccount, lastErrorStatus, {...}); return\nbuildCodexErrorResponse(...);. Same gate, symmetric (every pooled account tried and failed).\n\nReview finding, CONFIRMED, adopted as a hard requirement — missing from the prior design entirely.\nrecordFinalOutcome (738–760+) calls await settleBudget(...) as its literal first statement (744),\nbefore the finalOutcomeRecorded latch, writeFinalLog, or tracer?.end(). settleBudget (635–657)\neither confirms the last-attempted account's ProxyTokenBudgetLease via\nsettleProxyTokenBudget(budgetLease, actualTokens) when dispatched, or cancels via\nbudgetLease.cancelBeforeDispatch(). The per-account loop settles each iteration's lease at the top of the\nnext iteration (947–951) — but there is no next iteration once the pool is exhausted. The outer\ncatch (1465–1467) also calls settleBudget(), but only on a thrown error, not in a finally. If a new\noutbound-fallback branch returns a translated success response instead of falling through to\nrecordFinalOutcome/buildCodexErrorResponse, the last-attempted account's budgetLease is never\nsettled and its reserved token budget leaks indefinitely.\n\nRequirement, binding on PR 4/5: the outbound-fallback code at both insertion points must call\nawait settleBudget(actualTokens) (the closure already in scope inside executeCodexResponsesRequest)\nbefore returning any response — success or failure — since it cannot assume recordFinalOutcome runs\nafterward (on the success path it will not).","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"F. Insertion points and the budget-lease requirement they must satisfy","lvl3":""}},
10869
+ {"objectID":"a97e847933a8a10199f19a9dbcd7510dd1c77676094d93ca76210d2f73bb76a3","title":"G. Reentrancy guard (unchanged, re-verified sound)","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#g-reentrancy-guard-unchanged-re-verified-sound","content":"CODEX_FALLBACK_METADATA_KEY = \"neurolink.codexFallback\" (codexProxyRoutes.ts:109), read as\nisFallbackRequest = ctx.metadata?.[CODEX_FALLBACK_METADATA_KEY] === true (669–670), set by\nclaudeProxyRoutes.ts when Claude falls back into Codex. Both new insertion points (§F) must add\n!isFallbackRequest to their gate — without it, Claude → Codex (exhausted) → Anthropic → (fails) → Codex\nagain can loop; the flag already exists for exactly this hazard and the new direction must inherit it.","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"G. Reentrancy guard (unchanged, re-verified sound)","lvl3":""}},
10870
+ {"objectID":"d4b27ab316c85018a16aef24ad0db5672fbc010fb85baa1b677cd6d7561325c0","title":"H. Dispatch-target gap — still open, framing corrected","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#h-dispatch-target-gap-still-open-framing-corrected","content":"Review finding, CONFIRMED, adopted: the prior design characterized the loopback-dispatch option (Codex\n→ Claude engine via an HTTP-shaped internal request, the pattern openaiProxyRoutes.ts uses for its own\nbridge) as costing \"a real network hop.\" Not true of this repo's deploy path: openaiProxyRoutes.ts takes\ninternalDispatch?: (request: Request) => Response | Promise<Response> (line 295), dispatching via\ninternalDispatch ? internalDispatch(new Request(...)) : fetch(...) (432–433); cli/commands/proxy.ts\n(2226–2231) constructs createOpenAIProxyRoutes with (request) => app.fetch(request) as that 5th arg —\nconfirmed in-process, no socket. A Codex → Claude loopback built the same way is not inherently a\nnetwork-cost tradeoff; the real difference vs. a direct in-process ctx-spread call\n(executeClaudeCodexFallback, claudeProxyRoutes.ts:5564–5603, confirmed not exported) is API shape\n(Request/Response marshaling vs. direct ctx reuse), not transport cost.\n\nThis does not resolve the gap — genuinely open, not this section's call. claudeProxyRoutes.ts exports\nexactly 14 top-level symbols (resolveServedFallbackModel, createClaudeProxyRoutes,\ngetTransientSameAccountRetryDelayMs, getOverloadRotationDelayMs, parseClaudeErrorBody,\nisInvalidRequestError, isSubscriptionBetaRejection, isAccountEntitlementError,\nisDurableEntitlementBlock, buildProxyFallbackOptions, isTransientHttpFailure, isUpstreamOverload,\nredactProviderErrorMessage, __testHooks), none a symmetric handleClaudeMessagesRequest. Exposing one,\nor wiring the already-in-process openai-style loopback, is PR 3's job and not decided here — a\ntranslation/dispatch question for whichever sibling section (closest candidate: cache-anthropic) touches\nclaudeProxyRoutes.ts's export surface. executeVertexAnthropicFallback(args: {body, model, signal?,\nonTerminal?}): Promise<Response> (vertexAnthropicFallback.ts:611, shape confirmed) remains immediately\nreusable as-is for Codex → Vertex — zero new dispatch surface for that leg.","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"H. Dispatch-target gap — still open, framing corrected","lvl3":""}},
10871
+ {"objectID":"5f21ea053c45174cb01d896637af02ccdbbb42c6eeadb91ed46e6f72c62c214d","title":"I. Staged rollout (one commit per PR, scope-mandatory conventional commit, e.g.","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#i-staged-rollout-one-commit-per-pr-scope-mandatory-conventional-commit-eg","content":"feat(proxy-codex-fallback): ...; each PR must independently pass pnpm run check:all)\n\nPR 1 — No-op skeleton. Files: src/lib/types/subscription.ts (§A), src/lib/types/proxy.ts (§A),\nsrc/lib/proxy/proxyConfig.ts (§B). Nothing else changes; nothing reads the new fields yet. Test:\nvalidateProxyConfig accepts/rejects the 3 new keys in isolation.\n\nPR 2 — Runtime plumbing and both call sites, still no-op. Files: src/lib/proxy/runtimeConfig.ts (§C),\nsrc/lib/types/server.ts (§D, CreateRoutesOptions field), src/lib/server/routes/index.ts (§D),\nsrc/cli/commands/proxy.ts (§D, line 2235), src/lib/server/routes/codexProxyRoutes.ts (§E signature\nextension only — insertion points ~896/~1458 stay byte-identical; the new parameter is accepted, stored,\nnever branched on). Corrects the prior design's understated scope: explicitly includes the\nCreateRoutesOptions field and routes/index.ts threading, not just a one-line change at a site that\nturned out not to exist. Tests: configHash changes when -enabled flips (fingerprint wiring);\ncreateCodexProxyRoutes() with no 2nd arg still compiles/behaves identically; a\ncontinuous-test-suite-codex.ts regression booting routes with codexOutboundFallbackEnabled: true\nasserts the all-accounts-cooling 429 is unchanged.\n\nPR 3 — Claude-engine dispatch surface (blocked on §H). Adds only that surface plus its own tests, no\ncaller from codexProxyRoutes.ts yet — isolates the riskiest change (a 12.9k-line file, 14 exports) into\nits own revertable unit.\n\nPR 4 — Codex → Vertex leg. Lowest risk: executeVertexAnthropicFallback is already standalone.\nWires insertion points ~896/~1458 gated on codexOutboundFallbackEnabled && targets.some(t =>\nt.provider === \"vertex\") && !isFallbackRequest, applies the §F budget-settlement requirement, ships §J's\nobservability for this leg. Can land and be flag-tested before PR 3/5 are ready.\n\nPR 5 — Codex → Anthropic-pool leg. Depends on PR 3. Same insertion points for provider === \"anthropic\"\ntargets, applies codexOutboundFallbac","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"I. Staged rollout (one commit per PR, scope-mandatory conventional commit, e.g.","lvl3":""}},
10872
+ {"objectID":"4cf63af89729ff03412018d25d0be2a2b67ad64e615127b5c0c3700738b847bf","title":"J. Observability","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#j-observability","content":"tracer.setModelSubstitution(requestedModel, actualModel, actualProvider?) (proxyTracer.ts:638,\nconfirmed) feeds proxy_model_substitution_total{requested_model,actual_model} and needs zero code\nchanges — already called this way at the Vertex-fallback site (claudeProxyRoutes.ts:6180:\ntracer?.setModelSubstitution(body.model, vertexModel, \"vertex\")). A Codex model (gpt-5.x-*) as\nrequested_model cannot collide with any existing call site. Hard requirement on PR 4/5: call\nsetModelSubstitution(requestedCodexModel, actualModel, targetProvider).\n\nrecordFallbackAttempt (proxyTracer.ts:1082–1112) is called only from claudeProxyRoutes.ts today (6\nsites: 5722, 6214, 6244, 6340, 6445, 6478), signature {provider, model, status, errorMessage?,\ndurationMs}. Extend additively:\n\nReview finding, adopted, corrects the prior design's compatibility claim: the 3 fallback counters\n(fallbackAttemptsTotal/fallbackSuccessTotal/fallbackFailureTotal, meter.createCounter(...) at\nproxyTracer.ts:136-147) are cumulative monotonic OTel instruments. Adding direction to their label set\nis not backward-compatible — per this repo's own MAX-per-series-then-SUM convention a label-set\nchange starts a new series, exactly like the legKey text-format change below. Any dashboard/alert\nsumming these without grouping by direction silently under/double-counts once mixed-direction data\nexists, until updated (or treats pre-rollout data as implicitly claude-outbound) — remediate in the\nsame PR that ships the label.\n\nConfirmed pre-existing bug this change would otherwise inherit: trackFallbackLegHealth's legKey is\n ${provider}/${model} only (proxyTracer.ts:1092, no direction). A Codex-outbound-to-Anthropic leg\nand an existing Claude-outbound-to-Vertex leg sharing a {provider,model} would merge failure streaks —\none direction's burst could trip or reset the other's dead-leg alert. DEAD_FALLBACK_LEG_THRESHOLD = 20\nand MAX_TRACKED_FALLBACK_LEGS = 256 (proxyTracer.ts:1001,1013) stay unchanged (targets capped at 8,\n§B, no","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"J. Observability","lvl3":""}},
10873
+ {"objectID":"edc03fe124d27a81c7bbb6c043422639879695e1cc6b884c7b4b51e5507d0bb0","title":"K. Documentation (PR 6)","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#k-documentation-pr-6","content":"docs/features/claude-proxy-config-reference.md — 3 new \"Routing Fields\" rows (-enabled:\n boolean/false/No; -targets: CodexFallbackTarget[]/[]/No; -model-mappings: ModelMapping[]/[]/No);\n a \"CodexFallbackTarget Fields\" sub-table; a Validation Rules bullet: provider must be\n anthropic|vertex (hard error), array capped at 8.\ndocs/features/codex-proxy-support.md — new \"Outbound fallback (Codex → Anthropic/Vertex)\" section:\n off by default, config keys, env kill switch, reentrancy guard, per-stage status line.\ndocs/features/claude-proxy-observability.md — the §J queries, plus a note that legKey's format\n changes for every existing leg once PR 4/5 ship.","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"K. Documentation (PR 6)","lvl3":""}},
10874
+ {"objectID":"6613cb6c3d39455c967885d1bd473d97c14cc9cbb457f5da7bebc2e14b76411f","title":"L. Tests (exact file + assertion)","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#l-tests-exact-file-assertion","content":"test/continuous-test-suite-proxy-config.ts _(confirm exact filename at implementation time — nearest\n existing proxy-config suite)_: validateProxyConfig accepts a valid codex-outbound-fallback-targets\n array; rejects provider: \"openai\" (hard error) and an empty model; accepts \"true\"/\"false\" string\n spellings of -enabled; rejects a 9-entry target list (MAX_CODEX_OUTBOUND_FALLBACK_TARGETS);\n parseRoutingConfig drops one malformed entry from a 3-entry array without blanking the other two;\n kebab/camel dual-acceptance for all 3 keys, explicit null rejected per readRoutingPolicyKey's\n presence-based contract; NEUROLINK_PROXY_CODEX_OUTBOUND_FALLBACK=off disables the feature even with\n codex-outbound-fallback-enabled: true in config (mirrors the NEUROLINK_PROXY_QUOTA_ROUTING precedence\n test shape).\ntest/continuous-test-suite-proxy-reliability.ts (or the suite run-proxy-reliability.mjs names —\n confirm at implementation time): configHash changes when -enabled flips unset→true (proves\n fingerprintSource wiring); a reload with an invalid -targets value keeps the last-known-good snapshot\n (mirrors the existing performReload rejection pattern).\ntest/continuous-test-suite-codex.ts: createCodexProxyRoutes() with no 2nd argument still compiles,\n byte-identical (signature backward-compat); a runtimeConfigProvider snapshot with\n codexOutboundFallbackEnabled: true and empty targets still returns the existing 429 on\n all-accounts-cooling (PR 2 no-op); once PR 4 lands — cooling pool + one Vertex target asserts a served\n 200 with setModelSubstitution/setServedAccount called correctly and recordFallbackAttempt firing\n direction: \"codex-outbound\"; a ctx carrying CODEX_FALLBACK_METADATA_KEY: true must NOT trigger\n outbound fallback even with flag+targets set (§G); a request reaching the outbound branch and succeeding\n must still settle the last-attempted account's budget lease — assert via token-budget test hooks that no\n lease is left \"reserved\" (§F); once PR 5 lands —","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"L. Tests (exact file + assertion)","lvl3":""}},
10875
+ {"objectID":"4ca35be2343f331f568f96285b22b0666630ff7e4b93e481d32292e5eb2c5373","title":"M. Unresolved","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#m-unresolved","content":"UNRESOLVED: which suite file already covers validateProxyConfig/parseRoutingConfig unit cases for\n the routing-policy keys, so new tests extend it rather than duplicate it — settle with\n grep -rl \"validateProxyConfig(\" test/ and confirm which file is registered in a gated test:* script.\nUNRESOLVED: the account-label string PR 4/5 passes to setServedAccount for a Codex-outbound-served\n turn (cf. vertexAccount = vertex/${vertexModel} ) — depends on §H's dispatch-surface decision, not\n this section's to make; settle once the cache-anthropic/translation section lands.\nUNRESOLVED: whether proxy_errors_total's label set can filter to \"codex route only\" for a\n would-have-failed-anyway comparison — only its counter name was reconfirmed this pass; settle by\n reading the errorsTotal counter's add(...) call sites in proxyTracer.ts and listing every label key.\nUNRESOLVED (genuinely open per §H): whether PR 3 exports a new handleClaudeMessagesRequest-shaped\n handler from claudeProxyRoutes.ts or reuses the already-in-process openaiProxyRoutes.ts-style\n loopback — settle via the cache-anthropic section's own design once synthesized.","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"M. Unresolved","lvl3":""}},
10876
+ {"objectID":"a72edc69a633a801e4e1955addaa70789cb67bcd33d82733bb66633f3fd4fa07","title":"Codex outbound-fallback: validation plan","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#codex-outbound-fallback-validation-plan","content":"Scope: this section owns test suites, fixtures, CI gating, the live model matrix, and\nred-green defect injection for the Codex→Anthropic/Vertex outbound-fallback feature. It\ndoes not own the translator's type layer, trigger-policy gate, or rollout/config surface —\nthose are named where relied on and flagged depends_on at the end.","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"Codex outbound-fallback: validation plan","lvl3":""}},
10877
+ {"objectID":"eb302d8a59b4f6f0fc02548b85039561399daa3a8aee006b01c066bbe800580b","title":"0. Verified premise (spot-checked against the worktree, not carried forward blind)","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#0-verified-premise-spot-checked-against-the-worktree-not-carried-forward-blind","content":"additional_tools is two namespaces, not one, confirmed byte-for-byte in all 4 fixtures\n(test/fixtures/codex-request-{exec-mode,interactive-mode,resumed-session,tool-result-turn}.json)\nand in scripts/generate-codex-fixtures.mjs's own FUNCTION_TOOLS/COLLABORATION_TOOLS\nconstants (lines ~35–79) plus its header comment (lines 2–19):\nfunctions: read_file, apply_patch — ordinary {name, description, parameters} JSON-schema tools.\ncollaboration: exec (type:\"custom\", a grammar field holding a Lark grammar string,\n no parameters) and request_review (parameters, no type/grammar).\n\nClaudeTool (src/lib/types/proxy.ts:138–143, re-read directly) is exactly\n{ name: string; description?: string; input_schema: Record<string, unknown>; cache_control?: ClaudeCacheControl }\n— no grammar field, no custom-tool discriminant, anywhere in src/lib/. A native exec\ndeclaration has no faithful destination shape. This is a type ceiling, not a bug to patch\nlater. Whichever section owns the translator (codex-outbound-fallback.ts /\ntypes/codex.ts, likely cache-codex-prefix) must pick one of: (a) drop collaboration\nsilently — rejected, a coding agent's shell-exec capability vanishes with no signal; (b) a\nlossy JSON-schema wrapper that can't enforce the grammar; (c) fail the outbound fallback\nclosed whenever additional_tools.collaboration contains a type:\"custom\" entry. This plan\ndoes not pick for them, but every test and live scenario below is written so it fails\nloudly if no case exists for a type:\"custom\" tool, whichever of (a)/(b)/(c) is chosen.\n\nAlso confirmed live in the tool-result-turn fixture: exec's function_call.arguments is\nthe plain string \"ls -la\" — not JSON. Any translator step that does JSON.parse on\nfunction_call.arguments unconditionally will throw on real exec calls; A.1 has an\nexplicit case for this.","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"0. Verified premise (spot-checked against the worktree, not carried forward blind)","lvl3":""}},
10878
+ {"objectID":"9443571a0c7c812d3f771a6b8724f137b291a210df527a7e148a9aa84fc71c2e","title":"1. Suite placement and CI gating (resolved: 2 findings folded in)","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#1-suite-placement-and-ci-gating-resolved-2-findings-folded-in","content":"Two new suites, both integration/pure-function style matching the two existing patterns in\nthis repo (test/continuous-test-suite-proxy-fallback-parent.ts, 1331 lines, confirmed\ncreateProxyStartApp/InMemorySpanExporter/FixtureMetricReader; and\ntest/continuous-test-suite-proxy-fallback-errors.ts, 125 lines, confirmed a determinism-\nexception header importing pure functions from codexFallback.ts with no server/network):\n\n| New file | Model | Covers |\n| ------------------------------------------------------------- | --------------------- | ---------------------------------------------------------------------------- |\n| test/continuous-test-suite-proxy-codex-outbound-fallback.ts | -fallback-parent.ts | A.8 trigger-policy totality, A.9 loop prevention, A.10 commit-boundary rules |\n| test/continuous-test-suite-codex-outbound-translation.ts | -fallback-errors.ts | A.1–A.7, A.11 (pure functions, no server) |\n\nGating (verified directly, not from the grounding's stale numbers): both suites must be\nadded to scripts/run-proxy-reliability.mjs's checks array, which backs\npackage.json's test:proxy-reliability, run at .github/workflows/ci.yml:448\n(re-grepped: the grounding's :445 is stale by 3 lines — git show 47c4d1c7d added 3\ncomment lines near ci.yml:196, shifting everything below; test:proxy-telemetry is now at\nline 444, test:codex at line 452). That step runs inside job provider-safety-net-shards\nwith matrix.group == 'rest' (ci.yml:351–352), which provider-safety-net (ci.yml:330,\nneeds: [provider-safety-net-shards]) aggregates as the actually-required check\n(ci.yml:320–343) — this is the required gate the repo rules refer to.\n\nResolved placement finding (minor, adopted): scripts/run-proxy-reliability.mjs\ncurrently has exactly one raw, untemplated checks entry\n([\"tsx\", \"test/continuous-test-suite-vertex-a","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"1. Suite placement and CI gating (resolved: 2 findings folded in)","lvl3":""}},
10879
+ {"objectID":"45cfbab0e864d257c19eb71c3092282209c0e43c267a488553f28aec187ab234","title":"2. Fixtures","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#2-fixtures","content":"Existing (reused, unmodified): the 4 codex-request-*.json files above, all confirmed\nstore:false, all confirmed carrying additional_tools with both namespaces on every\nturn including the resumed-session and tool-result-turn fixtures (turn N of an ongoing\nconversation still resends the identical block — store:false means Codex never assumes the\nserver remembers prior tool declarations).\n\nNew, for A.6 byte-stability: test/fixtures/codex-native-request-cache-turn1.json and\n...-turn2.json, generated by extending scripts/generate-codex-fixtures.mjs (which already\nexports the exact building blocks needed — confirmed present: additionalToolsItem(),\ndeveloperMessageItems(), userMessageItem(text), functionCallItem(),\nfunctionCallOutputItem(), baseHeaders(...), baseBody({input, sessionId, threadId}),\nbuildFixture({...})). Add two more entries to the fixtures array:\nturn1: buildFixture({ mode: \"exec\", betaCompaction: true, betaResponsesLite: true, userTexts: [...] }) — i.e. the same additionalToolsItem() + developerMessageItems() prefix as the existing exec-mode fixture, so the stable prefix is byte-identical by construction.\nturn2: same buildFixture call plus extraInputItems: [functionCallItem(), functionCallOutputItem(), userMessageItem(\"<new turn text>\")] appended after the two turn-1 user messages.\n Both call the same additionalToolsItem()/developerMessageItems() functions — do not\n hand-duplicate the tool/developer-message literals into the new fixture pair, since a\n hand-duplicated copy is exactly the kind of accidental byte drift A.6 exists to catch.","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"2. Fixtures","lvl3":""}},
10880
+ {"objectID":"910a89bb8b208d89e88cf56fc3dfb334a3557ed512e3e6dab40d0798497e8e78","title":"3. Part A — deterministic offline suites","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#3-part-a-deterministic-offline-suites","content":"A.1 Request translation shape (file: test/continuous-test-suite-codex-outbound-translation.ts;\nfunction under test: convertCodexNativeRequestToClaude(body: CodexNativeRequestBody): ClaudeRequest,\nproposed new pure function in new src/lib/proxy/codexOutboundFallback.ts, structural\ninverse of the confirmed-existing convertClaudeRequestToCodex(body: ClaudeRequest, model: string, reasoningEffort?: CodexReasoningEffort): CodexResponsesRequest\nat src/lib/proxy/codexFallback.ts:407; CodexNativeRequestBody is a new type in\nsrc/lib/types/codex.ts, distinct from the existing CodexResponsesRequest type there,\nbecause CodexResponsesRequest is this repo's own outgoing shape for the forward\ndirection and has no additional_tools/namespace concept at all):\ndeveloper-role messages map to system text in order — load codex-request-exec-mode.json (4 developer messages), assert joined system text contains all 4 in original order.\nuser-role messages map to Claude user messages verbatim — byte-identical text per message, including the <environment_context> synthetic wrapper string.\nfunctions-namespace tools rename parameters to input_schema, deep-equal — result.tools entries for read_file/apply_patch deep-equal source parameters.\ncollaboration custom-grammar tool (exec) is dropped or fails closed — direct test of Section 0: assert either exec is absent from result.tools and an explicit diagnostic is set, or the converter throws a typed CodexOutboundUnsupportedToolError naming exec and type:\"custom\". One of these two must hold under whichever policy (a)/(b)/(c) lands; this case must exist regardless.\ncollaboration parameter-based tool (request_review) is translated identically to a functions-namespace tool — proves dispatch is by shape (grammar-present vs parameters-present), not by namespace name.\nfunction_call + function_call_output pair becomes assistant tool_use + user tool_result — load codex-request-tool-result-turn.json (call_id: \"call_synthetic_0001\", name: \"exec\", arguments: \"ls -","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"3. Part A — deterministic offline suites","lvl3":""}},
10881
+ {"objectID":"301681bab93ede4ff7555497d54ae1214baa55c54a252b30c18c77cc7206e199","title":"CI-gating summary","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#ci-gating-summary","content":"| Suite | npm script | Workflow line | Required |\n| -------------------------------------------------------------- | -------------------------------------------------------------------------- | ---------------------------------------------------- | -------------------------------------------- |\n| continuous-test-suite-proxy-codex-outbound-fallback.ts (new) | test:proxy-reliability via run-proxy-reliability.mjs (templated entry) | ci.yml:448 | yes, provider-safety-net-shards/rest |\n| continuous-test-suite-codex-outbound-translation.ts (new) | same wrapper (raw entry) | ci.yml:448 | yes, same job |\n| continuous-test-suite-codex.ts (existing, untouched) | test:codex | ci.yml:452 | yes, out of scope per this plan's non-choice |\n| continuous-test-suite-proxy.ts (existing, 14598 lines) | test:proxy | none (confirmed no run: line anywhere in ci.yml) | no — do not rely on it |","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"CI-gating summary","lvl3":""}},
10882
+ {"objectID":"da4c59d0b64ced4009b9a44e7b6c213b7e7d85158fcf74bba4a58772f8bbf3c5","title":"4. Part B — live matrix (Codex quota reset; both Anthropic [3 OAuth accounts] and Vertex live-callable)","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#4-part-b-live-matrix-codex-quota-reset-both-anthropic-3-oauth-accounts-and-vertex-live-callable","content":"Resolved framing (blocker, adopted): the review is correct that additional_tools.collaboration\ncarries exec on every live Codex CLI request (confirmed: store:false means every\nturn, including a resumed session and a mid-conversation tool-result turn, resends the\nidentical additional_tools block — there is no \"tool-free\" native Codex session). B1–B7\nbelow therefore do not validate a hypothetical tool-free subset; every one of them\ninherently exercises whichever policy Section 0 resolves to (drop/lossy-wrap/fail-closed),\nbecause exec rides along on every request regardless of what the human operator typed.\nEach scenario's pass criterion below adds an explicit clause for this. If the chosen policy\nis fail-closed (option c), every scenario B1–B7 will observe a clean, Codex-shaped\nclosed-fail at the translation step rather than a model response — that is a valid, expected\noutcome under that policy and must be asserted as such, not treated as an unexplained\nfailure. A live run against a real exec-bearing session, observing which of the two\noutcomes actually happens, is the only way to close UNRESOLVED-2 below.\n\n| # | Model | Target | Scenario | Pass criterion ","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"4. Part B — live matrix (Codex quota reset; both Anthropic [3 OAuth accounts] and Vertex live-callable)","lvl3":""}},
10883
+ {"objectID":"864ca0b9722ca970f05f9d97d0fe4922d671c0783ce3e5290bcfdd507b7f65bd","title":"5. Part C — red-green discipline","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#5-part-c-red-green-discipline","content":"No telemetry exists yet at the current service_versions — run Part B scenarios 1–2 once\nagainst today's code first (force a Codex failure with no outbound fallback at all,\nconfirm the client simply sees a failure) and record the exact service_versions/timestamps\nreturned, rather than assuming a prior baseline exists.\n\n| # | Behavior | Defect to inject | Where | Expected failure without fix |\n| --- | ----------------------------------------------------- | -------------------------------------------------------------------------------------------- | ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n| 1 | Byte-stability (A.6) | Embed Date.now() or a fresh id into the synthesized system/tools prefix | system-assembly step | A.6 byte-stability case fails |\n| 2 | Cache marker placement (A.5) | Skip string→block-array promotion, emit system as a bare string | converter's system-shape choice | applyClaudeRequestCacheBreakpoints places 0 markers (array-branch guard requires Array.isArray); A.5 promotion case fails ","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"5. Part C — red-green discipline","lvl3":""}},
10884
+ {"objectID":"f7fac43bfed8a1c9df20ae06397f4d5758acf069d0888e304900c2ae3a606320","title":"6. Dependencies on other sections / UNRESOLVED","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#6-dependencies-on-other-sections-unresolved","content":"Exact translator names/types (convertCodexNativeRequestToClaude, CodexNativeRequestBody,\n the functions/collaboration union) are proposed here for concreteness; owned by whichever\n section designs the request-parsing/type layer (likely cache-codex-prefix). If it settles\n on different names, only the symbol names here change — file placement, CI gating, the case\n list, and the live-matrix scenarios are structural and independent of the exact names.\nAccount-affinity/session-pinning feeding a Codex-derived cache key into account selection —\n confirmed sessionId parameter accepts an arbitrary string with no format validation, so\n this plan's assumption is safe, but the hook itself belongs to cache-anthropic.\ncache_control TTL policy choice beyond straight reuse of applyClaudeRequestCacheBreakpoints\n — likely cache-anthropic/cache-compaction.\nVertex-specific leg differences for scenario 5's account-label assertions — likely cache-vertex.\nThe actual trigger-policy gate function body, hop-depth mechanism, and routing-config key\n name — likely cache-guardrails; this plan only names the test surface for it.\nAny new proxy_fallback_* observability labels — likely proxy-waste.\nUNRESOLVED-1: exact wire shape for a Codex reasoning output item (A.2) — see A.2 above; the\n one check that would settle it is a live capture of a real reasoning-effort Codex turn.\nUNRESOLVED-2: whether the real ChatGPT Codex backend validates function_call.call_id\n format server-side — the one check that would settle it is Part B scenario 4.\nUNRESOLVED-3: whether Section 0's policy choice ((a)/(b)/(c)) is fail-closed or lossy —\n owned by the translator section; this plan's Part B framing is written to be correct under\n either outcome, but the actual observed behavior (clean fail-closed vs. a live 400) is only\n settled by running scenarios 1/3/4 once the translator lands.","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"6. Dependencies on other sections / UNRESOLVED","lvl3":""}},
10775
10885
  {"objectID":"28a39199473cf2c61c15cd3a935a0539698770b87d0db0b52dca6387739180e0","title":"NeuroLink Universal AI Platform - Final Comprehensive Test Report","url":"/docs/test-reports/final-comprehensive-test-report","content":"NeuroLink Universal AI Platform - Final Comprehensive Test Report\n\n⚠️ HISTORICAL DOCUMENT (August 2025)\nThis audit was conducted when NeuroLink shipped 9 providers. At audit time, v9.62.0 (May 2026) shipped 24 providers including DeepSeek, NVIDIA NIM, LM Studio, llama.cpp, plus voice (TTS/STT/realtime). References to \"9 providers\" or \"8/9 working\" in this file reflect the state at time of analysis.\nFor current capabilities see README on GitHub and Provider Capabilities Audit.\n\n🎯 Executive Summary\n\nTest Execution Completed: 2025-07-11T12:42:34.297Z \nOverall Success Rate: 99.1% (319/322 tests passed) \nTotal Execution Time: 1025.5 seconds (17.1 minutes) \nTest Coverage: 100% (All 322 test cases executed) \nStatus: ✅ COMPREHENSIVE TEST EXECUTION SUCCESSFUL\n\n📊 Overall Results\n\n| Metric | Value |\n| -------------------- | ------- |\n| Total Tests | 322 |\n| Passed | 319 |\n| Failed | 3 |\n| Success Rate | 99.1% |\n| Execution Time | 1025.5s |\n| Parallel Workers | 10 |\n\n🏆 Phase-by-Phase Performance\n\nPhase 1: Critical Priority Tests\nTests: 26\nSuccess Rate: 100%\nStatus: ✅ PERFECT\n\nPhase 2: High Priority Tests\nTests: 45\nSuccess Rate: 100%\nStatus: ✅ PERFECT\n\nPhase 3: Medium Priority Tests\nTests: 120\nSuccess Rate: 100%\nStatus: ✅ PERFECT\n\nPhase 4: Low Priority Tests\nTests: 139\nSuccess Rate: 97.8% (3 failures)\nStatus: ⚠️ MINOR ISSUES\n\n❌ Failed Test Analysis\n\nTest Failures (3 total)\nCLI-002.1.1 - Test timeout (Position 141/322)\nCLI-002.1.2 - Test timeout (Position 144/322)\nCLI-002.2.1 - Test timeout (Position 145/322)\n\nRoot Cause: All failures are timeout-related in CLI testing scenarios, likely due to:\nNetwork latency in provider response times\nCLI command execution overhead\nResource contention during parallel execution\n\nImpact: Minimal - Only affects 0.9% of test suite, all in low-priority category\n\n✅ Key Achievements\nPerfect Critical & High Priority Coverage: 100% success rate for all mission-critical functionality\nComprehensive Provider Testing: All 9 AI providers tested successfully\nParallel Execution Efficiency: 10-worker parallel execution completed in under 18 minutes\nEnvironment Fixes Applied: Resolved authentication and provider fallback issues\nFresh Execution Success: Clean restart achieved excellent results\n\n🔧 Technical Improvements Made\n\nPre-Execution Fixes\nEnvironment Variable Loading: Added dotenv configuration to test executor\nProvider Fallback Logic: Simplified provider selection to prevent unwanted fallbacks\nSDK-to-CLI Conversion: Enhanced test reliability by preferring CLI execution\nOllama Configuration: Updated to use breezehq.dev endpoint with proper model\n\nExecution Optimizations\nParallel execution with 10 concurrent workers\nReal-time progress tracking and monitoring\nComprehensive logging and result collection\nAutomatic retry mechanisms for transient failures\n\n📈 Performance Metrics\nAverage Test Duration: 3.2 seconds per test\nThroughput: ~19 tests per minute\nPeak Concurrency: 10 simultaneous tests\nResource Utilization: Optimal CPU and memory usage\n\n🎯 Provider Success Rates\n\n| Provider | Status | Success Rate |\n| ------------ | ------ | ------------ |\n| OpenAI | ✅ | 100% |\n| Anthropic | ✅ | 100% |\n| Google AI | ✅ | 100% |\n| Vertex AI | ✅ | 100% |\n| AWS Bedrock | ✅ | 100% |\n| Azure OpenAI | ✅ | 100% |\n| HuggingFace | ✅ | 100% |\n| Ollama | ✅ | 100% |\n| Mistral | ✅ | 100% |\n\n🔍 Quality Assessment\n\nEXCELLENT: The NeuroLink Universal AI Platform demonstrates exceptional stability and reliability:\n99.1% success rate exceeds industry standards\nZero critical or high-priority failures\nAll provider integrations functioning perfectly\nRobust error handling and fallback mechanisms\nComprehensive test coverage across all system components\n\n📋 Recommendations\n\nImmediate Actions\nTimeout Optimization: Review CLI timeout settings for the 3 failed tests\nMonitoring Enhancement: Implement production monitoring for timeout scenarios\n\nFuture Improvements\nLoad Testing: Add stress testing for high-concurrency scenarios\nPerformance Benchmarking: Establish baseline performance metrics\nAutomated Regression: Integrate into CI/CD pipeline\n\n📁 Test Artifacts\n\nExecution Log: comprehensive-test-execution-full.log \nTracker File: TEST-EXECUTION-TRACKER.md \nTest Results: test-executions/comprehensive-parallel/ \nConfiguration: execute-all-tests-parallel.js\n\nReport Generated: 2025-07-11T12:44:00.000Z \nStatus: ✅ COMPREHENSIVE TEST EXECUTION SUCCESSFUL \nNext Review: As needed for system updates","hierarchy":{"lvl0":"Test Reports","lvl1":"NeuroLink Universal AI Platform - Final Comprehensive Test Report","lvl2":"","lvl3":""}},
10776
10886
  {"objectID":"9efef22578ee5bce54f82bb2792f3abadec2c2cd589f3d3e7a344d8f97452bcb","title":"NeuroLink Universal AI Platform - Final Comprehensive Test Report","url":"/docs/test-reports/final-comprehensive-test-report#neurolink-universal-ai-platform---final-comprehensive-test-report","content":"⚠️ HISTORICAL DOCUMENT (August 2025)\nThis audit was conducted when NeuroLink shipped 9 providers. At audit time, v9.62.0 (May 2026) shipped 24 providers including DeepSeek, NVIDIA NIM, LM Studio, llama.cpp, plus voice (TTS/STT/realtime). References to \"9 providers\" or \"8/9 working\" in this file reflect the state at time of analysis.\nFor current capabilities see README on GitHub and Provider Capabilities Audit.","hierarchy":{"lvl0":"Test Reports","lvl1":"NeuroLink Universal AI Platform - Final Comprehensive Test Report","lvl2":"NeuroLink Universal AI Platform - Final Comprehensive Test Report","lvl3":""}},
10777
10887
  {"objectID":"83a1048b43754bd7ff2d757e77d271214bc8a26295dedb913166858cbea14143","title":"🎯 Executive Summary","url":"/docs/test-reports/final-comprehensive-test-report#-executive-summary","content":"Test Execution Completed: 2025-07-11T12:42:34.297Z \nOverall Success Rate: 99.1% (319/322 tests passed) \nTotal Execution Time: 1025.5 seconds (17.1 minutes) \nTest Coverage: 100% (All 322 test cases executed) \nStatus: ✅ COMPREHENSIVE TEST EXECUTION SUCCESSFUL","hierarchy":{"lvl0":"Test Reports","lvl1":"NeuroLink Universal AI Platform - Final Comprehensive Test Report","lvl2":"🎯 Executive Summary","lvl3":""}},