@juspay/neurolink 12.32.3 → 12.34.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/CHANGELOG.md +6 -2
  2. package/dist/adapters/providerImageAdapter.js +13 -0
  3. package/dist/browser/neurolink.min.js +19 -19
  4. package/dist/constants/contextWindows.js +28 -0
  5. package/dist/constants/enums.d.ts +21 -0
  6. package/dist/constants/enums.js +30 -0
  7. package/dist/constants/tokens.d.ts +3 -0
  8. package/dist/constants/tokens.js +3 -0
  9. package/dist/evaluation/EvaluatorFactory.js +3 -3
  10. package/dist/evaluation/EvaluatorRegistry.js +1 -1
  11. package/dist/evaluation/ragasEvaluator.js +1 -1
  12. package/dist/middleware/utils/guardrailsUtils.js +1 -1
  13. package/dist/models/manifests/anthropic.js +33 -1
  14. package/dist/providers/catalog/api-route.json +2 -2
  15. package/dist/providers/catalog/loader.js +5 -0
  16. package/dist/providers/catalog/mistral.json +2 -2
  17. package/dist/providers/catalog/xai.json +17 -3
  18. package/dist/providers/configuredOpenAICompat.d.ts +20 -2
  19. package/dist/providers/configuredOpenAICompat.js +22 -2
  20. package/dist/providers/googleVertex/client.js +0 -2
  21. package/dist/providers/litellm/client.js +2 -2
  22. package/dist/providers/openAI/client.js +1 -1
  23. package/dist/providers/openRouter/client.js +1 -1
  24. package/dist/types/providerCatalog.d.ts +10 -0
  25. package/dist/types/providers.d.ts +20 -0
  26. package/dist/utils/modelChoices.js +0 -9
  27. package/dist/utils/pricing.js +5 -0
  28. package/dist/utils/providerHealth.js +7 -9
  29. package/dist/utils/tokenLimits.js +9 -0
  30. package/dist/workflow/workflows/multiJudgeWorkflow.js +2 -2
  31. package/docs-site/static/search-index.json +16 -16
  32. package/package.json +3 -2
