fix(docs): comprehensive documentation audit, code example fixes, and model updates - #884
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
Important Review skippedAuto incremental reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
WalkthroughDocumentation and examples updated to reflect API surface changes: streaming now returns a result object with Changes
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes Possibly related PRs
Suggested labels
Suggested reviewers
Poem
🚥 Pre-merge checks | ✅ 3✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
📝 Coding Plan
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
✅ Single Commit Policy - COMPLIANTStatus: Policy requirements met • 1 commit • Valid format • Ready for merge 📊 View validation details📝 Commit Details
✅ Validation Results
🤖 Automated validation by NeuroLink Single Commit Enforcement |
🤖 AI Review & Build Compliance ✅Status: AI analysis complete • Build rules validated • Ready for review 📊 View detailed analysis results🛡️ Analysis Complete
📋 Ready for Merge When
🤖 AI analysis complete - check individual code comments for specific feedback |
Documentation Validation Results🚀 Documentation validation passed!
📦 Build artifact uploaded successfully. Ready for deployment preview. Commit: |
034271c to
abbaa77
Compare
🤖 AI Review & Build Compliance ✅Status: AI analysis complete • Build rules validated • Ready for review 📊 View detailed analysis results🛡️ Analysis Complete
📋 Ready for Merge When
🤖 AI analysis complete - check individual code comments for specific feedback |
There was a problem hiding this comment.
Pull request overview
This PR performs a broad documentation audit and modernization: migrating MkDocs syntax to Docusaurus, fixing code examples to match current SDK/CLI APIs, and refreshing provider/model documentation (including new model series and deprecations).
Changes:
- Convert admonitions/tabs/cards to Docusaurus-compatible syntax and simplify various index pages.
- Refresh provider docs (models, defaults, deprecations) and update many code examples (
prompt→input.text, streaming iteration patterns, tools shape changes). - Add/expand new feature and cookbook guides (streaming, embeddings, orchestration, MCP, etc.) and restructure the docs sidebar.
Reviewed changes
Copilot reviewed 79 out of 121 changed files in this pull request and generated 10 comments.
Show a summary per file
| File | Description |
|---|---|
| docs/getting-started/providers/mistral.md | Updates admonitions and refreshes Mistral model table + deprecation note. |
| docs/getting-started/providers/huggingface.md | Converts admonitions and updates example models / env vars / snippets. |
| docs/getting-started/providers/google-ai.md | Refreshes Gemini models, deprecations, embeddings section, and examples. |
| docs/getting-started/providers/azure-openai.md | Converts admonitions and refreshes Azure OpenAI model table + retirement note. |
| docs/getting-started/providers/anthropic.md | Converts admonitions and updates Claude 4.6 defaults/models and examples. |
| docs/getting-started/installation.md | Migrates MkDocs tabs to Docusaurus <Tabs>/<TabItem> and normalizes headings. |
| docs/getting-started/index.md | Replaces MkDocs grid cards with simple lists and updates admonitions. |
| docs/features/video-generation.md | Promotes title to H1 for Docusaurus consistency. |
| docs/features/video-director-mode.md | Promotes title to H1 for Docusaurus consistency. |
| docs/features/video-analysis.md | Adds frontmatter + Quick Start section for video analysis. |
| docs/features/tts.md | Rewords “Coming Soon” status language. |
| docs/features/thinking-configuration.md | Adds frontmatter, refreshes thinking model list, and updates examples/tables. |
| docs/features/structured-output.md | Adds frontmatter and updates structured output quick start example. |
| docs/features/streaming.md | Adds a new, comprehensive streaming guide with updated stream APIs. |
| docs/features/regional-streaming.md | Adds Quick Start and converts admonitions; updates wording. |
| docs/features/rag.md | Updates tools examples to object-map shape and stream result usage. |
| docs/features/provider-orchestration.md | Adds Quick Start and converts admonitions. |
| docs/features/pdf-support.md | Adds frontmatter and updates “planned” language. |
| docs/features/office-documents.md | Adds frontmatter for Docusaurus. |
| docs/features/observability.md | Adds frontmatter and updates generate() usage examples. |
| docs/features/multimodal-chat.md | Adds H1, converts admonitions, and updates prerequisite wording. |
| docs/features/mcp-tools-showcase.md | Adds a Quick Start snippet for external MCP server usage. |
| docs/features/hitl.md | Converts admonitions to Docusaurus syntax. |
| docs/features/guardrails.md | Converts admonitions to Docusaurus syntax (tip/danger). |
| docs/features/file-processors.md | Adds frontmatter, Quick Start, and updates streaming example pattern. |
| docs/features/enterprise-hitl.md | Converts MkDocs note to Docusaurus admonition. |
| docs/features/embeddings.md | Adds a new embeddings guide (SDK + server + env vars). |
| docs/features/csv-support.md | Adds frontmatter for Docusaurus. |
| docs/features/conversation-history.md | Converts admonitions to Docusaurus syntax. |
| docs/features/context-compaction.md | Adds frontmatter for Docusaurus. |
| docs/features/cli-loop-sessions.md | Adds Quick Start and converts admonitions. |
| docs/features/claude-subscription.md | Adds Quick Start for API key + OAuth flows. |
| docs/features/auto-evaluation.md | Adds Quick Start and converts warnings/tips. |
| docs/features/audio-input.md | Rewords “Coming Soon” → “Planned” and updates support matrix wording. |
| docs/examples/use-cases.md | Replaces large content with a redirect stub + frontmatter. |
| docs/examples/index.md | Replaces MkDocs cards with simple lists. |
| docs/examples/basic-usage.md | Updates configuration examples (memory/orchestration/observability). |
| docs/enterprise-proxy-setup.md | Replaces content with redirect stub + frontmatter. |
| docs/dynamic-models.md | Replaces content with redirect stub + frontmatter. |
| docs/development/index.md | Replaces MkDocs cards with simple lists. |
| docs/development/contributing.md | Updates commands from npm to pnpm and revises wording. |
| docs/demos/screenshots.md | Renames screenshot filename references. |
| docs/demos/index.md | Replaces MkDocs cards with lists and converts admonitions. |
| docs-site/sidebars.ts | Restructures sidebar into categories and adds new pages/recipes. |
| README.md | Updates streaming + image generation + conversation memory examples to new API shapes. |
| CLAUDE.md | Adjusts MCP enhancements status description and table alignment. |
| docs/cli/index.md | Migrates MkDocs tabs/cards to Docusaurus <Tabs> + list sections and admonitions. |
| docs/cli-reference.md | Removes dated “implementation status” banner section. |
| docs/changelog.md | Rewords “Coming Soon” items as planned. |
| docs/api-reference.md | Converts to redirect stub with frontmatter. |
| docs/analysis/verification-results.md | Rewords MCP exec status as planned. |
| docs/analysis/claims-vs-reality-analysis.md | Table formatting fix + status wording updated. |
| docs/advanced/streaming.md | Updates streaming examples to result.stream pattern and new API names. |
| docs/advanced/mcp-integration.md | Removes outdated “complete” banner; clarifies planned features and link fix. |
| docs/advanced/index.md | Replaces MkDocs cards with simple lists and trims roadmap. |
| docs/advanced/cli-guide.md | Converts to redirect stub with frontmatter. |
| docs/advanced/builtin-middleware.md | Updates examples from prompt to input.text and adjusts stream usage. |
| docs/advanced/api-reference.md | Converts to redirect stub with frontmatter. |
| docs/about/vision.md | Rewords “coming soon” phrasing. |
| docs/MODEL-UPDATE-PLAN.md | Adds a new model update plan document (awaiting approval). |
| docs/404.md | Replaces MkDocs cards with simple lists for Docusaurus. |
| docs/cookbook/provider-switching.md | Adds new recipe for provider switching and fallback patterns. |
| docs/cookbook/multimodal-images.md | Adds new recipe for image inputs and vision model usage. |
| docs/cookbook/index.md | Adds links to new cookbook recipes. |
| docs/cookbook/error-recovery.md | Updates streaming API usage from legacy chunk types to chunk.content. |
| docs/cookbook/embeddings-basics.md | Adds new recipe for embeddings and similarity search. |
| docs/cookbook/basic-streaming.md | Adds new recipe for the result.stream streaming pattern. |
| docs/contributing.md | Converts to redirect stub with frontmatter. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
You can also share your feedback on Copilot code review. Take the survey.
| const stream = await neurolink.stream({ | ||
| input: { text: "Summarise EMEA incident reports" }, | ||
| provider: "bedrock", | ||
| model: "anthropic.claude-3-sonnet", | ||
| region: "eu-central-1", | ||
| }); | ||
|
|
||
| for await (const chunk of stream.textStream) { | ||
| process.stdout.write(chunk); |
| - Keep alt text concise but descriptive (under 125 characters is ideal) | ||
| - Focus on the key information the image conveys | ||
| - Alt text is automatically included as context in the prompt, helping AI models better understand the images | ||
| ::: |
| - **`/` prefix**: Executes CLI commands or session commands (e.g., `/help`, `/set`, `/generate`, `/batch`) | ||
| - **`//` prefix**: Escape to stream prompts starting with `/` (e.g., `//what is /usr/bin?`) | ||
| - **Exit commands**: `exit`, `quit`, or `:q` work without prefix to leave loop mode | ||
| ::: |
| - **Real-time Analytics** - See costs and performance | ||
| - **Built-in Tools** - Experience MCP integration | ||
| - **Multiple Use Cases** - Business, creative, and technical examples | ||
| ::: |
| | Gemini 3 Flash | `gemini-3-flash-preview` | 1,048,576 | 65,536 | Text, images, audio, video, PDF | | ||
| | Gemini 3.1 Flash Lite | `gemini-3.1-flash-lite-preview` | 1,048,576 | 65,536 | Text, images, audio, video | | ||
| | Gemini 2.5 Pro | `gemini-2.5-pro` | 1,048,576 | 65,536 | Text, images, audio, video, PDF | | ||
| | **Gemini 2.5 Flash** | `gemini-2.5-flash` | 1,048,576 | 65,535 | Text, images, audio, video | |
| | Provider | Default Model | Env Override | Dimensions | | ||
| | ---------------- | ------------------------------ | --------------------------- | ---------- | | ||
| | OpenAI | `text-embedding-3-small` | `OPENAI_EMBEDDING_MODEL` | 1536 | | ||
| | Google AI Studio | `gemini-embedding-001` | `GOOGLE_AI_EMBEDDING_MODEL` | 768 | | ||
| | Google Vertex | `gemini-embedding-001` | `VERTEX_EMBEDDING_MODEL` | 768 | | ||
| | Amazon Bedrock | `amazon.titan-embed-text-v2:0` | `BEDROCK_EMBEDDING_MODEL` | 1024 | | ||
|
|
||
| Google AI Studio and Google Vertex also accept `GOOGLE_EMBEDDING_MODEL` as a shared fallback environment variable. | ||
|
|
||
| Amazon Bedrock also accepts `AWS_EMBEDDING_MODEL` as an alternative environment variable. | ||
|
|
| const result = await neurolink.generate({ | ||
| prompt: "What are the key features?", | ||
| rag: { | ||
| files: ["./docs/guide.md"], | ||
| chunkSize: 512, | ||
| topK: 5, | ||
| }, | ||
| }); |
| const neurolink = new NeuroLink(); | ||
| const result = await neurolink.generate({ | ||
| input: { text: "How does authentication work?" }, | ||
| tools: [ragTool], |
| | ---------------- | ------------------------------ | ---------- | | ||
| | OpenAI | `text-embedding-3-small` | 1536 | | ||
| | Google AI Studio | `gemini-embedding-001` | 768 | | ||
| | Google Vertex | `text-embedding-004` | 768 | |
| - [**Basic Streaming**](/docs/cookbook/basic-streaming) - Stream AI responses in real time with the `result.stream` pattern | ||
| - [**Multimodal Images**](/docs/cookbook/multimodal-images) - Send images to vision models for analysis, OCR, and comparison | ||
| - [**Provider Switching**](/docs/cookbook/provider-switching) - Switch providers at runtime, compare outputs, and implement fallback | ||
| - [**Embeddings Basics**](/docs/cookbook/embeddings-basics) - Generate embeddings, compare similarity, and build semantic search |
There was a problem hiding this comment.
Actionable comments posted: 14
Note
Due to the large number of review comments, Critical, Major severity comments were prioritized as inline comments.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (6)
docs/features/structured-output.md (1)
90-91:⚠️ Potential issue | 🟡 MinorFix markdownlint MD028: remove blank line inside blockquote.
There is a blank line break in the blockquote section; this will keep triggering docs lint warnings.
🧩 Proposed fix
-> **Gemini 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. - -**Error Message:** +> **Gemini 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. +> +> **Error Message:**🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/features/structured-output.md` around lines 90 - 91, Remove the extra blank line inside the blockquote that contains the "**Gemini 3 / Gemini 2.5 Note:**" paragraph so the blockquote lines are contiguous (no empty line between them), ensuring the MD028 lint rule is satisfied; locate the blockquote text beginning with "**Gemini 3 / Gemini 2.5 Note:**" and delete the stray blank line so the sentences remain in the same blockquote block.docs/getting-started/providers/mistral.md (2)
302-313:⚠️ Potential issue | 🔴 CriticalFix property name in token usage examples.
The examples access
result.usage.totalTokens(lines 310, 312, 568, 569), but theTokenUsagetype defines the property astotal, nottotalTokens. Update these lines to useresult.usage.total.Examples to update:
- Line 310:
(result.usage.totalTokens / 1_000_000) * 2→(result.usage.total / 1_000_000) * 2- Line 312:
result.usage.totalTokens→result.usage.total- Line 568:
result.usage.totalTokens→result.usage.total- Line 569:
result.usage.totalTokens→result.usage.total🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/getting-started/providers/mistral.md` around lines 302 - 313, The examples use the wrong token usage property name—replace all references to result.usage.totalTokens with result.usage.total (e.g., in the ai.generate example where cost is computed and tokens logged) to match the TokenUsage type; update every occurrence mentioned (the cost calculation and console.log lines) so they read result.usage.total.
167-180:⚠️ Potential issue | 🔴 CriticalRemove invalid
providersparameter and unsupported configuration options from code examples.The NeuroLink constructor does not accept a
providersparameter. The code examples at lines 167-180, 185-213, 389-403, 412-443, and 448-464 incorrectly show:const ai = new NeuroLink({ providers: [ { name: "mistral", config: { region, enableAudit, dataRetention, rateLimit, ... } } ] });The
NeurolinkConstructorConfigtype only supports:conversationMemory,enableOrchestration,hitl,toolRegistry,observability, andmodelAliasConfig. Options likeregion,enableAudit,dataRetention,rateLimit,retryAttempts,retryDelay,priority, andconditionare not valid constructor parameters.Correct usage should demonstrate how providers are actually selected via the
generate()method'sprovideroption, not through constructor configuration.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/getting-started/providers/mistral.md` around lines 167 - 180, The example incorrectly passes a providers array and unsupported fields into the NeuroLink constructor; update all examples (the NeuroLink(...) calls) to remove the providers parameter and any unsupported options (region, enableAudit, dataRetention, rateLimit, retryAttempts, retryDelay, priority, condition) so that only valid NeurolinkConstructorConfig keys remain (conversationMemory, enableOrchestration, hitl, toolRegistry, observability, modelAliasConfig); instead show provider selection when calling the generate() method using its provider option (e.g., describe use of generate({ provider: "mistral", apiKey: ... }) rather than putting provider config in the constructor).docs/advanced/builtin-middleware.md (1)
456-463:⚠️ Potential issue | 🟠 MajorUse
result.streamin streaming examples, notresult.textStream.At lines 461 and 748, the examples iterate
result.textStream. Theneurolink.stream()method returns aStreamResultobject with astreamproperty, nottextStream. These examples will fail at runtime.Suggested fix
const result = await neurolink.stream({ input: { text: "Generate a story" }, }); // Each chunk is filtered in real-time -for await (const chunk of result.textStream) { +for await (const chunk of result.stream) { console.log(chunk); // Filtered content } @@ const result = await neurolink.stream({ input: { text: "..." } }); // Stream returns immediately -for await (const chunk of result.textStream) { +for await (const chunk of result.stream) { console.log(chunk); }🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/advanced/builtin-middleware.md` around lines 456 - 463, The examples use the wrong property name: neurolink.stream() returns a StreamResult with a stream property, not textStream, so replace iterations over result.textStream with result.stream; update the example that calls neurolink.stream() and the for-await-of loops that reference result.textStream (and any other occurrences at the same examples) to iterate result.stream instead, ensuring the variable names (e.g., result) and the StreamResult type usage remain consistent with the neurolink.stream() return shape.docs/advanced/streaming.md (2)
758-768:⚠️ Potential issue | 🟠 MajorAssistant message uses stale state after streaming.
Line 767 uses
currentResponseright after async state updates, so the stored assistant message can be empty/incomplete.Suggested fix
const sendMessage = async (userMessage) => { setMessages(prev => [...prev, { role: "user", content: userMessage }]); setCurrentResponse(""); + let fullResponse = ""; const result = await neurolink.stream({ input: { text: userMessage }, provider: "google-ai" }); for await (const chunk of result.stream) { - setCurrentResponse(prev => prev + chunk.content); + const piece = chunk.content || ""; + fullResponse += piece; + setCurrentResponse(fullResponse); } - setMessages(prev => [...prev, { role: "assistant", content: currentResponse }]); + setMessages(prev => [...prev, { role: "assistant", content: fullResponse }]); setCurrentResponse(""); };🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/advanced/streaming.md` around lines 758 - 768, The assistant message uses stale React state because you read currentResponse after streaming async updates; instead accumulate chunks into a local buffer (e.g., let buffer = "") while iterating result.stream and call setCurrentResponse with each chunk, then after the loop call setMessages using the final buffer (or use setMessages(prev => [...prev, { role: "assistant", content: buffer }])) and finally clear setCurrentResponse(""); update the code around neurolink.stream, result.stream, setCurrentResponse, and setMessages to use this local buffer or functional update so the stored assistant message contains the full streamed content.
395-409:⚠️ Potential issue | 🔴 Critical
this.cacheis undefined inside the streamed generator.On Line 405,
thisrefers toresponseStream, notSimpleCache, sothis.cache.set(...)will fail at runtime.Suggested fix
// Collect response while streaming for caching + const cacheStore = this.cache; + const cacheKey = prompt; const responseStream = { async *stream() { for await (const chunk of result.stream) { if (chunk.content) { chunks.push(chunk.content); yield chunk; } } // Cache after streaming completes const fullResponse = chunks.join(""); - this.cache.set(prompt, { + cacheStore.set(cacheKey, { response: fullResponse, timestamp: Date.now(), }); console.log(`💾 Cached response`); }, };🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/advanced/streaming.md` around lines 395 - 409, The generator's this is bound to responseStream so this.cache is undefined; capture the SimpleCache reference (and prompt) into a local variable before creating the streamed response and use that captured variable instead of this inside async *stream (e.g., const cache = this.cache; then call cache.set(prompt, {...}) within the stream generator) so the cache.set call uses the correct object.
🟡 Minor comments (11)
docs/analysis/claims-vs-reality-analysis.md-281-281 (1)
281-281:⚠️ Potential issue | 🟡 MinorUse test evidence instead of roadmap text in the Evidence column.
At Line 281, “Planned for future release” doesn’t substantiate the current claim “Command doesn’t exist.” Prefer concrete evidence (e.g., exact CLI help output or error text).
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/analysis/claims-vs-reality-analysis.md` at line 281, Replace the non-evidential "Planned for future release" text in the Evidence column for the "mcp exec" row with concrete test output showing the command doesn't exist: run the CLI for the exact invocation shown ("neurolink mcp exec <server> <tool>") and paste the real stderr/exit message or help output (e.g., "unknown command 'exec'" or the full CLI usage text) into the Evidence cell so the claim "Command doesn't exist" is substantiated; update the table row referencing "mcp exec" accordingly.docs/DOCUMENTATION-AUDIT-REPORT.md-5-5 (1)
5-5:⚠️ Potential issue | 🟡 MinorReconcile agent-count metadata with the PR’s published audit scope.
At Line 5 and Lines 914-916, this report states 16 agents, while the PR summary states 77 parallel agents over five phases. Please align these numbers to a single source of truth.
Also applies to: 914-916
docs/getting-started/providers/ollama.md-65-65 (1)
65-65:⚠️ Potential issue | 🟡 MinorResolve markdownlint MD046 code-block-style violations in this new page.
The file mixes fenced blocks where the current lint config expects indented style at the listed lines. Please normalize these blocks so the page is lint-clean.
Also applies to: 80-80, 220-220, 286-286, 306-306, 348-348, 389-389, 397-397, 412-412, 423-423, 477-477, 491-491, 499-499, 514-514, 533-533, 543-543
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/getting-started/providers/ollama.md` at line 65, Replace the fenced code blocks like ```bash with indented (4-space) code blocks to satisfy markdownlint MD046: locate each fenced block (e.g., occurrences starting with ```bash) and convert them to indented code by removing the triple backticks and language tag and prefixing each code line with four spaces; repeat this normalization for all other fenced blocks noted in the review so the page uses consistent indented-style code blocks.docs/features/multimodal-chat.md-218-223 (1)
218-223:⚠️ Potential issue | 🟡 MinorFix directive closing fence indentation.
At Line 223, the closing
:::is indented, which can cause the tip block to render incorrectly. Keep the closing fence flush-left.Suggested fix
:::tip[Alt Text Best Practices] - Keep alt text concise but descriptive (under 125 characters is ideal) - Focus on the key information the image conveys - Alt text is automatically included as context in the prompt, helping AI models better understand the images - ::: +:::🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/features/multimodal-chat.md` around lines 218 - 223, The tip block started with ":::tip[Alt Text Best Practices]" has its closing fence indented; fix it by unindenting the closing ":::” so it is flush-left (remove leading spaces/tabs before the closing :::) ensuring the tip block opens and closes with matching fences; edit the block that begins with ":::tip[Alt Text Best Practices]" and align the closing ":::” to the left margin.README.md-16-18 (1)
16-18:⚠️ Potential issue | 🟡 MinorMake the README stream loop resilient to non-content chunks.
For quick-start snippets, guarding by chunk shape avoids undefined output in tool/event chunk scenarios.
Suggested fix
for await (const chunk of result.stream) { - process.stdout.write(chunk.content); + if ("content" in chunk) { + process.stdout.write(chunk.content); + } }🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@README.md` around lines 16 - 18, The README's stream loop writes every chunk without validating shape, causing undefined output for non-content chunks; update the loop over result.stream (the chunk variable) to guard before writing by checking that chunk && typeof chunk.content === "string" (or presence of chunk.content) and only call process.stdout.write for those content-bearing chunks, skipping tool/event or otherwise-shaped chunks to make the snippet resilient.docs/features/rag.md-246-247 (1)
246-247:⚠️ Potential issue | 🟡 MinorSystem prompt references the wrong tool ID.
At Line 246, the prompt tells the model to use
knowledge-search, but this example createsid: "product-search"(Line 225). This mismatch can reduce tool-use reliability in the sample.Suggested fix
- systemPrompt: `You are a helpful product assistant. Use the knowledge-search tool + systemPrompt: `You are a helpful product assistant. Use the product-search tool to find relevant information before answering questions. Always cite your sources.`,🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/features/rag.md` around lines 246 - 247, The systemPrompt currently instructs the model to use the tool ID "knowledge-search" but the example defines the tool with id: "product-search", causing a mismatch; update the systemPrompt to reference "product-search" (or alternatively rename the tool id to "knowledge-search") so the tool ID in systemPrompt and the tool definition (id: "product-search") match, ensuring consistent tool invocation.docs/MODEL-UPDATE-PLAN.md-194-194 (1)
194-194:⚠️ Potential issue | 🟡 MinorSentence fragment in recommendation line.
Line 194 starts with “Should be updated…” without a subject. Rephrase to a complete sentence for clarity.
Suggested fix
-Lists `text-embedding-004` as Vertex default. This model is **SHUT DOWN**. Should be updated to `gemini-embedding-001` or the new `gemini-embedding-2-preview`. +Lists `text-embedding-004` as Vertex default. This model is **SHUT DOWN**. It should be updated to `gemini-embedding-001` or the new `gemini-embedding-2-preview`.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/MODEL-UPDATE-PLAN.md` at line 194, The recommendation sentence referring to the default embedding model is a fragment; replace the fragment "Should be updated to `gemini-embedding-001` or the new `gemini-embedding-2-preview`" with a full sentence that names the subject and action (e.g., "Update the default embedding model from `text-embedding-004` to `gemini-embedding-001` or the new `gemini-embedding-2-preview`.") so the line clearly states the change and references the models `text-embedding-004`, `gemini-embedding-001`, and `gemini-embedding-2-preview`.docs/features/rag.md-936-938 (1)
936-938:⚠️ Potential issue | 🟡 MinorGuard streamed chunks before reading
content.This loop writes
chunk.contentunconditionally. Elsewhere in this file (Line 145) you correctly check chunk shape first.Suggested fix
for await (const chunk of streamResult.stream) { - process.stdout.write(chunk.content); + if ("content" in chunk) { + process.stdout.write(chunk.content); + } }🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/features/rag.md` around lines 936 - 938, The for-await loop reads chunk.content without validating chunk shape; update the loop that iterates over streamResult.stream to guard each streamed item (e.g., check that chunk is an object and has a string content) before calling process.stdout.write. Locate the loop using streamResult and stream, verify chunk exists and typeof chunk.content === 'string' (or use Object.prototype.hasOwnProperty.call) and only then call process.stdout.write(chunk.content); otherwise skip or handle non-content chunks appropriately.docs/getting-started/index.md-9-9 (1)
9-9:⚠️ Potential issue | 🟡 MinorRefresh provider count wording (Line 9).
“all 9 supported AI providers” appears outdated; use the current count or neutral wording (e.g., “all supported providers”) to avoid drift.
Based on learnings: NeuroLink provides unified access to 12+ AI providers through a single API.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/getting-started/index.md` at line 9, Update the Provider Setup line text to avoid the outdated "all 9 supported AI providers" phrasing: replace that fragment in the string "**[Provider Setup](provider-setup.md)** — Configure API keys and credentials for all 9 supported AI providers..." with a current/neutral phrase such as "all supported providers" or the accurate "12+ supported AI providers" so the description in docs/getting-started/index.md reflects the correct provider count.docs/demos/index.md-11-11 (1)
11-11:⚠️ Potential issue | 🟡 MinorUpdate provider count in demo description (Line 11).
“all 9 providers” is stale and can mislead readers if the platform currently supports more providers; prefer a non-hardcoded phrase or update to the current count.
Based on learnings: NeuroLink provides unified access to 12+ AI providers through a single API.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/demos/index.md` at line 11, Update the demo description text for "Interactive Demo" to remove the stale hardcoded provider count; replace "all 9 providers" with a current, non-hardcoded phrase such as "12+ AI providers" or "multiple providers" so the line reads: **[Interactive Demo](interactive.md)** — Live web demonstration with 12+ AI providers and real AI generation capabilities (or use "multiple providers" if you prefer not to fix a specific number).docs/features/index.md-54-54 (1)
54-54:⚠️ Potential issue | 🟡 MinorUse hyphenated compound adjective in description.
Line 54 should use
custom-trained models.Suggested fix
-| **[SageMaker Integration](../sagemaker-integration.md)** | Deploy and use custom trained models on AWS SageMaker infrastructure with full control. | +| **[SageMaker Integration](../sagemaker-integration.md)** | Deploy and use custom-trained models on AWS SageMaker infrastructure with full control. |🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/features/index.md` at line 54, Update the SageMaker Integration description to use a hyphenated compound adjective: change the table row text containing "**[SageMaker Integration](../sagemaker-integration.md)** | Deploy and use custom trained models..." to use "custom-trained models" (i.e., replace "custom trained models" with "custom-trained models") in the docs/features/index.md entry for SageMaker Integration.
🧹 Nitpick comments (6)
docs/examples/use-cases.md (1)
5-5: Consider using Docusaurus native redirects for better UX.While the current redirect message is functional, Docusaurus supports native redirects via the
@docusaurus/plugin-client-redirectsplugin or frontmatter metadata. This provides automatic HTTP redirects instead of requiring users to click a link.⚡ Optional enhancement using Docusaurus redirect frontmatter
--- title: Use Cases +redirect_to: /guides/examples/use-cases --- - -This page has moved to [Real-World Use Cases](../guides/examples/use-cases.md).Note: This requires the redirect plugin to be configured in
docusaurus.config.js. If the plugin isn't available, the current manual approach is perfectly acceptable.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/examples/use-cases.md` at line 5, Summary: Use Docusaurus native redirects instead of a manual link. Replace the current inline message in docs/examples/use-cases.md with Docusaurus redirect frontmatter by (1) ensuring `@docusaurus/plugin-client-redirects` is enabled in the site config, and (2) updating the file to have a frontmatter redirect (e.g., add a top YAML block like redirect_to: /guides/examples/use-cases or redirect_from: ["/old-path"] depending on your redirect strategy) so the page issues an automatic client/HTTP redirect to the new Real-World Use Cases location and remove the manual link content.docs/features/auto-evaluation.md (1)
41-88: Consider converting MkDocs tab syntax to Docusaurus.The new admonitions (lines 35-37, 149-151) use Docusaurus syntax (
:::warning,:::tip), but this Usage Examples section still uses MkDocs material tabs syntax (=== "SDK"). For consistency and to align with the PR's objective of converting MkDocs syntax to Docusaurus across documentation, consider converting these tabs to DocusaurusTabscomponents.📝 Docusaurus tabs syntax example
-=== "SDK" - - ```typescript - import { NeuroLink } from "@juspay/neurolink"; - ... - ``` - -=== "CLI" - - ```bash - # Baseline quality check - ... - ``` +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +<Tabs> + <TabItem value="sdk" label="SDK"> + +```typescript +import { NeuroLink } from "@juspay/neurolink"; +... +``` + + </TabItem> + <TabItem value="cli" label="CLI"> + +```bash +# Baseline quality check +... +``` + + </TabItem> +</Tabs>🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/features/auto-evaluation.md` around lines 41 - 88, The docs use MkDocs tab syntax (=== "SDK" / === "CLI") in the Usage Examples section; replace it with Docusaurus Tabs by importing Tabs and TabItem (Tabs, TabItem) at the top of the MDX and wrapping the two code blocks inside a <Tabs> containing two <TabItem> entries labeled "SDK" and "CLI"; move the existing TypeScript block into the SDK TabItem and the bash block into the CLI TabItem, preserving the fenced code blocks and their content and labels (e.g., the NeuroLink example and CLI examples) so rendering and code highlighting remain identical.docs/framework-integration.md (1)
1-7: Clear relocation noticeThe redirect to the new location (./sdk/framework-integration.md) is clear and helps users find the migrated content. Consider adding a redirect at the web server level to automatically forward users to the new location.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/framework-integration.md` around lines 1 - 7, Add a server-level redirect so requests to docs/framework-integration.md are automatically forwarded to ./sdk/framework-integration.md; update the web server or hosting config (e.g., static site redirects, Netlify _redirects, Vercel rewrites, or Apache/Nginx rule) to create a 301 redirect from the old path to the new path while keeping the in-page relocation notice linking to ./sdk/framework-integration.md.docs/dynamic-models.md (1)
1-7: Clear relocation noticeThe redirect to ./advanced/dynamic-models.md is clear and consistent with the documentation restructuring pattern. As with other relocated pages, consider implementing automatic server-side redirects to improve user experience.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/dynamic-models.md` around lines 1 - 7, The "Dynamic Model Configuration System" page currently only contains a client-side redirect link; add a server-side redirect so requests to the old page return a 301 to ./advanced/dynamic-models.md. Update the site routing/hosting config (e.g., static redirect file or platform routes) to add a permanent redirect rule for the old page slug/title ("Dynamic Model Configuration System") to the new path, ensure the redirect returns HTTP 301, and update any sitemap or internal links referencing the old page.docs/features/file-processors.md (1)
223-224: Add discriminated union guard for type safety.The streaming example directly accesses
chunk.contentwithout checking if the property exists. For consistency with the pattern indocs/cookbook/basic-streaming.mdand type safety, consider adding a guard.🛡️ Proposed fix for type-safe chunk handling
for await (const chunk of result.stream) { - process.stdout.write(chunk.content); + if ("content" in chunk && chunk.content) { + process.stdout.write(chunk.content); + } }🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/features/file-processors.md` around lines 223 - 224, The streaming example accesses chunk.content directly from result.stream; add a discriminated-union/type guard before using chunk.content (e.g., check chunk.type or whether 'content' in chunk or chunk.kind === 'message') so only message/chunk variants with content are written to stdout; update the for-await loop that iterates over result.stream and only call process.stdout.write when the guard confirms the chunk carries content.docs/features/workflow-engine.md (1)
999-999: Optional: Consider wording simplification.Static analysis suggests using "incompatible" instead of "not compatible" for brevity. This is a minor style suggestion and not required.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/features/workflow-engine.md` at line 999, Update the phrasing in the link description "[Structured Output Guide](./structured-output.md) -- JSON schema output (note: not compatible with Gemini tools)" to use "incompatible" instead of "not compatible" for brevity; replace "(note: not compatible with Gemini tools)" with "(note: incompatible with Gemini tools)" so the meaning is unchanged but wording is simplified.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@docs/advanced/streaming.md`:
- Around line 1496-1504: The example uses neurolink.stream(...) without
initializing neurolink; update the snippet to instantiate or import the
Neurolink client before calling neurolink.stream by adding the appropriate
initialization (e.g., creating a Neurolink client or importing an existing
instance) referenced by the variable name neurolink, so the call to
neurolink.stream, and subsequent use of result.stream with
performanceMonitor.monitorStream(result.stream, requestId), work correctly with
a defined neurolink object.
In `@docs/examples/basic-usage.md`:
- Around line 674-683: The example creating prodNeuroLink uses
observability.langfuse but omits required LangfuseConfig fields; update the
NeuroLink example to provide complete observability.langfuse configuration by
adding publicKey and secretKey (or explicitly show they are read from
environment variables), e.g., set observability: { langfuse: { enabled: true,
publicKey: process.env.LANGFUSE_PUBLIC_KEY, secretKey:
process.env.LANGFUSE_SECRET_KEY } } so the required publicKey and secretKey for
LangfuseConfig are present when instantiating NeuroLink.
In `@docs/features/embeddings.md`:
- Around line 279-285: Replace the deprecated top-level "prompt" field with the
new "input: { text: ... }" shape in the generate call shown (change prompt:
"What are the key features?" to input: { text: "What are the key features?" })
so the example matches the updated API; update any related examples in the same
block that reference "prompt" to use the input.text form used elsewhere in this
PR.
- Around line 46-51: The docs table entry for the Google Vertex provider is
incorrect; update the Google Vertex row in docs/features/embeddings.md to use
the actual default model text-embedding-004 (keep the Env Override as
VERTEX_EMBEDDING_MODEL and Dimensions 768) so the docs match the implementation
that sets text-embedding-004 as the default.
In `@docs/features/mcp-tools-showcase.md`:
- Line 67: Documentation examples use a non-existent method addMCPServer();
update every example call to use the real API method addExternalMCPServer()
instead (search for occurrences of addMCPServer and replace them), ensuring
argument shapes remain unchanged and example text/notes reference
addExternalMCPServer() consistently so the documented symbol matches the actual
function name.
In `@docs/features/regional-streaming.md`:
- Around line 18-23: Update the deprecated Claude model ID strings used in
examples to the current Bedrock model ID: replace occurrences of
"anthropic.claude-3-sonnet" (found in the neurolink.stream call example and the
other example around line 83) with "anthropic.claude-sonnet-4-6"; locate the
model property in the stream() invocation and any identical model references
elsewhere in this file (e.g., the example at lines ~21 and ~83) and update them
to the new canonical ID.
In `@docs/getting-started/providers/aws-bedrock.md`:
- Around line 219-221: The warning block currently mentions the deprecated model
`anthropic.claude-3-sonnet-20240229-v1:0`; update that text to reflect the
actual provider default `anthropic.claude-sonnet-4-6` (and keep the guidance to
set BEDROCK_MODEL or pass model explicitly). Locate the warning paragraph
referencing the default model in the docs and replace the deprecated model
identifier with `anthropic.claude-sonnet-4-6` so it matches the default used in
the provider (see amazonBedrock default model symbol) while leaving the rest of
the admonition unchanged.
- Around line 17-19: Replace all direct Anthropic model IDs (e.g.,
"anthropic.claude-sonnet-4-5-20250929-v1:0") in the examples and model table
with the required inference profile IDs or full ARNs (e.g.,
"us.anthropic.claude-sonnet-4-5-20250929-v1:0" or the corresponding ARN);
specifically update the code snippets and table rows that reference
anthropic.claude-sonnet-4-5-20250929-v1:0 so they use region-prefixed inference
profile IDs or ARNs, and ensure any explanatory text or warning remains
consistent with the new identifiers to avoid invocation errors.
In `@docs/getting-started/providers/azure-openai.md`:
- Around line 233-235: Update the "GPT-4o-mini Retirement" warning block to
replace the vague "around February 2026" text with the precise retirement dates:
"Standard deployments retire March 31, 2026" and "Provisioned/Global
Standard/Data Zone Standard deployments retire October 1, 2026"; also adjust the
recommended replacement models to list gpt-4.1-mini and gpt-5-mini as primary
replacements (remove or de-prioritize GPT-5.4 Mini) and add a note to verify
current Azure availability before migration.
In `@docs/getting-started/providers/huggingface.md`:
- Around line 286-292: The example incorrectly iterates directly over the call
to ai.stream; update it to await ai.stream(...) into a StreamResult and then
iterate over its async iterable property (result.stream). Specifically, call
ai.stream with the same arguments (provider: "huggingface", model:
"Qwen/Qwen2.5-72B-Instruct", input...), assign to a variable like result, and
replace the loop to for await (const chunk of result.stream) {
process.stdout.write(chunk.content); } so you use the StreamResult.stream async
iterable correctly.
In `@docs/getting-started/providers/litellm.md`:
- Around line 147-156: The example calls ai.stream using the old prompt param;
update the call to pass input: { text: "<your text>" } instead (e.g., replace
prompt: "Write a story..." with input: { text: "Write a story about space
exploration" }) while keeping provider: "litellm" and model: "openai/gpt-4o";
ensure the rest of the example still iterates the returned object from ai.stream
(the variable stream and its stream property used in for await (const chunk of
stream.stream)) and writes chunk.content to stdout.
- Around line 112-124: Update the example to use the current generate API
signature: replace the old prompt parameter with input: { text: "..." } when
calling NeuroLink.generate; specifically, modify the call to ai.generate(...) to
pass input: { text: "Hello from LiteLLM!" } (keep provider: "litellm" and other
options unchanged) so the example matches the NeuroLink.generate method's
expected input shape.
- Around line 137-141: Update the ai.generate call to use the new input shape
instead of the deprecated prompt key: replace the prompt parameter in the
ai.generate invocation (the call assigning geminiResult) with input: { text:
"..." } (or input: { text: yourStringVariable }) while keeping provider:
"litellm" and model: "gemini/gemini-2.0-flash" unchanged so the call matches the
generate(input: { text }) API signature.
- Around line 129-134: Update the example call to ai.generate to use the new API
shape: replace the deprecated top-level "prompt" parameter with "input: { text:
... }" so the call to ai.generate({ provider: "litellm", model:
"anthropic/claude-3-5-sonnet-20240620", ... }) uses input.text for the prompt
content; ensure you update the example invocation in the docs where ai.generate
is used so it passes input: { text: "Explain quantum computing" } instead of
prompt.
---
Outside diff comments:
In `@docs/advanced/builtin-middleware.md`:
- Around line 456-463: The examples use the wrong property name:
neurolink.stream() returns a StreamResult with a stream property, not
textStream, so replace iterations over result.textStream with result.stream;
update the example that calls neurolink.stream() and the for-await-of loops that
reference result.textStream (and any other occurrences at the same examples) to
iterate result.stream instead, ensuring the variable names (e.g., result) and
the StreamResult type usage remain consistent with the neurolink.stream() return
shape.
In `@docs/advanced/streaming.md`:
- Around line 758-768: The assistant message uses stale React state because you
read currentResponse after streaming async updates; instead accumulate chunks
into a local buffer (e.g., let buffer = "") while iterating result.stream and
call setCurrentResponse with each chunk, then after the loop call setMessages
using the final buffer (or use setMessages(prev => [...prev, { role:
"assistant", content: buffer }])) and finally clear setCurrentResponse("");
update the code around neurolink.stream, result.stream, setCurrentResponse, and
setMessages to use this local buffer or functional update so the stored
assistant message contains the full streamed content.
- Around line 395-409: The generator's this is bound to responseStream so
this.cache is undefined; capture the SimpleCache reference (and prompt) into a
local variable before creating the streamed response and use that captured
variable instead of this inside async *stream (e.g., const cache = this.cache;
then call cache.set(prompt, {...}) within the stream generator) so the cache.set
call uses the correct object.
In `@docs/features/structured-output.md`:
- Around line 90-91: Remove the extra blank line inside the blockquote that
contains the "**Gemini 3 / Gemini 2.5 Note:**" paragraph so the blockquote lines
are contiguous (no empty line between them), ensuring the MD028 lint rule is
satisfied; locate the blockquote text beginning with "**Gemini 3 / Gemini 2.5
Note:**" and delete the stray blank line so the sentences remain in the same
blockquote block.
In `@docs/getting-started/providers/mistral.md`:
- Around line 302-313: The examples use the wrong token usage property
name—replace all references to result.usage.totalTokens with result.usage.total
(e.g., in the ai.generate example where cost is computed and tokens logged) to
match the TokenUsage type; update every occurrence mentioned (the cost
calculation and console.log lines) so they read result.usage.total.
- Around line 167-180: The example incorrectly passes a providers array and
unsupported fields into the NeuroLink constructor; update all examples (the
NeuroLink(...) calls) to remove the providers parameter and any unsupported
options (region, enableAudit, dataRetention, rateLimit, retryAttempts,
retryDelay, priority, condition) so that only valid NeurolinkConstructorConfig
keys remain (conversationMemory, enableOrchestration, hitl, toolRegistry,
observability, modelAliasConfig); instead show provider selection when calling
the generate() method using its provider option (e.g., describe use of
generate({ provider: "mistral", apiKey: ... }) rather than putting provider
config in the constructor).
---
Minor comments:
In `@docs/analysis/claims-vs-reality-analysis.md`:
- Line 281: Replace the non-evidential "Planned for future release" text in the
Evidence column for the "mcp exec" row with concrete test output showing the
command doesn't exist: run the CLI for the exact invocation shown ("neurolink
mcp exec <server> <tool>") and paste the real stderr/exit message or help output
(e.g., "unknown command 'exec'" or the full CLI usage text) into the Evidence
cell so the claim "Command doesn't exist" is substantiated; update the table row
referencing "mcp exec" accordingly.
In `@docs/demos/index.md`:
- Line 11: Update the demo description text for "Interactive Demo" to remove the
stale hardcoded provider count; replace "all 9 providers" with a current,
non-hardcoded phrase such as "12+ AI providers" or "multiple providers" so the
line reads: **[Interactive Demo](interactive.md)** — Live web demonstration with
12+ AI providers and real AI generation capabilities (or use "multiple
providers" if you prefer not to fix a specific number).
In `@docs/features/index.md`:
- Line 54: Update the SageMaker Integration description to use a hyphenated
compound adjective: change the table row text containing "**[SageMaker
Integration](../sagemaker-integration.md)** | Deploy and use custom trained
models..." to use "custom-trained models" (i.e., replace "custom trained models"
with "custom-trained models") in the docs/features/index.md entry for SageMaker
Integration.
In `@docs/features/multimodal-chat.md`:
- Around line 218-223: The tip block started with ":::tip[Alt Text Best
Practices]" has its closing fence indented; fix it by unindenting the closing
":::” so it is flush-left (remove leading spaces/tabs before the closing :::)
ensuring the tip block opens and closes with matching fences; edit the block
that begins with ":::tip[Alt Text Best Practices]" and align the closing ":::”
to the left margin.
In `@docs/features/rag.md`:
- Around line 246-247: The systemPrompt currently instructs the model to use the
tool ID "knowledge-search" but the example defines the tool with id:
"product-search", causing a mismatch; update the systemPrompt to reference
"product-search" (or alternatively rename the tool id to "knowledge-search") so
the tool ID in systemPrompt and the tool definition (id: "product-search")
match, ensuring consistent tool invocation.
- Around line 936-938: The for-await loop reads chunk.content without validating
chunk shape; update the loop that iterates over streamResult.stream to guard
each streamed item (e.g., check that chunk is an object and has a string
content) before calling process.stdout.write. Locate the loop using streamResult
and stream, verify chunk exists and typeof chunk.content === 'string' (or use
Object.prototype.hasOwnProperty.call) and only then call
process.stdout.write(chunk.content); otherwise skip or handle non-content chunks
appropriately.
In `@docs/getting-started/index.md`:
- Line 9: Update the Provider Setup line text to avoid the outdated "all 9
supported AI providers" phrasing: replace that fragment in the string
"**[Provider Setup](provider-setup.md)** — Configure API keys and credentials
for all 9 supported AI providers..." with a current/neutral phrase such as "all
supported providers" or the accurate "12+ supported AI providers" so the
description in docs/getting-started/index.md reflects the correct provider
count.
In `@docs/getting-started/providers/ollama.md`:
- Line 65: Replace the fenced code blocks like ```bash with indented (4-space)
code blocks to satisfy markdownlint MD046: locate each fenced block (e.g.,
occurrences starting with ```bash) and convert them to indented code by removing
the triple backticks and language tag and prefixing each code line with four
spaces; repeat this normalization for all other fenced blocks noted in the
review so the page uses consistent indented-style code blocks.
In `@docs/MODEL-UPDATE-PLAN.md`:
- Line 194: The recommendation sentence referring to the default embedding model
is a fragment; replace the fragment "Should be updated to `gemini-embedding-001`
or the new `gemini-embedding-2-preview`" with a full sentence that names the
subject and action (e.g., "Update the default embedding model from
`text-embedding-004` to `gemini-embedding-001` or the new
`gemini-embedding-2-preview`.") so the line clearly states the change and
references the models `text-embedding-004`, `gemini-embedding-001`, and
`gemini-embedding-2-preview`.
In `@README.md`:
- Around line 16-18: The README's stream loop writes every chunk without
validating shape, causing undefined output for non-content chunks; update the
loop over result.stream (the chunk variable) to guard before writing by checking
that chunk && typeof chunk.content === "string" (or presence of chunk.content)
and only call process.stdout.write for those content-bearing chunks, skipping
tool/event or otherwise-shaped chunks to make the snippet resilient.
---
Nitpick comments:
In `@docs/dynamic-models.md`:
- Around line 1-7: The "Dynamic Model Configuration System" page currently only
contains a client-side redirect link; add a server-side redirect so requests to
the old page return a 301 to ./advanced/dynamic-models.md. Update the site
routing/hosting config (e.g., static redirect file or platform routes) to add a
permanent redirect rule for the old page slug/title ("Dynamic Model
Configuration System") to the new path, ensure the redirect returns HTTP 301,
and update any sitemap or internal links referencing the old page.
In `@docs/examples/use-cases.md`:
- Line 5: Summary: Use Docusaurus native redirects instead of a manual link.
Replace the current inline message in docs/examples/use-cases.md with Docusaurus
redirect frontmatter by (1) ensuring `@docusaurus/plugin-client-redirects` is
enabled in the site config, and (2) updating the file to have a frontmatter
redirect (e.g., add a top YAML block like redirect_to:
/guides/examples/use-cases or redirect_from: ["/old-path"] depending on your
redirect strategy) so the page issues an automatic client/HTTP redirect to the
new Real-World Use Cases location and remove the manual link content.
In `@docs/features/auto-evaluation.md`:
- Around line 41-88: The docs use MkDocs tab syntax (=== "SDK" / === "CLI") in
the Usage Examples section; replace it with Docusaurus Tabs by importing Tabs
and TabItem (Tabs, TabItem) at the top of the MDX and wrapping the two code
blocks inside a <Tabs> containing two <TabItem> entries labeled "SDK" and "CLI";
move the existing TypeScript block into the SDK TabItem and the bash block into
the CLI TabItem, preserving the fenced code blocks and their content and labels
(e.g., the NeuroLink example and CLI examples) so rendering and code
highlighting remain identical.
In `@docs/features/file-processors.md`:
- Around line 223-224: The streaming example accesses chunk.content directly
from result.stream; add a discriminated-union/type guard before using
chunk.content (e.g., check chunk.type or whether 'content' in chunk or
chunk.kind === 'message') so only message/chunk variants with content are
written to stdout; update the for-await loop that iterates over result.stream
and only call process.stdout.write when the guard confirms the chunk carries
content.
In `@docs/features/workflow-engine.md`:
- Line 999: Update the phrasing in the link description "[Structured Output
Guide](./structured-output.md) -- JSON schema output (note: not compatible with
Gemini tools)" to use "incompatible" instead of "not compatible" for brevity;
replace "(note: not compatible with Gemini tools)" with "(note: incompatible
with Gemini tools)" so the meaning is unchanged but wording is simplified.
In `@docs/framework-integration.md`:
- Around line 1-7: Add a server-level redirect so requests to
docs/framework-integration.md are automatically forwarded to
./sdk/framework-integration.md; update the web server or hosting config (e.g.,
static site redirects, Netlify _redirects, Vercel rewrites, or Apache/Nginx
rule) to create a 301 redirect from the old path to the new path while keeping
the in-page relocation notice linking to ./sdk/framework-integration.md.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: 263636df-e957-45bd-ada2-4d17ef072e9b
📒 Files selected for processing (121)
CLAUDE.mdREADME.mddocs-site/sidebars.tsdocs-site/static/search-index.jsondocs/404.mddocs/DOCUMENTATION-AUDIT-REPORT.mddocs/MODEL-UPDATE-PLAN.mddocs/about/vision.mddocs/advanced/api-reference.mddocs/advanced/builtin-middleware.mddocs/advanced/cli-guide.mddocs/advanced/index.mddocs/advanced/mcp-integration.mddocs/advanced/streaming.mddocs/analysis/claims-vs-reality-analysis.mddocs/analysis/verification-results.mddocs/api-reference.mddocs/changelog.mddocs/cli-guide.mddocs/cli-reference.mddocs/cli/commands.mddocs/cli/index.mddocs/configuration.mddocs/contributing.mddocs/cookbook/basic-streaming.mddocs/cookbook/embeddings-basics.mddocs/cookbook/error-recovery.mddocs/cookbook/index.mddocs/cookbook/multimodal-images.mddocs/cookbook/provider-switching.mddocs/demos/index.mddocs/demos/screenshots.mddocs/development/contributing.mddocs/development/index.mddocs/dynamic-models.mddocs/enterprise-proxy-setup.mddocs/examples/basic-usage.mddocs/examples/index.mddocs/examples/use-cases.mddocs/features/audio-input.mddocs/features/auto-evaluation.mddocs/features/claude-subscription.mddocs/features/cli-loop-sessions.mddocs/features/context-compaction.mddocs/features/conversation-history.mddocs/features/csv-support.mddocs/features/embeddings.mddocs/features/enterprise-hitl.mddocs/features/file-processors.mddocs/features/guardrails.mddocs/features/hitl.mddocs/features/index.mddocs/features/mcp-tools-showcase.mddocs/features/multimodal-chat.mddocs/features/observability.mddocs/features/office-documents.mddocs/features/pdf-support.mddocs/features/provider-orchestration.mddocs/features/rag.mddocs/features/regional-streaming.mddocs/features/streaming.mddocs/features/structured-output.mddocs/features/thinking-configuration.mddocs/features/tts.mddocs/features/video-analysis.mddocs/features/video-director-mode.mddocs/features/video-generation.mddocs/features/workflow-engine.mddocs/framework-integration.mddocs/getting-started/api-reference.mddocs/getting-started/index.mddocs/getting-started/installation.mddocs/getting-started/providers/anthropic.mddocs/getting-started/providers/aws-bedrock.mddocs/getting-started/providers/azure-openai.mddocs/getting-started/providers/google-ai.mddocs/getting-started/providers/huggingface.mddocs/getting-started/providers/litellm.mddocs/getting-started/providers/mistral.mddocs/getting-started/providers/ollama.mddocs/getting-started/providers/openai.mddocs/getting-started/providers/sagemaker.mddocs/guides/index.mddocs/guides/migration-guide.mddocs/guides/migration/from-vercel-ai-sdk.mddocs/guides/server-adapters/api-reference.mddocs/guides/troubleshooting.mddocs/index.mddocs/mcp-docs-server.mddocs/mcp-integration.mddocs/mcp-testing-guide.mddocs/mem0-integration.mddocs/middleware.mddocs/playground/index.mddocs/provider-comparison.mddocs/reference/configuration.mddocs/reference/faq.mddocs/reference/index.mddocs/reference/provider-comparison.mddocs/reference/provider-selection.mddocs/reference/troubleshooting.mddocs/sdk/advanced-features.mddocs/sdk/api-reference.mddocs/sdk/custom-tools.mddocs/sdk/index.mddocs/telemetry-guide.mddocs/testing.mddocs/troubleshooting.mddocs/tutorials/videos.mddocs/use-cases.mdexamples/embeddings.tsexamples/memory-conversation.tsexamples/observability-langfuse.tsexamples/provider-switching.tsexamples/streaming-basic.tssrc/lib/adapters/providerImageAdapter.tssrc/lib/constants/contextWindows.tssrc/lib/constants/enums.tssrc/lib/constants/tokens.tssrc/lib/providers/amazonBedrock.tssrc/lib/providers/anthropic.ts
💤 Files with no reviewable changes (1)
- docs/cli-reference.md
abbaa77 to
6378ecb
Compare
Review Feedback Addressed (Cycle 1)All 47 findings from CodeRabbit and Copilot reviews have been addressed. Changes MadeCritical fixes (7 inline + 3 outside-diff):
Major fixes (7 inline + 2 outside-diff):
Copilot review fixes (10):
Minor fixes (11):
Files Modified28 files across docs/, examples/, and README.md Validation
Requesting Re-review@coderabbitai — All feedback from this cycle has been addressed. Please re-review. |
|
✅ Actions performedFull review triggered. |
🤖 AI Review & Build Compliance ✅Status: AI analysis complete • Build rules validated • Ready for review 📊 View detailed analysis results🛡️ Analysis Complete
📋 Ready for Merge When
🤖 AI analysis complete - check individual code comments for specific feedback |
There was a problem hiding this comment.
Actionable comments posted: 19
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (4)
docs/404.md (2)
7-21:⚠️ Potential issue | 🟠 MajorIncomplete MkDocs→Docusaurus conversion: tab syntax.
The MkDocs tab syntax (
=== "Tab Name") used here is not compatible with Docusaurus and will not render correctly. The PR objectives state that MkDocs syntax was converted to Docusaurus across 26 files, but this file still contains unconverted tab syntax.♻️ Proposed fix: Convert to Docusaurus tabs or simplify to plain Markdown
Option 1 (Recommended for 404 page): Simplify to a plain Markdown list without tabs:
## 🔍 What you can do: -=== "Check the URL" - - Make sure the URL is spelled correctly and try again. - -=== "Use Navigation" - - Use the navigation menu to find what you're looking for. - -=== "Search" - - Use the search function to find specific content. - -=== "Go Home" - - Return to the [homepage](index.md) and start from there. +- **Check the URL:** Make sure the URL is spelled correctly and try again. +- **Use Navigation:** Use the navigation menu to find what you're looking for. +- **Search:** Use the search function to find specific content. +- **Go Home:** Return to the [homepage](index.md) and start from there.Option 2: Convert to Docusaurus JSX tab syntax (if tabs are essential):
Add imports at the top of the file:
import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem';Then replace the section:
<Tabs> <TabItem value="check-url" label="Check the URL"> Make sure the URL is spelled correctly and try again. </TabItem> <TabItem value="use-navigation" label="Use Navigation"> Use the navigation menu to find what you're looking for. </TabItem> <TabItem value="search" label="Search"> Use the search function to find specific content. </TabItem> <TabItem value="go-home" label="Go Home"> Return to the [homepage](index.md) and start from there. </TabItem> </Tabs>🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/404.md` around lines 7 - 21, The MkDocs tab blocks starting with markers like === "Check the URL" (and the other === "Use Navigation"/=== "Search"/=== "Go Home") are not valid Docusaurus and should be replaced; update docs/404.md by removing the MkDocs tab syntax and either convert the content into a simple Markdown list of headings and paragraphs (recommended for a 404 page) or replace the tab block with Docusaurus Tabs using the theme components (import Tabs and TabItem at the top and wrap each item in a <TabItem> with appropriate value/label); ensure you remove the original === "..." markers and keep the original text for each item so the page renders correctly.
40-40:⚠️ Potential issue | 🟡 MinorIncomplete MkDocs→Docusaurus conversion: button syntax.
The MkDocs button class syntax
{ .md-button .md-button--primary }is not compatible with Docusaurus and will not apply button styling.♻️ Proposed fix: Use Docusaurus-compatible button syntax
-[← Back to Home](index.md){ .md-button .md-button--primary } +[← Back to Home](index.md)If button styling is important, you can wrap it in HTML with custom CSS classes defined in your Docusaurus theme:
<a href="index.md" className="button button--primary">← Back to Home</a>🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/404.md` at line 40, Replace the MkDocs-specific button class syntax "{ .md-button .md-button--primary }" on the link in docs/404.md with Docusaurus-compatible markup: change the link markup for "← Back to Home" to use an HTML anchor with Docusaurus button classes (e.g., className "button button--primary") or a plain markdown link if styling is not required so the button styling is applied correctly in Docusaurus.docs/advanced/mcp-integration.md (1)
74-90:⚠️ Potential issue | 🟠 MajorUpdate deprecated MCP method name in examples (
addMCPServer→addExternalMCPServer)Lines 79 and 89 use
addMCPServer(), which does not exist in the NeuroLink SDK. The correct method isaddExternalMCPServer(), as documented in the API reference. These incorrect examples will cause copy-paste failures.Proposed fix
-await neurolink.addMCPServer("bitbucket", { +await neurolink.addExternalMCPServer("bitbucket", { command: "npx", args: ["-y", "@nexus2520/bitbucket-mcp-server"], env: { BITBUCKET_USERNAME: "your-username", BITBUCKET_APP_PASSWORD: "your-token", }, }); // Add database integration -await neurolink.addMCPServer("database", { +await neurolink.addExternalMCPServer("database", { command: "node", args: ["./custom-db-server.js"], env: { DB_CONNECTION: "postgresql://..." }, });🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/advanced/mcp-integration.md` around lines 74 - 90, The examples use the deprecated/nonexistent method addMCPServer on the NeuroLink instance (constructed via new NeuroLink()); update both occurrences to call addExternalMCPServer instead (e.g., replace neurolink.addMCPServer(...) with neurolink.addExternalMCPServer(...)) so the examples match the SDK API and will run when copy-pasted.docs/advanced/streaming.md (1)
714-721:⚠️ Potential issue | 🟠 MajorRemove
chunk.analyticsreferences; analytics are only available on the result object after streaming completes.The current stream chunk type is a discriminated union (
{ content: string },{ type: "audio"; audio: AudioChunk },{ type: "image"; imageOutput: { base64: string } }) and does not include ananalyticsfield. Per-chunk analytics access is not supported. Instead, access analytics viaresult.analyticsafter the stream completes, as shown correctly elsewhere in the docs (line 667-669).🛠️ Suggested adjustment
for await (const chunk of stream.stream) { - console.log(chunk.content); - - // Access real-time analytics - if (chunk.analytics) { - console.log(`Tokens so far: ${chunk.analytics.tokensUsed}`); - console.log(`Cost so far: $${chunk.analytics.estimatedCost}`); - } + if ("content" in chunk && chunk.content) { + console.log(chunk.content); + } } + +// Post-stream metadata +console.log("Provider:", stream.provider); +console.log("Usage:", stream.usage);🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/advanced/streaming.md` around lines 714 - 721, Remove per-chunk analytics access: the stream yields chunks from stream.stream whose types do not include an analytics field, so remove any references to chunk.analytics and related logging; instead, after the for-await loop completes, read analytics from the final result object (result.analytics) as shown elsewhere in the docs. Ensure you update the example to only log chunk.content (and any audio/image handling via chunk.type) inside the loop and move tokens/cost logging to after the stream completes using result.analytics.
♻️ Duplicate comments (2)
docs/features/embeddings.md (1)
154-159:⚠️ Potential issue | 🟠 MajorAlign the Vertex embed-many example with documented Vertex defaults.
This block mixes Vertex provider with AI Studio model/dimensions (
gemini-embedding-001,3072), which contradicts your own provider table (text-embedding-004,768for Vertex).Suggested doc patch
{ "texts": ["First document", "Second document", "Third document"], "provider": "vertex", - "model": "gemini-embedding-001" + "model": "text-embedding-004" } ... { "embeddings": [ @@ ], "provider": "vertex", - "model": "gemini-embedding-001", + "model": "text-embedding-004", "count": 3, - "dimension": 3072 + "dimension": 768 }Based on learnings: "Embedding provider implementations must use the correct default embedding model: ... Google Vertex uses 'text-embedding-004' ..."
Also applies to: 177-181
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/features/embeddings.md` around lines 154 - 159, The Vertex embedding example uses the wrong model and dimensions: replace the provider example value "gemini-embedding-001" with the Vertex default model "text-embedding-004" and update any corresponding dimension references from 3072 to 768; ensure the other Vertex embed-many example(s) that also reference "gemini-embedding-001"/3072 are updated the same way so the docs match the provider table.docs/getting-started/providers/azure-openai.md (1)
233-235:⚠️ Potential issue | 🟡 MinorRetirement note should include Data Zone deployment wording for accuracy.
Line 234 now has concrete dates (great), but it still omits Data Zone Standard in the October 1, 2026 cohort. Please make the deployment types explicit to avoid migration confusion.
Suggested wording
-GPT-4o-mini is retiring on Azure: **Standard deployments retire March 31, 2026**; **Provisioned and Global deployments retire October 1, 2026**. Migrate to `gpt-4.1-mini` or `gpt-5-mini` as a replacement. +GPT-4o-mini is retiring on Azure: **Standard deployments retire March 31, 2026**; **Provisioned, Global Standard, and Data Zone Standard deployments retire October 1, 2026**. Migrate to `gpt-4.1-mini` or `gpt-5-mini` as a replacement.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/getting-started/providers/azure-openai.md` around lines 233 - 235, Update the retirement warning block titled "GPT-4o-mini Retirement" to explicitly list the affected deployment types for each date; keep the March 31, 2026 note as "Standard deployments retire March 31, 2026" and change the October 1, 2026 note to include "Provisioned, Global, and Data Zone Standard deployments retire October 1, 2026" (or similar phrasing), so the block clearly enumerates deployment types and avoids ambiguity about Data Zone Standard.
🧹 Nitpick comments (8)
docs/DOCUMENTATION-AUDIT-REPORT.md (1)
17-17: Use “SDK and CLI APIs” instead of “SDK/CLI interface”.Small wording cleanup for clarity; “CLI interface” is a bit tautological here.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/DOCUMENTATION-AUDIT-REPORT.md` at line 17, Update the wording in the "Code example correctness" bullet: replace the phrase "SDK/CLI interface" with "SDK and CLI APIs" (the line that reads "9. **Code example correctness** — Every code block compared against actual SDK/CLI interface"). Keep the rest of the sentence unchanged and ensure the heading "Code example correctness" remains intact.docs/advanced/mcp-integration.md (2)
539-539: Deep-link API Integration to MCP section anchorLine 539 should point directly to the MCP API section for faster navigation.
Suggested link tweak
-- [API Integration](../sdk/api-reference.md) +- [API Integration](../sdk/api-reference.md#mcp-server-management)🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/advanced/mcp-integration.md` at line 539, Update the link "[API Integration](../sdk/api-reference.md)" so it deep-links directly to the MCP API section anchor (e.g., change to "../sdk/api-reference.md#mcp-api" or the actual anchor id used in the target doc); locate the link text in docs/advanced/mcp-integration.md (the "[API Integration]" entry) and replace the href with the MCP-specific anchor to enable direct navigation to the MCP API section.
100-106: Clarify planned CLI execution examples to prevent false expectationsGood call on adding the planned note at Line 102, but the bash block at Line 105-107 still looks runnable now. Consider labeling the block as “preview” (or commenting both commands as planned) to reduce support noise.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/advanced/mcp-integration.md` around lines 100 - 106, Update the "### **4. Execute Tools**" section to make the example explicitly non-runnable: change the bash block label to something like "Preview (planned — not yet runnable)" and comment out the example command(s) (the lines containing npx neurolink mcp exec filesystem read_file --params '{"path": "README.md"}' and any related shell comments) so readers won't try to execute them; ensure the surrounding text still states this is planned and clearly references the preview command.docs/demos/screenshots.md (1)
416-416: Consider clarifying the "demo" context usage in the naming convention.The filename
cli-help-demo.pnguses "demo" as a context descriptor, but the documented "Context Descriptifiers" section (lines 385-393) doesn't list "demo" as a valid context—only as a category code (line 370). This creates potential ambiguity for contributors following the naming convention guide.Consider either:
- Adding "demo" to the official context descriptors list with a clear definition, or
- Using
cli-help-overview.pnginstead, since "overview" is documented (line 387) and semantically fits the screenshot description at line 9Also applies to: 469-469, 509-509
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/demos/screenshots.md` at line 416, The filename cli-help-demo.png (and the similar entries at the other noted locations) uses "demo" as a context descriptor which isn't listed under "Context Descriptifiers"; either add "demo" with a clear definition to the Context Descriptifiers section (so the guide accepts filenames like cli-help-demo.png) or rename the image entries to use an existing documented descriptor such as cli-help-overview.png to match the "overview" descriptor in the list—update the TOC/markdown entries where cli-help-demo.png appears and the Context Descriptifiers section accordingly.docs/features/workflow-engine.md (1)
999-999: Optional wording cleanup for concision.Consider replacing “not compatible” with “incompatible” for tighter phrasing.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/features/workflow-engine.md` at line 999, Update the wording in the line containing "[Structured Output Guide](./structured-output.md) -- JSON schema output (note: not compatible with Gemini tools)" by replacing "not compatible" with the more concise "incompatible" so the fragment reads "(note: incompatible with Gemini tools)"; locate and edit that exact sentence in the document to make the wording change.docs/cookbook/index.md (1)
20-23: Consider using relative paths for consistency.The new Getting Started links use absolute paths (
/docs/cookbook/...) while existing recipe links use relative paths (e.g.,streaming-with-retry.mdon line 27). For consistency and portability, consider using relative paths throughout.♻️ Suggested consistency fix
-- [**Basic Streaming**](/docs/cookbook/basic-streaming) - Stream AI responses in real time with the `result.stream` pattern -- [**Multimodal Images**](/docs/cookbook/multimodal-images) - Send images to vision models for analysis, OCR, and comparison -- [**Provider Switching**](/docs/cookbook/provider-switching) - Switch providers at runtime, compare outputs, and implement fallback -- [**Embeddings Basics**](/docs/cookbook/embeddings-basics) - Generate embeddings, compare similarity, and build semantic search +- [**Basic Streaming**](basic-streaming.md) - Stream AI responses in real time with the `result.stream` pattern +- [**Multimodal Images**](multimodal-images.md) - Send images to vision models for analysis, OCR, and comparison +- [**Provider Switching**](provider-switching.md) - Switch providers at runtime, compare outputs, and implement fallback +- [**Embeddings Basics**](embeddings-basics.md) - Generate embeddings, compare similarity, and build semantic search🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/cookbook/index.md` around lines 20 - 23, Replace the absolute URLs in the cookbook index entries (the link labels "Basic Streaming", "Multimodal Images", "Provider Switching", and "Embeddings Basics") with relative paths consistent with the other recipes (e.g., use paths like ./cookbook/basic-streaming or ../cookbook/basic-streaming as appropriate) so all links in docs/cookbook/index.md use relative links for portability and consistency.docs/features/streaming.md (1)
19-21: Optional: Fix blank line in blockquote.The static analysis tool flagged a blank line inside the blockquote block (line 20). While this doesn't affect functionality, removing it aligns with markdownlint rules.
📝 Proposed fix
> **Since**: v8.0.0 | **Status**: Stable | **Availability**: SDK + CLI - > **Provider Defaults:** When `--provider` (CLI) or `provider` (SDK) is not specified, NeuroLink defaults to **Vertex AI** with **gemini-2.5-flash**. Set the `NEUROLINK_PROVIDER` or `AI_PROVIDER` environment variable to change the default provider.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/features/streaming.md` around lines 19 - 21, Remove the blank line inside the blockquote so the two lines "**Since**: v8.0.0 | **Status**: Stable | **Availability**: SDK + CLI" and "**Provider Defaults:** When `--provider` (CLI) or `provider` (SDK) is not specified, NeuroLink defaults to **Vertex AI** with **gemini-2.5-flash**." are contiguous within the same blockquote; edit the block to eliminate the empty line between those two lines to satisfy markdownlint.docs/getting-started/providers/google-ai.md (1)
155-155: Update text-embedding-004 status to past tense.Line 155 states
text-embedding-004is "SHUT DOWN Jan 14, 2026", but the current date is March 18, 2026. Update the status to reflect that this shutdown has already occurred (e.g., "SHUT DOWN on Jan 14, 2026" or "Shut down Jan 14, 2026").🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/getting-started/providers/google-ai.md` at line 155, Find the table row containing `text-embedding-004` and change the status cell from "SHUT DOWN Jan 14, 2026" to a past-tense phrasing such as "Shut down Jan 14, 2026" or "SHUT DOWN on Jan 14, 2026" (preserve bolding/formatting style used in the table), so the entry reads as an event that already occurred.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@docs/advanced/streaming.md`:
- Around line 33-35: The code reads chunk.content directly from
StreamResult.stream (e.g., for await (const chunk of result.stream) {
console.log(chunk.content) ... }), but StreamResult.stream yields discriminated
union chunks (type: "text" | "audio" | "image"); guard by checking chunk.type
=== "text" before accessing chunk.content and handle other variants (audio:
AudioChunk, image: imageOutput.base64) appropriately or skip them; update all
direct accesses to chunk.content across the streaming handling logic (including
any uses of process.stdout.write and console.log) to first branch on chunk.type
and then read the correct property for that variant.
In `@docs/changelog.md`:
- Around line 130-137: Update the "Major Version Upgrades" section by adding an
entry for the v8 → v9 migration path (since the changelog marks v9.14.0 as
current); add a bullet similar to "- **v8 to v9 Migration Guide**" with either a
short placeholder note ("This guide is planned for a future release" or a link
to the migration doc if available) so users see the most relevant upgrade path
alongside the existing "v7 to v8" and "v6 to v7" entries.
In `@docs/cli/commands.md`:
- Around line 728-733: The docs currently list mcp add --transport values as
`stdio`, `sse`, `websocket` but earlier text states MCP supports HTTP; update
the mcp add documentation so it's consistent by either adding `http` to the
`--transport` options for the `mcp add` command or, if HTTP must be configured
elsewhere, add a clarifying sentence next to the `--transport` table explaining
that HTTP transport is configured via a different command/path (referencing the
section that describes HTTP support) and point readers to that configuration
path; ensure the fix touches the `mcp add` `--transport` table in the
commands.md file and the surrounding MCP/HTTP support text so both places match.
In `@docs/contributing.md`:
- Line 7: The contributing guide currently lives under development/contributing
while the sidebar key community/contributing and the redirect rule
/docs/community/contributing are pointing to a different canonical location,
causing broken/ inconsistent navigation; fix by either moving the contributing
file to the community/contributing location to match the sidebar/redirects, or
update the sidebar key (community/contributing) and the redirect rule
(/docs/community/contributing) to point to development/contributing so paths
align; ensure the link in the moved/updated markdown (the "This page has moved"
line) is updated to the new canonical path and run the site build to validate
redirects.
In `@docs/cookbook/provider-switching.md`:
- Around line 49-50: The docs use the wrong TokenUsage field name; update any
occurrences of result.usage?.totalTokens to result.usage?.total (since the
TokenUsage type defines total), e.g. replace tokens: result.usage?.totalTokens
with tokens: result.usage?.total in the examples and any other places (both
instances mentioned) so the examples match the TokenUsage shape.
In `@docs/demos/index.md`:
- Around line 108-117: Update the Live Demo callout started by ":::tip[Live Demo
Available]" to correct the provider count and fix the admonition closure: change
the text "All 9 providers functional" to "All 13 providers functional" (or to
the accurate current number) and ensure the closing ":::” is not indented but
placed flush-left to properly close the admonition block; edit the same block
that contains "Interactive Demo" and the bulleted features.
In `@docs/DOCUMENTATION-AUDIT-REPORT.md`:
- Around line 3-6: The audit report currently reads as a live backlog under the
"## Goal" section; change it to a dated snapshot or move it out of user-facing
docs by adding a prominent "Snapshot as of YYYY-MM-DD" banner at the top,
convert present-tense "broken/missing" language to past-tense or add a
"resolved-status" section listing items fixed, and/or relocate the document to
internal engineering documentation; update headers and any verification steps
(including the referenced range 862-878) to reflect snapshot dating and
resolution status so public docs no longer assert live failures.
In `@docs/features/file-processors.md`:
- Around line 223-225: The streaming example's guard only checks for the
existence of "content" on chunk but should also ensure it's truthy; update the
conditional that iterates result.stream (the for await loop over result.stream)
to use the same defensive pattern as other docs by changing the guard on chunk
to check both "content" in chunk and that chunk.content is truthy before calling
process.stdout.write; locate the for await (const chunk of result.stream) block
and modify its if condition to include && chunk.content so process.stdout.write
is only called with a valid string.
In `@docs/features/index.md`:
- Around line 89-106: The header "NeuroLink supports **14+ AI providers**" is
inconsistent with the providers table (13 entries); update the copy so the count
matches the table (change the header text to "13 AI providers") or add the
missing provider row to the table; locate the header string "NeuroLink supports
**14+ AI providers**" and the providers table in docs/features/index.md and
apply the corresponding change so the displayed count and table entries are
consistent.
- Line 94: The Anthropic model entry in the overview tables currently reads
"Claude 4.5/4.0 Sonnet, Opus, Haiku" and must be updated to include "Claude 4.6"
so the tables match provider docs; locate the table row containing the
"Anthropic" provider (the cell with the model string) in docs/features/index.md,
docs/index.md, and docs/getting-started/provider-setup.md and update the model
list to "Claude 4.6/4.5/4.0 Sonnet, Opus, Haiku" (or prepend/append "Claude 4.6"
to the existing string) and ensure any related subscription/setup link text
remains correct.
In `@docs/features/regional-streaming.md`:
- Around line 18-28: The example declares const stream from neurolink.stream but
then iterates over result.stream (undefined); change the iteration to use the
declared variable (iterate over stream) so the for-await loop reads from the
actual streaming object returned by neurolink.stream; ensure any other
references use the same symbol name (stream) so there are no undefined
variables.
In `@docs/features/thinking-configuration.md`:
- Line 28: Replace the outdated model identifiers in the thinking configuration
documentation so they exactly match the registry names in config/models.json:
update any occurrences of "gemini-3.1-pro" to the registry's current Gemini ID,
replace "claude-opus-4-5-20251101" with the registry's Claude ID, and unify
references to "gemini-3-pro-preview" with the single canonical Gemini preview ID
used elsewhere in the doc; ensure all instances across the page (including the
lines around 28 and 40-45) are consistently updated so copy-paste examples match
the registry.
In `@docs/features/video-analysis.md`:
- Line 29: Replace the inconsistent input key in the Quick Start snippet: change
the request payload property name from videoFiles to files in the object passed
as input (e.g., update input: { text: "Describe this video", videoFiles:
["./clip.mp4"] } to use files instead) so it matches the other SDK examples and
the documented usage for the video analysis feature.
In `@docs/getting-started/index.md`:
- Line 9: Update the provider count in the "Provider Setup" link text in
docs/getting-started/index.md: change "all 13 supported AI providers" to "all 12
supported AI providers" to match the providers listed in
docs/features/streaming.md (OpenAI, Anthropic, Google AI Studio, Google Vertex
AI, Amazon Bedrock, Azure OpenAI, Mistral, LiteLLM, Ollama, Hugging Face, Amazon
SageMaker, OpenAI-Compatible); edit the string containing "Provider Setup" so
the displayed count is 12.
In `@docs/getting-started/providers/huggingface.md`:
- Around line 17-19: Update the intro tip block labeled ":::tip[Free Tier
Advantage]" to remove the absolute "no rate limits" claim and instead state the
accurate free-tier limits consistent with the rest of the doc (e.g., mention the
approximately "1,000 requests/day per model" limit or a soft rate limit),
ensuring the tip and the later section that documents "~1,000 requests/day per
model" use the same wording and numeric limit so readers are not misled.
In `@docs/getting-started/providers/mistral.md`:
- Around line 87-102: Update the table rows for "Codestral" and "Codestral
Embed": change the "Context" for the Codestral row (`codestral-latest`) from
`256K` to `128K`, and update the "Codestral Embed" row (`codestral-embed-2505`)
to reflect the default and max embedding size (e.g., "1536 (configurable up to
3072)") instead of just "3072 dimensions" so readers see the default and the
maximum.
In `@docs/MODEL-UPDATE-PLAN.md`:
- Line 194: The sentence fragment that lists `text-embedding-004` as the Vertex
default must be rewritten as a full explicit sentence and updated to a valid
model; change the fragment to something like: "Update the Vertex default
embedding model from `text-embedding-004` (SHUT DOWN) to `gemini-embedding-001`
or `gemini-embedding-2-preview`." Edit the entry in MODEL-UPDATE-PLAN.md where
`text-embedding-004` is mentioned so the line is a complete sentence and
references the replacement models `gemini-embedding-001` and
`gemini-embedding-2-preview`.
- Around line 212-213: The Phase 1 summary line “~15 new model enum entries
across 4 providers” is inconsistent with the enumerated Part 1 list (which
includes OpenAI, Google AI, Mistral, Bedrock, and Azure and appears closer to 16
entries); update the summary to match the actual enumeration by recounting the
model entries in Part 1 and either adjust the total to the correct number or
remove the provider count (or reconcile the provider list to four providers),
ensuring the exact phrase “~15 new model enum entries across 4 providers” is
replaced with the corrected total/providers to eliminate drift.
- Around line 41-43: Resolve the conflicting guidance by choosing one policy and
making it explicit: either (A) allow preview models and removals as exceptions
or (B) prohibit them—then update the text so references to
`gemini-embedding-2-preview` and the “Update needed: `text-embedding-004` → mark
as deprecated/remove” line are consistent with the global rule that currently
forbids removals/preview additions; specifically, either add an explicit
exception clause near the “Update needed” block that permits
shutdown/deprecation actions for named models (e.g., `text-embedding-004`) and
previews (e.g., `gemini-embedding-2-preview`), or remove/replace the conflicting
preview/removal wording so it matches the later guidance that avoids removals
and preview/experimental additions.
---
Outside diff comments:
In `@docs/404.md`:
- Around line 7-21: The MkDocs tab blocks starting with markers like === "Check
the URL" (and the other === "Use Navigation"/=== "Search"/=== "Go Home") are not
valid Docusaurus and should be replaced; update docs/404.md by removing the
MkDocs tab syntax and either convert the content into a simple Markdown list of
headings and paragraphs (recommended for a 404 page) or replace the tab block
with Docusaurus Tabs using the theme components (import Tabs and TabItem at the
top and wrap each item in a <TabItem> with appropriate value/label); ensure you
remove the original === "..." markers and keep the original text for each item
so the page renders correctly.
- Line 40: Replace the MkDocs-specific button class syntax "{ .md-button
.md-button--primary }" on the link in docs/404.md with Docusaurus-compatible
markup: change the link markup for "← Back to Home" to use an HTML anchor with
Docusaurus button classes (e.g., className "button button--primary") or a plain
markdown link if styling is not required so the button styling is applied
correctly in Docusaurus.
In `@docs/advanced/mcp-integration.md`:
- Around line 74-90: The examples use the deprecated/nonexistent method
addMCPServer on the NeuroLink instance (constructed via new NeuroLink()); update
both occurrences to call addExternalMCPServer instead (e.g., replace
neurolink.addMCPServer(...) with neurolink.addExternalMCPServer(...)) so the
examples match the SDK API and will run when copy-pasted.
In `@docs/advanced/streaming.md`:
- Around line 714-721: Remove per-chunk analytics access: the stream yields
chunks from stream.stream whose types do not include an analytics field, so
remove any references to chunk.analytics and related logging; instead, after the
for-await loop completes, read analytics from the final result object
(result.analytics) as shown elsewhere in the docs. Ensure you update the example
to only log chunk.content (and any audio/image handling via chunk.type) inside
the loop and move tokens/cost logging to after the stream completes using
result.analytics.
---
Duplicate comments:
In `@docs/features/embeddings.md`:
- Around line 154-159: The Vertex embedding example uses the wrong model and
dimensions: replace the provider example value "gemini-embedding-001" with the
Vertex default model "text-embedding-004" and update any corresponding dimension
references from 3072 to 768; ensure the other Vertex embed-many example(s) that
also reference "gemini-embedding-001"/3072 are updated the same way so the docs
match the provider table.
In `@docs/getting-started/providers/azure-openai.md`:
- Around line 233-235: Update the retirement warning block titled "GPT-4o-mini
Retirement" to explicitly list the affected deployment types for each date; keep
the March 31, 2026 note as "Standard deployments retire March 31, 2026" and
change the October 1, 2026 note to include "Provisioned, Global, and Data Zone
Standard deployments retire October 1, 2026" (or similar phrasing), so the block
clearly enumerates deployment types and avoids ambiguity about Data Zone
Standard.
---
Nitpick comments:
In `@docs/advanced/mcp-integration.md`:
- Line 539: Update the link "[API Integration](../sdk/api-reference.md)" so it
deep-links directly to the MCP API section anchor (e.g., change to
"../sdk/api-reference.md#mcp-api" or the actual anchor id used in the target
doc); locate the link text in docs/advanced/mcp-integration.md (the "[API
Integration]" entry) and replace the href with the MCP-specific anchor to enable
direct navigation to the MCP API section.
- Around line 100-106: Update the "### **4. Execute Tools**" section to make the
example explicitly non-runnable: change the bash block label to something like
"Preview (planned — not yet runnable)" and comment out the example command(s)
(the lines containing npx neurolink mcp exec filesystem read_file --params
'{"path": "README.md"}' and any related shell comments) so readers won't try to
execute them; ensure the surrounding text still states this is planned and
clearly references the preview command.
In `@docs/cookbook/index.md`:
- Around line 20-23: Replace the absolute URLs in the cookbook index entries
(the link labels "Basic Streaming", "Multimodal Images", "Provider Switching",
and "Embeddings Basics") with relative paths consistent with the other recipes
(e.g., use paths like ./cookbook/basic-streaming or ../cookbook/basic-streaming
as appropriate) so all links in docs/cookbook/index.md use relative links for
portability and consistency.
In `@docs/demos/screenshots.md`:
- Line 416: The filename cli-help-demo.png (and the similar entries at the other
noted locations) uses "demo" as a context descriptor which isn't listed under
"Context Descriptifiers"; either add "demo" with a clear definition to the
Context Descriptifiers section (so the guide accepts filenames like
cli-help-demo.png) or rename the image entries to use an existing documented
descriptor such as cli-help-overview.png to match the "overview" descriptor in
the list—update the TOC/markdown entries where cli-help-demo.png appears and the
Context Descriptifiers section accordingly.
In `@docs/DOCUMENTATION-AUDIT-REPORT.md`:
- Line 17: Update the wording in the "Code example correctness" bullet: replace
the phrase "SDK/CLI interface" with "SDK and CLI APIs" (the line that reads "9.
**Code example correctness** — Every code block compared against actual SDK/CLI
interface"). Keep the rest of the sentence unchanged and ensure the heading
"Code example correctness" remains intact.
In `@docs/features/streaming.md`:
- Around line 19-21: Remove the blank line inside the blockquote so the two
lines "**Since**: v8.0.0 | **Status**: Stable | **Availability**: SDK + CLI" and
"**Provider Defaults:** When `--provider` (CLI) or `provider` (SDK) is not
specified, NeuroLink defaults to **Vertex AI** with **gemini-2.5-flash**." are
contiguous within the same blockquote; edit the block to eliminate the empty
line between those two lines to satisfy markdownlint.
In `@docs/features/workflow-engine.md`:
- Line 999: Update the wording in the line containing "[Structured Output
Guide](./structured-output.md) -- JSON schema output (note: not compatible with
Gemini tools)" by replacing "not compatible" with the more concise
"incompatible" so the fragment reads "(note: incompatible with Gemini tools)";
locate and edit that exact sentence in the document to make the wording change.
In `@docs/getting-started/providers/google-ai.md`:
- Line 155: Find the table row containing `text-embedding-004` and change the
status cell from "SHUT DOWN Jan 14, 2026" to a past-tense phrasing such as "Shut
down Jan 14, 2026" or "SHUT DOWN on Jan 14, 2026" (preserve bolding/formatting
style used in the table), so the entry reads as an event that already occurred.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: ce4d5b2a-9e77-41f2-a1f8-4122f5d74b3a
📒 Files selected for processing (121)
CLAUDE.mdREADME.mddocs-site/sidebars.tsdocs-site/static/search-index.jsondocs/404.mddocs/DOCUMENTATION-AUDIT-REPORT.mddocs/MODEL-UPDATE-PLAN.mddocs/about/vision.mddocs/advanced/api-reference.mddocs/advanced/builtin-middleware.mddocs/advanced/cli-guide.mddocs/advanced/index.mddocs/advanced/mcp-integration.mddocs/advanced/streaming.mddocs/analysis/claims-vs-reality-analysis.mddocs/analysis/verification-results.mddocs/api-reference.mddocs/changelog.mddocs/cli-guide.mddocs/cli-reference.mddocs/cli/commands.mddocs/cli/index.mddocs/configuration.mddocs/contributing.mddocs/cookbook/basic-streaming.mddocs/cookbook/embeddings-basics.mddocs/cookbook/error-recovery.mddocs/cookbook/index.mddocs/cookbook/multimodal-images.mddocs/cookbook/provider-switching.mddocs/demos/index.mddocs/demos/screenshots.mddocs/development/contributing.mddocs/development/index.mddocs/dynamic-models.mddocs/enterprise-proxy-setup.mddocs/examples/basic-usage.mddocs/examples/index.mddocs/examples/use-cases.mddocs/features/audio-input.mddocs/features/auto-evaluation.mddocs/features/claude-subscription.mddocs/features/cli-loop-sessions.mddocs/features/context-compaction.mddocs/features/conversation-history.mddocs/features/csv-support.mddocs/features/embeddings.mddocs/features/enterprise-hitl.mddocs/features/file-processors.mddocs/features/guardrails.mddocs/features/hitl.mddocs/features/index.mddocs/features/mcp-tools-showcase.mddocs/features/multimodal-chat.mddocs/features/observability.mddocs/features/office-documents.mddocs/features/pdf-support.mddocs/features/provider-orchestration.mddocs/features/rag.mddocs/features/regional-streaming.mddocs/features/streaming.mddocs/features/structured-output.mddocs/features/thinking-configuration.mddocs/features/tts.mddocs/features/video-analysis.mddocs/features/video-director-mode.mddocs/features/video-generation.mddocs/features/workflow-engine.mddocs/framework-integration.mddocs/getting-started/api-reference.mddocs/getting-started/index.mddocs/getting-started/installation.mddocs/getting-started/providers/anthropic.mddocs/getting-started/providers/aws-bedrock.mddocs/getting-started/providers/azure-openai.mddocs/getting-started/providers/google-ai.mddocs/getting-started/providers/huggingface.mddocs/getting-started/providers/litellm.mddocs/getting-started/providers/mistral.mddocs/getting-started/providers/ollama.mddocs/getting-started/providers/openai.mddocs/getting-started/providers/sagemaker.mddocs/guides/index.mddocs/guides/migration-guide.mddocs/guides/migration/from-vercel-ai-sdk.mddocs/guides/server-adapters/api-reference.mddocs/guides/troubleshooting.mddocs/index.mddocs/mcp-docs-server.mddocs/mcp-integration.mddocs/mcp-testing-guide.mddocs/mem0-integration.mddocs/middleware.mddocs/playground/index.mddocs/provider-comparison.mddocs/reference/configuration.mddocs/reference/faq.mddocs/reference/index.mddocs/reference/provider-comparison.mddocs/reference/provider-selection.mddocs/reference/troubleshooting.mddocs/sdk/advanced-features.mddocs/sdk/api-reference.mddocs/sdk/custom-tools.mddocs/sdk/index.mddocs/telemetry-guide.mddocs/testing.mddocs/troubleshooting.mddocs/tutorials/videos.mddocs/use-cases.mdexamples/embeddings.tsexamples/memory-conversation.tsexamples/observability-langfuse.tsexamples/provider-switching.tsexamples/streaming-basic.tssrc/lib/adapters/providerImageAdapter.tssrc/lib/constants/contextWindows.tssrc/lib/constants/enums.tssrc/lib/constants/tokens.tssrc/lib/providers/amazonBedrock.tssrc/lib/providers/anthropic.ts
💤 Files with no reviewable changes (1)
- docs/cli-reference.md
| | Model | Model ID | Context | Vision | Use Case | | ||
| | ---------------------- | ------------------------- | ------- | ------ | -------------------------------------------------------- | | ||
| | **Mistral Large 3** | `mistral-large-latest` | 256K | Yes | Flagship, agentic — native vision replaces Pixtral Large | | ||
| | **Mistral Medium 3.1** | `mistral-medium-latest` | 130K | Yes | Balanced performance/cost | | ||
| | **Mistral Small 4** | `mistral-small-latest` | 256K | Yes | MoE architecture, strong reasoning at low cost | | ||
| | **Magistral Medium** | `magistral-medium-latest` | 128K | Yes | Reasoning-focused | | ||
| | **Magistral Small** | `magistral-small-latest` | 128K | Yes | Reasoning (Apache 2.0 license) | | ||
| | **Codestral** | `codestral-latest` | 256K | No | Code generation and review | | ||
| | **Devstral 2** | `devstral-2512` | 256K | No | Agentic coding workflows | | ||
| | **Pixtral Large** | `pixtral-large` | 128K | Yes | Vision (deprecated — use Mistral Large 3) | | ||
| | **Mistral Embed** | `mistral-embed` | — | — | Embeddings (1024 dimensions) | | ||
| | **Codestral Embed** | `codestral-embed-2505` | — | — | Code embeddings (3072 dimensions) | | ||
|
|
||
| :::info[Pixtral Large Superseded] | ||
| Pixtral Large has been superseded by **Mistral Large 3**, which includes native vision capabilities alongside its flagship text performance. New projects should use `mistral-large-latest` for both text and vision tasks. The `pixtral-large` model ID remains available but is considered deprecated. | ||
| ::: |
There was a problem hiding this comment.
🧩 Analysis chain
🌐 Web query:
What are the current Mistral AI models, their context window sizes, and capabilities as of March 2026? Include information about Mistral Large 3, Mistral Small 4, Codestral, Devstral 2, and Pixtral Large deprecation status.
💡 Result:
Current Mistral AI models as of March 2026 include Mistral Large 3, Mistral Small 4, Devstral 2, Codestral, Ministral family, Magistral, and others like Mistral Medium 3.1. Pixtral Large is deprecated. Mistral Large 3: State-of-the-art open-weight general-purpose multimodal model, 41B active / 675B total parameters, 256k context window, supports chat completions, function calling, vision, OCR, reasoning. Mistral Small 4: Hybrid open model unifying instruct, reasoning, coding, multimodal (v26.03), 119B total / 6B active parameters, 256k context window, configurable reasoning effort, native multimodality (text+image). Codestral (codestral-2501 or latest): Cutting-edge coding model for FIM, code correction, 128k context window, supports 80+ languages. Devstral 2 (devstral-2512): Frontier code agents model for software engineering, tool use, multi-file editing, 256k context window. Pixtral Large: Deprecated, no longer maintained, replaced by newer multimodal models like those in Mistral Small 4 and Large 3. All listed models are current and available via Mistral docs and platforms.
Citations:
- 1: https://docs.mistral.ai/models/
- 2: https://mistral.ai/en/models
- 3: https://docs.mistral.ai/models/mistral-large-3-25-12
- 4: https://mistral.ai/news/mistral-small-4
- 5: https://docs.mistral.ai/models/codestral-25-01
- 6: https://mistral.ai/news/pixtral-large
- 7: https://docs.mistral.ai/models/devstral-2-25-12
🌐 Web query:
What are the embedding dimensions for Mistral Embed and Codestral Embed models?
💡 Result:
Mistral Embed: 1024 dimensions. Codestral Embed: defaults to 1536 dimensions (maximum 3072, configurable via output_dimension).
Citations:
- 1: https://docs.mistral.ai/capabilities/embeddings/code_embeddings
- 2: https://docs.mistral.ai/capabilities/embeddings
- 3: https://docs.mistral.ai/cookbooks/mistral-embeddings-embeddings
- 4: https://docs.mistral.ai/api/endpoint/embeddings
- 5: https://medium.com/@gracelinja/mistrals-embedding-use-cases-44357f2c485c
- 6: https://aiengineerguide.com/til/codestral-embed/
- 7: https://docs.mistral.ai/capabilities/embeddings/code_embeddings/
- 8: https://docs.mistral.ai/capabilities/embeddings/text_embeddings/
Correct the Codestral context window and Codestral Embed dimensions.
The table contains two factual errors:
- Codestral context window: Should be
128K, not256K - Codestral Embed dimensions: Defaults to
1536dimensions, with a configurable maximum of 3072. The current entry(3072 dimensions)is misleading as it lists only the maximum value without clarifying the default behavior.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@docs/getting-started/providers/mistral.md` around lines 87 - 102, Update the
table rows for "Codestral" and "Codestral Embed": change the "Context" for the
Codestral row (`codestral-latest`) from `256K` to `128K`, and update the
"Codestral Embed" row (`codestral-embed-2505`) to reflect the default and max
embedding size (e.g., "1536 (configurable up to 3072)") instead of just "3072
dimensions" so readers see the default and the maximum.
| | `gemini-embedding-2-preview` | 8,192 | Yes (multimodal) | New multimodal embedding model | | ||
|
|
||
| **Update needed:** `text-embedding-004` → mark as deprecated/remove (SHUT DOWN Jan 14, 2026) |
There was a problem hiding this comment.
Conflicting policy: preview/removal guidance is inconsistent and can misdirect implementation.
Line 41 adds a -preview model, and Line 43 says “deprecated/remove,” but Line 200 and Line 202 say to avoid removals and avoid preview/experimental additions. Please define explicit exceptions (or remove conflicting wording) so agents apply one rule set.
Suggested wording alignment
- | `gemini-embedding-2-preview` | 8,192 | Yes (multimodal) | New multimodal embedding model |
+ | `gemini-embedding-2-preview` | 8,192 | Yes (multimodal) | Allowed exception: temporary preview until GA replacement is available |
- **Update needed:** `text-embedding-004` → mark as deprecated/remove (SHUT DOWN Jan 14, 2026)
+ **Update needed:** `text-embedding-004` → mark as deprecated (SHUT DOWN Jan 14, 2026)
- 3. **Don't add every model from every provider** — We should focus on GA models, not preview/experimental ones. Bedrock alone has 110+ models.
+ 3. **Don't add every model from every provider** — Focus on GA models by default; preview models require an explicit documented exception in this plan.Also applies to: 200-203
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@docs/MODEL-UPDATE-PLAN.md` around lines 41 - 43, Resolve the conflicting
guidance by choosing one policy and making it explicit: either (A) allow preview
models and removals as exceptions or (B) prohibit them—then update the text so
references to `gemini-embedding-2-preview` and the “Update needed:
`text-embedding-004` → mark as deprecated/remove” line are consistent with the
global rule that currently forbids removals/preview additions; specifically,
either add an explicit exception clause near the “Update needed” block that
permits shutdown/deprecation actions for named models (e.g.,
`text-embedding-004`) and previews (e.g., `gemini-embedding-2-preview`), or
remove/replace the conflicting preview/removal wording so it matches the later
guidance that avoids removals and preview/experimental additions.
|
|
||
| ### 2E. `docs/features/embeddings.md` — Stale Vertex Default | ||
|
|
||
| Lists `text-embedding-004` as Vertex default. This model is **SHUT DOWN**. Should be updated to `gemini-embedding-001` or the new `gemini-embedding-2-preview`. |
There was a problem hiding this comment.
Line 194 is a sentence fragment; make it explicit.
Use a full sentence for clarity in implementation docs.
Suggested edit
- Lists `text-embedding-004` as Vertex default. This model is **SHUT DOWN**. Should be updated to `gemini-embedding-001` or the new `gemini-embedding-2-preview`.
+ Lists `text-embedding-004` as Vertex default. This model is **SHUT DOWN**. It should be updated to `gemini-embedding-001` or the new `gemini-embedding-2-preview`.📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| Lists `text-embedding-004` as Vertex default. This model is **SHUT DOWN**. Should be updated to `gemini-embedding-001` or the new `gemini-embedding-2-preview`. | |
| Lists `text-embedding-004` as Vertex default. This model is **SHUT DOWN**. It should be updated to `gemini-embedding-001` or the new `gemini-embedding-2-preview`. |
🧰 Tools
🪛 LanguageTool
[style] ~194-~194: To form a complete sentence, be sure to include a subject.
Context: ...x default. This model is SHUT DOWN. Should be updated to gemini-embedding-001 or...
(MISSING_IT_THERE)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@docs/MODEL-UPDATE-PLAN.md` at line 194, The sentence fragment that lists
`text-embedding-004` as the Vertex default must be rewritten as a full explicit
sentence and updated to a valid model; change the fragment to something like:
"Update the Vertex default embedding model from `text-embedding-004` (SHUT DOWN)
to `gemini-embedding-001` or `gemini-embedding-2-preview`." Edit the entry in
MODEL-UPDATE-PLAN.md where `text-embedding-004` is mentioned so the line is a
complete sentence and references the replacement models `gemini-embedding-001`
and `gemini-embedding-2-preview`.
| - Add ~15 new model enum entries across 4 providers | ||
| - Update 2 context windows (Claude 4.6 → 1M) |
There was a problem hiding this comment.
Phase 1 totals look inconsistent with the enumerated additions.
Line 212 says “~15 new model enum entries across 4 providers,” but Part 1 lists additions under OpenAI, Google AI, Mistral, Bedrock, and Azure (5 providers, and count appears closer to 16). Tighten this to avoid planning drift.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@docs/MODEL-UPDATE-PLAN.md` around lines 212 - 213, The Phase 1 summary line
“~15 new model enum entries across 4 providers” is inconsistent with the
enumerated Part 1 list (which includes OpenAI, Google AI, Mistral, Bedrock, and
Azure and appears closer to 16 entries); update the summary to match the actual
enumeration by recounting the model entries in Part 1 and either adjust the
total to the correct number or remove the provider count (or reconcile the
provider list to four providers), ensuring the exact phrase “~15 new model enum
entries across 4 providers” is replaced with the corrected total/providers to
eliminate drift.
6378ecb to
f1c14e0
Compare
🤖 AI Review & Build Compliance ✅Status: AI analysis complete • Build rules validated • Ready for review 📊 View detailed analysis results🛡️ Analysis Complete
📋 Ready for Merge When
🤖 AI analysis complete - check individual code comments for specific feedback |
f1c14e0 to
28ed705
Compare
🤖 AI Review & Build Compliance ✅Status: AI analysis complete • Build rules validated • Ready for review 📊 View detailed analysis results🛡️ Analysis Complete
📋 Ready for Merge When
🤖 AI analysis complete - check individual code comments for specific feedback |
28ed705 to
fdbf315
Compare
Review Feedback Addressed (Cycle 2)Addressed 37 remaining findings from CodeRabbit Review 3, Copilot review, and previously missed outside-diff/nitpick items. Critical Fixes
Major Fixes
Minor + Nitpick Fixes
Cleanup
Files Modified19 files changed, 1 file deleted Validation
@coderabbitai — Cycle 2 complete. All outside-diff, nitpick, and minor items addressed. Please re-review. |
🤖 AI Review & Build Compliance ✅Status: AI analysis complete • Build rules validated • Ready for review 📊 View detailed analysis results🛡️ Analysis Complete
📋 Ready for Merge When
🤖 AI analysis complete - check individual code comments for specific feedback |
|
✅ Actions performedFull review triggered. |
There was a problem hiding this comment.
Actionable comments posted: 13
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (2)
docs/getting-started/providers/google-ai.md (1)
333-340:⚠️ Potential issue | 🟠 MajorUpdate streaming examples to use awaited result pattern with chunk type guards.
Lines 333-340 (and 564-570) use the deprecated
for await (const chunk of ai.stream(...))pattern. The API requires:const result = await ai.stream(...); for await (const chunk of result.stream), and chunks must be guarded (if ("content" in chunk)) before accessing properties.Proposed fix
-for await (const chunk of ai.stream({ - input: { text: "Design a distributed caching system" }, - provider: "google-ai", - model: "gemini-3.1-pro-preview", - thinkingLevel: "high", -})) { - process.stdout.write(chunk.content); -} +const result = await ai.stream({ + input: { text: "Design a distributed caching system" }, + provider: "google-ai", + model: "gemini-3.1-pro-preview", + thinkingLevel: "high", +}); +for await (const chunk of result.stream) { + if ("content" in chunk) { + process.stdout.write(chunk.content); + } +}🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/getting-started/providers/google-ai.md` around lines 333 - 340, The streaming example uses the deprecated pattern; change calls to await the stream result (assign the promise returned by ai.stream to a variable, e.g., const result = await ai.stream(...)) and then iterate the returned async iterable at result.stream (for await (const chunk of result.stream)). Also add a type guard before accessing properties on chunk (e.g., if ("content" in chunk) { process.stdout.write(chunk.content) }) so you only read content when present; update both occurrences (the example around ai.stream and the one at lines 564-570) referencing ai.stream, result.stream, and chunk.docs/getting-started/providers/anthropic.md (1)
182-192:⚠️ Potential issue | 🟠 MajorAdd Claude 4.6 models to the tier access system and documentation table.
The "Model Access by Tier" table is missing
claude-opus-4-6andclaude-sonnet-4-6(the latest recommended models). Additionally, these models are absent from theAnthropicModelenum insrc/lib/models/anthropicModels.ts, preventing explicit tier access control. The 4.6 models are only accessible via the wildcard["*"]in max/api tiers, with no way to determine free or pro tier access through the tier validation functions.Update:
AnthropicModelenum to include the 4.6 variantsMODEL_TIER_ACCESSto define explicit tier mappings for 4.6 models- The documentation table to show access for both 4.6 models across all tiers
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/getting-started/providers/anthropic.md` around lines 182 - 192, Add explicit support for the 4.6 models by adding entries for "claude-opus-4-6" and "claude-sonnet-4-6" to the AnthropicModel enum in src/lib/models/anthropicModels.ts, then add explicit keys for those same model strings to the MODEL_TIER_ACCESS mapping so they are validated the same as other recommended models (set Free: No, Pro: Yes, Max/API: Yes if matching your intended access policy). Finally update the "Model Access by Tier" table in docs/getting-started/providers/anthropic.md to include rows for claude-opus-4-6 and claude-sonnet-4-6 showing their tier access. Ensure all three places use the exact model string identifiers ("claude-opus-4-6", "claude-sonnet-4-6") so tier checks and docs align.
♻️ Duplicate comments (12)
docs/features/thinking-configuration.md (1)
28-28:⚠️ Potential issue | 🟠 MajorUnify model IDs with the registry and within this page.
Line 28 introduces
gemini-3.1-pro, but this page still usesgemini-3-pro-previewin usage examples (e.g., Line 155/206/227). That inconsistency will break copy-paste reliability. Also re-check dated Claude IDs in Line 40-45 againstconfig/models.jsonto avoid drift.#!/bin/bash # Verify canonical IDs in registry and compare with this doc. # Expected: one canonical Gemini 3 Pro ID across registry + doc, and Claude dated IDs matching registry. set -euo pipefail echo "== Registry model IDs (Gemini 3 / Claude 4.x) ==" if [ -f config/models.json ]; then jq -r '..|objects|select(has("id"))|.id' config/models.json \ | rg -n 'gemini-3|claude-(sonnet|opus|haiku)-4' || true else echo "config/models.json not found" fi echo echo "== IDs referenced in docs/features/thinking-configuration.md ==" rg -n 'gemini-3|claude-(sonnet|opus|haiku)-4' docs/features/thinking-configuration.mdAlso applies to: 40-45, 92-104
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/features/thinking-configuration.md` at line 28, Search config/models.json for the canonical model IDs (e.g., the Gemini 3 Pro ID and Claude 4.x IDs) and then update docs/features/thinking-configuration.md so every reference uses that canonical ID; specifically replace any mismatched occurrences between "gemini-3.1-pro" and "gemini-3-pro-preview" so the usage examples (previously at lines ~155/206/227) match the registry, and similarly align all "claude-(sonnet|opus|haiku)-4" references in the doc to the IDs found in the registry; ensure examples, headings, and code blocks all use the exact same ID strings from config/models.json.docs/getting-started/providers/mistral.md (1)
87-102:⚠️ Potential issue | 🟠 MajorCorrect model specifications: context windows and embedding dimensions remain incorrect.
The model table contains three factual errors that were flagged in the previous review but remain unaddressed:
- Line 91 - Mistral Small 4: Context window should be 256K, not 128K
- Line 94 - Codestral: Context window should be 128K, not 256K
- Line 98 - Codestral Embed: Missing dimensions information; should include default and maximum values
These specifications are based on web search verification from the previous review.
📊 Proposed fix for model specifications
| Model | Model ID | Context | Vision | Use Case | | ---------------------- | ------------------------- | ------- | ------ | -------------------------------------------------------- | | **Mistral Large 3** | `mistral-large-latest` | 256K | Yes | Flagship, agentic — native vision replaces Pixtral Large | | **Mistral Medium 3.1** | `mistral-medium-latest` | 128K | Yes | Balanced performance/cost | -| **Mistral Small 4** | `mistral-small-latest` | 128K | Yes | MoE architecture, strong reasoning at low cost | +| **Mistral Small 4** | `mistral-small-latest` | 256K | Yes | MoE architecture, strong reasoning at low cost | | **Magistral Medium** | `magistral-medium-latest` | 128K | Yes | Reasoning-focused | | **Magistral Small** | `magistral-small-latest` | 128K | Yes | Reasoning (Apache 2.0 license) | -| **Codestral** | `codestral-latest` | 256K | No | Code generation and review | +| **Codestral** | `codestral-latest` | 128K | No | Code generation and review | | **Devstral 2** | `devstral-2512` | 256K | No | Agentic coding workflows | | **Pixtral Large** | `pixtral-large` | 128K | Yes | Vision (deprecated — use Mistral Large 3) | | **Mistral Embed** | `mistral-embed` | — | — | Embeddings (1024 dimensions) | -| **Codestral Embed** | `codestral-embed` | — | — | Code embeddings | +| **Codestral Embed** | `codestral-embed` | — | — | Code embeddings (1536 dimensions, configurable to 3072) |🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/getting-started/providers/mistral.md` around lines 87 - 102, Update the model table entries: change "**Mistral Small 4** / `mistral-small-latest`" context from 128K to 256K; change "**Codestral** / `codestral-latest`" context from 256K to 128K; and replace the dash for "**Codestral Embed** / `codestral-embed`" with explicit embedding dimensions (set the default and maximum embedding sizes verified in the prior review), e.g., "1024 (default) / 4096 (max)" — update the table cells for the model names `mistral-small-latest`, `codestral-latest`, and `codestral-embed` accordingly.docs/features/video-analysis.md (1)
29-29:⚠️ Potential issue | 🟡 MinorUse
filesconsistently—changevideoFilestofiles.Line 29 uses
videoFiles, but the other SDK examples in this file (lines 73, 91, 107) all usefiles. This inconsistency may confuse users. Align the Quick Start snippet with the rest of the documentation.🔧 Proposed fix
- input: { text: "Describe this video", videoFiles: ["./clip.mp4"] }, + input: { text: "Describe this video", files: ["./clip.mp4"] },🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/features/video-analysis.md` at line 29, Update the example input object to use the same property name as other SDK snippets: replace the "videoFiles" key in the input object (input: { text: "Describe this video", videoFiles: ["./clip.mp4"] }) with "files" so it becomes input: { text: "Describe this video", files: ["./clip.mp4"] }; ensure any references in the surrounding Quick Start snippet or variables that read this property (e.g., the input object processing or request builder) now use "files" consistently.docs/contributing.md (1)
7-7:⚠️ Potential issue | 🟡 MinorVerify redirect/sidebar alignment.
The redirect points to
./development/contributing.md, but according to previous review comments, the sidebar configuration and redirect rules expect/docs/community/contributingas the canonical location. This mismatch may cause navigation inconsistencies.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/contributing.md` at line 7, The redirect target in docs/contributing.md currently points to "./development/contributing.md" but the project expects the canonical path "/docs/community/contributing"; update the redirect link to use the canonical location (replace "./development/contributing.md" with "/docs/community/contributing") or alternatively update the sidebar/redirect configuration (the sidebar entry or redirect rule that references "/docs/community/contributing") so both the file redirect and the sidebar/redirect rules match the same canonical path.docs/features/embeddings.md (1)
221-225:⚠️ Potential issue | 🟠 MajorFix Vertex model name in unsupported-provider message example.
Line 224 says
gemini-embedding-001 (Vertex), but Vertex default/example model should betext-embedding-004. Keepgemini-embedding-001for Google AI Studio to avoid provider-model confusion.Suggested patch
Embedding generation is not supported by the anthropic provider. Supported providers: openai, vertex/google, bedrock. Use an embedding model like text-embedding-3-small (OpenAI), -gemini-embedding-001 (Vertex), or amazon.titan-embed-text-v2:0 (Bedrock). +text-embedding-004 (Vertex), gemini-embedding-001 (Google AI Studio), +or amazon.titan-embed-text-v2:0 (Bedrock).#!/bin/bash # Verify documented embedding model defaults vs provider implementations. rg -n -C2 'text-embedding-004|gemini-embedding-001|BEDROCK_EMBEDDING_MODEL|OPENAI_EMBEDDING_MODEL' \ docs/features/embeddings.md \ src/lib/providers/googleVertex.ts \ src/lib/providers/googleAiStudio.ts \ src/lib/providers/openAI.ts \ src/lib/providers/amazonBedrock.tsBased on learnings: Embedding provider defaults are
text-embedding-004for Google Vertex andgemini-embedding-001for Google AI Studio.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/features/embeddings.md` around lines 221 - 225, Update the unsupported-provider example text to reference the correct Vertex embedding model: change "gemini-embedding-001 (Vertex)" to "text-embedding-004 (Vertex)" while leaving "gemini-embedding-001" associated with Google AI Studio; locate the example string beginning with "Embedding generation is not supported by the anthropic provider." and update the model name in that sentence so documented defaults match provider implementations.docs/demos/index.md (1)
108-117:⚠️ Potential issue | 🟠 MajorAdmonition close is still malformed in Live Demo block.
The closing
:::is indented; it should be flush-left to reliably close the tip block.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/demos/index.md` around lines 108 - 117, The Live Demo tip block starting with ":::tip[Live Demo Available]" has its closing "::: " indented which prevents the admonition from closing; edit the markdown so the closing "::: " is flush-left (remove any leading spaces/tabs before the final :::) to properly close the tip block started by the ":::tip[Live Demo Available]" line.docs/getting-started/providers/azure-openai.md (1)
233-235:⚠️ Potential issue | 🟡 MinorRetirement warning should include Data Zone deployment types for completeness.
The notice currently mentions Standard + Provisioned/Global only. Please include Data Zone (matching Azure retirement guidance) to avoid under-scoping migration impact.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/getting-started/providers/azure-openai.md` around lines 233 - 235, Update the retirement notice block titled "GPT-4o-mini Retirement" to mention Data Zone deployments in addition to Standard, Provisioned, and Global; specifically edit the warning text in the existing :::warning block so it reads that Standard deployments retire March 31, 2026; Provisioned, Global, and Data Zone deployments retire October 1, 2026 (or follow Azure's exact dates), and suggest migrating to gpt-4.1-mini or gpt-5-mini as replacements to match Azure guidance.docs/DOCUMENTATION-AUDIT-REPORT.md (1)
864-880:⚠️ Potential issue | 🟠 MajorMark the verification checklist as historical-only (currently reads as actionable and stale).
This section still instructs checks that are now false in the same PR context (e.g., absence checks for pages that were added). Please relabel it as “initial-audit commands (historical)” or remove it to avoid misleading follow-up work.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/DOCUMENTATION-AUDIT-REPORT.md` around lines 864 - 880, The "Verification Checklist for Agent" section and its numbered checks (items 1–12) are presented as actionable but are stale; change the heading text from "Verification Checklist for Agent" to "Initial-audit commands (historical)" and update each list item to past-tense or prefatory language (e.g., "Runed/Previously run:" or "Historical command:") — alternatively remove the entire numbered checklist — so that the content is clearly historical/archival rather than actionable; ensure the heading and the numbered items (1..12) are the only changes and leave other nearby content intact.docs/advanced/streaming.md (1)
770-773:⚠️ Potential issue | 🟠 MajorGuard stream chunks before reading/writing
chunk.contentin all examples.These updated snippets still assume every chunk has
content. For non-text chunks, this can produce incorrect output or runtime errors (e.g.,chunk.content.includes(...)at Line 820).Suggested pattern to apply consistently
-for await (const chunk of result.stream) { - currentSection += chunk.content; - if (chunk.content.includes("\n\n## ")) { +for await (const chunk of result.stream) { + if (!("content" in chunk)) continue; + currentSection += chunk.content; + if (chunk.content.includes("\n\n## ")) { sections.push(currentSection); currentSection = ""; } }Also applies to: 813-821, 1540-1542, 1570-1574, 1598-1602, 1626-1628
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/advanced/streaming.md` around lines 770 - 773, The examples iterate over result.stream and directly read/write chunk.content (e.g., the for await loop using result.stream, the variables fullResponse and setCurrentResponse), which can throw or produce wrong output for non-text chunks—guard each chunk before accessing chunk.content by checking its existence and type (e.g., typeof chunk.content === "string" or chunk.content != null) and only then append to fullResponse and call setCurrentResponse; apply this guard consistently to all affected snippets (including the loop that later uses chunk.content.includes) so non-text or null chunks are skipped or handled safely.docs/getting-started/providers/huggingface.md (1)
17-19:⚠️ Potential issue | 🟡 MinorSoften the absolute “completely free / no cost concerns” claim.
This still reads stronger than the documented capped free tier. Recommend neutral wording like “generous free tier with per-model limits.”
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/getting-started/providers/huggingface.md` around lines 17 - 19, Replace the absolutes in the "Free Tier Advantage" tip block — remove phrases like "completely free" and "without any cost concerns" and rephrase to a neutral statement such as "Hugging Face offers a generous free tier with per-model daily limits (e.g., ~1,000 requests/day) suitable for development, testing, and low-to-medium production workloads." Update the tip text in the documented snippet so it clearly notes the free tier is capped rather than claiming no cost concerns.docs/features/file-processors.md (1)
223-225:⚠️ Potential issue | 🟡 MinorPrefer a truthy content guard before writing stream chunks.
This stream example should defensively ensure
chunk.contentis usable beforeprocess.stdout.write.💡 Proposed fix
for await (const chunk of result.stream) { - if ("content" in chunk) { + if ("content" in chunk && chunk.content) { process.stdout.write(chunk.content); } }#!/bin/bash # Check stream chunk content optionality and guard patterns across docs. rg -n -C3 --type=ts 'content\??\s*:' src/lib rg -n -C2 'if \("content" in chunk\)' docs/features/file-processors.md docs/features/streaming.md docs/cookbook🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/features/file-processors.md` around lines 223 - 225, The stream consumer uses a presence check `if ("content" in chunk)` but should also ensure the value is truthy and a string/buffer before calling `process.stdout.write`; update the loop that iterates `for await (const chunk of result.stream)` to guard `chunk.content` (e.g., `if (chunk.content)` or additionally `typeof chunk.content === "string" || Buffer.isBuffer(chunk.content)`) and only call `process.stdout.write(chunk.content)` when that check passes to avoid writing undefined/null or non-writable types.docs/getting-started/providers/aws-bedrock.md (1)
17-19:⚠️ Potential issue | 🟠 MajorInference-profile requirement conflicts with multiple Claude examples.
Line 17 says Claude usage must use inference profile IDs/ARNs, but several examples still show direct Claude model IDs. This contradiction will cause failed requests for users following the snippets.
For Amazon Bedrock Anthropic Claude 4.x models, does InvokeModel/InvokeModelWithResponseStream require inference profile IDs/ARNs instead of direct model IDs? Please cite current AWS docs.Also applies to: 138-139, 230-237, 250-263, 825-826, 860-861, 987-988
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/getting-started/providers/aws-bedrock.md` around lines 17 - 19, The docs contain contradictory examples for Anthropic Claude on Bedrock: the note requires full inference profile ARNs or cross-region inference profile IDs for Claude 4+ but multiple code/examples still use direct model IDs (e.g., examples showing "claude-..." model names); update every example referenced (examples around the Claude 4.x snippets at the top and locations referenced: ~138-139, 230-237, 250-263, 825-826, 860-861, 987-988) to use the correct inference profile identifier format (either a cross-region inference profile ID like us.anthropic.claude-sonnet-4-6 or the full ARN) and ensure any sample payloads, environment variables, or config keys (the model identifier strings in code blocks) are replaced accordingly, keeping the explanatory note and adding a brief inline comment in each code block that the value must be an inference profile ID/ARN as shown.
🧹 Nitpick comments (3)
docs/features/video-generation.md (1)
7-7: Note: Heading level change from H2 to H1The main heading has been promoted from H2 (
##) to H1 (#). This changes the document structure and may affect navigation/TOC generation. Since the YAML front matter already containstitle: Video Generation with Veo 3.1, verify this heading level is consistent with other feature documentation pages.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/features/video-generation.md` at line 7, The top-level heading has been promoted to H1 ("# Video Generation with Veo 3.1") which duplicates the YAML front-matter title and may break TOC/consistency; change the heading to H2 ("## Video Generation with Veo 3.1") or remove the in-body heading entirely so it matches the other feature pages and rely on the existing front-matter title, ensuring the document structure stays consistent.docs/cookbook/embeddings-basics.md (1)
58-70: HardencosineSimilarityagainst invalid/degenerate vectors.Add a length check and zero-norm guard to avoid
NaNin copied production usage.Suggested fix
function cosineSimilarity(a: number[], b: number[]): number { + if (a.length !== b.length) { + throw new Error("Vectors must have the same dimensions"); + } let dotProduct = 0; let normA = 0; let normB = 0; @@ - return dotProduct / (Math.sqrt(normA) * Math.sqrt(normB)); + const denom = Math.sqrt(normA) * Math.sqrt(normB); + return denom === 0 ? 0 : dotProduct / denom; }🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/cookbook/embeddings-basics.md` around lines 58 - 70, The cosineSimilarity function should validate inputs: ensure both vectors (parameters a and b) are arrays of the same length and not empty, and guard against zero or non-finite norms to avoid NaN. Update cosineSimilarity to return a safe value (e.g., 0) or throw a clear error when lengths differ or are zero-length, and after computing normA/normB, if either norm is 0 or not finite, return 0 (or handle as your API expects) instead of performing the division; also consider validating elements for non-finite numbers before computing dotProduct and norms.docs/cookbook/index.md (1)
20-23: Use relative links in the initial cookbook entries (lines 20-23) for consistency.Lines 20-23 use absolute paths
/docs/cookbook/...while the rest of the index file and other cookbook files use relative links (e.g.,streaming-with-retry.md). Change to relative paths likebasic-streaming.mdto maintain consistency and preserve version/base-path behavior.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/cookbook/index.md` around lines 20 - 23, The cookbook index uses absolute links for the first entries; replace the absolute paths for the entries titled "Basic Streaming", "Multimodal Images", "Provider Switching", and "Embeddings Basics" so they use relative filenames instead (e.g., change "/docs/cookbook/basic-streaming" to "basic-streaming.md", "/docs/cookbook/multimodal-images" to "multimodal-images.md", "/docs/cookbook/provider-switching" to "provider-switching.md", and "/docs/cookbook/embeddings-basics" to "embeddings-basics.md") to match the rest of the file and preserve version/base-path behavior.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@docs/cli/commands.md`:
- Around line 36-37: The table rows for the commands 'server <subcommand>' and
'serve' lack example usage; update the third column for those rows to include
short example invocations consistent with other rows (e.g., for 'server
<subcommand>' add something like "`server start` or `server status`" and for
'serve' add something like "`serve --port 8080`"), ensuring formatting matches
the existing table style and maintains scan consistency.
In `@docs/cli/index.md`:
- Line 46: The example mixes stdin piping and a file argument; update the
docs/cli/index.md example for the neurolink batch command to show a single
concrete workflow: either demonstrate piping input into "neurolink batch" with
no file argument (e.g., echo ... | neurolink batch) or show using a prompts file
by placing the prompts in "prompts.txt" and running "neurolink batch
prompts.txt"—choose one clear example and replace the current line referencing
both stdin and prompts.txt so readers see an unambiguous usage of neurolink
batch.
In `@docs/cookbook/error-recovery.md`:
- Around line 249-251: The loop yields chunk.content unconditionally which
breaks the AsyncIterable<string> contract for StreamChunk (only type === "text"
has content); update the generator in the stream consumer to guard on chunk.type
=== "text" (or the discriminant used by StreamChunk) and only yield
chunk.content for text chunks, skipping or handling "audio" chunks (which carry
audioChunk/TTSChunk) so the async iterable remains string-only.
In `@docs/features/index.md`:
- Around line 229-231: Update the transport mechanisms bullet to list all four
MCP transports by adding HTTP/Streamable HTTP alongside stdio, SSE, and
WebSocket; edit the same feature text that references createMCPServer() so it
reads something like "stdio, HTTP/Streamable HTTP, SSE, WebSocket" to accurately
reflect MCP transport support.
In `@docs/features/multimodal-chat.md`:
- Around line 218-223: The closing admonition marker is indented which can break
Docusaurus rendering; locate the admonition starting with ":::tip[Alt Text Best
Practices]" and unindent the final closing ":::” so it is flush-left (no leading
spaces/tabs), ensuring the opening and closing ::: markers align exactly.
In `@docs/features/observability.md`:
- Line 87: Examples call neurolink.generate with a string argument
(generate("Hello")), but the SDK requires the object form; update every example
using neurolink.generate to call generate({ input: { text: "Hello" } }) instead
(preserve existing usage field references like result.usage.totalTokens); search
for all occurrences of neurolink.generate("…") and replace them with the object
form so the examples (and any helper functions invoking generate) conform to the
SDK signature.
In `@docs/features/regional-streaming.md`:
- Around line 25-27: The example writes stream objects directly which yields
“[object Object]”; update the loop that iterates over result.stream (the for
await (const chunk of result.stream) block) to write the chunk.content property
to stdout by calling process.stdout.write with chunk.content instead of chunk so
the actual text payload is emitted.
In `@docs/features/streaming.md`:
- Around line 161-169: The streaming example uses the wrong field name for audio
chunks: when iterating over result.stream and inspecting chunk.type ("audio"),
change references from chunk.audioChunk.data to chunk.audio.data so it matches
the StreamResult shape; update the audio handling in the for-await block (where
chunk.type is checked and audioBuffers is pushed) to use chunk.audio.data.
In `@docs/features/workflow-engine.md`:
- Around line 20-22: The blockquote contains an extra blank line between the
"**Since: v9.20.0 | Status: Stable (Testing Phase) | Availability: SDK + CLI**"
line and the "**Provider Defaults:** When `--provider` (CLI) or `provider`
(SDK)..." line causing MD028; remove that empty line so the two quoted lines are
contiguous within the blockquote, ensuring no blank lines remain inside the
blockquote.
In `@docs/getting-started/providers/anthropic.md`:
- Line 26: Update the "Extended Thinking" claim to accurately reflect which
Claude models support it: either include CLAUDE_3_7 (claude-3-7-sonnet-20250219)
in the parenthetical list if it still supports Extended Thinking, or explicitly
mark CLAUDE_3_7 as deprecated/not active and remove it from the "(4.0+)" claim;
adjust the sentence referencing "Extended Thinking" so it matches the model
table entry for CLAUDE_3_7 and the active model set.
In `@docs/getting-started/providers/google-ai.md`:
- Around line 177-183: The example using ai.generate to create deepReasoning
should switch from the top-level thinkingLevel shorthand to the nested
thinkingConfig form; update the ai.generate call (provider: "google-ai", model:
"gemini-3.1-pro-preview") so it passes thinkingConfig: { thinkingLevel: "high" }
instead of thinkingLevel: "high", and apply the same change to the other Google
AI examples referenced (the calls around lines 263–269, 283–285, and 336–338) to
keep SDK examples consistent.
In `@docs/getting-started/providers/litellm.md`:
- Line 15: The doc alternates between "100+ AI providers" and "100+ AI models";
pick one consistent term (either "models" or "providers") and update all
occurrences in this guide—notably the description mentioning "NeuroLink's
`litellm` provider" and the later sentence that currently says "100+ AI
providers"—so the title/subtitle and body use the same framing (e.g., change
both to "100+ AI models" or both to "100+ AI providers") ensuring the `litellm`
provider reference remains accurate.
- Around line 66-68: The Quick Start shows a CLI test using
anthropic/claude-3-haiku-20240307 while the proxy started earlier is limited to
openai/gpt-4o-mini (see the proxy startup at Line 42), which will cause a “model
not available” error; update the example at lines 66–68 to use
openai/gpt-4o-mini to match the single-model proxy, or alternatively add a short
prerequisite note above the CLI example that instructs users to configure a
multi-model proxy (and link to the multi-model config section) if they intend to
use anthropic/claude-3-haiku-20240307.
---
Outside diff comments:
In `@docs/getting-started/providers/anthropic.md`:
- Around line 182-192: Add explicit support for the 4.6 models by adding entries
for "claude-opus-4-6" and "claude-sonnet-4-6" to the AnthropicModel enum in
src/lib/models/anthropicModels.ts, then add explicit keys for those same model
strings to the MODEL_TIER_ACCESS mapping so they are validated the same as other
recommended models (set Free: No, Pro: Yes, Max/API: Yes if matching your
intended access policy). Finally update the "Model Access by Tier" table in
docs/getting-started/providers/anthropic.md to include rows for claude-opus-4-6
and claude-sonnet-4-6 showing their tier access. Ensure all three places use the
exact model string identifiers ("claude-opus-4-6", "claude-sonnet-4-6") so tier
checks and docs align.
In `@docs/getting-started/providers/google-ai.md`:
- Around line 333-340: The streaming example uses the deprecated pattern; change
calls to await the stream result (assign the promise returned by ai.stream to a
variable, e.g., const result = await ai.stream(...)) and then iterate the
returned async iterable at result.stream (for await (const chunk of
result.stream)). Also add a type guard before accessing properties on chunk
(e.g., if ("content" in chunk) { process.stdout.write(chunk.content) }) so you
only read content when present; update both occurrences (the example around
ai.stream and the one at lines 564-570) referencing ai.stream, result.stream,
and chunk.
---
Duplicate comments:
In `@docs/advanced/streaming.md`:
- Around line 770-773: The examples iterate over result.stream and directly
read/write chunk.content (e.g., the for await loop using result.stream, the
variables fullResponse and setCurrentResponse), which can throw or produce wrong
output for non-text chunks—guard each chunk before accessing chunk.content by
checking its existence and type (e.g., typeof chunk.content === "string" or
chunk.content != null) and only then append to fullResponse and call
setCurrentResponse; apply this guard consistently to all affected snippets
(including the loop that later uses chunk.content.includes) so non-text or null
chunks are skipped or handled safely.
In `@docs/contributing.md`:
- Line 7: The redirect target in docs/contributing.md currently points to
"./development/contributing.md" but the project expects the canonical path
"/docs/community/contributing"; update the redirect link to use the canonical
location (replace "./development/contributing.md" with
"/docs/community/contributing") or alternatively update the sidebar/redirect
configuration (the sidebar entry or redirect rule that references
"/docs/community/contributing") so both the file redirect and the
sidebar/redirect rules match the same canonical path.
In `@docs/demos/index.md`:
- Around line 108-117: The Live Demo tip block starting with ":::tip[Live Demo
Available]" has its closing "::: " indented which prevents the admonition from
closing; edit the markdown so the closing "::: " is flush-left (remove any
leading spaces/tabs before the final :::) to properly close the tip block
started by the ":::tip[Live Demo Available]" line.
In `@docs/DOCUMENTATION-AUDIT-REPORT.md`:
- Around line 864-880: The "Verification Checklist for Agent" section and its
numbered checks (items 1–12) are presented as actionable but are stale; change
the heading text from "Verification Checklist for Agent" to "Initial-audit
commands (historical)" and update each list item to past-tense or prefatory
language (e.g., "Runed/Previously run:" or "Historical command:") —
alternatively remove the entire numbered checklist — so that the content is
clearly historical/archival rather than actionable; ensure the heading and the
numbered items (1..12) are the only changes and leave other nearby content
intact.
In `@docs/features/embeddings.md`:
- Around line 221-225: Update the unsupported-provider example text to reference
the correct Vertex embedding model: change "gemini-embedding-001 (Vertex)" to
"text-embedding-004 (Vertex)" while leaving "gemini-embedding-001" associated
with Google AI Studio; locate the example string beginning with "Embedding
generation is not supported by the anthropic provider." and update the model
name in that sentence so documented defaults match provider implementations.
In `@docs/features/file-processors.md`:
- Around line 223-225: The stream consumer uses a presence check `if ("content"
in chunk)` but should also ensure the value is truthy and a string/buffer before
calling `process.stdout.write`; update the loop that iterates `for await (const
chunk of result.stream)` to guard `chunk.content` (e.g., `if (chunk.content)` or
additionally `typeof chunk.content === "string" ||
Buffer.isBuffer(chunk.content)`) and only call
`process.stdout.write(chunk.content)` when that check passes to avoid writing
undefined/null or non-writable types.
In `@docs/features/thinking-configuration.md`:
- Line 28: Search config/models.json for the canonical model IDs (e.g., the
Gemini 3 Pro ID and Claude 4.x IDs) and then update
docs/features/thinking-configuration.md so every reference uses that canonical
ID; specifically replace any mismatched occurrences between "gemini-3.1-pro" and
"gemini-3-pro-preview" so the usage examples (previously at lines ~155/206/227)
match the registry, and similarly align all "claude-(sonnet|opus|haiku)-4"
references in the doc to the IDs found in the registry; ensure examples,
headings, and code blocks all use the exact same ID strings from
config/models.json.
In `@docs/features/video-analysis.md`:
- Line 29: Update the example input object to use the same property name as
other SDK snippets: replace the "videoFiles" key in the input object (input: {
text: "Describe this video", videoFiles: ["./clip.mp4"] }) with "files" so it
becomes input: { text: "Describe this video", files: ["./clip.mp4"] }; ensure
any references in the surrounding Quick Start snippet or variables that read
this property (e.g., the input object processing or request builder) now use
"files" consistently.
In `@docs/getting-started/providers/aws-bedrock.md`:
- Around line 17-19: The docs contain contradictory examples for Anthropic
Claude on Bedrock: the note requires full inference profile ARNs or cross-region
inference profile IDs for Claude 4+ but multiple code/examples still use direct
model IDs (e.g., examples showing "claude-..." model names); update every
example referenced (examples around the Claude 4.x snippets at the top and
locations referenced: ~138-139, 230-237, 250-263, 825-826, 860-861, 987-988) to
use the correct inference profile identifier format (either a cross-region
inference profile ID like us.anthropic.claude-sonnet-4-6 or the full ARN) and
ensure any sample payloads, environment variables, or config keys (the model
identifier strings in code blocks) are replaced accordingly, keeping the
explanatory note and adding a brief inline comment in each code block that the
value must be an inference profile ID/ARN as shown.
In `@docs/getting-started/providers/azure-openai.md`:
- Around line 233-235: Update the retirement notice block titled "GPT-4o-mini
Retirement" to mention Data Zone deployments in addition to Standard,
Provisioned, and Global; specifically edit the warning text in the existing
:::warning block so it reads that Standard deployments retire March 31, 2026;
Provisioned, Global, and Data Zone deployments retire October 1, 2026 (or follow
Azure's exact dates), and suggest migrating to gpt-4.1-mini or gpt-5-mini as
replacements to match Azure guidance.
In `@docs/getting-started/providers/huggingface.md`:
- Around line 17-19: Replace the absolutes in the "Free Tier Advantage" tip
block — remove phrases like "completely free" and "without any cost concerns"
and rephrase to a neutral statement such as "Hugging Face offers a generous free
tier with per-model daily limits (e.g., ~1,000 requests/day) suitable for
development, testing, and low-to-medium production workloads." Update the tip
text in the documented snippet so it clearly notes the free tier is capped
rather than claiming no cost concerns.
In `@docs/getting-started/providers/mistral.md`:
- Around line 87-102: Update the model table entries: change "**Mistral Small
4** / `mistral-small-latest`" context from 128K to 256K; change "**Codestral** /
`codestral-latest`" context from 256K to 128K; and replace the dash for
"**Codestral Embed** / `codestral-embed`" with explicit embedding dimensions
(set the default and maximum embedding sizes verified in the prior review),
e.g., "1024 (default) / 4096 (max)" — update the table cells for the model names
`mistral-small-latest`, `codestral-latest`, and `codestral-embed` accordingly.
---
Nitpick comments:
In `@docs/cookbook/embeddings-basics.md`:
- Around line 58-70: The cosineSimilarity function should validate inputs:
ensure both vectors (parameters a and b) are arrays of the same length and not
empty, and guard against zero or non-finite norms to avoid NaN. Update
cosineSimilarity to return a safe value (e.g., 0) or throw a clear error when
lengths differ or are zero-length, and after computing normA/normB, if either
norm is 0 or not finite, return 0 (or handle as your API expects) instead of
performing the division; also consider validating elements for non-finite
numbers before computing dotProduct and norms.
In `@docs/cookbook/index.md`:
- Around line 20-23: The cookbook index uses absolute links for the first
entries; replace the absolute paths for the entries titled "Basic Streaming",
"Multimodal Images", "Provider Switching", and "Embeddings Basics" so they use
relative filenames instead (e.g., change "/docs/cookbook/basic-streaming" to
"basic-streaming.md", "/docs/cookbook/multimodal-images" to
"multimodal-images.md", "/docs/cookbook/provider-switching" to
"provider-switching.md", and "/docs/cookbook/embeddings-basics" to
"embeddings-basics.md") to match the rest of the file and preserve
version/base-path behavior.
In `@docs/features/video-generation.md`:
- Line 7: The top-level heading has been promoted to H1 ("# Video Generation
with Veo 3.1") which duplicates the YAML front-matter title and may break
TOC/consistency; change the heading to H2 ("## Video Generation with Veo 3.1")
or remove the in-body heading entirely so it matches the other feature pages and
rely on the existing front-matter title, ensuring the document structure stays
consistent.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: 7c8c8fa6-ffa1-479d-9c1f-70f0380fd01b
📒 Files selected for processing (120)
CLAUDE.mdREADME.mddocs-site/sidebars.tsdocs-site/static/search-index.jsondocs/404.mddocs/DOCUMENTATION-AUDIT-REPORT.mddocs/about/vision.mddocs/advanced/api-reference.mddocs/advanced/builtin-middleware.mddocs/advanced/cli-guide.mddocs/advanced/index.mddocs/advanced/mcp-integration.mddocs/advanced/streaming.mddocs/analysis/claims-vs-reality-analysis.mddocs/analysis/verification-results.mddocs/api-reference.mddocs/changelog.mddocs/cli-guide.mddocs/cli-reference.mddocs/cli/commands.mddocs/cli/index.mddocs/configuration.mddocs/contributing.mddocs/cookbook/basic-streaming.mddocs/cookbook/embeddings-basics.mddocs/cookbook/error-recovery.mddocs/cookbook/index.mddocs/cookbook/multimodal-images.mddocs/cookbook/provider-switching.mddocs/demos/index.mddocs/demos/screenshots.mddocs/development/contributing.mddocs/development/index.mddocs/dynamic-models.mddocs/enterprise-proxy-setup.mddocs/examples/basic-usage.mddocs/examples/index.mddocs/examples/use-cases.mddocs/features/audio-input.mddocs/features/auto-evaluation.mddocs/features/claude-subscription.mddocs/features/cli-loop-sessions.mddocs/features/context-compaction.mddocs/features/conversation-history.mddocs/features/csv-support.mddocs/features/embeddings.mddocs/features/enterprise-hitl.mddocs/features/file-processors.mddocs/features/guardrails.mddocs/features/hitl.mddocs/features/index.mddocs/features/mcp-tools-showcase.mddocs/features/multimodal-chat.mddocs/features/observability.mddocs/features/office-documents.mddocs/features/pdf-support.mddocs/features/provider-orchestration.mddocs/features/rag.mddocs/features/regional-streaming.mddocs/features/streaming.mddocs/features/structured-output.mddocs/features/thinking-configuration.mddocs/features/tts.mddocs/features/video-analysis.mddocs/features/video-director-mode.mddocs/features/video-generation.mddocs/features/workflow-engine.mddocs/framework-integration.mddocs/getting-started/api-reference.mddocs/getting-started/index.mddocs/getting-started/installation.mddocs/getting-started/providers/anthropic.mddocs/getting-started/providers/aws-bedrock.mddocs/getting-started/providers/azure-openai.mddocs/getting-started/providers/google-ai.mddocs/getting-started/providers/huggingface.mddocs/getting-started/providers/litellm.mddocs/getting-started/providers/mistral.mddocs/getting-started/providers/ollama.mddocs/getting-started/providers/openai.mddocs/getting-started/providers/sagemaker.mddocs/guides/index.mddocs/guides/migration-guide.mddocs/guides/migration/from-vercel-ai-sdk.mddocs/guides/server-adapters/api-reference.mddocs/guides/troubleshooting.mddocs/index.mddocs/mcp-docs-server.mddocs/mcp-integration.mddocs/mcp-testing-guide.mddocs/mem0-integration.mddocs/middleware.mddocs/playground/index.mddocs/provider-comparison.mddocs/reference/configuration.mddocs/reference/faq.mddocs/reference/index.mddocs/reference/provider-comparison.mddocs/reference/provider-selection.mddocs/reference/troubleshooting.mddocs/sdk/advanced-features.mddocs/sdk/api-reference.mddocs/sdk/custom-tools.mddocs/sdk/index.mddocs/telemetry-guide.mddocs/testing.mddocs/troubleshooting.mddocs/tutorials/videos.mddocs/use-cases.mdexamples/embeddings.tsexamples/memory-conversation.tsexamples/observability-langfuse.tsexamples/provider-switching.tsexamples/streaming-basic.tssrc/lib/adapters/providerImageAdapter.tssrc/lib/constants/contextWindows.tssrc/lib/constants/enums.tssrc/lib/constants/tokens.tssrc/lib/providers/amazonBedrock.tssrc/lib/providers/anthropic.ts
💤 Files with no reviewable changes (1)
- docs/cli-reference.md
| :::tip[Alt Text Best Practices] | ||
|
|
||
| - Keep alt text concise but descriptive (under 125 characters is ideal) | ||
| - Focus on the key information the image conveys | ||
| - Alt text is automatically included as context in the prompt, helping AI models better understand the images | ||
| ::: |
There was a problem hiding this comment.
Fix admonition closing marker indentation.
The closing ::: is indented, which can break the tip block rendering in Docusaurus. Keep it flush-left.
Suggested fix
:::tip[Alt Text Best Practices]
@@
-- Alt text is automatically included as context in the prompt, helping AI models better understand the images
- :::
+- Alt text is automatically included as context in the prompt, helping AI models better understand the images
+:::🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@docs/features/multimodal-chat.md` around lines 218 - 223, The closing
admonition marker is indented which can break Docusaurus rendering; locate the
admonition starting with ":::tip[Alt Text Best Practices]" and unindent the
final closing ":::” so it is flush-left (no leading spaces/tabs), ensuring the
opening and closing ::: markers align exactly.
| > **Since**: v9.20.0 | **Status**: Stable (Testing Phase) | **Availability**: SDK + CLI | ||
|
|
||
| > **Provider Defaults:** When `--provider` (CLI) or `provider` (SDK) is not specified, NeuroLink defaults to **Vertex AI** with **gemini-2.5-flash**. Set the `NEUROLINK_PROVIDER` or `AI_PROVIDER` environment variable to change the default provider. |
There was a problem hiding this comment.
Fix blockquote formatting to satisfy MD028 lint.
There is a blank line inside a blockquote at Line 21, which triggers no-blanks-blockquote.
Suggested fix
-> **Since**: v9.20.0 | **Status**: Stable (Testing Phase) | **Availability**: SDK + CLI
-
-> **Provider Defaults:** When `--provider` (CLI) or `provider` (SDK) is not specified, NeuroLink defaults to **Vertex AI** with **gemini-2.5-flash**. Set the `NEUROLINK_PROVIDER` or `AI_PROVIDER` environment variable to change the default provider.
+> **Since**: v9.20.0 | **Status**: Stable (Testing Phase) | **Availability**: SDK + CLI
+> **Provider Defaults:** When `--provider` (CLI) or `provider` (SDK) is not specified, NeuroLink defaults to **Vertex AI** with **gemini-2.5-flash**. Set the `NEUROLINK_PROVIDER` or `AI_PROVIDER` environment variable to change the default provider.🧰 Tools
🪛 markdownlint-cli2 (0.21.0)
[warning] 21-21: Blank line inside blockquote
(MD028, no-blanks-blockquote)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@docs/features/workflow-engine.md` around lines 20 - 22, The blockquote
contains an extra blank line between the "**Since: v9.20.0 | Status: Stable
(Testing Phase) | Availability: SDK + CLI**" line and the "**Provider
Defaults:** When `--provider` (CLI) or `provider` (SDK)..." line causing MD028;
remove that empty line so the two quoted lines are contiguous within the
blockquote, ensuring no blank lines remain inside the blockquote.
fdbf315 to
724cab4
Compare
Review Feedback Addressed (Cycle 3)Rebased onto latest release (v9.27.0 — includes Gemini 3.1 Vertex fix + Hippocampus integration). Addressed ~35 items including all 18 new findings from CodeRabbit Review 3 + verified all carried fixes survived rebase. Critical + Major Fixes
Minor + Nitpick Fixes
Rebase VerificationAll 13 carried items from Cycle 2 verified — 12 survived rebase intact, 1 (404.md) re-fixed. Validation
@coderabbitai — Cycle 3 complete with rebase onto v9.27.0. All Review 3 findings addressed. Please re-review. |
|
The rebase verification coverage (12/13 items survived, 404.md re-fixed) gives confidence the carry-forward items are solid. Kicking off a fresh review now. ✅ Actions performedFull review triggered. |
🤖 AI Review & Build Compliance ✅Status: AI analysis complete • Build rules validated • Ready for review 📊 View detailed analysis results🛡️ Analysis Complete
📋 Ready for Merge When
🤖 AI analysis complete - check individual code comments for specific feedback |
There was a problem hiding this comment.
Actionable comments posted: 9
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (5)
docs/about/vision.md (1)
142-142:⚠️ Potential issue | 🟡 MinorUpdate provider count for consistency throughout documentation.
Line 142 states "12 AI providers" but line 266 states "Configure all 13 providers". The codebase supports 13 AI providers (excluding the AUTO routing mode). Update line 142 to "13 AI providers" to maintain consistency with the rest of the documentation.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/about/vision.md` at line 142, Update the vision.md text that currently reads "✅ 12 AI providers unified under one API" to "✅ 13 AI providers unified under one API" so it matches the rest of the documentation and the codebase; locate and edit the string in docs/about/vision.md (the line containing "12 AI providers") to replace 12 with 13.docs/features/pdf-support.md (2)
68-78:⚠️ Potential issue | 🟠 MajorUpdate streaming examples to use the correct API pattern.
The streaming examples at lines 68–78 and 427–438 use direct iteration over the stream, but the
neurolink.stream()method returns aStreamResultobject with a.streamproperty for async iteration.Update the pattern to:
const result = await neurolink.stream({ input: { text: "..." }, pdfFiles: ["contract.pdf"], }); for await (const chunk of result.stream) { process.stdout.write(chunk.content); }This aligns with the documented API in
docs/features/streaming.mdanddocs/cookbook/basic-streaming.md.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/features/pdf-support.md` around lines 68 - 78, The streaming examples are iterating directly over the return value of neurolink.stream(), but neurolink.stream() returns a StreamResult object with a .stream property for async iteration; update the examples to await neurolink.stream(...) into a variable (e.g., result or streamResult) and then iterate with "for await (const chunk of result.stream)" instead of "for await (... of stream)"; change both occurrences of the pattern in the file so they reference the StreamResult variable and its .stream property (keep the same input shape and provider).
216-216:⚠️ Potential issue | 🟠 MajorUpdate model to the latest Claude version.
Replace
claude-3-5-sonnet-20241022withclaude-sonnet-4-6. Claude 3.5 Sonnet is deprecated per the codebase enums, which explicitly direct to use Claude Sonnet 4.6 (released February 2026) as the latest recommended model.Diff
await neurolink.generate({ input: { text: "Extract all invoice details", pdfFiles: ["invoice.pdf"], }, provider: "anthropic", - model: "claude-3-5-sonnet-20241022", // Latest model + model: "claude-sonnet-4-6", // Latest model });🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/features/pdf-support.md` at line 216, The model string used in the neurolink.generate call is outdated; replace the deprecated "claude-3-5-sonnet-20241022" with the current recommended model "claude-sonnet-4-6" in the generate() invocation's input object so neurolink.generate({ ..., provider: "anthropic", model: "claude-sonnet-4-6" }) uses the latest Claude Sonnet 4.6; update any other occurrences of the old model identifier in the same file to the new string to keep enums consistent.docs/getting-started/providers/google-ai.md (1)
858-865:⚠️ Potential issue | 🟠 MajorUpdate streaming example to match documented pattern elsewhere in this file.
At line 858, the snippet iterates directly over
ai.stream(...), but lines 339 and 570 demonstrate the correct pattern: assign the result to a variable and iterate over its.streamproperty. Additionally, the type guard (if ("content" in chunk)) should be included as shown in other examples.Suggested fix
-for await (const chunk of ai.stream({ - input: { text: "Your prompt" }, - provider: "google-ai", - model: "gemini-2.5-flash", // Fastest model -})) { - // Display partial results immediately - console.log(chunk.content); -} +const streamResult = await ai.stream({ + input: { text: "Your prompt" }, + provider: "google-ai", + model: "gemini-2.5-flash", // Fastest model +}); +for await (const chunk of streamResult.stream) { + if ("content" in chunk) { + console.log(chunk.content); + } +}🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/getting-started/providers/google-ai.md` around lines 858 - 865, The snippet iterates directly over ai.stream(...) instead of using the returned object's .stream property and omits the type guard; update the example to first call ai.stream(...) and assign its result to a variable (the call with provider "google-ai" and model "gemini-2.5-flash"), then iterate over thatResult.stream and include the type guard (e.g., if ("content" in chunk) ...) before logging chunk.content so it matches the pattern used around lines 339 and 570.docs/getting-started/providers/aws-bedrock.md (1)
3-45:⚠️ Potential issue | 🟠 MajorDocumentation describes unsupported Bedrock models with working code examples.
The provided documentation includes comprehensive coverage and code examples for Amazon Nova, Meta Llama, DeepSeek, Qwen, Mistral, Cohere, and AI21 Labs models on Bedrock. However,
config/models.jsonregisters only six Claude models under"bedrock"(claude-4.5-sonnet, claude-4.5-opus, claude-4.5-haiku, claude-3.5-sonnet, claude-3.7-sonnet, claude-3.5-haiku).Users following the documentation examples with model IDs like
amazon.nova-pro-v1:0,meta.llama4-scout-17b-instruct-v1:0, orqwen.qwen3-235b-a22b-2507-v1:0will encounter runtime errors. Either implement these models in the configuration or clearly mark unsupported models in the documentation as planned/unavailable.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/getting-started/providers/aws-bedrock.md` around lines 3 - 45, The docs (aws-bedrock.md) list Bedrock model examples that are not registered in config/models.json, causing runtime errors; either add the missing Bedrock model entries (e.g., "amazon.nova-pro-v1:0", "meta.llama4-scout-17b-instruct-v1:0", "qwen.qwen3-235b-a22b-2507-v1:0" and any other examples) into the "bedrock" section of config/models.json with the correct provider mappings and IDs, or update aws-bedrock.md to clearly mark those model examples as unsupported/planned and remove or annotate code snippets referencing unregistered model IDs so users won’t hit runtime errors. Ensure references to these exact model IDs are handled consistently between aws-bedrock.md and config/models.json.
♻️ Duplicate comments (15)
docs/features/multimodal-chat.md (1)
218-223:⚠️ Potential issue | 🟠 MajorFix indented admonition closing marker.
Line 223 has an indented closing
:::(2 spaces), which can break the tip block rendering in Docusaurus. The closing marker must be flush-left to properly close the directive block.Suggested fix
:::tip[Alt Text Best Practices] - Keep alt text concise but descriptive (under 125 characters is ideal) - Focus on the key information the image conveys - Alt text is automatically included as context in the prompt, helping AI models better understand the images - ::: +:::🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/features/multimodal-chat.md` around lines 218 - 223, The closing admonition marker for the "Alt Text Best Practices" tip is indented by two spaces which can break Docusaurus rendering; locate the tip block that starts with ":::tip[Alt Text Best Practices]" and make the closing "::: " marker flush-left (no leading spaces) so the directive properly closes and the admonition renders correctly.docs/features/video-analysis.md (1)
21-36:⚠️ Potential issue | 🟡 MinorFix inconsistent file input key in Quick Start.
Line 29 uses
videoFiles, but the three other SDK examples in this file (lines 73, 91, 107) all usefiles. While the SDK may support both fields, this inconsistency will confuse users. Align the Quick Start with the rest of the documentation:Suggested fix
const result = await neurolink.generate({ - input: { text: "Describe this video", videoFiles: ["./clip.mp4"] }, + input: { text: "Describe this video", files: ["./clip.mp4"] }, provider: "vertex", model: "gemini-2.0-flash", });🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/features/video-analysis.md` around lines 21 - 36, The Quick Start example uses an inconsistent input key: change the input object passed to NeuroLink.generate from input: { text: "Describe this video", videoFiles: ["./clip.mp4"] } to use the same key as the other examples (input: { text: "Describe this video", files: ["./clip.mp4"] }) so NeuroLink.generate (the class NeuroLink and its generate method) shows a consistent API across the docs.docs/demos/index.md (1)
108-117:⚠️ Potential issue | 🟠 MajorFix indented admonition closing marker (regression?).
Line 117 has an indented closing
:::(2 spaces), which can break the tip block rendering in Docusaurus. A past review comment flagged this issue and was marked as addressed in commit 724cab4, but the indentation persists in the current code. Ensure the closing marker is flush-left:Suggested fix
:::tip[Live Demo Available] Visit our [Interactive Demo](https://neurolink-demo.vercel.app) to try NeuroLink with real AI providers. Features: - **Live AI Generation** - All 13 providers functional - **Real-time Analytics** - See costs and performance - **Built-in Tools** - Experience MCP integration - **Multiple Use Cases** - Business, creative, and technical examples - ::: +:::🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/demos/index.md` around lines 108 - 117, The closing admonition marker for the tip block starting at ":::tip[Live Demo Available]" is indented by two spaces which can break Docusaurus rendering; remove the leading spaces so the closing ":::” is flush-left (align with the opening ":::tip[Live Demo Available]" line) to properly close the block and restore correct rendering of the tip section.docs/features/regional-streaming.md (1)
25-27:⚠️ Potential issue | 🟡 MinorWrite
chunk.contentinstead of barechunkto avoid[object Object]output.Stream chunks are objects with a
contentfield. Writingchunkdirectly will output[object Object]. Update to:for await (const chunk of result.stream) { - process.stdout.write(chunk); + if ("content" in chunk && chunk.content) { + process.stdout.write(chunk.content); + } }This matches the documented streaming pattern used throughout the PR in docs/cookbook/basic-streaming.md and docs/advanced/streaming.md.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/features/regional-streaming.md` around lines 25 - 27, The for-await loop is writing the chunk object directly (process.stdout.write(chunk)) which yields “[object Object]”; change it to write the chunk's text payload (process.stdout.write(chunk.content)) and guard for missing content if necessary so streaming output matches the pattern used elsewhere (referencing result.stream and the loop variable chunk).docs/features/thinking-configuration.md (1)
28-47:⚠️ Potential issue | 🟠 MajorModel identifiers are still inconsistent within this page.
Line 28 uses
gemini-3.1-pro, while examples and utilities on this same page usegemini-3-pro-preview. Please normalize to the canonical IDs used by the registry/examples so copy-paste commands don’t fail.Proposed doc fix
-- `gemini-3.1-pro` - Full thinking support with high token budgets (up to 100,000) +- `gemini-3-pro-preview` - Full thinking support with high token budgets (up to 100,000)🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/features/thinking-configuration.md` around lines 28 - 47, The doc uses inconsistent model identifiers: replace the non-canonical "gemini-3.1-pro" (and any other variants like "gemini-3-pro-preview" mismatch) with the canonical registry ID used by examples and utilities (e.g., "gemini-3-pro-preview" if that is the canonical name); update the Gemini 3 list so all entries consistently use the registry’s canonical IDs (also verify "gemini-3-flash-preview" and any Gemini 2.5/Claude entries match their canonical registry names) to ensure copy-paste commands work.docs/cli/commands.md (1)
728-733:⚠️ Potential issue | 🟠 Major
mcp add --transportincludes an unsupported value.Line 732 documents
http, butsrc/cli/commands/mcp.ts(buildAddOptions) only acceptsstdio,sse, andwebsocketformcp add. This will cause copy-paste failures.Proposed doc fix
-| `--transport` | Transport type: `stdio`, `http`, `sse`, `websocket` | +| `--transport` | Transport type: `stdio`, `sse`, `websocket` |🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/cli/commands.md` around lines 728 - 733, The docs list an unsupported transport value ("http") for `mcp add`; update the CLI docs to match the implementation in buildAddOptions by removing "http" from the `--transport` choices (leave `stdio`, `sse`, and `websocket`) so copy-pasted commands won't fail and the documentation aligns with the `buildAddOptions` behavior in src/cli/commands/mcp.ts.docs/cookbook/error-recovery.md (1)
250-250:⚠️ Potential issue | 🟠 MajorLine 250 can still yield non-string values from stream chunks.
"content" in chunkalone is not enough;chunk.contentcan still beundefined. Guard for string to preserve theAsyncIterable<string>contract.Proposed fix
- for await (const chunk of stream) { - if ("content" in chunk) yield chunk.content; - } + for await (const chunk of stream) { + if ("content" in chunk && typeof chunk.content === "string") { + yield chunk.content; + } + }#!/bin/bash # Verify the local type contract and current doc snippet: rg -n -C3 'Promise<AsyncIterable<string>>|AsyncIterable<string>|yield chunk\.content' docs/cookbook/error-recovery.md rg -n -C5 'export type StreamChunk|content\??:' src/lib/types/streamTypes.ts🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/cookbook/error-recovery.md` at line 250, The current yield at "if (\"content\" in chunk) yield chunk.content;" can emit non-string (e.g., undefined) and violate the AsyncIterable<string> contract; update the guard to only yield when chunk.content is a string (e.g., check typeof chunk.content === "string" or use a truthy string check) so that only string values are yielded, keeping the AsyncIterable<string> contract intact and avoiding undefined emissions from the stream.docs/getting-started/providers/azure-openai.md (1)
233-235:⚠️ Potential issue | 🟠 MajorRetirement warning likely omits one deployment type.
Line 234 lists Standard and Provisioned/Global, but the retirement guidance should also include Data Zone Standard in the October 1, 2026 group to avoid migration ambiguity.
As of March 2026, for Azure OpenAI gpt-4o-mini retirement, what are the exact retirement dates by deployment type (Standard, Provisioned, Global Standard, Data Zone Standard)? Please cite Microsoft Learn pages.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/getting-started/providers/azure-openai.md` around lines 233 - 235, The retirement warning block titled "GPT-4o-mini Retirement" omits "Data Zone Standard" from the October 1, 2026 retirement group; update the warning text so it reads that Standard deployments retire March 31, 2026 and that Provisioned, Global, and Data Zone Standard deployments retire October 1, 2026, and keep the recommended migration targets (`gpt-4.1-mini` or `gpt-5-mini`) unchanged.docs/getting-started/providers/mistral.md (1)
87-99:⚠️ Potential issue | 🟠 MajorThe Codestral row is still overstating the context window.
The official Codestral model page lists
codestral-latestat 128k context, not 256k, so this table will push readers toward the wrong model-selection tradeoffs. (docs.mistral.ai)Suggested fix
-| **Codestral** | `codestral-latest` | 256K | No | Code generation and review | +| **Codestral** | `codestral-latest` | 128K | No | Code generation and review |🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/getting-started/providers/mistral.md` around lines 87 - 99, The Codestral table row currently lists `codestral-latest` with a 256K context window; update that row to show 128K context (change the "256K" cell to "128K") for the **Codestral** entry so the table matches the official model spec for `codestral-latest`.docs/features/workflow-engine.md (1)
20-22:⚠️ Potential issue | 🟡 MinorRemove the blank line inside this blockquote.
The empty quoted line at Line 21 still triggers MD028 and will keep markdownlint noisy.
Suggested fix
> **Since**: v9.20.0 | **Status**: Stable (Testing Phase) | **Availability**: SDK + CLI -> > **Provider Defaults:** When `--provider` (CLI) or `provider` (SDK) is not specified, NeuroLink defaults to **Vertex AI** with **gemini-2.5-flash**. Set the `NEUROLINK_PROVIDER` or `AI_PROVIDER` environment variable to change the default provider.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/features/workflow-engine.md` around lines 20 - 22, Remove the empty line inside the blockquote that begins with "**Since: v9.20.0 | **Status**: Stable (Testing Phase) | **Availability**: SDK + CLI" so the two lines form a single contiguous paragraph; specifically, delete the blank line between the line with that header and the line starting "**Provider Defaults:** When `--provider` (CLI)..." to satisfy MD028 and eliminate the lint warning.docs/advanced/streaming.md (1)
53-55:⚠️ Potential issue | 🟠 MajorThese examples still read
chunk.contentwithout narrowing the stream union.These snippets now await
result.stream, but they still accesschunk.content/chunk.content || ""directly. The currentStreamResult.streamunion also includes non-text chunks, so these examples won't type-check cleanly and will silently ignore other chunk variants when copied.Suggested fix pattern
for await (const chunk of result.stream) { - process.stdout.write(chunk.content || ""); + if ("content" in chunk) { + process.stdout.write(chunk.content); + } }Also applies to: 92-94, 160-162, 198-201, 238-240, 270-272, 308-310, 399-403
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/advanced/streaming.md` around lines 53 - 55, The examples access chunk.content directly even though StreamResult.stream yields a union of chunk types; narrow the union before using content by checking the chunk discriminator (e.g., if (chunk.type === "message" || chunk.type === "response") or a runtime predicate) and only then write chunk.content (or default to ""), e.g. inside the for-await loop guard on chunk.type and handle other variants explicitly; update all occurrences that read result.stream (references: result.stream, StreamResult.stream, and chunk.content) to use this narrowing pattern so the code type-checks and other chunk variants aren’t ignored.docs/getting-started/providers/google-ai.md (1)
283-305:⚠️ Potential issue | 🟡 MinorUse one thinking configuration shape consistently.
This section mixes
thinkingConfig(Line 284) with top-levelthinkingLevel(Line 296, Line 304). Keep SDK examples consistent withthinkingConfig: { thinkingLevel }.Suggested fix
const codeReview = await ai.generate({ input: { text: `Review this code for potential issues and suggest improvements: ${codeSnippet}`, }, provider: "google-ai", model: "gemini-3-flash-preview", - thinkingLevel: "medium", + thinkingConfig: { thinkingLevel: "medium" }, }); // Quick analysis with minimal thinking overhead const quickAnalysis = await ai.generate({ input: { text: "What's the time complexity of binary search?" }, provider: "google-ai", model: "gemini-3-flash-preview", - thinkingLevel: "low", + thinkingConfig: { thinkingLevel: "low" }, });🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/getting-started/providers/google-ai.md` around lines 283 - 305, The examples mix two shapes for the thinking configuration—one using thinkingConfig (thinkingConfig: { thinkingLevel: "high" }) and others using a top-level thinkingLevel—so update the ai.generate calls that pass top-level thinkingLevel (the calls constructing codeReview and quickAnalysis) to instead use the same shape as the first example by passing thinkingConfig: { thinkingLevel: "<level>" } (e.g., "medium", "low"), ensuring all ai.generate invocations consistently use thinkingConfig and keeping provider/model/inputs unchanged.docs/features/index.md (1)
89-90:⚠️ Potential issue | 🟡 MinorProvider count is now inconsistent within the same page.
Line 89 says 13 AI providers, but the “Platform Capabilities at a Glance” row (Line 77) still says 14+ providers. Please make both sections agree.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/features/index.md` around lines 89 - 90, The page has inconsistent provider counts: the sentence "NeuroLink supports **13 AI providers**" and the “Platform Capabilities at a Glance” row that reads **14+ providers** must match; pick the correct canonical count (update either the inline phrase or the table cell) so both use the same number and formatting (e.g., change the inline sentence to "NeuroLink supports **14+ AI providers**" or change the table cell to "13 AI providers"), and ensure you update the exact strings found in docs/features/index.md so both occurrences are identical.docs/getting-started/providers/aws-bedrock.md (1)
17-19:⚠️ Potential issue | 🟠 MajorInference-profile requirement conflicts with the examples below.
The warning says Claude requires inference profile ARN/ID, but later examples still show direct model IDs (for example Line 138 and Line 230). Please make all Claude examples and tables follow the same required format.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/getting-started/providers/aws-bedrock.md` around lines 17 - 19, The docs warning block titled "Inference Profile ARN Required" states Anthropic Claude models must use full inference profile ARNs or cross-region profile IDs; update all example usages and tables that still list direct Claude model IDs (e.g., occurrences showing "claude-2", "claude-instant" or other bare model names) to use the correct inference profile ID/ARN format (for Claude 4+ use examples like "us.anthropic.claude-sonnet-4-6" or full ARN) so every Claude example and table matches the requirement declared in the danger block.docs/getting-started/providers/anthropic.md (1)
23-27:⚠️ Potential issue | 🟡 MinorExtended-thinking model range is still inconsistent across this guide.
Line 26 says “Claude 3.7+”, but the active-model section later limits this to 4.0+ and marks 3.7 deprecated. Please normalize this statement to one definition.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/getting-started/providers/anthropic.md` around lines 23 - 27, The "Extended Thinking" range is inconsistent: change the phrase "Claude 3.7+" (and any parenthetical model list like "Sonnet 4, Opus 4") to match the active-model section which requires 4.0+ (e.g., "Claude 4.0+") so the doc consistently states that Extended Thinking applies to Claude 4.0+ models; update the single-line bullet beginning "Extended Thinking" and any other occurrences referencing "3.7+" to "4.0+" and adjust model examples to match (e.g., Sonnet 4.0, Opus 4.0) so the guide is normalized.
🧹 Nitpick comments (4)
docs/features/provider-orchestration.md (1)
18-33: Reduce duplicate orchestration examples to avoid doc drift.This Quick Start snippet and the SDK section below document the same flow with only minor differences. Consider keeping one canonical example and linking to it from the other section.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/features/provider-orchestration.md` around lines 18 - 33, The Quick Start and SDK snippets duplicate the same orchestration flow; keep a single canonical example (the NeuroLink instantiation with enableOrchestration and the generate call) and remove the duplicate snippet elsewhere, updating the removed section to link to the canonical example; specifically, retain the NeuroLink constructor usage (NeuroLink, enableOrchestration) and the generate call that returns result.provider and result.model, then replace the duplicated SDK example with a short reference pointing to the Quick Start example to avoid doc drift.docs/about/vision.md (1)
314-314: Outdated "Last updated" timestamp.The timestamp shows "October 2025" but this PR is from March 2026. Consider updating to reflect the current documentation refresh.
📅 Suggested timestamp update
-**Last updated**: October 2025 +**Last updated**: March 2026🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/about/vision.md` at line 314, Update the outdated "Last updated" timestamp string "**Last updated**: October 2025" in the docs/about/vision.md content to reflect the current documentation refresh (e.g., "**Last updated**: March 2026"); locate the exact markdown line containing the "**Last updated**" label and replace the date-only portion while preserving surrounding formatting and punctuation.docs/features/pdf-support.md (1)
77-77: Consider adding content guards for robust streaming examples.The code directly accesses
chunk.contentwithout verifying the property exists. Based on the PR's addition of content guards in other streaming documentation, consider demonstrating defensive access:for await (const chunk of stream) { - process.stdout.write(chunk.content); + if ("content" in chunk) { + process.stdout.write(chunk.content); + } }This pattern would help users write more robust streaming code and is consistent with fixes applied elsewhere in the documentation.
Also applies to: 437-437
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/features/pdf-support.md` at line 77, The example writes chunk.content directly via process.stdout.write(chunk.content); add a defensive guard to ensure chunk exists and has a valid content property before writing (e.g., check chunk != null and typeof chunk.content === 'string' or chunk.content !== undefined), and otherwise skip or handle the missing content path; update the same pattern where chunk.content is used elsewhere (the other occurrence at the same example) so streaming examples consistently validate chunk and its content before calling process.stdout.write.docs/getting-started/providers/litellm.md (1)
153-155: Guard streamed chunk type before readingcontent.For stream unions, not every chunk carries
content. Add a type guard to avoid printing undefined values.Suggested fix
for await (const chunk of result.stream) { - process.stdout.write(chunk.content); + if ("content" in chunk) { + process.stdout.write(chunk.content); + } }🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/getting-started/providers/litellm.md` around lines 153 - 155, The stream consumer iterates union-typed chunks but assumes every chunk has a content property; guard against undefined by checking the chunk shape before writing: inside the for-await loop inspect the chunk (e.g., if ("content" in chunk && chunk.content) or if (chunk.type === "response" && chunk.content)) and only call process.stdout.write(chunk.content) when that condition is true; update the loop around result.stream to perform this type guard to avoid printing undefined values.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@CLAUDE.md`:
- Line 1037: Update the "RAG Processing" table entry that currently reads "9
chunkers" to "10 chunkers" to reflect the PR's RAG specs; ensure the copy aligns
with ChunkerFactory/ChunkerRegistry which now support 10 chunking strategies
(character, recursive, sentence, token, markdown, html, json, latex, semantic,
semantic-markdown) so the documentation accurately lists the total chunker
count.
In `@docs/advanced/mcp-integration.md`:
- Around line 100-107: The "Execute Tools" section shows planned commands as
runnable bash examples; change the heading and code fence so readers won't try
to execute them. Replace the code fence label and/or header by renaming "###
**4. Execute Tools**" (and the inline comment "# Execute tools from connected
servers (planned)") to something like "### Planned CLI syntax" and remove the
executable prefix (e.g., drop "npx") or mark the block as non-executable (use a
plain triple-backtick block without "bash") so the examples like "neurolink mcp
exec filesystem read_file --params '{\"path\": \"README.md\"}'" and "neurolink
mcp exec github create_issue --params '{\"title\": \"New feature\", \"body\":
\"Description\"}'" are presented as syntax only, not runnable commands.
In `@docs/advanced/streaming.md`:
- Line 1729: The log at console.log currently prints the raw patientId (variable
patientId); replace that with a non-identifying value by redacting or hashing
patientId before logging (e.g., compute a deterministic hash or mask most
characters) so logs no longer contain the raw identifier; update the console.log
call that references patientId to use the redacted/hashedId instead and ensure
any helper you add to produce the redacted value is invoked where the original
console.log is located.
In `@docs/cookbook/index.md`:
- Around line 20-23: Replace the absolute markdown links for the listed cookbook
entries so they use relative file paths with the .md extension; specifically
update the link targets for "**Basic Streaming**", "**Multimodal Images**",
"**Provider Switching**", and "**Embeddings Basics**" from "/docs/cookbook/..."
to relative links like "./basic-streaming.md", "./multimodal-images.md",
"./provider-switching.md", and "./embeddings-basics.md" respectively so the
links remain portable across versioning and config changes.
In `@docs/development/contributing.md`:
- Around line 59-75: Update the prerequisites to explicitly list pnpm as a
required package manager alongside (or instead of) npm: mention installing pnpm
(e.g., "pnpm (required)") and, if npm is still required for certain tools,
clarify version constraints (e.g., "npm 9+ (optional)") so the setup commands
shown later (pnpm install, pnpm run build, pnpm test, pnpm run lint, pnpm run
check) match the stated prerequisites in the contributing doc; edit the
prerequisites section text that currently references "npm 9+" to include a line
for "pnpm" and brief install instruction or link.
- Line 214: Update the example test command that references "pnpm test
src/providers/openai.test.ts" because the path and file do not exist; replace
that line with either a command that runs the actual provider tests (for example
pointing to the existing test entry used for providers such as
test/continuous-test-suite-providers.ts) or remove the per-provider example
entirely if per-provider unit tests are not present—edit the contributing doc
where the faulty command appears to use the correct test invocation or a generic
"pnpm test" instead.
In `@docs/features/rag.md`:
- Line 689: Update the environment variables table entry that currently lists
`GOOGLE_AI_API_KEY` for Vertex AI to `GOOGLE_APPLICATION_CREDENTIALS` and adjust
the description to indicate it should be the path to the service account JSON
used for Vertex authentication; locate the table row containing the
`GOOGLE_AI_API_KEY` cell (the row shown in the diff) and replace the variable
name and its brief note so it matches other docs (tutorials, troubleshooting,
error-codes, api-reference) that use `GOOGLE_APPLICATION_CREDENTIALS` for Vertex
AI.
In `@docs/features/workflow-engine.md`:
- Around line 47-50: The Quick Start example uses neurolink.generate with
workflow: "consensus-3" but the docs later require registering workflows via
registerWorkflow (and mention the workflow registry), causing a contradiction;
update the Quick Start by either (A) adding the explicit registration call
(registerWorkflow("consensus-3", ...)) before calling neurolink.generate,
referencing the workflow registry/registerWorkflow to mirror the detailed
section, or (B) add a brief note stating that "consensus-3" is a pre-registered
built-in workflow and point to the workflow registry section; ensure the example
and the long-form text consistently state whether built-in workflows are
auto-registered or must be registered explicitly.
In `@docs/getting-started/providers/litellm.md`:
- Around line 117-124: The example logs the wrong field from the
GenerateResult—change the final line that logs the response from
console.log(result.text) to console.log(result.content) (the output produced by
ai.generate in GenerateResult); update the example that calls ai.generate
(provider: "litellm") so it prints result.content instead of result.text.
---
Outside diff comments:
In `@docs/about/vision.md`:
- Line 142: Update the vision.md text that currently reads "✅ 12 AI providers
unified under one API" to "✅ 13 AI providers unified under one API" so it
matches the rest of the documentation and the codebase; locate and edit the
string in docs/about/vision.md (the line containing "12 AI providers") to
replace 12 with 13.
In `@docs/features/pdf-support.md`:
- Around line 68-78: The streaming examples are iterating directly over the
return value of neurolink.stream(), but neurolink.stream() returns a
StreamResult object with a .stream property for async iteration; update the
examples to await neurolink.stream(...) into a variable (e.g., result or
streamResult) and then iterate with "for await (const chunk of result.stream)"
instead of "for await (... of stream)"; change both occurrences of the pattern
in the file so they reference the StreamResult variable and its .stream property
(keep the same input shape and provider).
- Line 216: The model string used in the neurolink.generate call is outdated;
replace the deprecated "claude-3-5-sonnet-20241022" with the current recommended
model "claude-sonnet-4-6" in the generate() invocation's input object so
neurolink.generate({ ..., provider: "anthropic", model: "claude-sonnet-4-6" })
uses the latest Claude Sonnet 4.6; update any other occurrences of the old model
identifier in the same file to the new string to keep enums consistent.
In `@docs/getting-started/providers/aws-bedrock.md`:
- Around line 3-45: The docs (aws-bedrock.md) list Bedrock model examples that
are not registered in config/models.json, causing runtime errors; either add the
missing Bedrock model entries (e.g., "amazon.nova-pro-v1:0",
"meta.llama4-scout-17b-instruct-v1:0", "qwen.qwen3-235b-a22b-2507-v1:0" and any
other examples) into the "bedrock" section of config/models.json with the
correct provider mappings and IDs, or update aws-bedrock.md to clearly mark
those model examples as unsupported/planned and remove or annotate code snippets
referencing unregistered model IDs so users won’t hit runtime errors. Ensure
references to these exact model IDs are handled consistently between
aws-bedrock.md and config/models.json.
In `@docs/getting-started/providers/google-ai.md`:
- Around line 858-865: The snippet iterates directly over ai.stream(...) instead
of using the returned object's .stream property and omits the type guard; update
the example to first call ai.stream(...) and assign its result to a variable
(the call with provider "google-ai" and model "gemini-2.5-flash"), then iterate
over thatResult.stream and include the type guard (e.g., if ("content" in chunk)
...) before logging chunk.content so it matches the pattern used around lines
339 and 570.
---
Duplicate comments:
In `@docs/advanced/streaming.md`:
- Around line 53-55: The examples access chunk.content directly even though
StreamResult.stream yields a union of chunk types; narrow the union before using
content by checking the chunk discriminator (e.g., if (chunk.type === "message"
|| chunk.type === "response") or a runtime predicate) and only then write
chunk.content (or default to ""), e.g. inside the for-await loop guard on
chunk.type and handle other variants explicitly; update all occurrences that
read result.stream (references: result.stream, StreamResult.stream, and
chunk.content) to use this narrowing pattern so the code type-checks and other
chunk variants aren’t ignored.
In `@docs/cli/commands.md`:
- Around line 728-733: The docs list an unsupported transport value ("http") for
`mcp add`; update the CLI docs to match the implementation in buildAddOptions by
removing "http" from the `--transport` choices (leave `stdio`, `sse`, and
`websocket`) so copy-pasted commands won't fail and the documentation aligns
with the `buildAddOptions` behavior in src/cli/commands/mcp.ts.
In `@docs/cookbook/error-recovery.md`:
- Line 250: The current yield at "if (\"content\" in chunk) yield
chunk.content;" can emit non-string (e.g., undefined) and violate the
AsyncIterable<string> contract; update the guard to only yield when
chunk.content is a string (e.g., check typeof chunk.content === "string" or use
a truthy string check) so that only string values are yielded, keeping the
AsyncIterable<string> contract intact and avoiding undefined emissions from the
stream.
In `@docs/demos/index.md`:
- Around line 108-117: The closing admonition marker for the tip block starting
at ":::tip[Live Demo Available]" is indented by two spaces which can break
Docusaurus rendering; remove the leading spaces so the closing ":::” is
flush-left (align with the opening ":::tip[Live Demo Available]" line) to
properly close the block and restore correct rendering of the tip section.
In `@docs/features/index.md`:
- Around line 89-90: The page has inconsistent provider counts: the sentence
"NeuroLink supports **13 AI providers**" and the “Platform Capabilities at a
Glance” row that reads **14+ providers** must match; pick the correct canonical
count (update either the inline phrase or the table cell) so both use the same
number and formatting (e.g., change the inline sentence to "NeuroLink supports
**14+ AI providers**" or change the table cell to "13 AI providers"), and ensure
you update the exact strings found in docs/features/index.md so both occurrences
are identical.
In `@docs/features/multimodal-chat.md`:
- Around line 218-223: The closing admonition marker for the "Alt Text Best
Practices" tip is indented by two spaces which can break Docusaurus rendering;
locate the tip block that starts with ":::tip[Alt Text Best Practices]" and make
the closing "::: " marker flush-left (no leading spaces) so the directive
properly closes and the admonition renders correctly.
In `@docs/features/regional-streaming.md`:
- Around line 25-27: The for-await loop is writing the chunk object directly
(process.stdout.write(chunk)) which yields “[object Object]”; change it to write
the chunk's text payload (process.stdout.write(chunk.content)) and guard for
missing content if necessary so streaming output matches the pattern used
elsewhere (referencing result.stream and the loop variable chunk).
In `@docs/features/thinking-configuration.md`:
- Around line 28-47: The doc uses inconsistent model identifiers: replace the
non-canonical "gemini-3.1-pro" (and any other variants like
"gemini-3-pro-preview" mismatch) with the canonical registry ID used by examples
and utilities (e.g., "gemini-3-pro-preview" if that is the canonical name);
update the Gemini 3 list so all entries consistently use the registry’s
canonical IDs (also verify "gemini-3-flash-preview" and any Gemini 2.5/Claude
entries match their canonical registry names) to ensure copy-paste commands
work.
In `@docs/features/video-analysis.md`:
- Around line 21-36: The Quick Start example uses an inconsistent input key:
change the input object passed to NeuroLink.generate from input: { text:
"Describe this video", videoFiles: ["./clip.mp4"] } to use the same key as the
other examples (input: { text: "Describe this video", files: ["./clip.mp4"] })
so NeuroLink.generate (the class NeuroLink and its generate method) shows a
consistent API across the docs.
In `@docs/features/workflow-engine.md`:
- Around line 20-22: Remove the empty line inside the blockquote that begins
with "**Since: v9.20.0 | **Status**: Stable (Testing Phase) | **Availability**:
SDK + CLI" so the two lines form a single contiguous paragraph; specifically,
delete the blank line between the line with that header and the line starting
"**Provider Defaults:** When `--provider` (CLI)..." to satisfy MD028 and
eliminate the lint warning.
In `@docs/getting-started/providers/anthropic.md`:
- Around line 23-27: The "Extended Thinking" range is inconsistent: change the
phrase "Claude 3.7+" (and any parenthetical model list like "Sonnet 4, Opus 4")
to match the active-model section which requires 4.0+ (e.g., "Claude 4.0+") so
the doc consistently states that Extended Thinking applies to Claude 4.0+
models; update the single-line bullet beginning "Extended Thinking" and any
other occurrences referencing "3.7+" to "4.0+" and adjust model examples to
match (e.g., Sonnet 4.0, Opus 4.0) so the guide is normalized.
In `@docs/getting-started/providers/aws-bedrock.md`:
- Around line 17-19: The docs warning block titled "Inference Profile ARN
Required" states Anthropic Claude models must use full inference profile ARNs or
cross-region profile IDs; update all example usages and tables that still list
direct Claude model IDs (e.g., occurrences showing "claude-2", "claude-instant"
or other bare model names) to use the correct inference profile ID/ARN format
(for Claude 4+ use examples like "us.anthropic.claude-sonnet-4-6" or full ARN)
so every Claude example and table matches the requirement declared in the danger
block.
In `@docs/getting-started/providers/azure-openai.md`:
- Around line 233-235: The retirement warning block titled "GPT-4o-mini
Retirement" omits "Data Zone Standard" from the October 1, 2026 retirement
group; update the warning text so it reads that Standard deployments retire
March 31, 2026 and that Provisioned, Global, and Data Zone Standard deployments
retire October 1, 2026, and keep the recommended migration targets
(`gpt-4.1-mini` or `gpt-5-mini`) unchanged.
In `@docs/getting-started/providers/google-ai.md`:
- Around line 283-305: The examples mix two shapes for the thinking
configuration—one using thinkingConfig (thinkingConfig: { thinkingLevel: "high"
}) and others using a top-level thinkingLevel—so update the ai.generate calls
that pass top-level thinkingLevel (the calls constructing codeReview and
quickAnalysis) to instead use the same shape as the first example by passing
thinkingConfig: { thinkingLevel: "<level>" } (e.g., "medium", "low"), ensuring
all ai.generate invocations consistently use thinkingConfig and keeping
provider/model/inputs unchanged.
In `@docs/getting-started/providers/mistral.md`:
- Around line 87-99: The Codestral table row currently lists `codestral-latest`
with a 256K context window; update that row to show 128K context (change the
"256K" cell to "128K") for the **Codestral** entry so the table matches the
official model spec for `codestral-latest`.
---
Nitpick comments:
In `@docs/about/vision.md`:
- Line 314: Update the outdated "Last updated" timestamp string "**Last
updated**: October 2025" in the docs/about/vision.md content to reflect the
current documentation refresh (e.g., "**Last updated**: March 2026"); locate the
exact markdown line containing the "**Last updated**" label and replace the
date-only portion while preserving surrounding formatting and punctuation.
In `@docs/features/pdf-support.md`:
- Line 77: The example writes chunk.content directly via
process.stdout.write(chunk.content); add a defensive guard to ensure chunk
exists and has a valid content property before writing (e.g., check chunk !=
null and typeof chunk.content === 'string' or chunk.content !== undefined), and
otherwise skip or handle the missing content path; update the same pattern where
chunk.content is used elsewhere (the other occurrence at the same example) so
streaming examples consistently validate chunk and its content before calling
process.stdout.write.
In `@docs/features/provider-orchestration.md`:
- Around line 18-33: The Quick Start and SDK snippets duplicate the same
orchestration flow; keep a single canonical example (the NeuroLink instantiation
with enableOrchestration and the generate call) and remove the duplicate snippet
elsewhere, updating the removed section to link to the canonical example;
specifically, retain the NeuroLink constructor usage (NeuroLink,
enableOrchestration) and the generate call that returns result.provider and
result.model, then replace the duplicated SDK example with a short reference
pointing to the Quick Start example to avoid doc drift.
In `@docs/getting-started/providers/litellm.md`:
- Around line 153-155: The stream consumer iterates union-typed chunks but
assumes every chunk has a content property; guard against undefined by checking
the chunk shape before writing: inside the for-await loop inspect the chunk
(e.g., if ("content" in chunk && chunk.content) or if (chunk.type === "response"
&& chunk.content)) and only call process.stdout.write(chunk.content) when that
condition is true; update the loop around result.stream to perform this type
guard to avoid printing undefined values.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: 35f734b1-eb94-49e5-9eaf-ed1992393c9e
📒 Files selected for processing (120)
CLAUDE.mdREADME.mddocs-site/sidebars.tsdocs-site/static/search-index.jsondocs/404.mddocs/DOCUMENTATION-AUDIT-REPORT.mddocs/about/vision.mddocs/advanced/api-reference.mddocs/advanced/builtin-middleware.mddocs/advanced/cli-guide.mddocs/advanced/index.mddocs/advanced/mcp-integration.mddocs/advanced/streaming.mddocs/analysis/claims-vs-reality-analysis.mddocs/analysis/verification-results.mddocs/api-reference.mddocs/changelog.mddocs/cli-guide.mddocs/cli-reference.mddocs/cli/commands.mddocs/cli/index.mddocs/configuration.mddocs/contributing.mddocs/cookbook/basic-streaming.mddocs/cookbook/embeddings-basics.mddocs/cookbook/error-recovery.mddocs/cookbook/index.mddocs/cookbook/multimodal-images.mddocs/cookbook/provider-switching.mddocs/demos/index.mddocs/demos/screenshots.mddocs/development/contributing.mddocs/development/index.mddocs/dynamic-models.mddocs/enterprise-proxy-setup.mddocs/examples/basic-usage.mddocs/examples/index.mddocs/examples/use-cases.mddocs/features/audio-input.mddocs/features/auto-evaluation.mddocs/features/claude-subscription.mddocs/features/cli-loop-sessions.mddocs/features/context-compaction.mddocs/features/conversation-history.mddocs/features/csv-support.mddocs/features/embeddings.mddocs/features/enterprise-hitl.mddocs/features/file-processors.mddocs/features/guardrails.mddocs/features/hitl.mddocs/features/index.mddocs/features/mcp-tools-showcase.mddocs/features/multimodal-chat.mddocs/features/observability.mddocs/features/office-documents.mddocs/features/pdf-support.mddocs/features/provider-orchestration.mddocs/features/rag.mddocs/features/regional-streaming.mddocs/features/streaming.mddocs/features/structured-output.mddocs/features/thinking-configuration.mddocs/features/tts.mddocs/features/video-analysis.mddocs/features/video-director-mode.mddocs/features/video-generation.mddocs/features/workflow-engine.mddocs/framework-integration.mddocs/getting-started/api-reference.mddocs/getting-started/index.mddocs/getting-started/installation.mddocs/getting-started/providers/anthropic.mddocs/getting-started/providers/aws-bedrock.mddocs/getting-started/providers/azure-openai.mddocs/getting-started/providers/google-ai.mddocs/getting-started/providers/huggingface.mddocs/getting-started/providers/litellm.mddocs/getting-started/providers/mistral.mddocs/getting-started/providers/ollama.mddocs/getting-started/providers/openai.mddocs/getting-started/providers/sagemaker.mddocs/guides/index.mddocs/guides/migration-guide.mddocs/guides/migration/from-vercel-ai-sdk.mddocs/guides/server-adapters/api-reference.mddocs/guides/troubleshooting.mddocs/index.mddocs/mcp-docs-server.mddocs/mcp-integration.mddocs/mcp-testing-guide.mddocs/mem0-integration.mddocs/middleware.mddocs/playground/index.mddocs/provider-comparison.mddocs/reference/configuration.mddocs/reference/faq.mddocs/reference/index.mddocs/reference/provider-comparison.mddocs/reference/provider-selection.mddocs/reference/troubleshooting.mddocs/sdk/advanced-features.mddocs/sdk/api-reference.mddocs/sdk/custom-tools.mddocs/sdk/index.mddocs/telemetry-guide.mddocs/testing.mddocs/troubleshooting.mddocs/tutorials/videos.mddocs/use-cases.mdexamples/embeddings.tsexamples/memory-conversation.tsexamples/observability-langfuse.tsexamples/provider-switching.tsexamples/streaming-basic.tssrc/lib/adapters/providerImageAdapter.tssrc/lib/constants/contextWindows.tssrc/lib/constants/enums.tssrc/lib/constants/tokens.tssrc/lib/providers/amazonBedrock.tssrc/lib/providers/anthropic.ts
💤 Files with no reviewable changes (1)
- docs/cli-reference.md
| - [**Basic Streaming**](/docs/cookbook/basic-streaming) - Stream AI responses in real time with the `result.stream` pattern | ||
| - [**Multimodal Images**](/docs/cookbook/multimodal-images) - Send images to vision models for analysis, OCR, and comparison | ||
| - [**Provider Switching**](/docs/cookbook/provider-switching) - Switch providers at runtime, compare outputs, and implement fallback | ||
| - [**Embeddings Basics**](/docs/cookbook/embeddings-basics) - Generate embeddings, compare similarity, and build semantic search |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Inspect cookbook link styles and absolute /docs references
rg -n -C2 '\]\(/docs/' docs/cookbook
rg -n -C2 '\]\([^)]+\.md\)' docs/cookbook/index.mdRepository: juspay/neurolink
Length of output: 3098
🏁 Script executed:
# Verify target cookbook files exist
fd -t f '(basic-streaming|multimodal-images|provider-switching|embeddings-basics)' docs/cookbook/
# Check if there are any relative link references to these same files elsewhere
rg -n 'basic-streaming|multimodal-images|provider-switching|embeddings-basics' docs/cookbook/index.md | head -20Repository: juspay/neurolink
Length of output: 721
🌐 Web query:
Docusaurus markdown links relative paths vs absolute docs paths routing
💡 Result:
In Docusaurus, Markdown links in docs support both relative file paths and absolute URL paths, with distinct behaviors for routing. Relative file paths (recommended): - Use .md or .mdx extension, e.g., doc2 or subdoc. - Docusaurus resolves these against the current file's directory (or content root for absolute file paths like docs/doc2.md). - Automatically converts to the target document's URL path (removes .md extension). - Benefits: portable across versions/localizations, editor-friendly, survives trailingSlash changes, stays within same version. - Limitation: only works within same plugin instance (e.g., docs to docs). Absolute/relative URL paths: - No extension, e.g., doc2 or plugins. - Treated as-is, resolved by browser relative to current page URL. - Can break with trailingSlash config, versioning, or file moves. - Use for external links or cross-plugin (docs to blog). Routing maps file paths to URLs via routeBasePath (default /docs), with versions adding prefixes. Slugs decouple URLs from files. Broken links detected at build. Sidebar uses doc IDs (filenames) for links, autogenerates from filesystem.
Citations:
- 1: https://docusaurus.io/docs/next/markdown-features/links
- 2: https://docusaurus.io/docs/3.1.1/advanced/routing
- 3: https://docusaurus.io/docs/markdown-features/links
- 4: https://wdk-docs.github.io/docusaurus-docs/en/docs/3.0.0-alpha.0/markdown-features/links
- 5: https://docusaurus.io/docs/advanced/routing
Use relative markdown links instead of absolute /docs/... paths for consistency and portability.
Lines 20–23 use absolute /docs/cookbook/... links, while the rest of this file uses relative markdown links (e.g., (./file.md), (../path/file.md)). Docusaurus recommends relative file paths with the .md extension—they survive versioning, trailingSlash config changes, and file moves. Absolute URL paths can break under these conditions.
♻️ Suggested refactor
-- [**Basic Streaming**](/docs/cookbook/basic-streaming) - Stream AI responses in real time with the `result.stream` pattern
-- [**Multimodal Images**](/docs/cookbook/multimodal-images) - Send images to vision models for analysis, OCR, and comparison
-- [**Provider Switching**](/docs/cookbook/provider-switching) - Switch providers at runtime, compare outputs, and implement fallback
-- [**Embeddings Basics**](/docs/cookbook/embeddings-basics) - Generate embeddings, compare similarity, and build semantic search
+- [**Basic Streaming**](basic-streaming.md) - Stream AI responses in real time with the `result.stream` pattern
+- [**Multimodal Images**](multimodal-images.md) - Send images to vision models for analysis, OCR, and comparison
+- [**Provider Switching**](provider-switching.md) - Switch providers at runtime, compare outputs, and implement fallback
+- [**Embeddings Basics**](embeddings-basics.md) - Generate embeddings, compare similarity, and build semantic search📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| - [**Basic Streaming**](/docs/cookbook/basic-streaming) - Stream AI responses in real time with the `result.stream` pattern | |
| - [**Multimodal Images**](/docs/cookbook/multimodal-images) - Send images to vision models for analysis, OCR, and comparison | |
| - [**Provider Switching**](/docs/cookbook/provider-switching) - Switch providers at runtime, compare outputs, and implement fallback | |
| - [**Embeddings Basics**](/docs/cookbook/embeddings-basics) - Generate embeddings, compare similarity, and build semantic search | |
| - [**Basic Streaming**](basic-streaming.md) - Stream AI responses in real time with the `result.stream` pattern | |
| - [**Multimodal Images**](multimodal-images.md) - Send images to vision models for analysis, OCR, and comparison | |
| - [**Provider Switching**](provider-switching.md) - Switch providers at runtime, compare outputs, and implement fallback | |
| - [**Embeddings Basics**](embeddings-basics.md) - Generate embeddings, compare similarity, and build semantic search |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@docs/cookbook/index.md` around lines 20 - 23, Replace the absolute markdown
links for the listed cookbook entries so they use relative file paths with the
.md extension; specifically update the link targets for "**Basic Streaming**",
"**Multimodal Images**", "**Provider Switching**", and "**Embeddings Basics**"
from "/docs/cookbook/..." to relative links like "./basic-streaming.md",
"./multimodal-images.md", "./provider-switching.md", and
"./embeddings-basics.md" respectively so the links remain portable across
versioning and config changes.
| const result = await neurolink.generate({ | ||
| input: { text: "Explain the CAP theorem in distributed systems" }, | ||
| workflow: "consensus-3", | ||
| }); |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
cat -n docs/features/workflow-engine.md | sed -n '40,60p'Repository: juspay/neurolink
Length of output: 794
🏁 Script executed:
cat -n docs/features/workflow-engine.md | sed -n '170,190p'Repository: juspay/neurolink
Length of output: 759
🏁 Script executed:
cat -n docs/features/workflow-engine.md | sed -n '30,70p'Repository: juspay/neurolink
Length of output: 1717
🏁 Script executed:
cat -n docs/features/workflow-engine.md | sed -n '160,195p'Repository: juspay/neurolink
Length of output: 1300
Quick Start example contradicts later documentation on workflow registration.
Lines 47-50 show using workflow: "consensus-3" without any registerWorkflow() call. However, line 175 states: "The workflow must first be registered in the workflow registry," and lines 177-185 show the registration being performed before usage. Both sections reference the same workflow ID, creating a contradiction in the onboarding path.
Clarify whether pre-built workflows like "consensus-3" are auto-registered and don't require explicit registration, or update the Quick Start example to include the necessary registration step.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@docs/features/workflow-engine.md` around lines 47 - 50, The Quick Start
example uses neurolink.generate with workflow: "consensus-3" but the docs later
require registering workflows via registerWorkflow (and mention the workflow
registry), causing a contradiction; update the Quick Start by either (A) adding
the explicit registration call (registerWorkflow("consensus-3", ...)) before
calling neurolink.generate, referencing the workflow registry/registerWorkflow
to mirror the detailed section, or (B) add a brief note stating that
"consensus-3" is a pre-registered built-in workflow and point to the workflow
registry section; ensure the example and the long-form text consistently state
whether built-in workflows are auto-registered or must be registered explicitly.
724cab4 to
9d700ed
Compare
Review Feedback Addressed (Cycle 4)Addressed all 14 new findings from CodeRabbit Review 4 (8 Major, 6 Minor). Major Fixes
Minor Fixes
Validation
@coderabbitai — Cycle 4 complete. Please re-review. |
|
Kicking off a fresh review now. ✅ Actions performedReview triggered.
|
🤖 AI Review & Build Compliance ✅Status: AI analysis complete • Build rules validated • Ready for review 📊 View detailed analysis results🛡️ Analysis Complete
📋 Ready for Merge When
🤖 AI analysis complete - check individual code comments for specific feedback |
There was a problem hiding this comment.
Actionable comments posted: 7
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (3)
README.md (1)
79-93:⚠️ Potential issue | 🟠 MajorMake this TypeScript snippet self-contained (
neurolinkis undefined).Line 79 uses
neurolinkbefore declaration in this code block, so readers copying this example will hit a runtime/compile error.💡 Proposed fix
```typescript +import { NeuroLink } from "@juspay/neurolink"; + +const neurolink = new NeuroLink(); + // Image Generation with Gemini (v8.31.0) const image = await neurolink.generate({ input: { text: "A futuristic cityscape" }, provider: "google-ai", model: "imagen-3.0-generate-002", }); console.log(image.imageOutput?.base64); // Base64-encoded image // HTTP Transport for Remote MCP (v8.29.0) await neurolink.addExternalMCPServer("remote-tools", {🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@README.md` around lines 79 - 93, The snippet uses neurolink without defining it; import and instantiate the SDK at the top so the example is runnable: add an import for the NeuroLink class (e.g., import { NeuroLink } from "@juspay/neurolink") and then create a client instance (const neurolink = new NeuroLink()) before calling neurolink.generate or neurolink.addExternalMCPServer; place these additions immediately above the existing uses of neurolink in the README example.docs/examples/index.md (2)
60-86: 🛠️ Refactor suggestion | 🟠 MajorAdd missing imports and clarify placeholder functions.
The custom tools example is missing critical imports and function definitions:
- Line 66 uses
z.object()butz(Zod) is not imported- Line 71 calls
fetchWeather()but this function is not defined or importedSince this is documentation, code examples should be runnable or clearly mark placeholders. Please add the missing imports and either implement
fetchWeatheror add a comment indicating it's a placeholder function users should implement.📝 Suggested additions for completeness
=== "Custom Tools" ```typescript + // Add required imports + import { z } from "zod"; + + // Placeholder weather API function (implement with your weather service) + async function fetchWeather(city: string) { + // Example: call a weather API + return { temp: 20, condition: "sunny" }; + } + // Register a custom weather tool neurolink.registerTool("weather", {🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/examples/index.md` around lines 60 - 86, The example is missing required imports and a placeholder helper; add an import for Zod (referenced as z) and provide a concise placeholder implementation or clear comment for fetchWeather so the snippet is runnable and understandable; update the top of the snippet to import { z } from "zod" and either add an async function fetchWeather(city: string) { /* placeholder: call your weather API and return { temp, condition } */ } or a minimal mock return, leaving neurolink.registerTool and neurolink.generate usage unchanged.
116-127:⚠️ Potential issue | 🔴 CriticalAdd
awaitto thecreateBestAIProvider()call.The
createBestAIProvider()API exists and is correctly exported, but the example is missing theawaitkeyword. Since the function is async, line 121 should be:const provider = await createBestAIProvider();Without
await,providerwill be a Promise rather than the resolved provider instance, causing the.stream()call to fail.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/examples/index.md` around lines 116 - 127, The example uses createBestAIProvider() without awaiting it, so provider becomes a Promise and provider.stream() will fail; update the POST RequestHandler to await the async factory by changing the call to await createBestAIProvider() (so provider is the resolved provider instance) before calling provider.stream().
♻️ Duplicate comments (10)
docs/features/thinking-configuration.md (1)
28-28:⚠️ Potential issue | 🟠 MajorModel IDs are inconsistent within this page (and one Claude ID may have regressed).
Line 28 uses
gemini-3.1-pro, while Line 155, Line 206, and Line 227 still usegemini-3-pro-preview. Also, Line 44 (claude-opus-4-5-20251101) should be revalidated against the registry before release. Please unify this doc to canonical registry IDs so examples are copy-paste safe.Suggested doc-only normalization
- - `gemini-3.1-pro` - Full thinking support with high token budgets (up to 100,000) + - `gemini-3-pro-preview` - Full thinking support with high token budgets (up to 100,000) - - `claude-opus-4-5-20251101` (Claude Opus 4.5) + - `claude-opus-4-5-20251124` (Claude Opus 4.5)#!/bin/bash set -euo pipefail echo "== Find model registry candidates ==" fd -HI 'models\.json$|model.*\.json$|providers.*\.json$' echo echo "== Check current doc references ==" rg -n 'gemini-3\.1-pro|gemini-3-pro-preview|claude-opus-4-5-[0-9]+' docs/features/thinking-configuration.md echo echo "== Cross-check against registry files (if present) ==" REG_FILES=$(fd -HI 'models\.json$|model.*\.json$|providers.*\.json$' | tr '\n' ' ') if [ -n "${REG_FILES// }" ]; then rg -n 'gemini-3\.1-pro|gemini-3-pro-preview|claude-opus-4-5-[0-9]+' $REG_FILES || true else echo "No obvious registry JSON file found." fiAlso applies to: 44-45, 155-156, 206-207, 227-227
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/features/thinking-configuration.md` at line 28, The doc uses inconsistent model IDs—replace all occurrences of "gemini-3-pro-preview" with the canonical "gemini-3.1-pro" (or vice versa if registry shows a different canonical name) and revalidate the Claude entry "claude-opus-4-5-20251101" against your model registry; search the doc for the tokens "gemini-3.1-pro", "gemini-3-pro-preview", and "claude-opus-4-5-" and make a single, registry-accurate choice everywhere in this file, then run the provided grep/fd checks against local registry JSONs to confirm the chosen IDs match the canonical registry values before committing.docs/demos/index.md (2)
17-17:⚠️ Potential issue | 🟠 MajorSame filename verification needed:
cli-help-demo.pngreferences.Lines 17 and 162 reference
cli-help-demo.png, which has the same potential mismatch with the automation script pattern described in the review ofdocs/demos/screenshots.md. Please verify this filename exists in the repository.See the verification script in the
docs/demos/screenshots.mdreview.Also applies to: 162-162
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/demos/index.md` at line 17, Verify that the image file named "cli-help-demo.png" actually exists in the repo and that all references (notably in docs/demos/index.md lines referencing the image and the other occurrence at line 162) use the exact same filename; if the file is missing or named differently, either add/commit the correctly named file or rename the reference to the canonical filename, and ensure the filename follows the automation pattern described in docs/demos/screenshots.md so the verification script will match it.
117-117:⚠️ Potential issue | 🟡 MinorFix admonition closer indentation.
The closing
:::on line 117 is indented with 2 spaces, but Docusaurus admonition blocks require the closing marker to be flush-left (no indentation). This could cause rendering issues.📝 Proposed fix
- **Multiple Use Cases** - Business, creative, and technical examples - ::: +:::Note: A past review comment indicated this was addressed in commit 724cab4, but the indentation appears to still be present in the current code.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/demos/index.md` at line 117, The closing admonition marker ':::' is indented with two spaces and must be flush-left; locate the admonition block that opens with ':::' and remove the leading spaces before the closing ':::' so the marker starts at column 0 (no indentation) to conform to Docusaurus admonition syntax.docs/getting-started/providers/mistral.md (1)
87-102:⚠️ Potential issue | 🔴 CriticalCritical: Past review fixes not applied.
The model table still contains two factual errors that were flagged in a previous review:
- Line 94 - Codestral context window: Shows
256Kbut should be128Kaccording to Mistral's official documentation.- Line 98 - Codestral Embed dimensions: Missing dimension information. Should specify
1536 (configurable up to 3072)to clarify both the default and maximum embedding dimensions.📝 Proposed fix
-| **Codestral** | `codestral-latest` | 256K | No | Code generation and review | +| **Codestral** | `codestral-latest` | 128K | No | Code generation and review |-| **Codestral Embed** | `codestral-embed` | — | — | Code embeddings | +| **Codestral Embed** | `codestral-embed` | — | — | Code embeddings (1536 dims, max 3072) |🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/getting-started/providers/mistral.md` around lines 87 - 102, Update the table entries for Codestral and Codestral Embed: change the "Context" value for the Codestral row (model name "Codestral", model ID `codestral-latest`) from "256K" to "128K", and update the "Mistral Embed" / "Codestral Embed" embedding dimension cell (model ID `codestral-embed`) to read "1536 (configurable up to 3072)"; ensure the two corrected cells replace the incorrect values so the table matches Mistral's documentation.docs/features/regional-streaming.md (1)
25-27:⚠️ Potential issue | 🔴 CriticalContent access still incorrect: writing bare chunk object.
Line 26 writes
chunkdirectly to stdout, which will produce[object Object]. Should bechunk.contentto extract the text payload.🐛 Proposed fix
for await (const chunk of result.stream) { - process.stdout.write(chunk); + if ("content" in chunk) { + process.stdout.write(chunk.content); + } }🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/features/regional-streaming.md` around lines 25 - 27, The loop is writing the raw chunk object to stdout causing “[object Object]” output; change the write to use the text payload by calling process.stdout.write(chunk.content) when iterating result.stream so the streamed text is printed instead of the object — update the for-await-of handler that references result.stream and process.stdout.write to use chunk.content.docs/features/workflow-engine.md (1)
47-50:⚠️ Potential issue | 🟠 MajorUpdate Quick Start comment to clarify registration requirement for pre-built workflows.
The documentation contradicts itself: lines 47–50 claim "no registration required" for
consensus-3, but lines 177–187 explicitly showregisterWorkflow(CONSENSUS_3_WORKFLOW)being called. Pre-built workflows are not auto-registered and require explicit registration at startup. Update lines 47–48 to:-// The `consensus-3` workflow is one of 9 pre-built workflows included with -// NeuroLink — no registration required. +// The `consensus-3` workflow is one of 9 pre-built workflows. You must +// register it before use (see full example with registration below).🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/features/workflow-engine.md` around lines 47 - 50, The doc comment incorrectly states that the pre-built workflow "consensus-3" requires "no registration required"; update the text to state that pre-built workflows must be explicitly registered at startup by calling registerWorkflow(CONSENSUS_3_WORKFLOW) (or equivalent) before using neurolink.generate, and mention that you should call this registration during initialization where workflows are configured.docs/features/video-analysis.md (1)
28-31:⚠️ Potential issue | 🟡 MinorQuick Start uses a different input key than the rest of the page.
Line 29 uses
videoFiles, while the SDK usage examples below usefiles. Please standardize this Quick Start snippet to match the documented pattern used elsewhere in this page.💡 Suggested fix
- input: { text: "Describe this video", videoFiles: ["./clip.mp4"] }, + input: { text: "Describe this video", files: ["./clip.mp4"] },🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/features/video-analysis.md` around lines 28 - 31, The Quick Start snippet uses input.videoFiles while the rest of the page and SDK examples use input.files; update the Quick Start call to neurolink.generate to use input: { text: "...", files: ["./clip.mp4"] } so the input key is consistent with the documented pattern and other examples.docs/cli/commands.md (1)
728-733:⚠️ Potential issue | 🟠 Major
mcp addtransport options are documented beyond current parser support.The table includes
http, butsrc/cli/commands/mcp.ts(buildAddOptions) currently allows onlystdio,sse, andwebsocketformcp add. This will cause command failures for documented usage.#!/bin/bash # Verify transport choices for `mcp add` rg -n -C3 'buildAddOptions|option\("transport"|choices' src/cli/commands/mcp.ts🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/cli/commands.md` around lines 728 - 733, Docs list "http" as a valid transport for `mcp add` but the CLI parser in function buildAddOptions (see option("transport") choices in src/cli/commands/mcp.ts) only accepts `stdio`, `sse`, and `websocket`, causing mismatch and failures; fix by either adding "http" to the allowed choices array in buildAddOptions/option("transport") so the parser accepts it, or remove "http" from the docs table to match current implementation—update whichever file you change to keep docs and the CLI in sync.docs/features/index.md (1)
89-90:⚠️ Potential issue | 🟡 MinorProvider count is still inconsistent on this page.
Line 89 says 13 AI providers, but Line 77 in “Platform Capabilities at a Glance” still says 14+ providers. Please align both counts.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/features/index.md` around lines 89 - 90, The provider count text is inconsistent: update the two references to the same canonical number by editing the strings "NeuroLink supports **13 AI providers**" and the "Platform Capabilities at a Glance" line that currently reads "**14+ providers**" so they match (choose the correct authoritative count and change the other to it), ensuring both occurrences use identical wording and formatting.docs/getting-started/providers/huggingface.md (1)
17-19:⚠️ Potential issue | 🟠 MajorFree-tier messaging remains internally contradictory.
Line 18 still frames usage as “completely free … without cost concerns,” while the page later documents a ~1,000 requests/day model cap and related limits. Please make the free-tier claim consistently bounded across the page.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/getting-started/providers/huggingface.md` around lines 17 - 19, Update the "Free Tier Advantage" tip so it consistently presents the free tier as limited: replace the phrase "completely free for most models, with a generous daily cap (~1,000 requests/day per model) ... without any cost concerns" with a bounded statement such as "free for most models up to a daily cap (≈1,000 requests/day per model); usage above this or for larger workloads may incur limits or costs," and ensure any other mentions on the page echo this bounded framing so the page is not internally contradictory.
🧹 Nitpick comments (5)
docs/changelog.md (1)
247-247: Consider adding a tracking link for planned breaking-changes docs.“Planned for a future release” is clear, but a link to an issue/milestone would make this actionable for readers.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/changelog.md` at line 247, Update the "**Breaking Changes** - Detailed breaking changes documentation is planned for a future release" entry to include a tracking link to the issue or milestone where the breaking-changes docs are planned; edit that markdown line (the "**Breaking Changes**" paragraph) to append a short parenthetical like "(tracking: ISSUE_OR_MILESTONE_LINK)" or replace the placeholder with the actual issue/milestone URL or number so readers can follow progress.docs/cookbook/multimodal-images.md (1)
70-71: Add explicit error handling to invoked async examples.Line 70 and Line 153 invoke async functions without a rejection handler. In runnable snippets, prefer
.catch(...)to avoid unhandled promise rejections.Proposed doc snippet adjustment
-analyzeImage(); +analyzeImage().catch((err) => { + console.error("Image analysis failed:", err); +});-streamImageAnalysis("./chart.png", "Summarize the trends shown in this chart."); +streamImageAnalysis("./chart.png", "Summarize the trends shown in this chart.").catch((err) => { + console.error("Streaming analysis failed:", err); +});Also applies to: 153-154
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/cookbook/multimodal-images.md` around lines 70 - 71, The example calls to the async function analyzeImage() (and the other invocation at lines ~153-154) lack rejection handling; update the runnable snippets to handle rejections by attaching a .catch handler (e.g., analyzeImage().catch(err => { /* log or surface error */ })) or convert the snippet to an async IIFE/try-catch that awaits analyzeImage() so any thrown errors are caught and logged; ensure you update both occurrences referencing analyzeImage() to avoid unhandled promise rejections.docs/advanced/streaming.md (3)
156-163: Consider adding explicit chunk guard for consistency.Lines 160-162 use the
chunk.content || ""fallback pattern. While functionally safe, adding an explicit guard aligns with the document's recommended streaming pattern.♻️ Suggested alignment
for await (const chunk of result.stream) { - process.stdout.write(chunk.content || ""); + if ("content" in chunk) { + process.stdout.write(chunk.content); + } }🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/advanced/streaming.md` around lines 156 - 163, The example uses the fallback pattern chunk.content || "" — update the streaming consumer to explicitly guard the chunk and its content: when iterating the AsyncIterable returned by StreamingWithRetry.streamWithRetry (referencing result.stream and chunk), check if chunk and chunk.content are defined before writing, and write an empty string or skip when absent to match the document's recommended explicit-chunk-guard pattern.
85-95: Consider adding explicit chunk guard for consistency.Line 93 uses the same
chunk.content || ""pattern without an explicit guard. For consistency with the recommended pattern throughout this document, consider adding an explicit"content" in chunkcheck.♻️ Suggested alignment
-for await (const chunk of result.stream) { - process.stdout.write(chunk.content || ""); -} +for await (const chunk of result.stream) { + if ("content" in chunk) { + process.stdout.write(chunk.content); + } +}🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/advanced/streaming.md` around lines 85 - 95, The loop reading from result.stream should explicitly guard for the "content" property on each chunk for consistency; update the for-await loop that iterates over result.stream to check if ("content" in chunk) before writing, using the chunk variable and result.stream identifiers so only chunks with a content field are written to process.stdout (fall back to writing an empty string or skip when the check fails).
48-56: Consider adding explicit chunk guard for consistency.Line 54 uses
chunk.content || ""without an explicit"content" in chunkguard. While the|| ""fallback provides a safe default, it doesn't align with the explicit guard pattern shown in other streaming examples (e.g., lines 33-38, 70-74). SinceStreamResult.streamis a discriminated union that can yield audio/image chunks without acontentproperty, adding an explicit guard improves consistency and prevents potential undefined access.♻️ Suggested alignment
-for await (const chunk of result.stream) { - process.stdout.write(chunk.content || ""); -} +for await (const chunk of result.stream) { + if ("content" in chunk) { + process.stdout.write(chunk.content); + } +}🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/advanced/streaming.md` around lines 48 - 56, The streaming loop should explicitly guard for text chunks before accessing content: when iterating over the async iterator returned by neurolink.stream (StreamResult.stream), check the chunk type or the presence of the "content" property (e.g., via an explicit `if ("content" in chunk)` or discriminant check) and only write chunk.content when that guard passes; otherwise skip or handle audio/image chunk types consistently with the other examples.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@docs/cli/commands.md`:
- Around line 1145-1150: The docs list non-existent flags (--maxSize, --overlap)
for the rag chunk command; update the table entries to use the real CLI flags
(--rag-chunk-size and --rag-chunk-overlap) and mention the corresponding CLI
parameter names (ragChunkSize and ragChunkOverlap), preserving the same types
and default values and adjusting descriptions to refer to chunk size and
overlap; also make the same replacements for the other table occurrence so both
tables consistently document --rag-chunk-size and --rag-chunk-overlap instead of
--maxSize and --overlap.
In `@docs/cookbook/multimodal-images.md`:
- Line 45: Replace the invalid Bedrock wildcard model identifiers (e.g.,
"anthropic.claude-3-*" and "anthropic.claude-sonnet-4-*") in the compatibility
table with full concrete Bedrock model IDs (for example use IDs like
"anthropic.claude-sonnet-4-5-20250929-v1:0" instead of wildcards) so runtime
selection will succeed; update the entries that currently reference those
wildcards and ensure the existing string "claude-sonnet-4-20250514" and other
Bedrock examples follow the full-ID + version suffix format, and while you’re
there verify and normalize the OpenAI, Google AI, and Vertex entries (the
OpenAI/Google/Vertex model strings on the nearby lines) to match current
supported versions.
In `@docs/features/streaming.md`:
- Around line 140-145: The example incorrectly tests text chunks by checking
chunk.type === "text" even though StreamResult.stream defines text chunks as
objects with a content property; update the iteration over result.stream to
detect text chunks by checking for the presence of the content property (i.e.,
use a "content" in chunk style check) and then write chunk.content to stdout so
text chunks are not skipped; references: StreamResult.stream, result.stream, and
the loop variable chunk.
In `@docs/getting-started/providers/litellm.md`:
- Around line 50-51: The docs inconsistently mark LITELLM_BASE_URL as "Required"
on Line 50 but later say it's not required despite the provider code having a
default fallback; update the text around the LITELLM_BASE_URL example to
consistently state that it is optional and document the provider's default
fallback (mentioning LITELLM_BASE_URL) so first‑time users know the system will
use the built‑in default if they omit that env var; ensure the second reference
(Lines ~76-77) matches this wording.
- Around line 390-395: Replace the lines that print secrets with non-disclosing
presence checks: do not run grep or echo that outputs the actual master_key or
LITELLM_API_KEY. Instead verify that master_key exists in litellm_config.yaml
using a quiet existence check (e.g., a grep -q style test) and report only
“master_key present” or “master_key missing”; for the environment variable
LITELLM_API_KEY, check whether it is set/empty and report “LITELLM_API_KEY set”
or “LITELLM_API_KEY not set” (or show a masked summary like first/last few chars
only) so the actual secret values are never printed.
In `@docs/getting-started/providers/mistral.md`:
- Around line 374-385: The docs example for the Mistral provider uses the wrong
environment variable name; update the example to use MISTRAL_MODEL (not
MISTRAL_DEFAULT_MODEL) to match the provider implementation, and confirm whether
MISTRAL_REGION is supported by the provider code—if it is not, remove it from
the example or document the correct region variable; ensure the NeuroLink usage
sample (the ai.generate call with provider "mistral") lists the same environment
variables (MISTRAL_API_KEY, MISTRAL_MODEL, MISTRAL_TIMEOUT, and optionally
MISTRAL_REGION if implemented) so the docs and src/lib/providers/mistral.ts
remain consistent.
- Around line 168-177: The docs mention MISTRAL_REGION but the Mistral provider
doesn't read it; either remove the MISTRAL_REGION=eu line from the docs or add
region support in the Mistral provider: update the NeuroLink Mistral integration
(the code that handles ai.generate with provider "mistral") to read
process.env.MISTRAL_REGION (or accept a region option on the generate call), map
"eu" to the correct EU endpoint, and ensure the HTTP client/construction uses
that endpoint when creating the request; modify the provider initialization or
request-building function so region selection is honored and include
tests/validation for unsupported values.
---
Outside diff comments:
In `@docs/examples/index.md`:
- Around line 60-86: The example is missing required imports and a placeholder
helper; add an import for Zod (referenced as z) and provide a concise
placeholder implementation or clear comment for fetchWeather so the snippet is
runnable and understandable; update the top of the snippet to import { z } from
"zod" and either add an async function fetchWeather(city: string) { /*
placeholder: call your weather API and return { temp, condition } */ } or a
minimal mock return, leaving neurolink.registerTool and neurolink.generate usage
unchanged.
- Around line 116-127: The example uses createBestAIProvider() without awaiting
it, so provider becomes a Promise and provider.stream() will fail; update the
POST RequestHandler to await the async factory by changing the call to await
createBestAIProvider() (so provider is the resolved provider instance) before
calling provider.stream().
In `@README.md`:
- Around line 79-93: The snippet uses neurolink without defining it; import and
instantiate the SDK at the top so the example is runnable: add an import for the
NeuroLink class (e.g., import { NeuroLink } from "@juspay/neurolink") and then
create a client instance (const neurolink = new NeuroLink()) before calling
neurolink.generate or neurolink.addExternalMCPServer; place these additions
immediately above the existing uses of neurolink in the README example.
---
Duplicate comments:
In `@docs/cli/commands.md`:
- Around line 728-733: Docs list "http" as a valid transport for `mcp add` but
the CLI parser in function buildAddOptions (see option("transport") choices in
src/cli/commands/mcp.ts) only accepts `stdio`, `sse`, and `websocket`, causing
mismatch and failures; fix by either adding "http" to the allowed choices array
in buildAddOptions/option("transport") so the parser accepts it, or remove
"http" from the docs table to match current implementation—update whichever file
you change to keep docs and the CLI in sync.
In `@docs/demos/index.md`:
- Line 17: Verify that the image file named "cli-help-demo.png" actually exists
in the repo and that all references (notably in docs/demos/index.md lines
referencing the image and the other occurrence at line 162) use the exact same
filename; if the file is missing or named differently, either add/commit the
correctly named file or rename the reference to the canonical filename, and
ensure the filename follows the automation pattern described in
docs/demos/screenshots.md so the verification script will match it.
- Line 117: The closing admonition marker ':::' is indented with two spaces and
must be flush-left; locate the admonition block that opens with ':::' and remove
the leading spaces before the closing ':::' so the marker starts at column 0 (no
indentation) to conform to Docusaurus admonition syntax.
In `@docs/features/index.md`:
- Around line 89-90: The provider count text is inconsistent: update the two
references to the same canonical number by editing the strings "NeuroLink
supports **13 AI providers**" and the "Platform Capabilities at a Glance" line
that currently reads "**14+ providers**" so they match (choose the correct
authoritative count and change the other to it), ensuring both occurrences use
identical wording and formatting.
In `@docs/features/regional-streaming.md`:
- Around line 25-27: The loop is writing the raw chunk object to stdout causing
“[object Object]” output; change the write to use the text payload by calling
process.stdout.write(chunk.content) when iterating result.stream so the streamed
text is printed instead of the object — update the for-await-of handler that
references result.stream and process.stdout.write to use chunk.content.
In `@docs/features/thinking-configuration.md`:
- Line 28: The doc uses inconsistent model IDs—replace all occurrences of
"gemini-3-pro-preview" with the canonical "gemini-3.1-pro" (or vice versa if
registry shows a different canonical name) and revalidate the Claude entry
"claude-opus-4-5-20251101" against your model registry; search the doc for the
tokens "gemini-3.1-pro", "gemini-3-pro-preview", and "claude-opus-4-5-" and make
a single, registry-accurate choice everywhere in this file, then run the
provided grep/fd checks against local registry JSONs to confirm the chosen IDs
match the canonical registry values before committing.
In `@docs/features/video-analysis.md`:
- Around line 28-31: The Quick Start snippet uses input.videoFiles while the
rest of the page and SDK examples use input.files; update the Quick Start call
to neurolink.generate to use input: { text: "...", files: ["./clip.mp4"] } so
the input key is consistent with the documented pattern and other examples.
In `@docs/features/workflow-engine.md`:
- Around line 47-50: The doc comment incorrectly states that the pre-built
workflow "consensus-3" requires "no registration required"; update the text to
state that pre-built workflows must be explicitly registered at startup by
calling registerWorkflow(CONSENSUS_3_WORKFLOW) (or equivalent) before using
neurolink.generate, and mention that you should call this registration during
initialization where workflows are configured.
In `@docs/getting-started/providers/huggingface.md`:
- Around line 17-19: Update the "Free Tier Advantage" tip so it consistently
presents the free tier as limited: replace the phrase "completely free for most
models, with a generous daily cap (~1,000 requests/day per model) ... without
any cost concerns" with a bounded statement such as "free for most models up to
a daily cap (≈1,000 requests/day per model); usage above this or for larger
workloads may incur limits or costs," and ensure any other mentions on the page
echo this bounded framing so the page is not internally contradictory.
In `@docs/getting-started/providers/mistral.md`:
- Around line 87-102: Update the table entries for Codestral and Codestral
Embed: change the "Context" value for the Codestral row (model name "Codestral",
model ID `codestral-latest`) from "256K" to "128K", and update the "Mistral
Embed" / "Codestral Embed" embedding dimension cell (model ID `codestral-embed`)
to read "1536 (configurable up to 3072)"; ensure the two corrected cells replace
the incorrect values so the table matches Mistral's documentation.
---
Nitpick comments:
In `@docs/advanced/streaming.md`:
- Around line 156-163: The example uses the fallback pattern chunk.content || ""
— update the streaming consumer to explicitly guard the chunk and its content:
when iterating the AsyncIterable returned by StreamingWithRetry.streamWithRetry
(referencing result.stream and chunk), check if chunk and chunk.content are
defined before writing, and write an empty string or skip when absent to match
the document's recommended explicit-chunk-guard pattern.
- Around line 85-95: The loop reading from result.stream should explicitly guard
for the "content" property on each chunk for consistency; update the for-await
loop that iterates over result.stream to check if ("content" in chunk) before
writing, using the chunk variable and result.stream identifiers so only chunks
with a content field are written to process.stdout (fall back to writing an
empty string or skip when the check fails).
- Around line 48-56: The streaming loop should explicitly guard for text chunks
before accessing content: when iterating over the async iterator returned by
neurolink.stream (StreamResult.stream), check the chunk type or the presence of
the "content" property (e.g., via an explicit `if ("content" in chunk)` or
discriminant check) and only write chunk.content when that guard passes;
otherwise skip or handle audio/image chunk types consistently with the other
examples.
In `@docs/changelog.md`:
- Line 247: Update the "**Breaking Changes** - Detailed breaking changes
documentation is planned for a future release" entry to include a tracking link
to the issue or milestone where the breaking-changes docs are planned; edit that
markdown line (the "**Breaking Changes**" paragraph) to append a short
parenthetical like "(tracking: ISSUE_OR_MILESTONE_LINK)" or replace the
placeholder with the actual issue/milestone URL or number so readers can follow
progress.
In `@docs/cookbook/multimodal-images.md`:
- Around line 70-71: The example calls to the async function analyzeImage() (and
the other invocation at lines ~153-154) lack rejection handling; update the
runnable snippets to handle rejections by attaching a .catch handler (e.g.,
analyzeImage().catch(err => { /* log or surface error */ })) or convert the
snippet to an async IIFE/try-catch that awaits analyzeImage() so any thrown
errors are caught and logged; ensure you update both occurrences referencing
analyzeImage() to avoid unhandled promise rejections.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: 2376cd66-7b1f-4169-bdc7-d3f5489ebbaa
📒 Files selected for processing (120)
CLAUDE.mdREADME.mddocs-site/sidebars.tsdocs-site/static/search-index.jsondocs/404.mddocs/DOCUMENTATION-AUDIT-REPORT.mddocs/about/vision.mddocs/advanced/api-reference.mddocs/advanced/builtin-middleware.mddocs/advanced/cli-guide.mddocs/advanced/index.mddocs/advanced/mcp-integration.mddocs/advanced/streaming.mddocs/analysis/claims-vs-reality-analysis.mddocs/analysis/verification-results.mddocs/api-reference.mddocs/changelog.mddocs/cli-guide.mddocs/cli-reference.mddocs/cli/commands.mddocs/cli/index.mddocs/configuration.mddocs/contributing.mddocs/cookbook/basic-streaming.mddocs/cookbook/embeddings-basics.mddocs/cookbook/error-recovery.mddocs/cookbook/index.mddocs/cookbook/multimodal-images.mddocs/cookbook/provider-switching.mddocs/demos/index.mddocs/demos/screenshots.mddocs/development/contributing.mddocs/development/index.mddocs/dynamic-models.mddocs/enterprise-proxy-setup.mddocs/examples/basic-usage.mddocs/examples/index.mddocs/examples/use-cases.mddocs/features/audio-input.mddocs/features/auto-evaluation.mddocs/features/claude-subscription.mddocs/features/cli-loop-sessions.mddocs/features/context-compaction.mddocs/features/conversation-history.mddocs/features/csv-support.mddocs/features/embeddings.mddocs/features/enterprise-hitl.mddocs/features/file-processors.mddocs/features/guardrails.mddocs/features/hitl.mddocs/features/index.mddocs/features/mcp-tools-showcase.mddocs/features/multimodal-chat.mddocs/features/observability.mddocs/features/office-documents.mddocs/features/pdf-support.mddocs/features/provider-orchestration.mddocs/features/rag.mddocs/features/regional-streaming.mddocs/features/streaming.mddocs/features/structured-output.mddocs/features/thinking-configuration.mddocs/features/tts.mddocs/features/video-analysis.mddocs/features/video-director-mode.mddocs/features/video-generation.mddocs/features/workflow-engine.mddocs/framework-integration.mddocs/getting-started/api-reference.mddocs/getting-started/index.mddocs/getting-started/installation.mddocs/getting-started/providers/anthropic.mddocs/getting-started/providers/aws-bedrock.mddocs/getting-started/providers/azure-openai.mddocs/getting-started/providers/google-ai.mddocs/getting-started/providers/huggingface.mddocs/getting-started/providers/litellm.mddocs/getting-started/providers/mistral.mddocs/getting-started/providers/ollama.mddocs/getting-started/providers/openai.mddocs/getting-started/providers/sagemaker.mddocs/guides/index.mddocs/guides/migration-guide.mddocs/guides/migration/from-vercel-ai-sdk.mddocs/guides/server-adapters/api-reference.mddocs/guides/troubleshooting.mddocs/index.mddocs/mcp-docs-server.mddocs/mcp-integration.mddocs/mcp-testing-guide.mddocs/mem0-integration.mddocs/middleware.mddocs/playground/index.mddocs/provider-comparison.mddocs/reference/configuration.mddocs/reference/faq.mddocs/reference/index.mddocs/reference/provider-comparison.mddocs/reference/provider-selection.mddocs/reference/troubleshooting.mddocs/sdk/advanced-features.mddocs/sdk/api-reference.mddocs/sdk/custom-tools.mddocs/sdk/index.mddocs/telemetry-guide.mddocs/testing.mddocs/troubleshooting.mddocs/tutorials/videos.mddocs/use-cases.mdexamples/embeddings.tsexamples/memory-conversation.tsexamples/observability-langfuse.tsexamples/provider-switching.tsexamples/streaming-basic.tssrc/lib/adapters/providerImageAdapter.tssrc/lib/constants/contextWindows.tssrc/lib/constants/enums.tssrc/lib/constants/tokens.tssrc/lib/providers/amazonBedrock.tssrc/lib/providers/anthropic.ts
💤 Files with no reviewable changes (1)
- docs/cli-reference.md
✅ Files skipped from review due to trivial changes (7)
- docs/features/guardrails.md
- docs/enterprise-proxy-setup.md
- docs/features/video-director-mode.md
- docs/cookbook/embeddings-basics.md
- docs/getting-started/api-reference.md
- docs/features/context-compaction.md
- docs/cli-guide.md
🚧 Files skipped from review as they are similar to previous changes (28)
- docs/features/tts.md
- docs/dynamic-models.md
- docs/features/hitl.md
- docs/cookbook/basic-streaming.md
- docs/features/cli-loop-sessions.md
- docs/features/provider-orchestration.md
- docs/features/conversation-history.md
- docs/getting-started/index.md
- docs/advanced/mcp-integration.md
- docs/cookbook/index.md
- docs/features/structured-output.md
- docs/404.md
- docs/features/claude-subscription.md
- docs/cookbook/error-recovery.md
- docs/configuration.md
- docs/advanced/builtin-middleware.md
- docs/features/enterprise-hitl.md
- docs/features/mcp-tools-showcase.md
- docs/cookbook/provider-switching.md
- CLAUDE.md
- docs/analysis/verification-results.md
- docs/api-reference.md
- docs/advanced/cli-guide.md
- docs/features/video-generation.md
- docs/features/observability.md
- docs/framework-integration.md
- docs/development/contributing.md
- docs/features/multimodal-chat.md
| | Option | Alias | Type | Default | Description | | ||
| | ------------ | ----- | ------- | ----------- | --------------------------------------------------- | | ||
| | `--strategy` | `-s` | string | `recursive` | Chunking strategy | | ||
| | `--maxSize` | `-m` | number | `1000` | Maximum chunk size | | ||
| | `--overlap` | `-o` | number | `200` | Overlap between chunks | | ||
| | `--format` | `-f` | string | `text` | Output format: `text`, `json`, `table` | |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Verify RAG chunk size/overlap flag names used by parser
rg -n -C3 'ragChunkSize|ragChunkOverlap|rag-chunk-size|rag-chunk-overlap|maxSize|overlap' src/cli/factories/commandFactory.tsRepository: juspay/neurolink
Length of output: 1366
Update rag chunk command documentation to match CLI flag names.
The documented flags --maxSize and --overlap do not exist in the CLI implementation. The actual flags are --rag-chunk-size and --rag-chunk-overlap (corresponding to CLI parameters ragChunkSize and ragChunkOverlap). Users following the documentation will encounter unrecognized flag errors. Update the documentation table at lines 1145-1150 (and 1169-1173) to use the correct flag names and descriptions.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@docs/cli/commands.md` around lines 1145 - 1150, The docs list non-existent
flags (--maxSize, --overlap) for the rag chunk command; update the table entries
to use the real CLI flags (--rag-chunk-size and --rag-chunk-overlap) and mention
the corresponding CLI parameter names (ragChunkSize and ragChunkOverlap),
preserving the same types and default values and adjusting descriptions to refer
to chunk size and overlap; also make the same replacements for the other table
occurrence so both tables consistently document --rag-chunk-size and
--rag-chunk-overlap instead of --maxSize and --overlap.
| images: [imageBuffer], | ||
| }, | ||
| provider: "anthropic", | ||
| model: "claude-sonnet-4-20250514", |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Verify model IDs referenced in this cookbook against model enums/docs in-repo.
# Read-only reconnaissance only.
set -euo pipefail
echo "== Cookbook model references =="
rg -n 'gpt-4o|gpt-4-turbo|claude|gemini|anthropic\.claude' docs/cookbook/multimodal-images.md -C1
echo
echo "== Canonical model declarations (likely locations) =="
fd -t f 'model|models|enum|anthropic|openai|bedrock|google' src docs | sed -n '1,120p'
echo
echo "== Anthropic/Bedrock/OpenAI model literals in code/docs =="
rg -n 'claude-sonnet-4|claude-3|anthropic\.claude|gpt-4-turbo|gpt-4o|gemini-2\.' src docs -C1Repository: juspay/neurolink
Length of output: 50375
🏁 Script executed:
# Search for model enum/constant definitions
rg -n 'claude-sonnet-4|claude-3-5-sonnet|anthropic.claude' src/lib/models/ src/lib/constants/ -A 2 -B 2Repository: juspay/neurolink
Length of output: 15369
🏁 Script executed:
# Check model registry and type definitions
cat src/lib/models/anthropicModels.ts | head -100Repository: juspay/neurolink
Length of output: 3366
🏁 Script executed:
# Look for bedrock model definitions
cat src/lib/models/bedrockModels.ts 2>/dev/null | head -100 || echo "Bedrock file not found, searching..."
fd -t f '*edrock*' src/lib/models/Repository: juspay/neurolink
Length of output: 347
🏁 Script executed:
# Find where supported model names are defined
fd -t f -i 'model.*types\|model.*enum' src/libRepository: juspay/neurolink
Length of output: 42
🏁 Script executed:
# Check if cookbook is tested or if the table is meant to be exact copy-paste
rg -l 'multimodal-images' docs tests src --type md --type ts | head -10Repository: juspay/neurolink
Length of output: 145
🏁 Script executed:
# Verify Bedrock model usage patterns in actual code
rg -n 'anthropic\.claude.*v1:0' src docs -A 2 -B 2 | head -100Repository: juspay/neurolink
Length of output: 8430
Fix Bedrock model format in compatibility table — wildcards are non-functional.
Line 97's Bedrock entries use invalid wildcard patterns (anthropic.claude-3-*, anthropic.claude-sonnet-4-*) that will fail at runtime. Bedrock requires full model IDs with version and environment suffixes, e.g., anthropic.claude-sonnet-4-5-20250929-v1:0. Replace the wildcards with concrete examples like those in the Bedrock provider guide (lines 250–263).
Also verify lines 94–96 (OpenAI, Google AI, Vertex) for consistency with current supported versions, as the Anthropic line 45 reference is already correct.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@docs/cookbook/multimodal-images.md` at line 45, Replace the invalid Bedrock
wildcard model identifiers (e.g., "anthropic.claude-3-*" and
"anthropic.claude-sonnet-4-*") in the compatibility table with full concrete
Bedrock model IDs (for example use IDs like
"anthropic.claude-sonnet-4-5-20250929-v1:0" instead of wildcards) so runtime
selection will succeed; update the entries that currently reference those
wildcards and ensure the existing string "claude-sonnet-4-20250514" and other
Bedrock examples follow the full-ID + version suffix format, and while you’re
there verify and normalize the OpenAI, Google AI, and Vertex entries (the
OpenAI/Google/Vertex model strings on the nearby lines) to match current
supported versions.
| ```typescript | ||
| for await (const chunk of result.stream) { | ||
| if (chunk.type === "text") { | ||
| process.stdout.write(chunk.content); | ||
| } | ||
| } |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Verify StreamResult chunk union members
rg -n -C5 'type StreamResult|content: string|type: "audio"|type: "image"' src/lib/types/streamTypes.tsRepository: juspay/neurolink
Length of output: 1893
Text chunks in StreamResult.stream cannot be detected with chunk.type === "text".
The StreamResult.stream union defines text chunks as { content: string } (without a type discriminator). The example's check will skip all text chunks since no member has type: "text". Use "content" in chunk instead.
Suggested fix
for await (const chunk of result.stream) {
- if (chunk.type === "text") {
+ if ("content" in chunk) {
process.stdout.write(chunk.content);
}
}🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@docs/features/streaming.md` around lines 140 - 145, The example incorrectly
tests text chunks by checking chunk.type === "text" even though
StreamResult.stream defines text chunks as objects with a content property;
update the iteration over result.stream to detect text chunks by checking for
the presence of the content property (i.e., use a "content" in chunk style
check) and then write chunk.content to stdout so text chunks are not skipped;
references: StreamResult.stream, result.stream, and the loop variable chunk.
| # Required: URL of your LiteLLM proxy server | ||
| LITELLM_BASE_URL=http://localhost:4000 |
There was a problem hiding this comment.
Inconsistent requirement labeling for LITELLM_BASE_URL.
Line 50 labels LITELLM_BASE_URL as “Required,” but Line 76 marks it as not required and the provider code has a default fallback. This is contradictory for first-time setup.
Suggested doc fix
-# Required: URL of your LiteLLM proxy server
+# Optional: URL of your LiteLLM proxy server (default: http://localhost:4000)
LITELLM_BASE_URL=http://localhost:4000Also applies to: 76-77
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@docs/getting-started/providers/litellm.md` around lines 50 - 51, The docs
inconsistently mark LITELLM_BASE_URL as "Required" on Line 50 but later say it's
not required despite the provider code having a default fallback; update the
text around the LITELLM_BASE_URL example to consistently state that it is
optional and document the provider's default fallback (mentioning
LITELLM_BASE_URL) so first‑time users know the system will use the built‑in
default if they omit that env var; ensure the second reference (Lines ~76-77)
matches this wording.
| # Verify master_key in proxy config | ||
| grep master_key litellm_config.yaml | ||
|
|
||
| # List all virtual keys | ||
| litellm --config config.yaml --list_keys | ||
|
|
||
| # Ensure key matches in .env | ||
| echo $OPENAI_COMPATIBLE_API_KEY | ||
| ``` | ||
|
|
||
| #### 3. "Budget exceeded" | ||
|
|
||
| **Problem**: Virtual key reached budget limit. | ||
|
|
||
| **Solution**: | ||
|
|
||
| ```bash | ||
| # Check spend | ||
| litellm --config config.yaml --spend --key "sk-litellm-..." | ||
|
|
||
| # Increase budget | ||
| litellm --config config.yaml --update_key \ | ||
| --key "sk-litellm-..." \ | ||
| --budget 200 | ||
| # Ensure LITELLM_API_KEY matches | ||
| echo $LITELLM_API_KEY | ||
| ``` |
There was a problem hiding this comment.
Do not instruct users to print secrets in troubleshooting steps.
Line 390 and Line 394 encourage exposing master_key and LITELLM_API_KEY in terminal history/logs. Replace with presence checks or masked output.
Suggested safer commands
-# Verify master_key in proxy config
-grep master_key litellm_config.yaml
+# Verify master_key is configured (without printing secret)
+grep -q 'master_key:' litellm_config.yaml && echo "master_key is configured"
-# Ensure LITELLM_API_KEY matches
-echo $LITELLM_API_KEY
+# Ensure LITELLM_API_KEY is set (without printing value)
+[[ -n "${LITELLM_API_KEY:-}" ]] && echo "LITELLM_API_KEY is set" || echo "LITELLM_API_KEY is missing"🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@docs/getting-started/providers/litellm.md` around lines 390 - 395, Replace
the lines that print secrets with non-disclosing presence checks: do not run
grep or echo that outputs the actual master_key or LITELLM_API_KEY. Instead
verify that master_key exists in litellm_config.yaml using a quiet existence
check (e.g., a grep -q style test) and report only “master_key present” or
“master_key missing”; for the environment variable LITELLM_API_KEY, check
whether it is set/empty and report “LITELLM_API_KEY set” or “LITELLM_API_KEY not
set” (or show a masked summary like first/last few chars only) so the actual
secret values are never printed.
| // Ensure EU data residency via environment variables | ||
| // Set MISTRAL_API_KEY in your .env file | ||
| // Set MISTRAL_REGION=eu to explicitly use EU endpoints | ||
| const ai = new NeuroLink(); | ||
|
|
||
| const result = await ai.generate({ | ||
| input: { text: "Your prompt" }, | ||
| provider: "mistral", | ||
| }); | ||
| ``` |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Description: Check if MISTRAL_REGION environment variable is read by the Mistral provider
# Search for MISTRAL_REGION usage in provider code
rg -n "MISTRAL_REGION" --type ts -g '!**/*.md'
# Also check for any region-related configuration in Mistral provider
ast-grep --pattern 'class MistralProvider {
$$$
}'
# Check if there's any region handling in the provider
rg -n "region" src/lib/providers/mistral.ts -A 3 -B 3Repository: juspay/neurolink
Length of output: 42
🏁 Script executed:
# Find the Mistral provider implementation file
find . -name "*mistral*" -type f | grep -E "\.(ts|js)$" | grep -v node_modules | head -20Repository: juspay/neurolink
Length of output: 126
🏁 Script executed:
# Also check the structure of the lib/providers directory
ls -la src/lib/providers/ 2>/dev/null || ls -la lib/providers/ 2>/dev/null || fd -e ts -e js providersRepository: juspay/neurolink
Length of output: 1318
🏁 Script executed:
# Check the exact documentation file to understand context
cat -n docs/getting-started/providers/mistral.md | sed -n '160,180p'Repository: juspay/neurolink
Length of output: 678
🏁 Script executed:
cat -n src/lib/providers/mistral.tsRepository: juspay/neurolink
Length of output: 8570
Remove or clarify the MISTRAL_REGION environment variable reference.
The documentation mentions setting MISTRAL_REGION=eu to explicitly use EU endpoints, but the Mistral provider implementation does not read or support this environment variable. Either remove this reference from the documentation or implement region configuration support in the provider if EU data residency is a required feature.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@docs/getting-started/providers/mistral.md` around lines 168 - 177, The docs
mention MISTRAL_REGION but the Mistral provider doesn't read it; either remove
the MISTRAL_REGION=eu line from the docs or add region support in the Mistral
provider: update the NeuroLink Mistral integration (the code that handles
ai.generate with provider "mistral") to read process.env.MISTRAL_REGION (or
accept a region option on the generate call), map "eu" to the correct EU
endpoint, and ensure the HTTP client/construction uses that endpoint when
creating the request; modify the provider initialization or request-building
function so region selection is honored and include tests/validation for
unsupported values.
| // Configure via environment variables: | ||
| // MISTRAL_API_KEY=your-key | ||
| // MISTRAL_DEFAULT_MODEL=mistral-small-latest | ||
| // MISTRAL_REGION=eu | ||
| // MISTRAL_TIMEOUT=60000 | ||
| const ai = new NeuroLink(); | ||
|
|
||
| const result = await ai.generate({ | ||
| input: { text: "Your prompt" }, | ||
| provider: "mistral", | ||
| }); | ||
| ``` |
There was a problem hiding this comment.
Inconsistent environment variable name: MISTRAL_DEFAULT_MODEL vs MISTRAL_MODEL.
Line 376 references MISTRAL_DEFAULT_MODEL, but the provider implementation uses MISTRAL_MODEL environment variable (as shown in the code snippet from src/lib/providers/mistral.ts). Use the correct environment variable name to avoid user confusion.
Additionally, this section also references MISTRAL_REGION which needs verification per the earlier comment.
📝 Proposed fix
// Configure via environment variables:
// MISTRAL_API_KEY=your-key
-// MISTRAL_DEFAULT_MODEL=mistral-small-latest
+// MISTRAL_MODEL=mistral-small-latest
// MISTRAL_REGION=eu
// MISTRAL_TIMEOUT=60000🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@docs/getting-started/providers/mistral.md` around lines 374 - 385, The docs
example for the Mistral provider uses the wrong environment variable name;
update the example to use MISTRAL_MODEL (not MISTRAL_DEFAULT_MODEL) to match the
provider implementation, and confirm whether MISTRAL_REGION is supported by the
provider code—if it is not, remove it from the example or document the correct
region variable; ensure the NeuroLink usage sample (the ai.generate call with
provider "mistral") lists the same environment variables (MISTRAL_API_KEY,
MISTRAL_MODEL, MISTRAL_TIMEOUT, and optionally MISTRAL_REGION if implemented) so
the docs and src/lib/providers/mistral.ts remain consistent.
… model updates Audit 481 documentation files with 77 parallel agents across 5 phases. Fix broken code examples, create missing guides, update model enums, and refresh all provider documentation. Code changes: - Add GPT-5.4/Mini/Nano/Pro to OpenAI and Azure enums - Add Mistral Small 4, Gemini Embedding 2 Preview to enums - Update Claude 4.6 context windows from 200K to 1M (GA) - Fix internal defaults in anthropic.ts and amazonBedrock.ts - Add vision capabilities for Claude 4.6 and GPT-5.4 series - Add @deprecated flags to 17 retired models New documentation: - features/workflow-engine.md, streaming.md, embeddings.md - providers/openai.md, ollama.md, sagemaker.md - guides/server-adapters/api-reference.md - 4 cookbook recipes, 5 runnable examples Documentation fixes: - Fix 70+ broken code examples (prompt→input.text, streaming patterns) - Convert MkDocs syntax to Docusaurus across 26 files - Restructure sidebar: 31 flat features → 6 sub-categories - Refresh model tables in 8 provider docs with current models - Consolidate 18 duplicate files into redirect stubs - Add Quick Start sections to 10 feature docs - Clean up 40+ Coming Soon placeholders and stale version refs - Fix broken links, images, anchors across docs Verified: TypeScript 0 errors, 56 tests passed, docs build SUCCESS
9d700ed to
480bbcd
Compare
🤖 AI Review & Build Compliance ✅Status: AI analysis complete • Build rules validated • Ready for review 📊 View detailed analysis results🛡️ Analysis Complete
📋 Ready for Merge When
🤖 AI analysis complete - check individual code comments for specific feedback |
|
🎉 This PR is included in version 9.28.1 🎉 The release is available on: Your semantic-release bot 📦🚀 |
Summary
prompt→input.text, streaming iteration patterns, invalid constructor options)@deprecatedflags for retired modelsanthropic.ts,amazonBedrock.ts) from retired Claude 3.x to Claude 4.6Test plan
Summary by CodeRabbit
Documentation
API Updates