@@ -423,7 +423,7 @@ export class ProviderHealthChecker {
423
423
  healthStatus.recommendations.push(`Available models for ${providerName} (using dual provider architecture):\n` +
424
424
  ` Google Models (via vertex provider):\n` +
425
425
  ` • gemini-2.5-pro, gemini-2.5-flash, gemini-2.5-flash-lite\n` +
426
- ` • gemini-2.0-flash-001, gemini-1.5-pro, gemini-1.5-flash\n` +
426
+ ` • gemini-2.0-flash-001, gemini-2.0-flash-lite\n` +
427
427
  ` Anthropic Models (via vertexAnthropic provider):\n` +
428
428
  ` • claude-sonnet-4@20250514, claude-opus-4@20250514\n` +
429
429
  ` • claude-3-5-sonnet-20241022, claude-3-5-haiku-20241022\n` +
@@ -771,7 +771,7 @@ export class ProviderHealthChecker {
771
771
  return new URL("/v1/models", this.getLiteLLMBaseUrl()).toString();
772
772
  }
773
773
  static getConfiguredLiteLLMModel() {
774
- return process.env.LITELLM_MODEL || "openai/gpt-4o-mini";
774
+ return process.env.LITELLM_MODEL || "openai/gpt-5.4-mini";
775
775
  }
776
776
  static getOllamaBaseUrl() {
777
777
  return (process.env.OLLAMA_BASE_URL ||
@@ -914,7 +914,7 @@ export class ProviderHealthChecker {
914
914
  return { ran: false, failed: false };
915
915
  }
916
916
  // Only pin the availability check to a specific model when the user
917
- // explicitly configured one. The fallback default ("openai/gpt-4o-mini")
917
+ // explicitly configured one. The fallback default ("openai/gpt-5.4-mini")
918
918
  // is a guess, not configuration — proxies that serve a different model
919
919
  // set (every self-hosted gateway) were reported "Not configured" here
920
920
  // while generate/stream against them worked fine with explicit models.
@@ -1002,9 +1002,9 @@ export class ProviderHealthChecker {
1002
1002
  ];
1003
1003
  case AIProviderName.GOOGLE_AI:
1004
1004
  return [
1005
- GoogleAIModels.GEMINI_1_5_PRO,
1006
- GoogleAIModels.GEMINI_1_5_FLASH,
1007
1005
  GoogleAIModels.GEMINI_2_5_PRO,
1006
+ GoogleAIModels.GEMINI_2_5_FLASH,
1007
+ GoogleAIModels.GEMINI_2_0_FLASH_001,
1008
1008
  ];
1009
1009
  case AIProviderName.VERTEX:
1010
1010
  return [
@@ -1013,8 +1013,6 @@ export class ProviderHealthChecker {
1013
1013
  GoogleAIModels.GEMINI_2_5_FLASH,
1014
1014
  GoogleAIModels.GEMINI_2_5_FLASH_LITE,
1015
1015
  GoogleAIModels.GEMINI_2_0_FLASH_001,
1016
- GoogleAIModels.GEMINI_1_5_PRO,
1017
- GoogleAIModels.GEMINI_1_5_FLASH,
1018
1016
  // Anthropic models (via vertexAnthropic provider)
1019
1017
  "claude-sonnet-4@20250514",
1020
1018
  "claude-opus-4@20250514",
@@ -1030,8 +1028,8 @@ export class ProviderHealthChecker {
1030
1028
  return [OpenAIModels.GPT_4O, OpenAIModels.GPT_4O_MINI, "gpt-35-turbo"];
1031
1029
  case AIProviderName.LITELLM:
1032
1030
  return [
1033
- "openai/gpt-4o-mini",
1034
- "anthropic/claude-3-haiku",
1031
+ "openai/gpt-5.4-mini",
1032
+ "anthropic/claude-haiku-4-5-20251001",
1035
1033
  "google/gemini-2.5-flash",
1036
1034
  ];
1037
1035
  case AIProviderName.OLLAMA: {
@@ -119,6 +119,15 @@ export function getClaudeMaxOutputTokens(model) {
119
119
  if (/sonnet[-_.]?4/.test(m) || /haiku[-_.]?4/.test(m)) {
120
120
  return 64000;
121
121
  }
122
+ // Claude 5.x family (Opus 5 / Opus 5.5 / Sonnet 5 / Fable 5.1 / Mythos):
123
+ // all confirmed at 128K standard max output on
124
+ // platform.claude.com/docs/en/about-claude/models/overview. The
125
+ // (?![0-9]) guard keeps this off dated 4.x ids like "opus-4-5-20251101"
126
+ // (Opus 4.5, not Opus 5), where the family word sits before the "4", not
127
+ // directly before this "5".
128
+ if (/(?:opus|sonnet|fable|mythos)[-_.]?5(?![0-9])/.test(m)) {
129
+ return 128000;
130
+ }
122
131
  // Claude 3.7 Sonnet supports 64K output.
123
132
  if (/3[-_.]?7[-_.]?sonnet/.test(m)) {
124
133
  return 64000;
@@ -277,8 +277,8 @@ export function createMultiJudgeWorkflow(modelCount, judgeCount) {
277
277
  },
278
278
  {
279
279
  provider: AIProviderName.GOOGLE_AI,
280
- model: "gemini-1.5-flash",
281
- label: "Gemini 1.5 Flash",
280
+ model: "gemini-2.5-flash",
281
+ label: "Gemini 2.5 Flash",
282
282
  weight: 0.8,
283
283
  temperature: 0.7,
284
284
  },
@@ -4412,14 +4412,14 @@
4412
4412
  {"objectID":"b802832537c22912fff88f6ef9ed79b85fd26dc3b69b61b0a52eb261feff8297","title":"Common Errors","url":"/docs/features/streaming#common-errors","content":"| Error | Cause | Solution |\n| ------------------------- | ------------------------------------------ | --------------------------------------------------- |\n| SESSION_BUDGET_EXCEEDED | Session cost exceeded maxBudgetUsd limit | Increase budget or start a new session |\n| PROVIDER_AUTH_ERROR | Missing or invalid API key | Set the provider's API key environment variable |\n| TIMEOUT | Request exceeded timeout | Increase timeout or use abortSignal for control |\n| MODEL_NOT_FOUND | Invalid model name | Check provider docs for supported model names |","hierarchy":{"lvl0":"Features","lvl1":"Streaming Guide","lvl2":"Common Errors","lvl3":""}},
4413
4413
  {"objectID":"1949a330d8bfb85ec15c527f519bf4eefb0b571f2db1027d8d568edd39986091","title":"Provider Support","url":"/docs/features/streaming#provider-support","content":"All NeuroLink providers support streaming:\n\n| Provider | Streaming | Notes |\n| ----------------- | --------- | ----------------------------------------------------------- |\n| OpenAI | Yes | Full streaming with tool support |\n| Anthropic | Yes | Full streaming with tool support |\n| Google AI Studio | Yes | Full streaming with tool support |\n| Google Vertex AI | Yes | Full streaming with tool support |\n| Amazon Bedrock | Yes | Full streaming with tool support |\n| Azure OpenAI | Yes | Full streaming with tool support |\n| Mistral | Yes | Full streaming with tool support |\n| LiteLLM | Yes | Full streaming; tool support depends on underlying model |\n| Ollama | Yes | Full streaming; tool support depends on model |\n| Hugging Face | Yes | Streaming support; tool support varies by model |\n| Amazon SageMaker | Limited | Falls back to fake streaming (generate then emit as chunks) |\n| OpenAI-Compatible | Yes | Depends on the endpoint's streaming support |\n\nWhen real streaming is not available for a provider or model, NeuroLink transparently falls back to \"fake streaming\" -- it generates the full response and then emits it as chunks. Your consuming code does not need to change.","hierarchy":{"lvl0":"Features","lvl1":"Streaming Guide","lvl2":"Provider Support","lvl3":""}},
4414
4414
  {"objectID":"a65ae1b5264ffcf3bd257c1a2666704dd13916433e8fe9af65ee41cc79288854","title":"See Also","url":"/docs/features/streaming#see-also","content":"Advanced Streaming Guide -- Enterprise streaming patterns, backpressure, and event types\nTTS Guide -- Text-to-speech audio streaming\nRAG Guide -- Retrieval-augmented generation with streaming\nThinking Configuration -- Extended thinking with streaming\nMultimodal Guide -- Images, PDFs, and files with streaming","hierarchy":{"lvl0":"Features","lvl1":"Streaming Guide","lvl2":"See Also","lvl3":""}},
4415
- {"objectID":"5a947cc17681ddd7c40d18de744818974a4dbb4e1a3a1884ffedcd192f89c8ff","title":"Structured Output with Zod Schemas","url":"/docs/features/structured-output","content":"Structured Output with Zod Schemas\n\nGenerate type-safe, validated JSON responses using Zod schemas. Available in generate() function only (not stream()).\n\nQuick Start\n\nRequirements\nschema: A Zod schema defining the output structure — always required.\noutput.format: Must be \"json\" or \"structured\" to get a JSON string\n in result.content (defaults to \"text\" if not specified). This is\n independent of structuredData: passing schema alone, with no\n output.format, is enough for result.structuredData to be populated —\n this is the path the tools section below uses.\n\nComplex Schemas\n\nWorks with Tools\n\nStructured output works seamlessly with MCP tools:\n\nHow this works on OpenAI-compatible providers\n\nMost OpenAI-compatible vendors reject response_format and tools in the same\nrequest, so NeuroLink does not send them together. That leaves a turn with tools\nattached — which is most turns, since built-in and MCP tools ride along by\ndefault — with nothing telling the model to answer in JSON.\n\nNeuroLink closes that gap itself. The tool turn runs untouched, and if its\nanswer does not satisfy your schema, the SDK re-asks once with the tools\nremoved, which is what makes native response_format legal again. That second\npass only reformats an answer the model has already produced, so tool results\nstill drive the content; toolsUsed, toolExecutions and usage cover the\nwhole turn, not just the reformat.\n\nTwo consequences worth knowing:\nA generate({ schema }) call that needed the reformat costs two requests.\n Calls whose first answer already satisfies the schema cost one, as before.\nThe reformat is accepted only if it actually produced a schema-valid value.\n If it fails, if the SDK's own turn deadline is reached, or if it comes back as\n prose anyway, the original answer is returned rather than an error — so this\n can improve an outcome but never degrade one. A caller that cancels the\n request still gets its cancellation. In those cases structuredData may still\n be unset, which is the honest signal that the model never produced the value.\n\nThe schema is deliberately not injected into the tool turn's system prompt.\nSome models read a JSON Schema sitting next to a tool list as another tool and\nanswer by calling one that does not exist — Groq's llama-3.3-70b-versatile\ntries to call a tool named json, which the server rejects outright.\n\nThe re-ask is not a single attempt. It tries native response_format first,\nbecause removing the tools is precisely what makes that legal again. Some\nvendors then reject the schema itself rather than the request: Groq answers\na non-object root with invalid JSON schema for response_format: schema must\nhave type 'object', so an array- or scalar-rooted schema fails at this stage.\nWhen that happens the SDK degrades a second time and re-runs the same tools-free\npass with the schema spelled into the prompt instead. That is why a\nz.array(z.string()) schema returns [\"red\",\"blue\",\"yellow\"] with matching\nstructuredData rather than prose. Both stages run without tools; only the way\nthe schema is communicated changes.\n\nImportant: Google Gemini Providers Limitation\n\nGoogle API Constraint: Google Gemini (both Vertex AI and Google AI Studio) cannot combine function calling with structured output (JSON schema validation). This is a documented Google API limitation, not a NeuroLink issue.\n\nGemini 3 / Gemini 2.5 Note: This limitation applies to all Gemini models, including the latest Gemini 3 and Gemini 2.5 series (e.g., gemini-2.5-pro, gemini-2.5-flash). While these models have excellent JSON schema support for structured output, they still cannot use tools and JSON schema validation together in the same request.\n\nError Message:\n\nSolution: Use disableTools: true when using schemas with Google providers:\n\nThis is Industry Standard: All major AI frameworks (LangChain, Vercel AI SDK, Agno, Instructor) use the same approach - disabling tools when using response schemas with Google models.\n\nWorkarounds for Gemini Tools + Structured Output\n\nIf you need both tool execution and structured output with Gemini, consider these approaches:\nTwo-Step Approach: First call with tools enabled (no schema), then a second call with schema to format the result:\nUse a Different Provider: OpenAI and Anthropic support tools and structured output together:\nChoose One or the Other: Design your workflow to use either tools OR structured output per request, not both.\n\nRelated Limitation: Complex schemas may trigger \"Too many states for serving\" errors. Solutions:\nSimplify schema structure\nReduce nested objects\nUse disableTools: true to reduce state complexity\n\nImportant Notes\nOnly available in generate() - Not supported in stream() function\noutput.format controls result.content - If it is not \"json\" or \"structured\", result.content is plain text even with a schema; result.structuredData can still be populated from schema alone (see Requirements)\nAuto-validated, with a no-throw fallback when tools are involved - Without tools, an invalid re","hierarchy":{"lvl0":"Features","lvl1":"Structured Output with Zod Schemas","lvl2":"","lvl3":""}},
4416
- {"objectID":"82da02b8aebfda79a43e92c60a33f5fe1bb8e84ba9ba8ac0a42d36f0df945844","title":"Structured Output with Zod Schemas","url":"/docs/features/structured-output#structured-output-with-zod-schemas","content":"Generate type-safe, validated JSON responses using Zod schemas. Available in generate() function only (not stream()).","hierarchy":{"lvl0":"Features","lvl1":"Structured Output with Zod Schemas","lvl2":"Structured Output with Zod Schemas","lvl3":""}},
4415
+ {"objectID":"5a947cc17681ddd7c40d18de744818974a4dbb4e1a3a1884ffedcd192f89c8ff","title":"Structured Output with Zod Schemas","url":"/docs/features/structured-output","content":"Structured Output with Zod Schemas\n\nGenerate type-safe, validated JSON responses using Zod schemas. Both generate() and stream() accept schema; generate() returns structuredData directly, while a fully drained stream exposes it as result.metadata.structuredData.\n\nQuick Start\n\nRequirements\nschema: A Zod schema defining the output structure — always required.\noutput.format: Must be \"json\" or \"structured\" to get a JSON string\n in result.content (defaults to \"text\" if not specified). This is\n independent of structuredData: passing schema alone, with no\n output.format, is enough for result.structuredData to be populated —\n this is the path the tools section below uses.\n\nComplex Schemas\n\nWorks with Tools\n\nStructured output works seamlessly with MCP tools:\n\nHow this works on OpenAI-compatible providers\n\nOpenAI-compatible vendors vary in whether they accept response_format and\ntools in the same request. NeuroLink is conservative by default and does not\nsend them together. For catalog providers whose combined request has been\nverified live, capabilities.structuredOutputWithTools: true opts both\ngenerate() and stream() into sending them together, so the vendor can use\nnative constrained decoding without an extra formatting request. Separate\nsuccessful tool and structured-output probes are not enough to enable the flag.\n\nWhen a provider is not opted in, the tool turn runs untouched. If its answer\ndoes not satisfy your schema, the SDK re-asks once with the tools removed,\nwhich is what makes native response_format legal again. That second pass only\nreformats an answer the model has already produced, so tool results still drive\nthe content; toolsUsed, toolExecutions and usage cover the whole turn, not\njust the reformat. If an opted-in provider later rejects the combined request,\nthe same conflict recovery retries without structured output, so a stale\ncapability flag costs one request rather than the turn.\n\nTwo consequences worth knowing:\nA generate({ schema }) call that needed the reformat costs two requests.\n Calls whose first answer already satisfies the schema cost one, as before.\nThe reformat is accepted only if it actually produced a schema-valid value.\n If it fails, if the SDK's own turn deadline is reached, or if it comes back as\n prose anyway, the original answer is returned rather than an error — so this\n can improve an outcome but never degrade one. A caller that cancels the\n request still gets its cancellation. In those cases structuredData may still\n be unset, which is the honest signal that the model never produced the value.\n\nThe schema is deliberately not injected into the tool turn's system prompt.\nSome models read a JSON Schema sitting next to a tool list as another tool and\nanswer by calling one that does not exist — Groq's llama-3.3-70b-versatile\ntries to call a tool named json, which the server rejects outright.\n\nThe re-ask is not a single attempt. It tries native response_format first,\nbecause removing the tools is precisely what makes that legal again. Some\nvendors then reject the schema itself rather than the request: Groq answers\na non-object root with invalid JSON schema for response_format: schema must\nhave type 'object', so an array- or scalar-rooted schema fails at this stage.\nWhen that happens the SDK degrades a second time and re-runs the same tools-free\npass with the schema spelled into the prompt instead. That is why a\nz.array(z.string()) schema returns [\"red\",\"blue\",\"yellow\"] with matching\nstructuredData rather than prose. Both stages run without tools; only the way\nthe schema is communicated changes.\n\nImportant: Google Gemini Providers Limitation\n\nGoogle API Constraint: Google Gemini (both Vertex AI and Google AI Studio) cannot combine function calling with structured output (JSON schema validation). This is a documented Google API limitation, not a NeuroLink issue.\n\nGemini 3 / Gemini 2.5 Note: This limitation applies to all Gemini models, including the latest Gemini 3 and Gemini 2.5 series (e.g., gemini-2.5-pro, gemini-2.5-flash). While these models have excellent JSON schema support for structured output, they still cannot use tools and JSON schema validation together in the same request.\n\nError Message:\n\nSolution: Use disableTools: true when using schemas with Google providers:\n\nThis is Industry Standard: All major AI frameworks (LangChain, Vercel AI SDK, Agno, Instructor) use the same approach - disabling tools when using response schemas with Google models.\n\nWorkarounds for Gemini Tools + Structured Output\n\nIf you need both tool execution and structured output with Gemini, consider these approaches:\nTwo-Step Approach: First call with tools enabled (no schema), then a second call with schema to format the result:\nUse a Different Provider: OpenAI and Anthropic support tools and structured output together:\nChoose One or the Other: Design your workflow to use either tools OR structured output per request, not both.\n\nRelated Limitation: Complex schemas may trigger \"Too many","hierarchy":{"lvl0":"Features","lvl1":"Structured Output with Zod Schemas","lvl2":"","lvl3":""}},
4416
+ {"objectID":"82da02b8aebfda79a43e92c60a33f5fe1bb8e84ba9ba8ac0a42d36f0df945844","title":"Structured Output with Zod Schemas","url":"/docs/features/structured-output#structured-output-with-zod-schemas","content":"Generate type-safe, validated JSON responses using Zod schemas. Both generate() and stream() accept schema; generate() returns structuredData directly, while a fully drained stream exposes it as result.metadata.structuredData.","hierarchy":{"lvl0":"Features","lvl1":"Structured Output with Zod Schemas","lvl2":"Structured Output with Zod Schemas","lvl3":""}},
4417
4417
  {"objectID":"8786915973a894e8ce2e6fd18a7da976c109949f20b7549c63b50d98d05bd821","title":"Requirements","url":"/docs/features/structured-output#requirements","content":"schema: A Zod schema defining the output structure — always required.\noutput.format: Must be \"json\" or \"structured\" to get a JSON string\n in result.content (defaults to \"text\" if not specified). This is\n independent of structuredData: passing schema alone, with no\n output.format, is enough for result.structuredData to be populated —\n this is the path the tools section below uses.","hierarchy":{"lvl0":"Features","lvl1":"Structured Output with Zod Schemas","lvl2":"Requirements","lvl3":""}},
4418
4418
  {"objectID":"239e70c6bb43d051b5ce01d19d01e865b6eab69208cea7c37f849114a7766afb","title":"Works with Tools","url":"/docs/features/structured-output#works-with-tools","content":"Structured output works seamlessly with MCP tools:","hierarchy":{"lvl0":"Features","lvl1":"Structured Output with Zod Schemas","lvl2":"Works with Tools","lvl3":""}},
4419
- {"objectID":"970f3f5cf5c095a627ebce241052024f34fb08a9916fb006fb0c3dadd3ecc43f","title":"How this works on OpenAI-compatible providers","url":"/docs/features/structured-output#how-this-works-on-openai-compatible-providers","content":"Most OpenAI-compatible vendors reject response_format and tools in the same\nrequest, so NeuroLink does not send them together. That leaves a turn with tools\nattached — which is most turns, since built-in and MCP tools ride along by\ndefault — with nothing telling the model to answer in JSON.\n\nNeuroLink closes that gap itself. The tool turn runs untouched, and if its\nanswer does not satisfy your schema, the SDK re-asks once with the tools\nremoved, which is what makes native response_format legal again. That second\npass only reformats an answer the model has already produced, so tool results\nstill drive the content; toolsUsed, toolExecutions and usage cover the\nwhole turn, not just the reformat.\n\nTwo consequences worth knowing:\nA generate({ schema }) call that needed the reformat costs two requests.\n Calls whose first answer already satisfies the schema cost one, as before.\nThe reformat is accepted only if it actually produced a schema-valid value.\n If it fails, if the SDK's own turn deadline is reached, or if it comes back as\n prose anyway, the original answer is returned rather than an error — so this\n can improve an outcome but never degrade one. A caller that cancels the\n request still gets its cancellation. In those cases structuredData may still\n be unset, which is the honest signal that the model never produced the value.\n\nThe schema is deliberately not injected into the tool turn's system prompt.\nSome models read a JSON Schema sitting next to a tool list as another tool and\nanswer by calling one that does not exist — Groq's llama-3.3-70b-versatile\ntries to call a tool named json, which the server rejects outright.\n\nThe re-ask is not a single attempt. It tries native response_format first,\nbecause removing the tools is precisely what makes that legal again. Some\nvendors then reject the schema itself rather than the request: Groq answers\na non-object root with invalid JSON schema for response_format: schema must\nhave type 'object', so an array- or scalar-ro","hierarchy":{"lvl0":"Features","lvl1":"Structured Output with Zod Schemas","lvl2":"How this works on OpenAI-compatible providers","lvl3":""}},
4419
+ {"objectID":"970f3f5cf5c095a627ebce241052024f34fb08a9916fb006fb0c3dadd3ecc43f","title":"How this works on OpenAI-compatible providers","url":"/docs/features/structured-output#how-this-works-on-openai-compatible-providers","content":"OpenAI-compatible vendors vary in whether they accept response_format and\ntools in the same request. NeuroLink is conservative by default and does not\nsend them together. For catalog providers whose combined request has been\nverified live, capabilities.structuredOutputWithTools: true opts both\ngenerate() and stream() into sending them together, so the vendor can use\nnative constrained decoding without an extra formatting request. Separate\nsuccessful tool and structured-output probes are not enough to enable the flag.\n\nWhen a provider is not opted in, the tool turn runs untouched. If its answer\ndoes not satisfy your schema, the SDK re-asks once with the tools removed,\nwhich is what makes native response_format legal again. That second pass only\nreformats an answer the model has already produced, so tool results still drive\nthe content; toolsUsed, toolExecutions and usage cover the whole turn, not\njust the reformat. If an opted-in provider later rejects the combined request,\nthe same conflict recovery retries without structured output, so a stale\ncapability flag costs one request rather than the turn.\n\nTwo consequences worth knowing:\nA generate({ schema }) call that needed the reformat costs two requests.\n Calls whose first answer already satisfies the schema cost one, as before.\nThe reformat is accepted only if it actually produced a schema-valid value.\n If it fails, if the SDK's own turn deadline is reached, or if it comes back as\n prose anyway, the original answer is returned rather than an error — so this\n can improve an outcome but never degrade one. A caller that cancels the\n request still gets its cancellation. In those cases structuredData may still\n be unset, which is the honest signal that the model never produced the value.\n\nThe schema is deliberately not injected into the tool turn's system prompt.\nSome models read a JSON Schema sitting next to a tool list as another tool and\nanswer by calling one that does not exist — Groq's llama-3.3-70b-versatile\n","hierarchy":{"lvl0":"Features","lvl1":"Structured Output with Zod Schemas","lvl2":"How this works on OpenAI-compatible providers","lvl3":""}},
4420
4420
  {"objectID":"cc660b57647a3a31ebe3aca058136232c61bddb59022c34114e48727143b0a74","title":"Important: Google Gemini Providers Limitation","url":"/docs/features/structured-output#important-google-gemini-providers-limitation","content":"Google API Constraint: Google Gemini (both Vertex AI and Google AI Studio) cannot combine function calling with structured output (JSON schema validation). This is a documented Google API limitation, not a NeuroLink issue.\n\nGemini 3 / Gemini 2.5 Note: This limitation applies to all Gemini models, including the latest Gemini 3 and Gemini 2.5 series (e.g., gemini-2.5-pro, gemini-2.5-flash). While these models have excellent JSON schema support for structured output, they still cannot use tools and JSON schema validation together in the same request.\n\nError Message:\n\nSolution: Use disableTools: true when using schemas with Google providers:\n\nThis is Industry Standard: All major AI frameworks (LangChain, Vercel AI SDK, Agno, Instructor) use the same approach - disabling tools when using response schemas with Google models.","hierarchy":{"lvl0":"Features","lvl1":"Structured Output with Zod Schemas","lvl2":"Important: Google Gemini Providers Limitation","lvl3":""}},
4421
4421
  {"objectID":"72d39c1123edc80bab2c387126c4257c184aae7ad60046baf6698df58b5be31b","title":"Workarounds for Gemini Tools + Structured Output","url":"/docs/features/structured-output#workarounds-for-gemini-tools-structured-output","content":"If you need both tool execution and structured output with Gemini, consider these approaches:\nTwo-Step Approach: First call with tools enabled (no schema), then a second call with schema to format the result:\nUse a Different Provider: OpenAI and Anthropic support tools and structured output together:\nChoose One or the Other: Design your workflow to use either tools OR structured output per request, not both.\n\nRelated Limitation: Complex schemas may trigger \"Too many states for serving\" errors. Solutions:\nSimplify schema structure\nReduce nested objects\nUse disableTools: true to reduce state complexity","hierarchy":{"lvl0":"Features","lvl1":"Structured Output with Zod Schemas","lvl2":"Workarounds for Gemini Tools + Structured Output","lvl3":""}},
4422
- {"objectID":"1075ae3db0656103e73fad23d48fb13a44ce2db31f37066e7de3168378c5e6b8","title":"Important Notes","url":"/docs/features/structured-output#important-notes","content":"Only available in generate() - Not supported in stream() function\noutput.format controls result.content - If it is not \"json\" or \"structured\", result.content is plain text even with a schema; result.structuredData can still be populated from schema alone (see Requirements)\nAuto-validated, with a no-throw fallback when tools are involved - Without tools, an invalid response throws NoObjectGeneratedError with validation details. With tools attached, a failed schema match triggers the tool-free re-ask described in Works with Tools; if that also fails, the original answer is returned rather than an error, and structuredData is left unset\nProvider support - Works with OpenAI, Anthropic, Google AI Studio, Vertex AI\nGemini JSON Schema Support - Gemini 3 / Gemini 2.5 models have excellent native JSON schema support\nGemini Tools Limitation - All Gemini models (including Gemini 3) cannot combine tools with schemas - use disableTools: true","hierarchy":{"lvl0":"Features","lvl1":"Structured Output with Zod Schemas","lvl2":"Important Notes","lvl3":""}},
4422
+ {"objectID":"1075ae3db0656103e73fad23d48fb13a44ce2db31f37066e7de3168378c5e6b8","title":"Important Notes","url":"/docs/features/structured-output#important-notes","content":"Available in generate() and stream() - generate() exposes result.structuredData; after the stream is fully drained, stream() exposes result.metadata.structuredData\noutput.format controls result.content - If it is not \"json\" or \"structured\", result.content is plain text even with a schema; result.structuredData can still be populated from schema alone (see Requirements)\nAuto-validated, with a no-throw fallback when tools are involved - Without tools, an invalid response throws NoObjectGeneratedError with validation details. With tools attached, a failed schema match triggers the tool-free re-ask described in Works with Tools; if that also fails, the original answer is returned rather than an error, and structuredData is left unset\nProvider support - Works with OpenAI, Anthropic, Google AI Studio, Vertex AI\nGemini JSON Schema Support - Gemini 3 / Gemini 2.5 models have excellent native JSON schema support\nGemini Tools Limitation - All Gemini models (including Gemini 3) cannot combine tools with schemas - use disableTools: true","hierarchy":{"lvl0":"Features","lvl1":"Structured Output with Zod Schemas","lvl2":"Important Notes","lvl3":""}},
4423
4423
  {"objectID":"406cc3985caef69880cd67e7ea04473aa14d3d76a8a2a49562bc264c5d75778f","title":"See Also","url":"/docs/features/structured-output#see-also","content":"API Reference\nCustom Tools\nMCP Integration","hierarchy":{"lvl0":"Features","lvl1":"Structured Output with Zod Schemas","lvl2":"See Also","lvl3":""}},
4424
4424
  {"objectID":"10887a08f4e43a2991f20cd46290c281df948396a9270718b61ca947b367641f","title":"TaskManager - Scheduled & Self-Running Tasks","url":"/docs/features/task-manager","content":"TaskManager - Scheduled & Self-Running Tasks\n\nOverview\n\nTaskManager adds scheduled and self-running task capabilities to NeuroLink. It enables AI agents to execute prompts on a schedule (cron, interval, or one-shot), with two execution modes: Isolated (fresh context per run) and Continuation (preserves conversation history across runs).\n\nThe system is available as both an SDK API and CLI commands, and ships with built-in tools so AI agents can self-schedule tasks during conversations.\n\nCore Concepts\n\nTask\n\nA Task is a unit of scheduled work. It contains:\nA prompt (what the AI should do)\nA schedule (when to run: cron expression, fixed interval, or one-shot)\nAn execution mode (isolated or continuation)\nOptional provider/model overrides\nOptional callbacks for results\n\nTaskManager\n\nThe orchestration layer that manages task lifecycle: creation, scheduling, execution, pausing, resuming, deletion, and logging. Accessed via neurolink.tasks.\n\nExecution Modes\n\n| Mode | Behavior | Use Case |\n| ---------------- | -------------------------------------------------------------------------------------- | ------------------------------------------------------------ |\n| Isolated | Each run gets a fresh NeuroLink context. No memory of previous runs. | One-off checks, stateless monitoring, report generation |\n| Continuation | Conversation history is preserved across runs. The AI \"remembers\" previous executions. | Trend analysis, progressive monitoring, iterative refinement |\n\nTask Backends\n\nThe scheduling/looping mechanism is abstracted behind a TaskBackend interface. Two implementations ship by default:\n\n| Backend | Default | Requires | Survives Restart | Best For |\n| --------------- | -------- | -------- | ---------------- | ----------------------------------------------------- |\n| BullMQ | Yes | Redis | Yes | Production, multi-process, reliable scheduling |\n| NodeTimeout | Fallback | Nothing | No | Development, zero-dependency setups, simple use cases |\n\nStorage Strategy\n\nStorage is automatically tied to the backend — users never configure it separately:\n\n| Backend | Task Store | Run Logs | Why |\n| --------------- | ---------- | ----------- | ------------------------------------------------------------------------------------------- |\n| BullMQ | Redis | Redis | Same Redis instance; multi-process safe, survives container restarts, works across replicas |\n| NodeTimeout | JSON file | JSONL files | No Redis available; local dev, single process, human-readable for debugging |\n\nThis means:\nProduction servers (BullMQ) → everything in Redis → horizontally scalable, no file I/O, container-friendly\nLocal dev / CLI (NodeTimeout) → JSON files → zero dependencies, inspectable with any text editor\n\nArchitecture\n\nFollows NeuroLink's established Factory + Registry pattern.\n\nDirectory Structure\n\nComponent Diagram\n\nStorage auto-selection: When backend: \"bullmq\", TaskManager creates a RedisTaskStore (task definitions + run logs in Redis). When backend: \"node-timeout\", it creates a FileTaskStore (JSON + JSONL on disk). The TaskStore interface abstracts this so all other components are storage-agnostic.\n\nHow It Fits Into NeuroLink\n\nType Definitions\n\nSDK API\n\nInitialization\n\nCreating Tasks\n\nManaging Tasks\n\nCLI Commands\n\nCLI Shorthand for Intervals\n\nThe --every flag accepts human-readable durations:\n\n| Input | Meaning |\n| ----- | ---------------- |\n| 30s | 30 seconds |\n| 5m | 5 minutes |\n| 2h | 2 hours |\n| 1d | 1 day |\n| 500 | 500 milliseconds |\n\nBuilt-in Agent Tools\n\nThese tools are registered as direct agent tools, available to the AI during any conversation. They allow the AI to self-schedule work.\n\ncreateTask\n\nThe AI can schedule follow-up tasks during a conversation.\n\nExample AI usage:\n\nUser: \"Monitor my API endpoint every 10 minutes and alert me if it goes down.\"\nAI calls createTask with { name: \"api-monitor\", prompt: \"Check https://api.example.com/health ...\", schedule: { type: \"interval\", every: 600000 }, mode: \"continuation\" }\n\nlistTasks\n\ngetTaskRuns\n\ndeleteTask\n\nrunTaskNow\n\nBackend Interface & Extensibility\n\nTaskBackend Interface\n\nAll backends implement this interface. To add a new backend (e.g., Agenda, Bree, pg-boss), implement TaskBackend and register it.\n\nRegistering a Custom Backend\n\nBullMQ Backend Details\nUses bullmq Queue + Worker + upsertJobScheduler()\nCron tasks → BullMQ repeatable jobs\nInterval tasks → BullMQ repeatable jobs with every option\nOne-shot tasks → BullMQ delayed jobs\nPause/Resume via task cancellation and re-scheduling through TaskManager\nSurvives process restarts (Redis-pers","hierarchy":{"lvl0":"Features","lvl1":"TaskManager - Scheduled & Self-Running Tasks","lvl2":"","lvl3":""}},
4425
4425
  {"objectID":"a97898fa912c3898f3a71316e3cfd14cfcf60aced0fe7fb2485eee25fd6a7000","title":"Overview","url":"/docs/features/task-manager#overview","content":"TaskManager adds scheduled and self-running task capabilities to NeuroLink. It enables AI agents to execute prompts on a schedule (cron, interval, or one-shot), with two execution modes: Isolated (fresh context per run) and Continuation (preserves conversation history across runs).\n\nThe system is available as both an SDK API and CLI commands, and ships with built-in tools so AI agents can self-schedule tasks during conversations.","hierarchy":{"lvl0":"Features","lvl1":"TaskManager - Scheduled & Self-Running Tasks","lvl2":"Overview","lvl3":""}},
@@ -5173,7 +5173,7 @@
5173
5173
  {"objectID":"70b84d0be03827e001b6d05670d5f52b63e1fb6dc11f12c9696bfadd99a4266a","title":"OR","url":"/docs/getting-started/provider-setup#or-1","content":"GOOGLEAPPLICATIONCREDENTIALS=/path/to/service-account.json\n`","hierarchy":{"lvl0":"Getting Started","lvl1":"⚙️ Provider Configuration Guide","lvl2":"OR","lvl3":""}},
5174
5174
  {"objectID":"692fcd0ce7dabb7b8c99a22dc148cfab07a092835564deb63ae44194dc8d6ecb","title":"Provider ID","url":"/docs/getting-started/provider-setup#provider-id-2","content":"Provider ID: gemini-live","hierarchy":{"lvl0":"Getting Started","lvl1":"⚙️ Provider Configuration Guide","lvl2":"Provider ID","lvl3":""}},
5175
5175
  {"objectID":"7888b58098daa64d6c18ef501469033f7d2f48f5377e89df007e3f0aa57e237f","title":"stream() + TTS Mode 2 (synthesise the streamed reply)","url":"/docs/getting-started/provider-setup#stream-tts-mode-2-synthesise-the-streamed-reply","content":"Two ergonomic options — both deliver byte-identical audio:\n\nWhen tts.useAiResponse is false (Mode 1) or TTS is not enabled,\nr.audio resolves to undefined rather than hanging.\n\n← Back to Main README | Next: API Reference →","hierarchy":{"lvl0":"Getting Started","lvl1":"⚙️ Provider Configuration Guide","lvl2":"stream() + TTS Mode 2 (synthesise the streamed reply)","lvl3":""}},
5176
- {"objectID":"86f8e007d9d73a04cf748017ce8c5ded77bd4798631cc39221fc245d76cab284","title":"Anthropic Provider Guide","url":"/docs/getting-started/providers/anthropic","content":"Anthropic Provider Guide\n\nDirect access to Claude models with flexible authentication options\n\nOverview\n\nAnthropic provides direct API access to Claude, one of the most capable AI model families available. NeuroLink supports both API key authentication for production deployments and OAuth authentication for Claude Pro/Max subscription users.\n\nIf you have a Claude Pro or Max subscription, you can use OAuth authentication to leverage your subscription quota directly. See OAuth Setup below.\n\nKey Benefits\nClaude Sonnet 4.6: Latest balanced model — fast, capable, and cost-effective\nClaude Opus 4.6: Latest flagship model for advanced reasoning\n1M Context Window: Claude 4.6 models support 1,000,000-token context windows GA (no beta header needed)\nExtended Thinking: Deep reasoning mode on Claude 3.7+ models (Sonnet 4, Opus 4)\nMultimodal: Vision capabilities for image analysis across all models\nTool Use: Function calling for agent workflows\n\nAuthentication Options\n\n| Method | Best For | Billing |\n| ----------- | -------------------------------------- | ------------------ |\n| API Key | Production, server-side apps | Pay-per-token |\n| OAuth | Personal dev with Pro/Max subscription | Subscription quota |\n\nQuick Start\nGet Your API Key\nVisit console.anthropic.com\nSign in or create an account\nNavigate to API Keys section\nClick Create Key\nCopy your new API key (starts with sk-ant-)\nConfigure Environment\n\nAdd to your .env file:\nTest the Setup\n\nSupported Models\n\nAvailable Models (from AnthropicModels enum)\n\n| Enum Key | Model ID | Family | Context | Max Output | Vision | Extended Thinking | Deprecated |\n| ------------------- | ---------------------------- | ------ | ------- | ---------- | ------ | ----------------- | ---------- |\n| CLAUDE_OPUS_4_6 | claude-opus-4-6 | Opus | 1M | 128,000 | Yes | Yes | No |\n| CLAUDE_SONNET_4_6 | claude-sonnet-4-6 | Sonnet | 1M | 64,000 | Yes | Yes | No |\n| CLAUDE_OPUS_4_5 | claude-opus-4-5-20251101 | Opus | 200K | 64,000 | Yes | Yes | No |\n| CLAUDE_SONNET_4_5 | claude-sonnet-4-5-20250929 | Sonnet | 200K | 64,000 | Yes | Yes | No |\n| CLAUDE_4_5_HAIKU | claude-haiku-4-5-20251001 | Haiku | 200K | 64,000 | Yes | Yes | No |\n| CLAUDE_OPUS_4_1 | claude-opus-4-1-20250805 | Opus | 200K | 32,000 | Yes | Yes | No |\n| CLAUDE_OPUS_4_0 | claude-opus-4-20250514 | Opus | 200K | 64,000 | Yes | Yes | No |\n| CLAUDE_SONNET_4_0 | claude-sonnet-4-20250514 | Sonnet | 200K | 64,000 | Yes | Yes | No |\n| CLAUDE_SONNET_3_7 | claude-3-7-sonnet-20250219 | Sonnet | 200K | 8,192 | Yes | Yes | Yes |\n| CLAUDE_3_5_SONNET | claude-3-5-sonnet-20241022 | Sonnet | 200K | 8,192 | Yes | No | Yes |\n| CLAUDE_3_5_HAIKU | claude-3-5-haiku-20241022 | Haiku | 200K | 8,192 | No | No | Yes |\n| CLAUDE_3_SONNET | claude-3-sonnet-20240229 | Sonnet | 200K | 4,096 | Yes | No | Yes |\n| CLAUDE_3_OPUS | claude-3-opus-20240229 | Opus | 200K | 4,096 | Yes | No | Yes |\n| CLAUDE_3_HAIKU | claude-3-haiku-20240307 | Haiku | 200K | 4,096 | Yes | No | Yes |\n\nClaude 4.6 models (claude-opus-4-6 and claude-sonnet-4-6) support a 1,000,000-token context window at general availability — no beta header is required.\n\nThe detailed capabilities (context window, max output, vision, etc.) are defined in MODEL_METADATA within src/lib/models/anthropicModels.ts.\n\nDefault Model\n\nThe default model when no model is specified is claude-sonnet-4-6 (set via AnthropicModels.CLAUDE_SONNET_4_6). This can be overridden with the ANTHROPIC_MODEL environment variable.\n\nModel Selection by Use Case\n\nClaude Subscription Tiers\n\nAnthropic offers different access tiers, each with varying rate limits and model access:\n\n| Tier | Access Method | Models Available | Best For |\n| -------------------- | ----------------- | ------------------------------------- | ------------------------------- |\n| Free | claude.ai account | Haiku only (3 Haiku, 3.5 Haiku) | Exploration, personal use |\n| Pro ($20/month) | OAuth + claude.ai | Haiku + Sonnet (3.5 Sonnet, Sonnet 4) | Professional use, higher volume |\n| Max ($100/month) | OAuth + claude.ai | All models (including Opus) | Heavy use, all model access |\n| Max 5x | OAuth + claude.ai | All models | 5x usage multiplier |\n| Max 20x | OAuth + claude.ai | All models | 20x usage multiplie","hierarchy":{"lvl0":"Getting Started","lvl1":"Anthropic Provider Guide","lvl2":"","lvl3":""}},
5176
+ {"objectID":"86f8e007d9d73a04cf748017ce8c5ded77bd4798631cc39221fc245d76cab284","title":"Anthropic Provider Guide","url":"/docs/getting-started/providers/anthropic","content":"Anthropic Provider Guide\n\nDirect access to Claude models with flexible authentication options\n\nOverview\n\nAnthropic provides direct API access to Claude, one of the most capable AI model families available. NeuroLink supports both API key authentication for production deployments and OAuth authentication for Claude Pro/Max subscription users.\n\nIf you have a Claude Pro or Max subscription, you can use OAuth authentication to leverage your subscription quota directly. See OAuth Setup below.\n\nKey Benefits\nClaude Sonnet 4.6: Latest balanced model — fast, capable, and cost-effective\nClaude Opus 4.6: Latest flagship model for advanced reasoning\n1M Context Window: Claude 4.6 models support 1,000,000-token context windows GA (no beta header needed)\nExtended Thinking: Deep reasoning mode on Claude 3.7+ models (Sonnet 4, Opus 4)\nMultimodal: Vision capabilities for image analysis across all models\nTool Use: Function calling for agent workflows\n\nAuthentication Options\n\n| Method | Best For | Billing |\n| ----------- | -------------------------------------- | ------------------ |\n| API Key | Production, server-side apps | Pay-per-token |\n| OAuth | Personal dev with Pro/Max subscription | Subscription quota |\n\nQuick Start\nGet Your API Key\nVisit console.anthropic.com\nSign in or create an account\nNavigate to API Keys section\nClick Create Key\nCopy your new API key (starts with sk-ant-)\nConfigure Environment\n\nAdd to your .env file:\nTest the Setup\n\nSupported Models\n\nAvailable Models (from AnthropicModels enum)\n\n| Enum Key | Model ID | Family | Context | Max Output | Vision | Extended Thinking | Deprecated |\n| ------------------- | ---------------------------- | ------ | ------- | ---------- | ------ | ----------------- | ---------- |\n| CLAUDE_OPUS_5_5 | claude-opus-5-5 | Opus | 1M | 128,000 | Yes | Yes | No |\n| CLAUDE_FABLE_5_1 | claude-fable-5-1 | Fable | 1M | 128,000 | Yes | Yes | No |\n| CLAUDE_OPUS_4_6 | claude-opus-4-6 | Opus | 1M | 128,000 | Yes | Yes | No |\n| CLAUDE_SONNET_4_6 | claude-sonnet-4-6 | Sonnet | 1M | 64,000 | Yes | Yes | No |\n| CLAUDE_OPUS_4_5 | claude-opus-4-5-20251101 | Opus | 200K | 64,000 | Yes | Yes | No |\n| CLAUDE_SONNET_4_5 | claude-sonnet-4-5-20250929 | Sonnet | 200K | 64,000 | Yes | Yes | No |\n| CLAUDE_4_5_HAIKU | claude-haiku-4-5-20251001 | Haiku | 200K | 64,000 | Yes | Yes | No |\n| CLAUDE_OPUS_4_1 | claude-opus-4-1-20250805 | Opus | 200K | 32,000 | Yes | Yes | No |\n| CLAUDE_OPUS_4_0 | claude-opus-4-20250514 | Opus | 200K | 64,000 | Yes | Yes | No |\n| CLAUDE_SONNET_4_0 | claude-sonnet-4-20250514 | Sonnet | 200K | 64,000 | Yes | Yes | No |\n| CLAUDE_SONNET_3_7 | claude-3-7-sonnet-20250219 | Sonnet | 200K | 8,192 | Yes | Yes | Yes |\n| CLAUDE_3_5_SONNET | claude-3-5-sonnet-20241022 | Sonnet | 200K | 8,192 | Yes | No | Yes |\n| CLAUDE_3_5_HAIKU | claude-3-5-haiku-20241022 | Haiku | 200K | 8,192 | No | No | Yes |\n| CLAUDE_3_SONNET | claude-3-sonnet-20240229 | Sonnet | 200K | 4,096 | Yes | No | Yes |\n| CLAUDE_3_OPUS | claude-3-opus-20240229 | Opus | 200K | 4,096 | Yes | No | Yes |\n| CLAUDE_3_HAIKU | claude-3-haiku-20240307 | Haiku | 200K | 4,096 | Yes | No | Yes |\n\nClaude 4.6 models (claude-opus-4-6 and claude-sonnet-4-6) support a 1,000,000-token context window at general availability — no beta header is required.\n\nThe detailed capabilities (context window, max output, vision, etc.) are defined in MODEL_METADATA within src/lib/models/anthropicModels.ts.\n\nDefault Model\n\nThe default model when no model is specified is claude-sonnet-4-6 (set via AnthropicModels.CLAUDE_SONNET_4_6). This can be overridden with the ANTHROPIC_MODEL environment variable.\n\nModel Selection by Use Case\n\nClaude Subscription Tiers\n\nAnthropic offers different access tiers, each with varying rate limits and model access:\n\n| Tier | Access Method | Models Available | Best For |\n| -------------------- | ----------------- | ------------------------------------- | ------------------------------- |\n| Free | claude.ai account | Haiku only (3 Haiku, 3.5 Haiku) | Exploration, personal use |\n| Pro ($20/month) | OAuth + claude.ai | Haiku + Sonnet (3.5 Sonnet, Sonnet 4) | Professional use, higher volume |\n| Max ($100/month) | OAuth + claude.ai | All models (including Opus) |","hierarchy":{"lvl0":"Getting Started","lvl1":"Anthropic Provider Guide","lvl2":"","lvl3":""}},
5177
5177
  {"objectID":"2e43e1a8e5dc9666291b83ef0ee1de91ca54e083ff3eab013633185c1d581e12","title":"Anthropic Provider Guide","url":"/docs/getting-started/providers/anthropic#anthropic-provider-guide","content":"Direct access to Claude models with flexible authentication options","hierarchy":{"lvl0":"Getting Started","lvl1":"Anthropic Provider Guide","lvl2":"Anthropic Provider Guide","lvl3":""}},
5178
5178
  {"objectID":"1bdbac85341c237a0a9cce9dce247ef148ac0529b6ae546f46634f280fbbebe3","title":"Overview","url":"/docs/getting-started/providers/anthropic#overview","content":"Anthropic provides direct API access to Claude, one of the most capable AI model families available. NeuroLink supports both API key authentication for production deployments and OAuth authentication for Claude Pro/Max subscription users.\n\nIf you have a Claude Pro or Max subscription, you can use OAuth authentication to leverage your subscription quota directly. See OAuth Setup below.","hierarchy":{"lvl0":"Getting Started","lvl1":"Anthropic Provider Guide","lvl2":"Overview","lvl3":""}},
5179
5179
  {"objectID":"05d21959f9c408ef5455761112d63a6f99dd080eedec522aa7c8c3a69a41b1b1","title":"Key Benefits","url":"/docs/getting-started/providers/anthropic#key-benefits","content":"Claude Sonnet 4.6: Latest balanced model — fast, capable, and cost-effective\nClaude Opus 4.6: Latest flagship model for advanced reasoning\n1M Context Window: Claude 4.6 models support 1,000,000-token context windows GA (no beta header needed)\nExtended Thinking: Deep reasoning mode on Claude 3.7+ models (Sonnet 4, Opus 4)\nMultimodal: Vision capabilities for image analysis across all models\nTool Use: Function calling for agent workflows","hierarchy":{"lvl0":"Getting Started","lvl1":"Anthropic Provider Guide","lvl2":"Key Benefits","lvl3":""}},
@@ -5186,7 +5186,7 @@
5186
5186
  {"objectID":"0bf9dbb0b9f0458fa434978a63f0ddeeb2174855ad7cb5f1640103ca426d3fd4","title":"Quick generation","url":"/docs/getting-started/providers/anthropic#quick-generation","content":"pnpm run cli -- generate \"Hello from Claude!\" \\\n --provider anthropic","hierarchy":{"lvl0":"Getting Started","lvl1":"Anthropic Provider Guide","lvl2":"Quick generation","lvl3":""}},
5187
5187
  {"objectID":"aa49def5ea884a5a27dd7d864256316893fd83e765b50525e59f335d095c2fe5","title":"Use specific model","url":"/docs/getting-started/providers/anthropic#use-specific-model","content":"pnpm run cli -- generate \"Write a haiku about AI\" \\\n --provider anthropic \\\n --model \"claude-sonnet-4-6\"","hierarchy":{"lvl0":"Getting Started","lvl1":"Anthropic Provider Guide","lvl2":"Use specific model","lvl3":""}},
5188
5188
  {"objectID":"2102500911a2b2b942940f07d15c60b318c66c74e8642346e257f40fc261c660","title":"Interactive loop mode","url":"/docs/getting-started/providers/anthropic#interactive-loop-mode","content":"pnpm run cli -- loop \\\n --provider anthropic \\\n --model \"claude-sonnet-4-6\"\n`","hierarchy":{"lvl0":"Getting Started","lvl1":"Anthropic Provider Guide","lvl2":"Interactive loop mode","lvl3":""}},
5189
- {"objectID":"cb4d3f802a4f7dd3ed6f452356237e0cb876dc5fd9e86a6095a7153e1fee579b","title":"Available Models (from AnthropicModels enum)","url":"/docs/getting-started/providers/anthropic#available-models-from-anthropicmodels-enum","content":"| Enum Key | Model ID | Family | Context | Max Output | Vision | Extended Thinking | Deprecated |\n| ------------------- | ---------------------------- | ------ | ------- | ---------- | ------ | ----------------- | ---------- |\n| CLAUDE_OPUS_4_6 | claude-opus-4-6 | Opus | 1M | 128,000 | Yes | Yes | No |\n| CLAUDE_SONNET_4_6 | claude-sonnet-4-6 | Sonnet | 1M | 64,000 | Yes | Yes | No |\n| CLAUDE_OPUS_4_5 | claude-opus-4-5-20251101 | Opus | 200K | 64,000 | Yes | Yes | No |\n| CLAUDE_SONNET_4_5 | claude-sonnet-4-5-20250929 | Sonnet | 200K | 64,000 | Yes | Yes | No |\n| CLAUDE_4_5_HAIKU | claude-haiku-4-5-20251001 | Haiku | 200K | 64,000 | Yes | Yes | No |\n| CLAUDE_OPUS_4_1 | claude-opus-4-1-20250805 | Opus | 200K | 32,000 | Yes | Yes | No |\n| CLAUDE_OPUS_4_0 | claude-opus-4-20250514 | Opus | 200K | 64,000 | Yes | Yes | No |\n| CLAUDE_SONNET_4_0 | claude-sonnet-4-20250514 | Sonnet | 200K | 64,000 | Yes | Yes | No |\n| CLAUDE_SONNET_3_7 | claude-3-7-sonnet-20250219 | Sonnet | 200K | 8,192 | Yes | Yes | Yes |\n| CLAUDE_3_5_SONNET | claude-3-5-sonnet-20241022 | Sonnet | 200K | 8,192 | Yes | No | Yes |\n| CLAUDE_3_5_HAIKU | claude-3-5-haiku-20241022 | Haiku | 200K | 8,192 | No | No | Yes |\n| CLAUDE_3_SONNET | claude-3-sonnet-20240229 | Sonnet | 200K | 4,096 | Yes | No | Yes |\n| CLAUDE_3_OPUS | claude-3-opus-20240229 | Opus | 200K | 4,096 | Yes | No | Yes |\n| CLAUDE_3_HAIKU | claude-3-haiku-20240307 | Haiku | 200K | 4,096 | Yes | No | Yes |\n\nClaude 4.6 mode","hierarchy":{"lvl0":"Getting Started","lvl1":"Anthropic Provider Guide","lvl2":"Available Models (from AnthropicModels enum)","lvl3":""}},
5189
+ {"objectID":"cb4d3f802a4f7dd3ed6f452356237e0cb876dc5fd9e86a6095a7153e1fee579b","title":"Available Models (from AnthropicModels enum)","url":"/docs/getting-started/providers/anthropic#available-models-from-anthropicmodels-enum","content":"| Enum Key | Model ID | Family | Context | Max Output | Vision | Extended Thinking | Deprecated |\n| ------------------- | ---------------------------- | ------ | ------- | ---------- | ------ | ----------------- | ---------- |\n| CLAUDE_OPUS_5_5 | claude-opus-5-5 | Opus | 1M | 128,000 | Yes | Yes | No |\n| CLAUDE_FABLE_5_1 | claude-fable-5-1 | Fable | 1M | 128,000 | Yes | Yes | No |\n| CLAUDE_OPUS_4_6 | claude-opus-4-6 | Opus | 1M | 128,000 | Yes | Yes | No |\n| CLAUDE_SONNET_4_6 | claude-sonnet-4-6 | Sonnet | 1M | 64,000 | Yes | Yes | No |\n| CLAUDE_OPUS_4_5 | claude-opus-4-5-20251101 | Opus | 200K | 64,000 | Yes | Yes | No |\n| CLAUDE_SONNET_4_5 | claude-sonnet-4-5-20250929 | Sonnet | 200K | 64,000 | Yes | Yes | No |\n| CLAUDE_4_5_HAIKU | claude-haiku-4-5-20251001 | Haiku | 200K | 64,000 | Yes | Yes | No |\n| CLAUDE_OPUS_4_1 | claude-opus-4-1-20250805 | Opus | 200K | 32,000 | Yes | Yes | No |\n| CLAUDE_OPUS_4_0 | claude-opus-4-20250514 | Opus | 200K | 64,000 | Yes | Yes | No |\n| CLAUDE_SONNET_4_0 | claude-sonnet-4-20250514 | Sonnet | 200K | 64,000 | Yes | Yes | No |\n| CLAUDE_SONNET_3_7 | claude-3-7-sonnet-20250219 | Sonnet | 200K | 8,192 | Yes | Yes | Yes |\n| CLAUDE_3_5_SONNET | claude-3-5-sonnet-20241022 | Sonnet | 200K | 8,192 | Yes | No | Yes |\n| CLAUDE_3_5_HAIKU | claude-3-5-haiku-20241022 | Haiku | 200K | 8,192 | No | No | Yes |\n| CLAUDE_3_SONNET | claude-3-sonnet-20240229 | Sonnet | 200K | 4,096 | Yes | No | Yes |\n| CLAUDE","hierarchy":{"lvl0":"Getting Started","lvl1":"Anthropic Provider Guide","lvl2":"Available Models (from AnthropicModels enum)","lvl3":""}},
5190
5190
  {"objectID":"2660c67b3efb9230db35d1aec7de9e768c879c534986155148679cbf87bcbd0e","title":"Default Model","url":"/docs/getting-started/providers/anthropic#default-model","content":"The default model when no model is specified is claude-sonnet-4-6 (set via AnthropicModels.CLAUDE_SONNET_4_6). This can be overridden with the ANTHROPIC_MODEL environment variable.","hierarchy":{"lvl0":"Getting Started","lvl1":"Anthropic Provider Guide","lvl2":"Default Model","lvl3":""}},
5191
5191
  {"objectID":"01a8c791dd759580aaa38fd30ab42f118f5622e4b80aa4654d0e6bba1dfb82e4","title":"Claude Subscription Tiers","url":"/docs/getting-started/providers/anthropic#claude-subscription-tiers","content":"Anthropic offers different access tiers, each with varying rate limits and model access:\n\n| Tier | Access Method | Models Available | Best For |\n| -------------------- | ----------------- | ------------------------------------- | ------------------------------- |\n| Free | claude.ai account | Haiku only (3 Haiku, 3.5 Haiku) | Exploration, personal use |\n| Pro ($20/month) | OAuth + claude.ai | Haiku + Sonnet (3.5 Sonnet, Sonnet 4) | Professional use, higher volume |\n| Max ($100/month) | OAuth + claude.ai | All models (including Opus) | Heavy use, all model access |\n| Max 5x | OAuth + claude.ai | All models | 5x usage multiplier |\n| Max 20x | OAuth + claude.ai | All models | 20x usage multiplier |\n| API | API Key | All models | Production, programmatic access |","hierarchy":{"lvl0":"Getting Started","lvl1":"Anthropic Provider Guide","lvl2":"Claude Subscription Tiers","lvl3":""}},
5192
5192
  {"objectID":"ba7eecf9ea42394ddc4f3775b34c0d41186964e218cdaa4bae64e0eccc9136db","title":"Model Access by Tier (MODEL_TIER_ACCESS)","url":"/docs/getting-started/providers/anthropic#model-access-by-tier-model_tier_access","content":"| Model | Free | Pro | Max / Max 5x / Max 20x | API |\n| ------------------------------- | ---- | --- | ---------------------- | --- |\n| claude-3-haiku-20240307 | Yes | Yes | Yes | Yes |\n| claude-3-5-haiku-20241022 | Yes | Yes | Yes | Yes |\n| claude-3-5-sonnet-20241022 | No | Yes | Yes | Yes |\n| claude-3-5-sonnet-v2-20241022 | No | Yes | Yes | Yes |\n| claude-sonnet-4-20250514 | No | Yes | Yes | Yes |\n| claude-sonnet-4-6 | No | Yes | Yes | Yes |\n| claude-3-opus-20240229 | No | No | Yes | Yes |\n| claude-opus-4-20250514 | No | No | Yes | Yes |\n| claude-opus-4-6 | No | No | Yes | Yes |","hierarchy":{"lvl0":"Getting Started","lvl1":"Anthropic Provider Guide","lvl2":"Model Access by Tier (MODEL_TIER_ACCESS)","lvl3":""}},
@@ -5310,7 +5310,7 @@
5310
5310
  {"objectID":"5fd29ff6d83e8fa4eca4375af5301d0f626bcac8eb65f3da955e77c968ac2891","title":"Use exact model ID","url":"/docs/getting-started/providers/aws-bedrock#use-exact-model-id","content":"model: 'anthropic.claude-sonnet-4-5-20250929-v1:0' # ✅ Correct\n`","hierarchy":{"lvl0":"Getting Started","lvl1":"AWS Bedrock Provider Guide","lvl2":"Use exact model ID","lvl3":""}},
5311
5311
  {"objectID":"6eae326b87531924868f38f158da3c2751a57df8bcb2b08e455779ce038c76fd","title":"Related Documentation","url":"/docs/getting-started/providers/aws-bedrock#related-documentation","content":"Provider Setup - General configuration\nMulti-Region - Geographic distribution\nCost Optimization - Reduce costs\nCompliance - Security","hierarchy":{"lvl0":"Getting Started","lvl1":"AWS Bedrock Provider Guide","lvl2":"Related Documentation","lvl3":""}},
5312
5312
  {"objectID":"9a0e9988284f19dd7935950a7f25fdb2600f61ecf36280657d11a84c96e8aedf","title":"Additional Resources","url":"/docs/getting-started/providers/aws-bedrock#additional-resources","content":"AWS Bedrock Docs - Official documentation\nBedrock Pricing - Pricing details\nBedrock Console - Manage models\nAWS CLI Reference - CLI commands\n\nNeed Help? Join our GitHub Discussions or open an issue.","hierarchy":{"lvl0":"Getting Started","lvl1":"AWS Bedrock Provider Guide","lvl2":"Additional Resources","lvl3":""}},
5313
- {"objectID":"e5851e686ce8d4290bc6d1cb6b4ed3d828f204e023921515e0baa3d24f961f99","title":"Azure OpenAI Provider Guide","url":"/docs/getting-started/providers/azure-openai","content":"Azure OpenAI Provider Guide\n\nEnterprise-grade OpenAI models with Microsoft Azure infrastructure and compliance\n\nOverview\n\nAzure OpenAI Service provides REST API access to OpenAI's models including GPT-4, GPT-3.5, and embeddings through Microsoft's global Azure infrastructure. Perfect for enterprise deployments requiring compliance, data residency, and SLA guarantees.\n\nAzure OpenAI requires application approval and Azure subscription. Approval can take 1-2 weeks. Use Google AI Studio or Hugging Face for instant access during development.\n\nKey Benefits\n🏢 Enterprise SLA: 99.9% uptime guarantee with Azure support\n🌍 Global Regions: 30+ Azure regions worldwide\n🔒 Compliance: SOC 2, HIPAA, ISO 27001, FedRAMP\n🔐 Azure Integration: Azure AD, Key Vault, Private Link\n💰 Enterprise Billing: Consolidated Azure billing\n🛡️ Data Residency: Control where data is processed\n📊 Azure Monitor: Built-in observability and logging\n\nUse Cases\nEnterprise Applications: SLA-backed production workloads\nRegulated Industries: Healthcare, finance, government\nHybrid Cloud: Integration with existing Azure infrastructure\nMulti-Region: Global deployments with data residency\nCompliance Requirements: GDPR, HIPAA, SOC 2\n\nQuick Start\nCreate Azure OpenAI Resource\n\nOr use Azure Portal:\nSearch for \"Azure OpenAI\"\nClick \"Create\"\nSelect subscription and resource group\nChoose region (eastus, westeurope, etc.)\nName your resource\nClick \"Review + Create\"\nDeploy a Model\n\nOr via Azure Portal:\nOpen your Azure OpenAI resource\nGo to \"Deployments\" → \"Create new deployment\"\nSelect model (gpt-4o, gpt-4, gpt-35-turbo, etc.)\nName deployment\nSet capacity (TPM quota)\nGet Credentials\nConfigure NeuroLink\n\nRegional Deployment\n\nAvailable Regions\n\n| Region | Location | Models Available | Data Residency |\n| --------------------- | ------------- | ---------------- | -------------- |\n| East US | Virginia, USA | All models | USA |\n| East US 2 | Virginia, USA | All models | USA |\n| South Central US | Texas, USA | All models | USA |\n| West Europe | Netherlands | All models | EU |\n| North Europe | Ireland | All models | EU |\n| UK South | London, UK | All models | UK |\n| France Central | Paris, France | All models | EU |\n| Switzerland North | Zurich | All models | Switzerland |\n| Sweden Central | Stockholm | All models | EU |\n| Australia East | Sydney | All models | Australia |\n| Japan East | Tokyo | All models | Japan |\n| Canada East | Quebec | All models | Canada |\n\nMulti-Region Setup\n\nModel Deployments\n\nAvailable Models\n\n| Model | Deployment Name | Context | Vision | Best For | TPM Quota |\n| -------------------------- | ---------------------- | ------- | ------ | --------------------------- | --------- |\n| GPT-5.4 | gpt-5.4 | 1,050K | Yes | Latest flagship | 10K - 1M |\n| GPT-5.4 Mini | gpt-5.4-mini | 400K | Yes | Fast, cost-effective | 10K - 10M |\n| GPT-5.4 Nano | gpt-5.4-nano | 400K | Yes | Ultra-lightweight | 10K - 10M |\n| GPT-5 | gpt-5 | 400K | Yes | Advanced reasoning | 10K - 1M |\n| GPT-5 Mini | gpt-5-mini | 400K | Yes | Balanced cost/perf | 10K - 10M |\n| GPT-4.1 | gpt-4.1 | 1,047K | Yes | Long-context tasks | 10K - 1M |\n| GPT-4.1 Mini | gpt-4.1-mini | 1,047K | Yes | Long-context, affordable | 10K - 10M |\n| GPT-4.1 Nano | gpt-4.1-nano | 1,047K | Yes | Long-context, lightweight | 10K - 10M |\n| o3 | o3 | 200K | Yes | Deep reasoning | 10K - 1M |\n| o3-mini | o3-mini | 200K | No | Reasoning, cost-effective | 10K - 10M |\n| o4-mini | o4-mini | 200K | Yes | Latest reasoning, efficient | 10K - 10M |\n| GPT-4o | gpt-4o | 128K | Yes | Complex reasoning | 10K - 1M |\n| GPT-4o-mini | gpt-4o-mini | 128K | Yes | General tasks | 10K - 10M |\n| GPT-4-turbo | gpt-4-turbo | 128K | Yes | Advanced tasks | 10K - 1M |\n| GPT-4 | gpt-4 | 8K | No | Production (legacy) | 10K - 1M |\n| GPT-3.5-turbo | gpt-35-turbo | 16K | No | High-volume | 10K - 10M |\n| text-embedding-ada-002 | text-embedding-ada-002 | 8K | — | Vector search | 10K - 10M |\n| text-embedding-3-small | te","hierarchy":{"lvl0":"Getting Started","lvl1":"Azure OpenAI Provider Guide","lvl2":"","lvl3":""}},
5313
+ {"objectID":"e5851e686ce8d4290bc6d1cb6b4ed3d828f204e023921515e0baa3d24f961f99","title":"Azure OpenAI Provider Guide","url":"/docs/getting-started/providers/azure-openai","content":"Azure OpenAI Provider Guide\n\nEnterprise-grade OpenAI models with Microsoft Azure infrastructure and compliance\n\nOverview\n\nAzure OpenAI Service provides REST API access to OpenAI's models including GPT-4, GPT-3.5, and embeddings through Microsoft's global Azure infrastructure. Perfect for enterprise deployments requiring compliance, data residency, and SLA guarantees.\n\nAzure OpenAI requires application approval and Azure subscription. Approval can take 1-2 weeks. Use Google AI Studio or Hugging Face for instant access during development.\n\nKey Benefits\n🏢 Enterprise SLA: 99.9% uptime guarantee with Azure support\n🌍 Global Regions: 30+ Azure regions worldwide\n🔒 Compliance: SOC 2, HIPAA, ISO 27001, FedRAMP\n🔐 Azure Integration: Azure AD, Key Vault, Private Link\n💰 Enterprise Billing: Consolidated Azure billing\n🛡️ Data Residency: Control where data is processed\n📊 Azure Monitor: Built-in observability and logging\n\nUse Cases\nEnterprise Applications: SLA-backed production workloads\nRegulated Industries: Healthcare, finance, government\nHybrid Cloud: Integration with existing Azure infrastructure\nMulti-Region: Global deployments with data residency\nCompliance Requirements: GDPR, HIPAA, SOC 2\n\nQuick Start\nCreate Azure OpenAI Resource\n\nOr use Azure Portal:\nSearch for \"Azure OpenAI\"\nClick \"Create\"\nSelect subscription and resource group\nChoose region (eastus, westeurope, etc.)\nName your resource\nClick \"Review + Create\"\nDeploy a Model\n\nOr via Azure Portal:\nOpen your Azure OpenAI resource\nGo to \"Deployments\" → \"Create new deployment\"\nSelect model (gpt-4o, gpt-4, gpt-35-turbo, etc.)\nName deployment\nSet capacity (TPM quota)\nGet Credentials\nConfigure NeuroLink\n\nRegional Deployment\n\nAvailable Regions\n\n| Region | Location | Models Available | Data Residency |\n| --------------------- | ------------- | ---------------- | -------------- |\n| East US | Virginia, USA | All models | USA |\n| East US 2 | Virginia, USA | All models | USA |\n| South Central US | Texas, USA | All models | USA |\n| West Europe | Netherlands | All models | EU |\n| North Europe | Ireland | All models | EU |\n| UK South | London, UK | All models | UK |\n| France Central | Paris, France | All models | EU |\n| Switzerland North | Zurich | All models | Switzerland |\n| Sweden Central | Stockholm | All models | EU |\n| Australia East | Sydney | All models | Australia |\n| Japan East | Tokyo | All models | Japan |\n| Canada East | Quebec | All models | Canada |\n\nMulti-Region Setup\n\nModel Deployments\n\nAvailable Models\n\n| Model | Deployment Name | Context | Vision | Best For | TPM Quota |\n| -------------------------- | ---------------------- | ------- | ------ | --------------------------- | --------- |\n| GPT-6 Astra (new) | gpt-6-astra | 1,050K | Yes | Current flagship | 10K - 1M |\n| GPT-6 Sol (new) | gpt-6-sol | 1,050K | Yes | Current flagship | 10K - 1M |\n| GPT-6 Luna (new) | gpt-6-luna | 1,050K | Yes | Current flagship | 10K - 1M |\n| GPT-5.6 Sol (new) | gpt-5.6-sol | 1,050K | Yes | Azure-only (retired direct) | 10K - 1M |\n| GPT-5.6 Terra (new) | gpt-5.6-terra | 1,050K | Yes | Azure-only (retired direct) | 10K - 1M |\n| GPT-5.6 Luna (new) | gpt-5.6-luna | 1,050K | Yes | Azure-only (retired direct) | 10K - 1M |\n| GPT-5.5 (new) | gpt-5.5 | 1,050K | Yes | Azure-only (retired direct) | 10K - 1M |\n| GPT-5.4 | gpt-5.4 | 1,050K | Yes | Flagship (March 2026) | 10K - 1M |\n| GPT-5.4 Mini | gpt-5.4-mini | 400K | Yes | Fast, cost-effective | 10K - 10M |\n| GPT-5.4 Nano | gpt-5.4-nano | 400K | Yes | Ultra-lightweight | 10K - 10M |\n| GPT-5 | gpt-5 | 400K | Yes | Advanced reasoning | 10K - 1M |\n| GPT-5 Mini | gpt-5-mini | 400K | Yes | Balanced cost/perf | 10K - 10M |\n| GPT-4.1 | gpt-4.1 | 1,047K | Yes | Long-context tasks | 10K - 1M |\n| GPT-4.1 Mini | gpt-4.1-mini | 1,047K | Yes | Long-context, affordable | 10K - 10M |\n| GPT-4.1 Nano | gpt-4.1-nano | 1,047K | Yes | Long-context, lightweight | 10K - 10M |\n| o3 | o3 | 200K | Yes | Deep reasoning | 10K - 1M |\n| o3-mini | o3-mini | 200K | No | Reasoning, cost-effective | 10K - 10M |\n| o4-mini | o4-mini ","hierarchy":{"lvl0":"Getting Started","lvl1":"Azure OpenAI Provider Guide","lvl2":"","lvl3":""}},
5314
5314
  {"objectID":"d43a46427828117c1f61bf89a8c1d01118023d5f23d0901ae6193b738338f04d","title":"Azure OpenAI Provider Guide","url":"/docs/getting-started/providers/azure-openai#azure-openai-provider-guide","content":"Enterprise-grade OpenAI models with Microsoft Azure infrastructure and compliance","hierarchy":{"lvl0":"Getting Started","lvl1":"Azure OpenAI Provider Guide","lvl2":"Azure OpenAI Provider Guide","lvl3":""}},
5315
5315
  {"objectID":"feab64717fa6613f599b702e65d4e50a6ef7eda86a21883f7ba126b34d02ac26","title":"Overview","url":"/docs/getting-started/providers/azure-openai#overview","content":"Azure OpenAI Service provides REST API access to OpenAI's models including GPT-4, GPT-3.5, and embeddings through Microsoft's global Azure infrastructure. Perfect for enterprise deployments requiring compliance, data residency, and SLA guarantees.\n\nAzure OpenAI requires application approval and Azure subscription. Approval can take 1-2 weeks. Use Google AI Studio or Hugging Face for instant access during development.","hierarchy":{"lvl0":"Getting Started","lvl1":"Azure OpenAI Provider Guide","lvl2":"Overview","lvl3":""}},
5316
5316
  {"objectID":"b01bf657ec8aad99064f4b13a67c89dfd30895220e20e55ebf37be4a2efb306e","title":"Key Benefits","url":"/docs/getting-started/providers/azure-openai#key-benefits","content":"🏢 Enterprise SLA: 99.9% uptime guarantee with Azure support\n🌍 Global Regions: 30+ Azure regions worldwide\n🔒 Compliance: SOC 2, HIPAA, ISO 27001, FedRAMP\n🔐 Azure Integration: Azure AD, Key Vault, Private Link\n💰 Enterprise Billing: Consolidated Azure billing\n🛡️ Data Residency: Control where data is processed\n📊 Azure Monitor: Built-in observability and logging","hierarchy":{"lvl0":"Getting Started","lvl1":"Azure OpenAI Provider Guide","lvl2":"Key Benefits","lvl3":""}},
@@ -5325,7 +5325,7 @@
5325
5325
  {"objectID":"1812ce8b34b0c5e9b510910b2571d39c762a3e11f6093cf81238da588698413d","title":"4. Configure NeuroLink","url":"/docs/getting-started/providers/azure-openai#4-configure-neurolink","content":"`bash","hierarchy":{"lvl0":"Getting Started","lvl1":"Azure OpenAI Provider Guide","lvl2":"4. Configure NeuroLink","lvl3":""}},
5326
5326
  {"objectID":"0bc650164cfcb22b3092a6506c71b96bcff3b87a6a5fb8dc32a8934ce55a4539","title":".env","url":"/docs/getting-started/providers/azure-openai#env","content":"AZUREOPENAIAPIKEY=yourapikeyhere\nAZUREOPENAIENDPOINT=https://my-resource.openai.azure.com/\nAZUREOPENAIDEPLOYMENT=gpt-4o-deployment\ntypescript\n\nconst ai = new NeuroLink({\n providers: [\n {\n name: \"azure-openai\",\n config: {\n apiKey: process.env.AZUREOPENAIAPI_KEY,\n endpoint: process.env.AZUREOPENAIENDPOINT,\n deployment: process.env.AZUREOPENAIDEPLOYMENT,\n },\n },\n ],\n});\n\nconst result = await ai.generate({\n input: { text: \"Hello from Azure OpenAI!\" },\n provider: \"azure-openai\",\n});\n\nconsole.log(result.content);\n`","hierarchy":{"lvl0":"Getting Started","lvl1":"Azure OpenAI Provider Guide","lvl2":".env","lvl3":""}},
5327
5327
  {"objectID":"5980abaa17516139d3278ae925c21afd248bb03cdd6bee2bb512e570019444e1","title":"Available Regions","url":"/docs/getting-started/providers/azure-openai#available-regions","content":"| Region | Location | Models Available | Data Residency |\n| --------------------- | ------------- | ---------------- | -------------- |\n| East US | Virginia, USA | All models | USA |\n| East US 2 | Virginia, USA | All models | USA |\n| South Central US | Texas, USA | All models | USA |\n| West Europe | Netherlands | All models | EU |\n| North Europe | Ireland | All models | EU |\n| UK South | London, UK | All models | UK |\n| France Central | Paris, France | All models | EU |\n| Switzerland North | Zurich | All models | Switzerland |\n| Sweden Central | Stockholm | All models | EU |\n| Australia East | Sydney | All models | Australia |\n| Japan East | Tokyo | All models | Japan |\n| Canada East | Quebec | All models | Canada |","hierarchy":{"lvl0":"Getting Started","lvl1":"Azure OpenAI Provider Guide","lvl2":"Available Regions","lvl3":""}},
5328
- {"objectID":"a721b2fd25f5aeb7a13cf814ad313a561f7d48f9b86e821ee968675a10a48258","title":"Available Models","url":"/docs/getting-started/providers/azure-openai#available-models","content":"| Model | Deployment Name | Context | Vision | Best For | TPM Quota |\n| -------------------------- | ---------------------- | ------- | ------ | --------------------------- | --------- |\n| GPT-5.4 | gpt-5.4 | 1,050K | Yes | Latest flagship | 10K - 1M |\n| GPT-5.4 Mini | gpt-5.4-mini | 400K | Yes | Fast, cost-effective | 10K - 10M |\n| GPT-5.4 Nano | gpt-5.4-nano | 400K | Yes | Ultra-lightweight | 10K - 10M |\n| GPT-5 | gpt-5 | 400K | Yes | Advanced reasoning | 10K - 1M |\n| GPT-5 Mini | gpt-5-mini | 400K | Yes | Balanced cost/perf | 10K - 10M |\n| GPT-4.1 | gpt-4.1 | 1,047K | Yes | Long-context tasks | 10K - 1M |\n| GPT-4.1 Mini | gpt-4.1-mini | 1,047K | Yes | Long-context, affordable | 10K - 10M |\n| GPT-4.1 Nano | gpt-4.1-nano | 1,047K | Yes | Long-context, lightweight | 10K - 10M |\n| o3 | o3 | 200K | Yes | Deep reasoning | 10K - 1M |\n| o3-mini | o3-mini | 200K | No | Reasoning, cost-effective | 10K - 10M |\n| o4-mini | o4-mini | 200K | Yes | Latest reasoning, efficient | 10K - 10M |\n| GPT-4o | gpt-4o | 128K | Yes | Complex reasoning | 10K - 1M |\n| GPT-4o-mini | gpt-4o-mini | 128K | Yes | General tasks | 10K - 10M |\n| GPT-4-turbo | gpt-4-turbo | 128K | Yes | Advanced tasks | 10K - 1M |\n| GPT-4 | gpt-4 | 8K | No | Production (legacy) | 10K - 1M |\n| GPT-3.5-turbo | gpt-35-turbo | 16K | No | ","hierarchy":{"lvl0":"Getting Started","lvl1":"Azure OpenAI Provider Guide","lvl2":"Available Models","lvl3":""}},
5328
+ {"objectID":"a721b2fd25f5aeb7a13cf814ad313a561f7d48f9b86e821ee968675a10a48258","title":"Available Models","url":"/docs/getting-started/providers/azure-openai#available-models","content":"| Model | Deployment Name | Context | Vision | Best For | TPM Quota |\n| -------------------------- | ---------------------- | ------- | ------ | --------------------------- | --------- |\n| GPT-6 Astra (new) | gpt-6-astra | 1,050K | Yes | Current flagship | 10K - 1M |\n| GPT-6 Sol (new) | gpt-6-sol | 1,050K | Yes | Current flagship | 10K - 1M |\n| GPT-6 Luna (new) | gpt-6-luna | 1,050K | Yes | Current flagship | 10K - 1M |\n| GPT-5.6 Sol (new) | gpt-5.6-sol | 1,050K | Yes | Azure-only (retired direct) | 10K - 1M |\n| GPT-5.6 Terra (new) | gpt-5.6-terra | 1,050K | Yes | Azure-only (retired direct) | 10K - 1M |\n| GPT-5.6 Luna (new) | gpt-5.6-luna | 1,050K | Yes | Azure-only (retired direct) | 10K - 1M |\n| GPT-5.5 (new) | gpt-5.5 | 1,050K | Yes | Azure-only (retired direct) | 10K - 1M |\n| GPT-5.4 | gpt-5.4 | 1,050K | Yes | Flagship (March 2026) | 10K - 1M |\n| GPT-5.4 Mini | gpt-5.4-mini | 400K | Yes | Fast, cost-effective | 10K - 10M |\n| GPT-5.4 Nano | gpt-5.4-nano | 400K | Yes | Ultra-lightweight | 10K - 10M |\n| GPT-5 | gpt-5 | 400K | Yes | Advanced reasoning | 10K - 1M |\n| GPT-5 Mini | gpt-5-mini | 400K | Yes | Balanced cost/perf | 10K - 10M |\n| GPT-4.1 | gpt-4.1 | 1,047K | Yes | Long-context tasks | 10K - 1M |\n| GPT-4.1 Mini | gpt-4.1-mini | 1,047K | Yes | Long-context, affordable | 10K - 10M |\n| GPT-4.1 Nano | gpt-4.1-nano | 1,047K | Yes | Long-context, lightweight | 10K - 10M |\n| o3 | o3 | 200K | Yes | Deep reasoning","hierarchy":{"lvl0":"Getting Started","lvl1":"Azure OpenAI Provider Guide","lvl2":"Available Models","lvl3":""}},
5329
5329
  {"objectID":"83e4d3a8ff8b4691c53a1676687f7e586215d4e34280634ea31c8315203068ea","title":"Configure Private Endpoint","url":"/docs/getting-started/providers/azure-openai#configure-private-endpoint","content":"`bash","hierarchy":{"lvl0":"Getting Started","lvl1":"Azure OpenAI Provider Guide","lvl2":"Configure Private Endpoint","lvl3":""}},
5330
5330
  {"objectID":"6512e7e4dd5372c7e8a22a4d175f9f0e963985ae2a0f251264c67e1167ec3bc2","title":"Create private endpoint","url":"/docs/getting-started/providers/azure-openai#create-private-endpoint","content":"az network private-endpoint create \\\n --name my-openai-pe \\\n --resource-group my-resource-group \\\n --vnet-name my-vnet \\\n --subnet my-subnet \\\n --private-connection-resource-id \"/subscriptions/{sub}/resourceGroups/{rg}/providers/Microsoft.CognitiveServices/accounts/my-openai\" \\\n --group-id account \\\n --connection-name my-openai-connection\n`","hierarchy":{"lvl0":"Getting Started","lvl1":"Azure OpenAI Provider Guide","lvl2":"Create private endpoint","lvl3":""}},
5331
5331
  {"objectID":"9e55839ad16d12dfb731255b2eb4388ded2e66bff2ee5ddd387b848ba0cec358","title":"Private DNS Zone","url":"/docs/getting-started/providers/azure-openai#private-dns-zone","content":"`bash","hierarchy":{"lvl0":"Getting Started","lvl1":"Azure OpenAI Provider Guide","lvl2":"Private DNS Zone","lvl3":""}},
@@ -5876,7 +5876,7 @@
5876
5876
  {"objectID":"55af32fd95e624d302b6c125e3ca4ab007ab6fec64a33b64cdf7ec6d40716b0b","title":"API Route","url":"/docs/getting-started/providers#api-route","content":"OpenAI-compatible passthrough\n🤖 Default model: claude-sonnet-4-6\n🔑 API_ROUTE_API_KEY — no dedicated setup guide yet","hierarchy":{"lvl0":"Getting Started","lvl1":"AI Provider Guides","lvl2":"API Route","lvl3":""}},
5877
5877
  {"objectID":"aeb2b2fe20f3bdbf9ced4ba1b824aa6987eb4fb77a4d526ccc43145e0df29389","title":"[Replicate](/docs/getting-started/providers/replicate)","url":"/docs/getting-started/providers#replicatedocsgetting-startedprovidersreplicate","content":"Multi-modal gateway — LLM + image + video + avatar + music in one auth\n🎯 One REPLICATE_API_TOKEN for 5 modalities\n📚 Llama 3.1 70B/405B, Mistral, Mixtral\n🎨 FLUX 1.1 Pro, SDXL, Stable Diffusion 3.5\n🎬 Wan-Alpha video, MuseTalk avatar, MusicGen music\n🔑 Token from replicate.com/account/api-tokens\n\nSetup Guide →","hierarchy":{"lvl0":"Getting Started","lvl1":"AI Provider Guides","lvl2":"[Replicate](/docs/getting-started/providers/replicate)","lvl3":""}},
5878
5878
  {"objectID":"b9ffc0591de0eb50f9e034dbc55e440b1baa8f297ee048c9d81f4c6ed1eee103","title":"🔍 Embedding-Only Providers","url":"/docs/getting-started/providers#-embedding-only-providers","content":"Specialised embedding providers for RAG / retrieval pipelines (no chat):","hierarchy":{"lvl0":"Getting Started","lvl1":"AI Provider Guides","lvl2":"🔍 Embedding-Only Providers","lvl3":""}},
5879
- {"objectID":"698944d6a25599fd95376072009a13fba67e29164c9b602f0e9b1e848b6b916b","title":"[Voyage AI](/docs/getting-started/providers/voyage)","url":"/docs/getting-started/providers#voyage-aidocsgetting-startedprovidersvoyage","content":"Top-tier RAG embeddings\n📊 voyage-3-large flagship; voyage-3.5 default; voyage-code-3 for code\n🌍 voyage-multilingual-2 + domain-tuned (finance, law)\n🔑 API key from dash.voyageai.com/api-keys\n\nSetup Guide →","hierarchy":{"lvl0":"Getting Started","lvl1":"AI Provider Guides","lvl2":"[Voyage AI](/docs/getting-started/providers/voyage)","lvl3":""}},
5879
+ {"objectID":"698944d6a25599fd95376072009a13fba67e29164c9b602f0e9b1e848b6b916b","title":"[Voyage AI](/docs/getting-started/providers/voyage)","url":"/docs/getting-started/providers#voyage-aidocsgetting-startedprovidersvoyage","content":"Top-tier RAG embeddings\n📊 voyage-4-large newest flagship; voyage-3.5 default; voyage-code-3 / voyage-code-4 for code\n🌍 voyage-multilingual-2 + domain-tuned (finance, law)\n🔑 API key from dash.voyageai.com/api-keys\n\nSetup Guide →","hierarchy":{"lvl0":"Getting Started","lvl1":"AI Provider Guides","lvl2":"[Voyage AI](/docs/getting-started/providers/voyage)","lvl3":""}},
5880
5880
  {"objectID":"29d290214c79046b93e1fdbe05b51297117750dab6901db32fe09f589601b38a","title":"Jina AI","url":"/docs/getting-started/providers#jina-ai","content":"Embeddings + reranking\n📊 jina-embeddings-v3 multilingual flagship\n🔄 jina-reranker-v2 for retrieval reranking\n🔍 jina-colbert-v2 late-interaction retrieval\n🔑 API key from jina.ai","hierarchy":{"lvl0":"Getting Started","lvl1":"AI Provider Guides","lvl2":"Jina AI","lvl3":""}},
5881
5881
  {"objectID":"f1c52f1f7430763dffd4085b88c57d69ef5bb6b1884ea3cf6bb3fd8fe1079f91","title":"🎨 Direct Image Generation","url":"/docs/getting-started/providers#-direct-image-generation","content":"Specialised image-gen providers (in addition to Vertex Imagen / OpenAI DALL-E / Anthropic / Bedrock):","hierarchy":{"lvl0":"Getting Started","lvl1":"AI Provider Guides","lvl2":"🎨 Direct Image Generation","lvl3":""}},
5882
5882
  {"objectID":"4a4f54e3c06b19ba5c0fc42c6797be872d019b85daf6fc4753ef5126c39e2657","title":"[Stability AI](/docs/getting-started/providers/stability)","url":"/docs/getting-started/providers#stability-aidocsgetting-startedprovidersstability","content":"Stable Image Ultra/Core + SD 3.5 family\n🎨 Stable Image Ultra (flagship), Core (fast), SD 3.5 Large/Large-Turbo/Medium\n🖼️ PNG output, aspect-ratio + negative-prompt + seed support\n🔑 API key from platform.stability.ai/account/keys\n🔄 Aliases: stability-ai, sd\n\nSetup Guide →","hierarchy":{"lvl0":"Getting Started","lvl1":"AI Provider Guides","lvl2":"[Stability AI](/docs/getting-started/providers/stability)","lvl3":""}},
@@ -6357,7 +6357,7 @@
6357
6357
  {"objectID":"e2d66c098b27a18e31a0985c2b41817ec2896b37532ec07b38e09f1ed760c1b7","title":"\"OpenAI TTS request timed out after 30 seconds\"","url":"/docs/getting-started/providers/openai-tts#openai-tts-request-timed-out-after-30-seconds","content":"A network issue or overloaded API caused the request to time out. Retry the request — the error is marked retriable by NeuroLink's error system.","hierarchy":{"lvl0":"Getting Started","lvl1":"OpenAI TTS Provider Guide","lvl2":"\"OpenAI TTS request timed out after 30 seconds\"","lvl3":""}},
6358
6358
  {"objectID":"9a54f6363be2937d7c7f9328a1e90b4e1945f5d0c31f3e66477c6468d131b099","title":"Audio sounds distorted at high speed","url":"/docs/getting-started/providers/openai-tts#audio-sounds-distorted-at-high-speed","content":"Speeds above 2.0 can introduce artifacts. Use speed: 1.0 – 1.5 for natural-sounding output.","hierarchy":{"lvl0":"Getting Started","lvl1":"OpenAI TTS Provider Guide","lvl2":"Audio sounds distorted at high speed","lvl3":""}},
6359
6359
  {"objectID":"f98d39032204ab3aed29744d24a667388d714a7e1214577e166e2d377469d80e","title":"See Also","url":"/docs/getting-started/providers/openai-tts#see-also","content":"TTS Integration Guide — complete multi-provider TTS reference\nAudio Input (STT) — speech-to-text counterpart\nOpenAI Provider Guide — full OpenAI text generation provider\nElevenLabs Provider Guide — alternative TTS provider with voice cloning\n\nNeed Help? Join the GitHub Discussions or open an issue.","hierarchy":{"lvl0":"Getting Started","lvl1":"OpenAI TTS Provider Guide","lvl2":"See Also","lvl3":""}},
6360
- {"objectID":"988dc021ae1e24ac074ba6ccd12141310a44053f1327466076993828c5bf0d61","title":"OpenAI Provider Guide","url":"/docs/getting-started/providers/openai","content":"OpenAI Provider Guide\n\nAccess GPT-5.4, GPT-5, GPT-4o, o-series reasoning models, and embedding models through the OpenAI API\n\nOverview\n\nOpenAI provides API access to the GPT model family, including the latest GPT-5.4 series, GPT-5 series, GPT-4o multimodal models, and o-series reasoning models. NeuroLink talks to the OpenAI HTTP API directly — generation, streaming, tool calling, vision and embeddings are all served by NeuroLink's own client, with no third-party model SDK in the path.\n\nKey Benefits\nGPT-5.4 Series: Newest flagship models (March 2026) with 400K context windows\nGPT-5 Series: Flagship models with up to 400K context windows\nGPT-4.1 Series: 1M context window models for large document processing\nGPT-4o: Multimodal model with vision support\no-Series Reasoning: o3, o3-pro, and o4-mini for deep reasoning tasks\nEmbeddings: text-embedding-3-small and other embedding models\nTool/Function Calling: Full support for agent workflows\nStreaming: Real-time streaming responses with tool execution\nProxy Support: Route requests through HTTP/HTTPS/SOCKS proxies\n\nProvider Aliases\n\nYou can reference this provider using any of the following names:\n\n| Alias | Usage |\n| --------- | --------------------------- |\n| openai | Canonical provider name |\n| gpt | Short alias for convenience |\n| chatgpt | Alternative alias |\n\nThese aliases are registered in src/lib/factories/providerRegistry.ts.\n\nQuick Start\nGet Your API Key\nVisit platform.openai.com/api-keys\nSign in or create an account\nClick Create new secret key\nCopy your new API key (starts with sk-)\nConfigure Environment\n\nAdd to your .env file:\nTest the Setup\n\nSupported Models\n\nAvailable Models (from OpenAIModels enum)\n\n| Enum Key | Model ID | Series | Context Window | Notes |\n| --------------------- | --------------------- | ------------ | -------------- | -------------------- |\n| GPT_5_4 | gpt-5.4 | GPT-5.4 | 400K | New (March 2026) |\n| GPT_5_4_MINI | gpt-5.4-mini | GPT-5.4 | 400K | New (March 2026) |\n| GPT_5_4_NANO | gpt-5.4-nano | GPT-5.4 | 400K | New (March 2026) |\n| GPT_5_3_CODEX | gpt-5.3-codex | GPT-5.3 | 400K | |\n| GPT_5_2 | gpt-5.2 | GPT-5.2 | 400K | |\n| GPT_5_2_CHAT_LATEST | gpt-5.2-chat-latest | GPT-5.2 | 128K | |\n| GPT_5_2_PRO | gpt-5.2-pro | GPT-5.2 | 400K | |\n| GPT_5_2_CODEX | gpt-5.2-codex | GPT-5.2 | 400K | |\n| GPT_5_1 | gpt-5.1 | GPT-5.1 | 400K | |\n| GPT_5_1_CHAT_LATEST | gpt-5.1-chat-latest | GPT-5.1 | 128K | |\n| GPT_5_1_CODEX | gpt-5.1-codex | GPT-5.1 | 400K | |\n| GPT_5_1_CODEX_MAX | gpt-5.1-codex-max | GPT-5.1 | 400K | |\n| GPT_5_1_CODEX_MINI | gpt-5.1-codex-mini | GPT-5.1 | 400K | |\n| GPT_5 | gpt-5 | GPT-5 | 400K | |\n| GPT_5_MINI | gpt-5-mini | GPT-5 | 400K | |\n| GPT_5_NANO | gpt-5-nano | GPT-5 | 400K | |\n| GPT_5_PRO | gpt-5-pro | GPT-5 | 400K | |\n| GPT_5_CHAT_LATEST | gpt-5-chat-latest | GPT-5 | 128K | |\n| GPT_5_CODEX | gpt-5-codex | GPT-5 | 400K | |\n| GPT_OSS_120B | gpt-oss-120b | GPT OSS | 128K | |\n| GPT_OSS_20B | gpt-oss-20b | GPT OSS | 128K | |\n| GPT_4_1 | gpt-4.1 | GPT-4.1 | 1M | |\n| GPT_4_1_MINI | gpt-4.1-mini | GPT-4.1 | 1M | |\n| GPT_4_1_NANO | gpt-4.1-nano | GPT-4.1 | 1M | |\n| GPT_4O | gpt-4o | GPT-4o | 128K | |\n| GPT_4O_MINI | gpt-4o-mini | GPT-4o | 128K | Default model |\n| O3 | o3 | O-Series | 200K | |\n| O3_MINI | o3-mini | O-Series | 200K | |\n| O3_PRO | o3-pro | O-Series | 200K | |\n| O4_MINI | o4-mini | O-Series | 200K | |\n| O1 | o1 | O-","hierarchy":{"lvl0":"Getting Started","lvl1":"OpenAI Provider Guide","lvl2":"","lvl3":""}},
6360
+ {"objectID":"988dc021ae1e24ac074ba6ccd12141310a44053f1327466076993828c5bf0d61","title":"OpenAI Provider Guide","url":"/docs/getting-started/providers/openai","content":"OpenAI Provider Guide\n\nAccess GPT-5.4, GPT-5, GPT-4o, o-series reasoning models, and embedding models through the OpenAI API\n\nOverview\n\nOpenAI provides API access to the GPT model family, including the latest GPT-5.4 series, GPT-5 series, GPT-4o multimodal models, and o-series reasoning models. NeuroLink talks to the OpenAI HTTP API directly — generation, streaming, tool calling, vision and embeddings are all served by NeuroLink's own client, with no third-party model SDK in the path.\n\nKey Benefits\nGPT-5.4 Series: Newest flagship models (March 2026) with 400K context windows\nGPT-5 Series: Flagship models with up to 400K context windows\nGPT-4.1 Series: 1M context window models for large document processing\nGPT-4o: Multimodal model with vision support\no-Series Reasoning: o3, o3-pro, and o4-mini for deep reasoning tasks\nEmbeddings: text-embedding-3-small and other embedding models\nTool/Function Calling: Full support for agent workflows\nStreaming: Real-time streaming responses with tool execution\nProxy Support: Route requests through HTTP/HTTPS/SOCKS proxies\n\nProvider Aliases\n\nYou can reference this provider using any of the following names:\n\n| Alias | Usage |\n| --------- | --------------------------- |\n| openai | Canonical provider name |\n| gpt | Short alias for convenience |\n| chatgpt | Alternative alias |\n\nThese aliases are registered in src/lib/factories/providerRegistry.ts.\n\nQuick Start\nGet Your API Key\nVisit platform.openai.com/api-keys\nSign in or create an account\nClick Create new secret key\nCopy your new API key (starts with sk-)\nConfigure Environment\n\nAdd to your .env file:\nTest the Setup\n\nSupported Models\n\nAvailable Models (from OpenAIModels enum)\n\n| Enum Key | Model ID | Series | Context Window | Notes |\n| --------------------- | --------------------- | ------------ | -------------- | ------------------------ |\n| GPT_6_ASTRA | gpt-6-astra | GPT-6 | 1.05M | New (September 2026) |\n| GPT_6_SOL | gpt-6-sol | GPT-6 | 1.05M | New (September 2026) |\n| GPT_6_LUNA | gpt-6-luna | GPT-6 | 1.05M | New (September 2026) |\n| GPT_5_4 | gpt-5.4 | GPT-5.4 | 400K | New (March 2026) |\n| GPT_5_4_MINI | gpt-5.4-mini | GPT-5.4 | 400K | New (March 2026) |\n| GPT_5_4_NANO | gpt-5.4-nano | GPT-5.4 | 400K | New (March 2026) |\n| GPT_5_3_CODEX | gpt-5.3-codex | GPT-5.3 | 400K | |\n| GPT_5_2 | gpt-5.2 | GPT-5.2 | 400K | |\n| GPT_5_2_CHAT_LATEST | gpt-5.2-chat-latest | GPT-5.2 | 128K | |\n| GPT_5_2_PRO | gpt-5.2-pro | GPT-5.2 | 400K | |\n| GPT_5_2_CODEX | gpt-5.2-codex | GPT-5.2 | 400K | |\n| GPT_5_1 | gpt-5.1 | GPT-5.1 | 400K | |\n| GPT_5_1_CHAT_LATEST | gpt-5.1-chat-latest | GPT-5.1 | 128K | |\n| GPT_5_1_CODEX | gpt-5.1-codex | GPT-5.1 | 400K | |\n| GPT_5_1_CODEX_MAX | gpt-5.1-codex-max | GPT-5.1 | 400K | |\n| GPT_5_1_CODEX_MINI | gpt-5.1-codex-mini | GPT-5.1 | 400K | |\n| GPT_5 | gpt-5 | GPT-5 | 400K | |\n| GPT_5_MINI | gpt-5-mini | GPT-5 | 400K | |\n| GPT_5_NANO | gpt-5-nano | GPT-5 | 400K | |\n| GPT_5_PRO | gpt-5-pro | GPT-5 | 400K | |\n| GPT_5_CHAT_LATEST | gpt-5-chat-latest | GPT-5 | 128K | |\n| GPT_5_CODEX | gpt-5-codex | GPT-5 | 400K | |\n| GPT_OSS_120B | gpt-oss-120b | GPT OSS | 128K | |\n| GPT_OSS_20B | gpt-oss-20b | GPT OSS | 128K | |\n| GPT_4_1 | gpt-4.1 | GPT-4.1 | 1M | |\n| GPT_4_1_MINI | gpt-4.1-mini | GPT-4.1 | 1M | |\n| GPT_4_1_NANO | gpt-4.1-nano | GPT-4.1 | 1M | |\n| GPT_4O | gpt-4o | GPT-4o | 128K | |\n| GPT_4O_MINI | gpt-4o-mini | GPT-4o | 128K | Default model |\n| O3 | o3 ","hierarchy":{"lvl0":"Getting Started","lvl1":"OpenAI Provider Guide","lvl2":"","lvl3":""}},
6361
6361
  {"objectID":"09a56d9dc91320ff37eda19c92d08529dc6471dd3b273124ca539bf8c68cf8eb","title":"OpenAI Provider Guide","url":"/docs/getting-started/providers/openai#openai-provider-guide","content":"Access GPT-5.4, GPT-5, GPT-4o, o-series reasoning models, and embedding models through the OpenAI API","hierarchy":{"lvl0":"Getting Started","lvl1":"OpenAI Provider Guide","lvl2":"OpenAI Provider Guide","lvl3":""}},
6362
6362
  {"objectID":"00a9eec16078fe5bf845c9876ae67265e060b64f3150a402681173526d5f9037","title":"Overview","url":"/docs/getting-started/providers/openai#overview","content":"OpenAI provides API access to the GPT model family, including the latest GPT-5.4 series, GPT-5 series, GPT-4o multimodal models, and o-series reasoning models. NeuroLink talks to the OpenAI HTTP API directly — generation, streaming, tool calling, vision and embeddings are all served by NeuroLink's own client, with no third-party model SDK in the path.","hierarchy":{"lvl0":"Getting Started","lvl1":"OpenAI Provider Guide","lvl2":"Overview","lvl3":""}},
6363
6363
  {"objectID":"7ef3ddd9cd1195ba96e4a45b2019a85d9ef0f4aa77585f4cff3f58140d40ea8e","title":"Key Benefits","url":"/docs/getting-started/providers/openai#key-benefits","content":"GPT-5.4 Series: Newest flagship models (March 2026) with 400K context windows\nGPT-5 Series: Flagship models with up to 400K context windows\nGPT-4.1 Series: 1M context window models for large document processing\nGPT-4o: Multimodal model with vision support\no-Series Reasoning: o3, o3-pro, and o4-mini for deep reasoning tasks\nEmbeddings: text-embedding-3-small and other embedding models\nTool/Function Calling: Full support for agent workflows\nStreaming: Real-time streaming responses with tool execution\nProxy Support: Route requests through HTTP/HTTPS/SOCKS proxies","hierarchy":{"lvl0":"Getting Started","lvl1":"OpenAI Provider Guide","lvl2":"Key Benefits","lvl3":""}},
@@ -6370,7 +6370,7 @@
6370
6370
  {"objectID":"51393d2a6f860f549650441d19ba86353e5feb0d267b47894b1cd40e16d7e3d0","title":"Quick generation","url":"/docs/getting-started/providers/openai#quick-generation","content":"pnpm run cli -- generate \"Hello from GPT!\" \\\n --provider openai","hierarchy":{"lvl0":"Getting Started","lvl1":"OpenAI Provider Guide","lvl2":"Quick generation","lvl3":""}},
6371
6371
  {"objectID":"6102cd238f922f95762068dd3d2b3950e839a87ac388ee96bb805db79c47d00e","title":"Use specific model","url":"/docs/getting-started/providers/openai#use-specific-model","content":"pnpm run cli -- generate \"Write a haiku about AI\" \\\n --provider openai \\\n --model \"gpt-4o\"","hierarchy":{"lvl0":"Getting Started","lvl1":"OpenAI Provider Guide","lvl2":"Use specific model","lvl3":""}},
6372
6372
  {"objectID":"b56485bde526a3210810b768ba819d40dffdff5e3cf66309d26c5f53b89e30c1","title":"Interactive loop mode","url":"/docs/getting-started/providers/openai#interactive-loop-mode","content":"pnpm run cli -- loop \\\n --provider openai \\\n --model \"gpt-4o-mini\"\n`","hierarchy":{"lvl0":"Getting Started","lvl1":"OpenAI Provider Guide","lvl2":"Interactive loop mode","lvl3":""}},
6373
- {"objectID":"dc674c0134ff9c1c707403e195849d7738176f984fe0c8226f05877f4951e0cd","title":"Available Models (from OpenAIModels enum)","url":"/docs/getting-started/providers/openai#available-models-from-openaimodels-enum","content":"| Enum Key | Model ID | Series | Context Window | Notes |\n| --------------------- | --------------------- | ------------ | -------------- | -------------------- |\n| GPT_5_4 | gpt-5.4 | GPT-5.4 | 400K | New (March 2026) |\n| GPT_5_4_MINI | gpt-5.4-mini | GPT-5.4 | 400K | New (March 2026) |\n| GPT_5_4_NANO | gpt-5.4-nano | GPT-5.4 | 400K | New (March 2026) |\n| GPT_5_3_CODEX | gpt-5.3-codex | GPT-5.3 | 400K | |\n| GPT_5_2 | gpt-5.2 | GPT-5.2 | 400K | |\n| GPT_5_2_CHAT_LATEST | gpt-5.2-chat-latest | GPT-5.2 | 128K | |\n| GPT_5_2_PRO | gpt-5.2-pro | GPT-5.2 | 400K | |\n| GPT_5_2_CODEX | gpt-5.2-codex | GPT-5.2 | 400K | |\n| GPT_5_1 | gpt-5.1 | GPT-5.1 | 400K | |\n| GPT_5_1_CHAT_LATEST | gpt-5.1-chat-latest | GPT-5.1 | 128K | |\n| GPT_5_1_CODEX | gpt-5.1-codex | GPT-5.1 | 400K | |\n| GPT_5_1_CODEX_MAX | gpt-5.1-codex-max | GPT-5.1 | 400K | |\n| GPT_5_1_CODEX_MINI | gpt-5.1-codex-mini | GPT-5.1 | 400K | |\n| GPT_5 | gpt-5 | GPT-5 | 400K | |\n| GPT_5_MINI | gpt-5-mini | GPT-5 | 400K | |\n| GPT_5_NANO | gpt-5-nano | GPT-5 | 400K | |\n| GPT_5_PRO | gpt-5-pro | GPT-5 | 400K | |\n| GPT_5_CHAT_LATEST | gpt-5-chat-latest | GPT-5 | 128K | ","hierarchy":{"lvl0":"Getting Started","lvl1":"OpenAI Provider Guide","lvl2":"Available Models (from OpenAIModels enum)","lvl3":""}},
6373
+ {"objectID":"dc674c0134ff9c1c707403e195849d7738176f984fe0c8226f05877f4951e0cd","title":"Available Models (from OpenAIModels enum)","url":"/docs/getting-started/providers/openai#available-models-from-openaimodels-enum","content":"| Enum Key | Model ID | Series | Context Window | Notes |\n| --------------------- | --------------------- | ------------ | -------------- | ------------------------ |\n| GPT_6_ASTRA | gpt-6-astra | GPT-6 | 1.05M | New (September 2026) |\n| GPT_6_SOL | gpt-6-sol | GPT-6 | 1.05M | New (September 2026) |\n| GPT_6_LUNA | gpt-6-luna | GPT-6 | 1.05M | New (September 2026) |\n| GPT_5_4 | gpt-5.4 | GPT-5.4 | 400K | New (March 2026) |\n| GPT_5_4_MINI | gpt-5.4-mini | GPT-5.4 | 400K | New (March 2026) |\n| GPT_5_4_NANO | gpt-5.4-nano | GPT-5.4 | 400K | New (March 2026) |\n| GPT_5_3_CODEX | gpt-5.3-codex | GPT-5.3 | 400K | |\n| GPT_5_2 | gpt-5.2 | GPT-5.2 | 400K | |\n| GPT_5_2_CHAT_LATEST | gpt-5.2-chat-latest | GPT-5.2 | 128K | |\n| GPT_5_2_PRO | gpt-5.2-pro | GPT-5.2 | 400K | |\n| GPT_5_2_CODEX | gpt-5.2-codex | GPT-5.2 | 400K | |\n| GPT_5_1 | gpt-5.1 | GPT-5.1 | 400K | |\n| GPT_5_1_CHAT_LATEST | gpt-5.1-chat-latest | GPT-5.1 | 128K | |\n| GPT_5_1_CODEX | gpt-5.1-codex | GPT-5.1 | 400K | |\n| GPT_5_1_CODEX_MAX | gpt-5.1-codex-max | GPT-5.1 | 400K | |\n| GPT_5_1_CODEX_MINI | gpt-5.1-codex-mini | GPT-5.1 | 400K | |\n| GPT_5 | gpt-5 | GPT-5 | 400K | |\n| GPT_5_MINI ","hierarchy":{"lvl0":"Getting Started","lvl1":"OpenAI Provider Guide","lvl2":"Available Models (from OpenAIModels enum)","lvl3":""}},
6374
6374
  {"objectID":"daaa71958d244b14e0a92247a5ea7890e487f466f9647915a9b274196dcf2cd3","title":"Default Model","url":"/docs/getting-started/providers/openai#default-model","content":"The default model when no model is specified is gpt-4o-mini (set via OpenAIModels.GPT_4O_MINI in the provider registry). This can be overridden with the OPENAI_MODEL environment variable.\n\nNote: When using NeuroLink SDK/CLI, the default is gpt-4o-mini. When instantiating OpenAIProvider directly without setting OPENAI_MODEL, the internal fallback is gpt-4o.","hierarchy":{"lvl0":"Getting Started","lvl1":"OpenAI Provider Guide","lvl2":"Default Model","lvl3":""}},
6375
6375
  {"objectID":"a722c79038b2a55ddfff8bbe51cc124c6b52334826423cf1b4db83de4e7b9aef","title":"Multimodal Capabilities","url":"/docs/getting-started/providers/openai#multimodal-capabilities","content":"Models listed in VISION_CAPABILITIES for the openai provider support image analysis. This includes the GPT-5 family, GPT-4.1 family, GPT-4o family, and o-series models.","hierarchy":{"lvl0":"Getting Started","lvl1":"OpenAI Provider Guide","lvl2":"Multimodal Capabilities","lvl3":""}},
6376
6376
  {"objectID":"c331cb5e1ae253efea1792e057d6a4178c61191fe30972b6974856225af3cb12","title":"Image Analysis","url":"/docs/getting-started/providers/openai#image-analysis","content":"`bash","hierarchy":{"lvl0":"Getting Started","lvl1":"OpenAI Provider Guide","lvl2":"Image Analysis","lvl3":""}},
@@ -6625,9 +6625,9 @@
6625
6625
  {"objectID":"265aa7c2b637784ce5f41281eb2722eba47ad69e34cb7d1e0dae84001bbdb311","title":"Verification status","url":"/docs/getting-started/providers/upstage#verification-status","content":"Tier-2 onboarding requires evidence before a provider is accepted, and\npnpm run verify:provider-onboarding gates it in CI. This is what the\ncatalog records for Upstage:\n\n| Probe | Result |\n| --------------------- | -------------------------------------------------- |\n| Roster | authenticated GET /v1/models, HTTP 200, 2026-09-03 |\n| Auth rejection | HTTP 401 invalid_api_key, 2026-09-03 |\n| Live capability sweep | not run |\n\n⚠️ No live capability sweep is recorded for Upstage. The roster and auth\nbehaviour were verified against the real API on the date above, but the\ncapability flags come from the catalog declaration rather than from a\nmeasured end-to-end run. Treat them as the provider's stated behaviour.","hierarchy":{"lvl0":"Getting Started","lvl1":"Upstage Provider Guide","lvl2":"Verification status","lvl3":""}},
6626
6626
  {"objectID":"5afd1579083c6815ad76bf7e81bffa1ecf55c035c581074fc15639829011ccea","title":"Troubleshooting","url":"/docs/getting-started/providers/upstage#troubleshooting","content":"| Symptom | Cause | Fix |\n| ------------------------- | ----------------------------------- | ----------------------------------------------------------------- |\n| Invalid Upstage API key | UPSTAGE_API_KEY unset or wrong | Check the key at https://console.upstage.ai/api-keys |\n| Model not found | The roster changed since 2026-09-03 | Pick a current id; catalog providers retire models without notice |","hierarchy":{"lvl0":"Getting Started","lvl1":"Upstage Provider Guide","lvl2":"Troubleshooting","lvl3":""}},
6627
6627
  {"objectID":"e0ad5535a3205cb65674e5d16560f2013f10c14074a8e974022a1b7a1e074330","title":"See also","url":"/docs/getting-started/providers/upstage#see-also","content":"Provider setup overview\nAll providers\nTier-2 onboarding — how this provider's JSON becomes a working integration\nProvider feature compatibility","hierarchy":{"lvl0":"Getting Started","lvl1":"Upstage Provider Guide","lvl2":"See also","lvl3":""}},
6628
- {"objectID":"f336420da8773b8ccbfbb545df2bfb3a8201804c4d38fa8408ac119ad21d8317","title":"Voyage AI Provider Guide","url":"/docs/getting-started/providers/voyage","content":"Voyage AI Provider Guide\n\nTop-tier RAG embeddings — text-only provider exposing embed() and\nembedMany() (chat / streaming intentionally not supported)\n\nOverview\n\nVoyage AI provides some of the highest-accuracy text embeddings available\ntoday, particularly strong on retrieval and reranking benchmarks. NeuroLink\nwraps api.voyageai.com/v1/embeddings so the same embed() / embedMany()\ncontract used by every other embedding-capable provider works for Voyage.\nvoyage-3.5 — latest general-purpose (default)\nvoyage-3-large — flagship; highest accuracy\nvoyage-3.5-lite — smaller / cheaper\nvoyage-code-3 — code-tuned (best for code retrieval)\nvoyage-finance-2, voyage-law-2 — domain-tuned\nvoyage-multilingual-2 — non-English / cross-lingual\n\nKey Facts\nProtocol: Native REST API (/embeddings only — not OpenAI-compat\n for chat)\nDefault base URL: https://api.voyageai.com/v1\nDefault model: voyage-3.5\nMax input tokens: 32K (16K on voyage-law-2)\nStreaming / chat / tool calling: NOT supported (embedding-only;\n executeStream and getAISDKModel throw a friendly error)\nPricing: Per-million input tokens; output dimension is the\n embedding vector, not generated tokens\n\nQuick Start\nGet an API Key\n\nSign up at https://www.voyageai.com/ and\ncreate an API key at\nhttps://dash.voyageai.com/api-keys.\nConfigure Environment\nGenerate Your First Embedding\n\nSDK Usage\n\nSingle Embedding\n\nBatch Embeddings\n\nCode Embeddings\n\nPer-Call Credentials\n\nUse with NeuroLink RAG\n\nVoyage embeddings plug into NeuroLink's RAG pipeline. Configure the RAG\nembedder to use Voyage:\n\nCLI Usage\n\nVoyage is embedding-only — there is no cli generate flow because\ngenerate is a chat-completion path. Use the SDK directly, or use Voyage\nas the embedder behind a RAG-enabled cli generate:\n\nProvider Aliases\n\n| Alias | Example |\n| ----------- | ---------------------- |\n| voyage | --provider voyage |\n| voyage-ai | --provider voyage-ai |\n\n(Note: aliases are mostly relevant for RAG embedder routing; standalone\nchat use is not supported.)\n\nConfiguration Reference\n\n| Environment Variable | Required | Default | Description |\n| -------------------- | -------- | ----------------------------- | ----------------------- |\n| VOYAGE_API_KEY | Yes | — | Voyage AI API key |\n| VOYAGE_MODEL | No | voyage-3.5 | Default embedding model |\n| VOYAGE_BASE_URL | No | https://api.voyageai.com/v1 | Base URL |\n\nModel Reference\n\nPer the Voyage embeddings docs:\n\n| Model | Default dim | Tokens | Best For |\n| ----------------------- | ----------- | ------ | -------------------------- |\n| voyage-3.5 | 1024 | 32K | General-purpose (default) |\n| voyage-3.5-lite | 1024 | 32K | Smaller / cheaper |\n| voyage-3-large | 1024 | 32K | Flagship; highest accuracy |\n| voyage-code-3 | 1024 | 32K | Code retrieval |\n| voyage-finance-2 | 1024 | 32K | Finance domain |\n| voyage-law-2 | 1024 | 16K | Legal domain |\n| voyage-multilingual-2 | unspecified | 32K | Cross-lingual |\n\nMatryoshka flexible dimensions: voyage-3.5, voyage-3.5-lite,\nvoyage-3-large, and voyage-code-3 all support flexible output dimensions\nof 256 / 512 / 1024 / 2048 via the output_dimension parameter on the\nVoyage API. The default (and what NeuroLink currently returns) is 1024.\nvoyage-finance-2, voyage-law-2, and voyage-multilingual-2 only emit\nthe default dimension. See the FAQ below for how to request a smaller\ndimension explicitly.\n\nFeature Support Matrix\n\n| Feature | voyage-3.5 | voyage-3-large | voyage-code-3 |\n| --------------- | -------------------- | -------------- | ------------- |\n| Embeddings | Yes | Yes | Yes |\n| Single embed | Yes | Yes | Yes |\n| Batch embed | Yes (128 inputs/req) | Yes | Yes |\n| Text generation | No | No | No |\n| Streaming | No | No | No |\n| Tool calling | No | No | No |\n| Vision | No | No | No |\n\nTroubleshooting\n\n\"Invalid Voyage AI API key\"\n\nGet / rotate at\nhttps://dash.voyageai.com/api-keys.\n\n\"Voyage AI rate limit exceeded\"\n\nVoyage has per-minute and daily limits per tier. Free-tier is generous\nfor development; production usage typically requires the paid tier.\nImplement exponential backoff or use embedMany (batched) instead of\nmany single embed calls.\n\n\"embed() / embedMany() not available\"\n\nVoyage IS embedding-only — these methods work. If you see \"not supported\"\nerrors, verify you're using provider: \"voyage\" and the API key is set.\nFor chat / streaming on Voyage, you can't","hierarchy":{"lvl0":"Getting Started","lvl1":"Voyage AI Provider Guide","lvl2":"","lvl3":""}},
6628
+ {"objectID":"f336420da8773b8ccbfbb545df2bfb3a8201804c4d38fa8408ac119ad21d8317","title":"Voyage AI Provider Guide","url":"/docs/getting-started/providers/voyage","content":"Voyage AI Provider Guide\n\nTop-tier RAG embeddings — text-only provider exposing embed() and\nembedMany() (chat / streaming intentionally not supported)\n\nOverview\n\nVoyage AI provides some of the highest-accuracy text embeddings available\ntoday, particularly strong on retrieval and reranking benchmarks. NeuroLink\nwraps api.voyageai.com/v1/embeddings so the same embed() / embedMany()\ncontract used by every other embedding-capable provider works for Voyage.\nvoyage-4 — newest general-purpose flagship (not yet the default)\nvoyage-4-large — largest / highest accuracy in the 4.x line\nvoyage-4-lite — smaller / cheaper 4.x variant\nvoyage-code-4 — code-tuned (best for code retrieval), 4.x line\nvoyage-3.5 — general-purpose (default)\nvoyage-3-large — flagship; highest accuracy\nvoyage-3.5-lite — smaller / cheaper\nvoyage-code-3 — code-tuned (best for code retrieval)\nvoyage-finance-2, voyage-law-2 — domain-tuned\nvoyage-multilingual-2 — non-English / cross-lingual\n\nKey Facts\nProtocol: Native REST API (/embeddings only — not OpenAI-compat\n for chat)\nDefault base URL: https://api.voyageai.com/v1\nDefault model: voyage-3.5\nMax input tokens: 32K (16K on voyage-law-2)\nStreaming / chat / tool calling: NOT supported (embedding-only;\n executeStream and getAISDKModel throw a friendly error)\nPricing: Per-million input tokens; output dimension is the\n embedding vector, not generated tokens\n\nQuick Start\nGet an API Key\n\nSign up at https://www.voyageai.com/ and\ncreate an API key at\nhttps://dash.voyageai.com/api-keys.\nConfigure Environment\nGenerate Your First Embedding\n\nSDK Usage\n\nSingle Embedding\n\nBatch Embeddings\n\nCode Embeddings\n\nPer-Call Credentials\n\nUse with NeuroLink RAG\n\nVoyage embeddings plug into NeuroLink's RAG pipeline. Configure the RAG\nembedder to use Voyage:\n\nCLI Usage\n\nVoyage is embedding-only — there is no cli generate flow because\ngenerate is a chat-completion path. Use the SDK directly, or use Voyage\nas the embedder behind a RAG-enabled cli generate:\n\nProvider Aliases\n\n| Alias | Example |\n| ----------- | ---------------------- |\n| voyage | --provider voyage |\n| voyage-ai | --provider voyage-ai |\n\n(Note: aliases are mostly relevant for RAG embedder routing; standalone\nchat use is not supported.)\n\nConfiguration Reference\n\n| Environment Variable | Required | Default | Description |\n| -------------------- | -------- | ----------------------------- | ----------------------- |\n| VOYAGE_API_KEY | Yes | — | Voyage AI API key |\n| VOYAGE_MODEL | No | voyage-3.5 | Default embedding model |\n| VOYAGE_BASE_URL | No | https://api.voyageai.com/v1 | Base URL |\n\nModel Reference\n\nPer the Voyage embeddings docs:\n\n| Model | Default dim | Tokens | Best For |\n| ----------------------- | ----------- | ------ | ------------------------------- |\n| voyage-4 | 1024 | 32K | General-purpose, 4.x line |\n| voyage-4-large | 1024 | 32K | Flagship, highest quality (4.x) |\n| voyage-4-lite | 1024 | 32K | Smaller / cheaper (4.x) |\n| voyage-code-4 | 1024 | 32K | Code retrieval (4.x) |\n| voyage-3.5 | 1024 | 32K | General-purpose (default) |\n| voyage-3.5-lite | 1024 | 32K | Smaller / cheaper |\n| voyage-3-large | 1024 | 32K | Flagship; highest accuracy |\n| voyage-code-3 | 1024 | 32K | Code retrieval |\n| voyage-finance-2 | 1024 | 32K | Finance domain |\n| voyage-law-2 | 1024 | 16K | Legal domain |\n| voyage-multilingual-2 | unspecified | 32K | Cross-lingual |\n\nMatryoshka flexible dimensions: voyage-4, voyage-4-large,\nvoyage-4-lite, voyage-code-4, voyage-3.5, voyage-3.5-lite,\nvoyage-3-large, and voyage-code-3 all support flexible output dimensions\nof 256 / 512 / 1024 / 2048 via the output_dimension parameter on the\nVoyage API. The default (and what NeuroLink currently returns) is 1024.\nvoyage-finance-2, voyage-law-2, and voyage-multilingual-2 only emit\nthe default dimension. See the FAQ below for how to request a smaller\ndimension explicitly.\n\nFeature Support Matrix\n\n| Feature | voyage-3.5 | voyage-3-large | voyage-code-3 |\n| --------------- | -------------------- | -------------- | ------------- |\n| Embeddings | Yes | Yes | Yes |\n| Single embed | Yes | Yes | Yes |\n| Batch embed | Yes (128 inputs/req) | Yes | Yes |\n| Text generation | No | No | No |\n| Streaming | No | No | No |\n| Tool calling | No | No | No |\n| Visio","hierarchy":{"lvl0":"Getting Started","lvl1":"Voyage AI Provider Guide","lvl2":"","lvl3":""}},
6629
6629
  {"objectID":"31d0a4981c0396028c8536380313b4d38511b6fe67e0f49e8e81c35a49bc48f8","title":"Voyage AI Provider Guide","url":"/docs/getting-started/providers/voyage#voyage-ai-provider-guide","content":"Top-tier RAG embeddings — text-only provider exposing embed() and\nembedMany() (chat / streaming intentionally not supported)","hierarchy":{"lvl0":"Getting Started","lvl1":"Voyage AI Provider Guide","lvl2":"Voyage AI Provider Guide","lvl3":""}},
6630
- {"objectID":"15e3c23ac4bbda64e2a47a5490232b7076df375e991209c644e9fade69a3db62","title":"Overview","url":"/docs/getting-started/providers/voyage#overview","content":"Voyage AI provides some of the highest-accuracy text embeddings available\ntoday, particularly strong on retrieval and reranking benchmarks. NeuroLink\nwraps api.voyageai.com/v1/embeddings so the same embed() / embedMany()\ncontract used by every other embedding-capable provider works for Voyage.\nvoyage-3.5 — latest general-purpose (default)\nvoyage-3-large — flagship; highest accuracy\nvoyage-3.5-lite — smaller / cheaper\nvoyage-code-3 — code-tuned (best for code retrieval)\nvoyage-finance-2, voyage-law-2 — domain-tuned\nvoyage-multilingual-2 — non-English / cross-lingual","hierarchy":{"lvl0":"Getting Started","lvl1":"Voyage AI Provider Guide","lvl2":"Overview","lvl3":""}},
6630
+ {"objectID":"15e3c23ac4bbda64e2a47a5490232b7076df375e991209c644e9fade69a3db62","title":"Overview","url":"/docs/getting-started/providers/voyage#overview","content":"Voyage AI provides some of the highest-accuracy text embeddings available\ntoday, particularly strong on retrieval and reranking benchmarks. NeuroLink\nwraps api.voyageai.com/v1/embeddings so the same embed() / embedMany()\ncontract used by every other embedding-capable provider works for Voyage.\nvoyage-4 — newest general-purpose flagship (not yet the default)\nvoyage-4-large — largest / highest accuracy in the 4.x line\nvoyage-4-lite — smaller / cheaper 4.x variant\nvoyage-code-4 — code-tuned (best for code retrieval), 4.x line\nvoyage-3.5 — general-purpose (default)\nvoyage-3-large — flagship; highest accuracy\nvoyage-3.5-lite — smaller / cheaper\nvoyage-code-3 — code-tuned (best for code retrieval)\nvoyage-finance-2, voyage-law-2 — domain-tuned\nvoyage-multilingual-2 — non-English / cross-lingual","hierarchy":{"lvl0":"Getting Started","lvl1":"Voyage AI Provider Guide","lvl2":"Overview","lvl3":""}},
6631
6631
  {"objectID":"3b3376e4213f06d68b078efb29baa170a0faaaf6639f147ea5eb04e8862dcfae","title":"Key Facts","url":"/docs/getting-started/providers/voyage#key-facts","content":"Protocol: Native REST API (/embeddings only — not OpenAI-compat\n for chat)\nDefault base URL: https://api.voyageai.com/v1\nDefault model: voyage-3.5\nMax input tokens: 32K (16K on voyage-law-2)\nStreaming / chat / tool calling: NOT supported (embedding-only;\n executeStream and getAISDKModel throw a friendly error)\nPricing: Per-million input tokens; output dimension is the\n embedding vector, not generated tokens","hierarchy":{"lvl0":"Getting Started","lvl1":"Voyage AI Provider Guide","lvl2":"Key Facts","lvl3":""}},
6632
6632
  {"objectID":"e354ee51c6bbe7be3eeb7f6aeb9dabbb5d72b16a08188e3aa82e0f6e225f22ea","title":"1. Get an API Key","url":"/docs/getting-started/providers/voyage#1-get-an-api-key","content":"Sign up at https://www.voyageai.com/ and\ncreate an API key at\nhttps://dash.voyageai.com/api-keys.","hierarchy":{"lvl0":"Getting Started","lvl1":"Voyage AI Provider Guide","lvl2":"1. Get an API Key","lvl3":""}},
6633
6633
  {"objectID":"ec46db9f5c7b215ead5aa224784a1fe11623ca609e0edc4924d67abf413e1484","title":"2. Configure Environment","url":"/docs/getting-started/providers/voyage#2-configure-environment","content":"`bash","hierarchy":{"lvl0":"Getting Started","lvl1":"Voyage AI Provider Guide","lvl2":"2. Configure Environment","lvl3":""}},
@@ -6638,7 +6638,7 @@
6638
6638
  {"objectID":"516f0d43d01a6cf778d45ba67981dd25d8c0e47133619d8b36624ca01e3467ba","title":"CLI Usage","url":"/docs/getting-started/providers/voyage#cli-usage","content":"Voyage is embedding-only — there is no cli generate flow because\ngenerate is a chat-completion path. Use the SDK directly, or use Voyage\nas the embedder behind a RAG-enabled cli generate:","hierarchy":{"lvl0":"Getting Started","lvl1":"Voyage AI Provider Guide","lvl2":"CLI Usage","lvl3":""}},
6639
6639
  {"objectID":"28350baa18c9aed473cdf4cdce7717f7f0eb15e8fc2b7943e46f1802d1a71659","title":"Provider Aliases","url":"/docs/getting-started/providers/voyage#provider-aliases","content":"| Alias | Example |\n| ----------- | ---------------------- |\n| voyage | --provider voyage |\n| voyage-ai | --provider voyage-ai |\n\n(Note: aliases are mostly relevant for RAG embedder routing; standalone\nchat use is not supported.)","hierarchy":{"lvl0":"Getting Started","lvl1":"Voyage AI Provider Guide","lvl2":"Provider Aliases","lvl3":""}},
6640
6640
  {"objectID":"4b66e1cbb3b0529c5c75a1bb71672129749b72dde16d6f19abd9a996d462c835","title":"Configuration Reference","url":"/docs/getting-started/providers/voyage#configuration-reference","content":"| Environment Variable | Required | Default | Description |\n| -------------------- | -------- | ----------------------------- | ----------------------- |\n| VOYAGE_API_KEY | Yes | — | Voyage AI API key |\n| VOYAGE_MODEL | No | voyage-3.5 | Default embedding model |\n| VOYAGE_BASE_URL | No | https://api.voyageai.com/v1 | Base URL |","hierarchy":{"lvl0":"Getting Started","lvl1":"Voyage AI Provider Guide","lvl2":"Configuration Reference","lvl3":""}},
6641
- {"objectID":"8ee92048a27e3070a2c2a7320569f7bcd440b429f86a404261d1afc8ee92cab6","title":"Model Reference","url":"/docs/getting-started/providers/voyage#model-reference","content":"Per the Voyage embeddings docs:\n\n| Model | Default dim | Tokens | Best For |\n| ----------------------- | ----------- | ------ | -------------------------- |\n| voyage-3.5 | 1024 | 32K | General-purpose (default) |\n| voyage-3.5-lite | 1024 | 32K | Smaller / cheaper |\n| voyage-3-large | 1024 | 32K | Flagship; highest accuracy |\n| voyage-code-3 | 1024 | 32K | Code retrieval |\n| voyage-finance-2 | 1024 | 32K | Finance domain |\n| voyage-law-2 | 1024 | 16K | Legal domain |\n| voyage-multilingual-2 | unspecified | 32K | Cross-lingual |\n\nMatryoshka flexible dimensions: voyage-3.5, voyage-3.5-lite,\nvoyage-3-large, and voyage-code-3 all support flexible output dimensions\nof 256 / 512 / 1024 / 2048 via the output_dimension parameter on the\nVoyage API. The default (and what NeuroLink currently returns) is 1024.\nvoyage-finance-2, voyage-law-2, and voyage-multilingual-2 only emit\nthe default dimension. See the FAQ below for how to request a smaller\ndimension explicitly.","hierarchy":{"lvl0":"Getting Started","lvl1":"Voyage AI Provider Guide","lvl2":"Model Reference","lvl3":""}},
6641
+ {"objectID":"8ee92048a27e3070a2c2a7320569f7bcd440b429f86a404261d1afc8ee92cab6","title":"Model Reference","url":"/docs/getting-started/providers/voyage#model-reference","content":"Per the Voyage embeddings docs:\n\n| Model | Default dim | Tokens | Best For |\n| ----------------------- | ----------- | ------ | ------------------------------- |\n| voyage-4 | 1024 | 32K | General-purpose, 4.x line |\n| voyage-4-large | 1024 | 32K | Flagship, highest quality (4.x) |\n| voyage-4-lite | 1024 | 32K | Smaller / cheaper (4.x) |\n| voyage-code-4 | 1024 | 32K | Code retrieval (4.x) |\n| voyage-3.5 | 1024 | 32K | General-purpose (default) |\n| voyage-3.5-lite | 1024 | 32K | Smaller / cheaper |\n| voyage-3-large | 1024 | 32K | Flagship; highest accuracy |\n| voyage-code-3 | 1024 | 32K | Code retrieval |\n| voyage-finance-2 | 1024 | 32K | Finance domain |\n| voyage-law-2 | 1024 | 16K | Legal domain |\n| voyage-multilingual-2 | unspecified | 32K | Cross-lingual |\n\nMatryoshka flexible dimensions: voyage-4, voyage-4-large,\nvoyage-4-lite, voyage-code-4, voyage-3.5, voyage-3.5-lite,\nvoyage-3-large, and voyage-code-3 all support flexible output dimensions\nof 256 / 512 / 1024 / 2048 via the output_dimension parameter on the\nVoyage API. The default (and what NeuroLink currently returns) is 1024.\nvoyage-finance-2, voyage-law-2, and voyage-multilingual-2 only emit\nthe default dimension. See the FAQ below for how to request a smaller\ndimension explicitly.","hierarchy":{"lvl0":"Getting Started","lvl1":"Voyage AI Provider Guide","lvl2":"Model Reference","lvl3":""}},
6642
6642
  {"objectID":"752e95b9f6b70bd5703af7deddd89a0b48a486ebce0e4f85b83ad797f5f61a09","title":"Feature Support Matrix","url":"/docs/getting-started/providers/voyage#feature-support-matrix","content":"| Feature | voyage-3.5 | voyage-3-large | voyage-code-3 |\n| --------------- | -------------------- | -------------- | ------------- |\n| Embeddings | Yes | Yes | Yes |\n| Single embed | Yes | Yes | Yes |\n| Batch embed | Yes (128 inputs/req) | Yes | Yes |\n| Text generation | No | No | No |\n| Streaming | No | No | No |\n| Tool calling | No | No | No |\n| Vision | No | No | No |","hierarchy":{"lvl0":"Getting Started","lvl1":"Voyage AI Provider Guide","lvl2":"Feature Support Matrix","lvl3":""}},
6643
6643
  {"objectID":"2c419f329de2ff3e523eedfb1912aeeb92bd4b04ac0b496710519848a0632d34","title":"\"Invalid Voyage AI API key\"","url":"/docs/getting-started/providers/voyage#invalid-voyage-ai-api-key","content":"Get / rotate at\nhttps://dash.voyageai.com/api-keys.","hierarchy":{"lvl0":"Getting Started","lvl1":"Voyage AI Provider Guide","lvl2":"\"Invalid Voyage AI API key\"","lvl3":""}},
6644
6644
  {"objectID":"aa71a692a15818f66276f212ba23081ef5eab45203bf9bbe44e78466460b0e97","title":"\"Voyage AI rate limit exceeded\"","url":"/docs/getting-started/providers/voyage#voyage-ai-rate-limit-exceeded","content":"Voyage has per-minute and daily limits per tier. Free-tier is generous\nfor development; production usage typically requires the paid tier.\nImplement exponential backoff or use embedMany (batched) instead of\nmany single embed calls.","hierarchy":{"lvl0":"Getting Started","lvl1":"Voyage AI Provider Guide","lvl2":"\"Voyage AI rate limit exceeded\"","lvl3":""}},
@@ -8944,10 +8944,10 @@
8944
8944
  {"objectID":"14456bd556dd45363546785079362ce7acbd26bfa6a65a06c638acb656fbbce2","title":"Must remain class (13)","url":"/docs/provider-integration/migration-ledger#must-remain-class-13","content":"| Provider | Why |\n| ------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| bedrock | AWS SigV4/Converse protocol, custom loop, not OpenAI-compatible. Tier 4. |\n| openai | Chat portion is catalog-shaped, but embeddings, image generation, and OpenAI-specific telemetry/errors are executable behavior. |\n| vertex | Two native protocols (Google GenAI + Anthropic-on-Vertex) and multiple modality pipelines behind one provider identity. |\n| anthropic | Native Messages API auth/message/tool semantics are executable protocol behavior.","hierarchy":{"lvl0":"Provider Integration","lvl1":"Provider Descriptor Migration Ledger","lvl2":"Must remain class (13)","lvl3":""}},
8945
8945
  {"objectID":"a4f69e09308f075830f2efa7c1b0126236c5ec0fc12bfe08be21764a627e47a5","title":"Must remain core class (1)","url":"/docs/provider-integration/migration-ledger#must-remain-core-class-1","content":"| Provider | Why |\n| ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| openai-compatible | This is the generic protocol surface itself, not a direct vendor. It should consume shared descriptor/config primitives but must never become a fixed-vendor JSON row — collapsing it into the catalog would conflate \"the adapter\" with \"an entry in the adapter's catalog.\" |","hierarchy":{"lvl0":"Provider Integration","lvl1":"Provider Descriptor Migration Ledger","lvl2":"Must remain core class (1)","lvl3":""}},
8946
8946
  {"objectID":"235850085d9102413140920b9d5e5e2ff6113d007c865f5d78012af80fbf1843","title":"Suggested execution order","url":"/docs/provider-integration/migration-ledger#suggested-execution-order","content":"Steps 1–2 below (mistral; huggingface, deepseek) are complete — see Migrated above. What remains:\nThree shared adapters (local-runtime, embedding-only, image-generation) — each unlocks 3 providers at once; build once, migrate three.\ngoogle-ai descriptor-only JSON metadata — proof of concept for moving static descriptor data out of a \"must remain class\" provider without touching its execution.\nDirect-vendor \"must remain class\" providers (bedrock, openai, vertex, anthropic, azure, sagemaker, nvidia-nim) get descriptor-only JSON metadata migrations, execution untouched — lower priority, cosmetic consolidation only.\nAggregators (litellm, openrouter), the core adapter (openai-compatible), and the decision-only providers (typesafe, laya) are excluded from the first-class-count migration priority entirely — the first three add no direct-vendor coverage however they're implemented, and typesafe/laya are decide-only providers with no generate/stream surface to migrate at all.","hierarchy":{"lvl0":"Provider Integration","lvl1":"Provider Descriptor Migration Ledger","lvl2":"Suggested execution order","lvl3":""}},
8947
- {"objectID":"6122b2e83358a45c64da87c1ca80a2d579cdfb087a6d9dc58b1e02805296b14a","title":"OpenAI-Compatible Provider Catalog","url":"/docs/provider-integration/openai-compat-catalog","content":"OpenAI-Compatible Provider Catalog\n\nSixteen OpenAI-compatible providers — API Route, Baseten, SambaNova,\nCerebras, Groq, xAI, Together AI, Fireworks AI, Perplexity, Mistral,\nCloudflare Workers AI, GMI Cloud, Inception Labs, io.net Intelligence,\nMancer, Upstage — are registered from one JSON file each, under\nsrc/lib/providers/catalog/<id>.json, and served by one generic class,\nConfiguredOpenAICompatProvider\n(src/lib/providers/configuredOpenAICompat.ts). Adding another provider to\nthis family means adding one JSON file — no subclass, no registry edit, no\nhand-written enum member, no test edit.\n\nThe JSON is the source of truth\n\nOPENAI_COMPAT_CATALOG still exists and keeps its name and element type,\nbut it is now built by the loader (src/lib/providers/catalog/loader.ts)\nfrom the JSON files rather than hand-written. Two consumers read the JSON:\nCodegen (pnpm run codegen:catalog) writes the compile-time\n artifacts into marked regions — the AIProviderName member, the\n <Name>Models enum, the NeurolinkCredentials key — plus the generated\n index. Pre-commit and CI fail on stale output.\nThe loader builds the runtime entry; the descriptor, config options,\n context windows, pricing, vision map and model-choice tables all derive\n from it, as do the provider test suites' rows and counts.\n\nEach file is validated by a zod schema (src/lib/providers/catalog/schema.ts)\nwith a mirrored provider-catalog.schema.json for editor squiggles.\nProbe evidence (roster/auth/billing dates, live-matrix result, PR URL)\nlives in the file's evidence block — the old\ndocs/provider-integration/manifests/<id>.json files were folded into it.\n\nField-by-field reference and the escape hatches:\ntiers/tier-2-catalog-entry.md. Design rationale and the approved rulings:\ndocs/superpowers/plans/2026-08-28-provider-json-catalog-spec.md.\n\nWhen a provider belongs in the catalog\n\nA provider belongs in the JSON catalog if it needs only:\na credential (API key, optionally an extra field like Cloudflare's account id)\na base URL (static default + optional env override, or computed from an\n extra credential field)\na default/fallback model\nerror-message classification (auth / rate-limit / invalid-model / generic)\na named, closed catalog quirk. DeepSeek is the worked example: it 400s on\n json_schema structured-output requests, so deepseek.json sets\n quirks.responseFormatDowngrade: \"json-schema-to-json-object\" and the\n generic ConfiguredOpenAICompatProvider downgrades to json_object before\n sending — no subclass. It also sets quirks.replayReasoningContent: true:\n DeepSeek documents that each assistant turn's reasoning_content must go\n back on later requests once tools are in play, so the shared message\n converter and the streaming tool loop send it — for this quirk only, since\n strict OpenAI-compatible backends reject the unknown field.\n\nWhen a provider needs a dedicated subclass instead\n\nAzure OpenAI is deliberately not in the catalog because it overrides real\nrequest-shaping behavior that no named catalog quirk expresses:\nAzure OpenAI (src/lib/providers/azureOpenai.ts) overrides four hooks:\n getChatCompletionsURL (deployment-name URL routing across two Azure\n endpoint schemes), getAuthHeaders (Azure's api-key header instead of\n Authorization: Bearer), adjustRequestBody (renames max_tokens to\n max_completion_tokens for o-series/gpt-5+ deployments), and\n suppressResponseFormatWithTools (Azure supports both at once).\n\nIf a future provider needs any hook beyond the 3 mandatory ones\n(getProviderName, getDefaultModel, formatProviderError) or the 2\npurely-declarative optional ones (getFallbackModelName,\ngetFallbackModels) and that hook is not already a named catalog quirk, it\nneeds either a new closed quirk (the DeepSeek route) or a dedicated subclass\n(the Azure OpenAI route).\n\nError-message fidelity\n\nEach entry's errorRules is a direct, order-preserving translation of its\noriginal subclass's formatProviderError if/else ladder into rule data\n(status code and/or case-insensitive pattern), classified via\nclassifyProviderError()\n(src/lib/utils/errorClassifier.ts). Every bespoke message string is\npreserved verbatim — including xAI's \"top up your account\" quota URL and\nGroq's decommissioned-vs-not-found distinction — via each rule's own\nmessage field (string | ((ctx) => string)), with model-name\ninterpolation carried through ctx.modelName. There is no message-wording\nregression here. Timeout classification is likewise unchanged: 15 of the 16\nproviders map TimeoutError to NetworkError (the classifier's default),\nand Groq alone maps it to ProviderError. Groq's subclass override is\npreserved verbatim via the JSON's quirks.timeoutErrorClass, so no\nprovider's timeout class changed during migration.\n\nKnown pre-existing quirk this migration preserved (not fixed)\n\nMistral's provider registration passes a defaultModel value to\nProviderFactory.registerProvider() that does not check MISTRAL_MODEL\n(MistralModels.MISTRAL_LARGE_LATEST, a bare literal), while\nConfiguredOpenAI","hierarchy":{"lvl0":"Provider Integration","lvl1":"OpenAI-Compatible Provider Catalog","lvl2":"","lvl3":""}},
8947
+ {"objectID":"6122b2e83358a45c64da87c1ca80a2d579cdfb087a6d9dc58b1e02805296b14a","title":"OpenAI-Compatible Provider Catalog","url":"/docs/provider-integration/openai-compat-catalog","content":"OpenAI-Compatible Provider Catalog\n\nSixteen OpenAI-compatible providers — API Route, Baseten, SambaNova,\nCerebras, Groq, xAI, Together AI, Fireworks AI, Perplexity, Mistral,\nCloudflare Workers AI, GMI Cloud, Inception Labs, io.net Intelligence,\nMancer, Upstage — are registered from one JSON file each, under\nsrc/lib/providers/catalog/<id>.json, and served by one generic class,\nConfiguredOpenAICompatProvider\n(src/lib/providers/configuredOpenAICompat.ts). Adding another provider to\nthis family means adding one JSON file — no subclass, no registry edit, no\nhand-written enum member, no test edit.\n\nThe JSON is the source of truth\n\nOPENAI_COMPAT_CATALOG still exists and keeps its name and element type,\nbut it is now built by the loader (src/lib/providers/catalog/loader.ts)\nfrom the JSON files rather than hand-written. Two consumers read the JSON:\nCodegen (pnpm run codegen:catalog) writes the compile-time\n artifacts into marked regions — the AIProviderName member, the\n <Name>Models enum, the NeurolinkCredentials key — plus the generated\n index. Pre-commit and CI fail on stale output.\nThe loader builds the runtime entry; the descriptor, config options,\n context windows, pricing, vision map and model-choice tables all derive\n from it, as do the provider test suites' rows and counts.\n\nEach file is validated by a zod schema (src/lib/providers/catalog/schema.ts)\nwith a mirrored provider-catalog.schema.json for editor squiggles.\nProbe evidence (roster/auth/billing dates, live-matrix result, PR URL)\nlives in the file's evidence block — the old\ndocs/provider-integration/manifests/<id>.json files were folded into it.\n\nField-by-field reference and the escape hatches:\ntiers/tier-2-catalog-entry.md. Design rationale and the approved rulings:\ndocs/superpowers/plans/2026-08-28-provider-json-catalog-spec.md.\n\nWhen a provider belongs in the catalog\n\nA provider belongs in the JSON catalog if it needs only:\na credential (API key, optionally an extra field like Cloudflare's account id)\na base URL (static default + optional env override, or computed from an\n extra credential field)\na default/fallback model\nerror-message classification (auth / rate-limit / invalid-model / generic)\na named, closed catalog quirk. DeepSeek is the worked example: it 400s on\n json_schema structured-output requests, so deepseek.json sets\n quirks.responseFormatDowngrade: \"json-schema-to-json-object\" and the\n generic ConfiguredOpenAICompatProvider downgrades to json_object before\n sending — no subclass. It also sets quirks.replayReasoningContent: true:\n DeepSeek documents that each assistant turn's reasoning_content must go\n back on later requests once tools are in play, so the shared message\n converter and the streaming tool loop send it — for this quirk only, since\n strict OpenAI-compatible backends reject the unknown field.\na wire-proven capability such as\n capabilities.structuredOutputWithTools. The generic provider suppresses\n response_format when tools are attached by default; an explicit true\n keeps it on the same generate() or stream() request. Set this only after\n a combined tools-plus-schema request returned successfully. Separate tool\n and structured-output probes are not evidence for the combined capability.\n A stale opt-in is still protected by the runtime conflict retry, which drops\n structured output and retries rather than losing the turn.\n\nThe currently opted-in providers are Baseten, DeepSeek, Fireworks AI, GMI\nCloud, Inception Labs, io.net Intelligence, Novita AI, Together AI, Upstage and\nxAI. API Route remains opted out because its evidence verifies the features\nseparately, not together in one request. Mistral remains opted out because its\ncombined probes returned 429 twice, not a successful capability response.\n\nWhen a provider needs a dedicated subclass instead\n\nAzure OpenAI is deliberately not in the catalog because it overrides real\nrequest-shaping behavior that no named catalog quirk expresses:\nAzure OpenAI (src/lib/providers/azureOpenai.ts) overrides four hooks:\n getChatCompletionsURL (deployment-name URL routing across two Azure\n endpoint schemes), getAuthHeaders (Azure's api-key header instead of\n Authorization: Bearer), adjustRequestBody (renames max_tokens to\n max_completion_tokens for o-series/gpt-5+ deployments), and\n suppressResponseFormatWithTools (Azure supports both at once).\n\nIf a future provider needs any hook beyond the 3 mandatory ones\n(getProviderName, getDefaultModel, formatProviderError) or the 2\npurely-declarative optional ones (getFallbackModelName,\ngetFallbackModels) and that hook is not already a named catalog quirk, it\nneeds either a new closed quirk (the DeepSeek route) or a dedicated subclass\n(the Azure OpenAI route).\n\nError-message fidelity\n\nEach entry's errorRules is a direct, order-preserving translation of its\noriginal subclass's formatProviderError if/else ladder into rule data\n(status code and/or case-insensitive pattern), classified via\nclassifyProviderError()\n(src/lib/utils/err","hierarchy":{"lvl0":"Provider Integration","lvl1":"OpenAI-Compatible Provider Catalog","lvl2":"","lvl3":""}},
8948
8948
  {"objectID":"9a91a5b4a32a9f1e89c6a28f762c3594c4a39d96d32cc9e6e1fa0f5cb3f609e4","title":"OpenAI-Compatible Provider Catalog","url":"/docs/provider-integration/openai-compat-catalog#openai-compatible-provider-catalog","content":"Sixteen OpenAI-compatible providers — API Route, Baseten, SambaNova,\nCerebras, Groq, xAI, Together AI, Fireworks AI, Perplexity, Mistral,\nCloudflare Workers AI, GMI Cloud, Inception Labs, io.net Intelligence,\nMancer, Upstage — are registered from one JSON file each, under\nsrc/lib/providers/catalog/<id>.json, and served by one generic class,\nConfiguredOpenAICompatProvider\n(src/lib/providers/configuredOpenAICompat.ts). Adding another provider to\nthis family means adding one JSON file — no subclass, no registry edit, no\nhand-written enum member, no test edit.","hierarchy":{"lvl0":"Provider Integration","lvl1":"OpenAI-Compatible Provider Catalog","lvl2":"OpenAI-Compatible Provider Catalog","lvl3":""}},
8949
8949
  {"objectID":"16e60ee66171009a6638b5110cc8693f90c1a2cfde796c6932c3512d7f7421fb","title":"The JSON is the source of truth","url":"/docs/provider-integration/openai-compat-catalog#the-json-is-the-source-of-truth","content":"OPENAI_COMPAT_CATALOG still exists and keeps its name and element type,\nbut it is now built by the loader (src/lib/providers/catalog/loader.ts)\nfrom the JSON files rather than hand-written. Two consumers read the JSON:\nCodegen (pnpm run codegen:catalog) writes the compile-time\n artifacts into marked regions — the AIProviderName member, the\n <Name>Models enum, the NeurolinkCredentials key — plus the generated\n index. Pre-commit and CI fail on stale output.\nThe loader builds the runtime entry; the descriptor, config options,\n context windows, pricing, vision map and model-choice tables all derive\n from it, as do the provider test suites' rows and counts.\n\nEach file is validated by a zod schema (src/lib/providers/catalog/schema.ts)\nwith a mirrored provider-catalog.schema.json for editor squiggles.\nProbe evidence (roster/auth/billing dates, live-matrix result, PR URL)\nlives in the file's evidence block — the old\ndocs/provider-integration/manifests/<id>.json files were folded into it.\n\nField-by-field reference and the escape hatches:\ntiers/tier-2-catalog-entry.md. Design rationale and the approved rulings:\ndocs/superpowers/plans/2026-08-28-provider-json-catalog-spec.md.","hierarchy":{"lvl0":"Provider Integration","lvl1":"OpenAI-Compatible Provider Catalog","lvl2":"The JSON is the source of truth","lvl3":""}},
8950
- {"objectID":"00a7366eb480e85f5377e0cb8575403e7fd9b33cc028bf95cf0fe48cc94fcea9","title":"When a provider belongs in the catalog","url":"/docs/provider-integration/openai-compat-catalog#when-a-provider-belongs-in-the-catalog","content":"A provider belongs in the JSON catalog if it needs only:\na credential (API key, optionally an extra field like Cloudflare's account id)\na base URL (static default + optional env override, or computed from an\n extra credential field)\na default/fallback model\nerror-message classification (auth / rate-limit / invalid-model / generic)\na named, closed catalog quirk. DeepSeek is the worked example: it 400s on\n json_schema structured-output requests, so deepseek.json sets\n quirks.responseFormatDowngrade: \"json-schema-to-json-object\" and the\n generic ConfiguredOpenAICompatProvider downgrades to json_object before\n sending — no subclass. It also sets quirks.replayReasoningContent: true:\n DeepSeek documents that each assistant turn's reasoning_content must go\n back on later requests once tools are in play, so the shared message\n converter and the streaming tool loop send it — for this quirk only, since\n strict OpenAI-compatible backends reject the unknown field.","hierarchy":{"lvl0":"Provider Integration","lvl1":"OpenAI-Compatible Provider Catalog","lvl2":"When a provider belongs in the catalog","lvl3":""}},
8950
+ {"objectID":"00a7366eb480e85f5377e0cb8575403e7fd9b33cc028bf95cf0fe48cc94fcea9","title":"When a provider belongs in the catalog","url":"/docs/provider-integration/openai-compat-catalog#when-a-provider-belongs-in-the-catalog","content":"A provider belongs in the JSON catalog if it needs only:\na credential (API key, optionally an extra field like Cloudflare's account id)\na base URL (static default + optional env override, or computed from an\n extra credential field)\na default/fallback model\nerror-message classification (auth / rate-limit / invalid-model / generic)\na named, closed catalog quirk. DeepSeek is the worked example: it 400s on\n json_schema structured-output requests, so deepseek.json sets\n quirks.responseFormatDowngrade: \"json-schema-to-json-object\" and the\n generic ConfiguredOpenAICompatProvider downgrades to json_object before\n sending — no subclass. It also sets quirks.replayReasoningContent: true:\n DeepSeek documents that each assistant turn's reasoning_content must go\n back on later requests once tools are in play, so the shared message\n converter and the streaming tool loop send it — for this quirk only, since\n strict OpenAI-compatible backends reject the unknown field.\na wire-proven capability such as\n capabilities.structuredOutputWithTools. The generic provider suppresses\n response_format when tools are attached by default; an explicit true\n keeps it on the same generate() or stream() request. Set this only after\n a combined tools-plus-schema request returned successfully. Separate tool\n and structured-output probes are not evidence for the combined capability.\n A stale opt-in is still protected by the runtime conflict retry, which drops\n structured output and retries rather than losing the turn.\n\nThe currently opted-in providers are Baseten, DeepSeek, Fireworks AI, GMI\nCloud, Inception Labs, io.net Intelligence, Novita AI, Together AI, Upstage and\nxAI. API Route remains opted out because its evidence verifies the features\nseparately, not together in one request. Mistral remains opted out because its\ncombined probes returned 429 twice, not a successful capability response.","hierarchy":{"lvl0":"Provider Integration","lvl1":"OpenAI-Compatible Provider Catalog","lvl2":"When a provider belongs in the catalog","lvl3":""}},
8951
8951
  {"objectID":"c2a9e3425a4cecb520467f900df8b5fa78fc4178514eba6385040bb9506e48ee","title":"When a provider needs a dedicated subclass instead","url":"/docs/provider-integration/openai-compat-catalog#when-a-provider-needs-a-dedicated-subclass-instead","content":"Azure OpenAI is deliberately not in the catalog because it overrides real\nrequest-shaping behavior that no named catalog quirk expresses:\nAzure OpenAI (src/lib/providers/azureOpenai.ts) overrides four hooks:\n getChatCompletionsURL (deployment-name URL routing across two Azure\n endpoint schemes), getAuthHeaders (Azure's api-key header instead of\n Authorization: Bearer), adjustRequestBody (renames max_tokens to\n max_completion_tokens for o-series/gpt-5+ deployments), and\n suppressResponseFormatWithTools (Azure supports both at once).\n\nIf a future provider needs any hook beyond the 3 mandatory ones\n(getProviderName, getDefaultModel, formatProviderError) or the 2\npurely-declarative optional ones (getFallbackModelName,\ngetFallbackModels) and that hook is not already a named catalog quirk, it\nneeds either a new closed quirk (the DeepSeek route) or a dedicated subclass\n(the Azure OpenAI route).","hierarchy":{"lvl0":"Provider Integration","lvl1":"OpenAI-Compatible Provider Catalog","lvl2":"When a provider needs a dedicated subclass instead","lvl3":""}},
8952
8952
  {"objectID":"a5276d835ceba15da6ec36261ab78001e17f8b78ba9c8cb1c5e1282aa2f377e3","title":"Error-message fidelity","url":"/docs/provider-integration/openai-compat-catalog#error-message-fidelity","content":"Each entry's errorRules is a direct, order-preserving translation of its\noriginal subclass's formatProviderError if/else ladder into rule data\n(status code and/or case-insensitive pattern), classified via\nclassifyProviderError()\n(src/lib/utils/errorClassifier.ts). Every bespoke message string is\npreserved verbatim — including xAI's \"top up your account\" quota URL and\nGroq's decommissioned-vs-not-found distinction — via each rule's own\nmessage field (string | ((ctx) => string)), with model-name\ninterpolation carried through ctx.modelName. There is no message-wording\nregression here. Timeout classification is likewise unchanged: 15 of the 16\nproviders map TimeoutError to NetworkError (the classifier's default),\nand Groq alone maps it to ProviderError. Groq's subclass override is\npreserved verbatim via the JSON's quirks.timeoutErrorClass, so no\nprovider's timeout class changed during migration.","hierarchy":{"lvl0":"Provider Integration","lvl1":"OpenAI-Compatible Provider Catalog","lvl2":"Error-message fidelity","lvl3":""}},
8953
8953
  {"objectID":"2a22fddc1a2c383a5e75a53e2d512d764f01ad66ab03bfe6edf12acb5d204814","title":"Known pre-existing quirk this migration preserved (not fixed)","url":"/docs/provider-integration/openai-compat-catalog#known-pre-existing-quirk-this-migration-preserved-not-fixed","content":"Mistral's provider registration passes a defaultModel value to\nProviderFactory.registerProvider() that does not check MISTRAL_MODEL\n(MistralModels.MISTRAL_LARGE_LATEST, a bare literal), while\nConfiguredOpenAICompatProvider.getDefaultModel() for Mistral does\ncheck MISTRAL_MODEL (falling back to MistralModels.MISTRAL_SMALL_2506).\nEvery other catalog provider's registry default and class default agree.\nThis is expressed via the JSON's quirks.registryDefaultIgnoresModelEnvVar\n(true only for Mistral). The JSON migration did reconcile one half of it:\ngetDefaultModel(MISTRAL) now returns the real generation default\n(mistral-small-2506) rather than the registry literal — a disclosed\nbug-fix-grade delta, since the two disagreed before.","hierarchy":{"lvl0":"Provider Integration","lvl1":"OpenAI-Compatible Provider Catalog","lvl2":"Known pre-existing quirk this migration preserved (not fixed)","lvl3":""}},