> ## Documentation Index
>
> Fetch the complete documentation index at: [/llms.txt](https://docs.cognigy.com/llms.txt)
>
> Use this file to discover all available pages before exploring further.

[Skip to main content](https://docs.cognigy.com/ai/agents/develop/gen-ai-and-llms/model-support-by-feature#content-area)

[Updated in 2026.13](https://docs.cognigy.com/release-notes/2026.13) The table provides an overview of the LLM providers supported by Cognigy.AI, detailing the standard models and their compatibility with Cognigy.AI features.
You can also add a custom model that isn’t listed in the table.
To do so, select the **Custom Model** parameter when creating a model and specify both the model type and name.
For more information about adding a custom or standard model for a selected LLM provider,
refer to the [All LLM Providers](https://docs.cognigy.com/ai/agents/develop/gen-ai-and-llms/providers/all-providers) page.

| Models | Design-Time Features[1](https://docs.cognigy.com/ai/agents/develop/gen-ai-and-llms/model-support-by-feature#footnote1) | AI Agent Node | Conversation Analyzer[8](https://docs.cognigy.com/ai/agents/develop/gen-ai-and-llms/model-support-by-feature#footnote8) | AI Enhanced Outputs | LLM Prompt Node | Answer Extraction | Knowledge Search | Sentiment Analysis | NLU Embedding Model |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| **[Cognigy.AI](https://docs.cognigy.com/ai/agents/develop/gen-ai-and-llms/generative-ai#design-time-generative-ai-features)** |  |  |  |  |  |  |  |  |  |
| Platform-Provided LLM |  |  |  |  |  |  |  |  |  |
| **[Microsoft Azure OpenAI](https://docs.cognigy.com/ai/agents/develop/gen-ai-and-llms/providers/microsoft-azure-openai)** |  |  |  |  |  |  |  |  |  |
| `gpt-5-5`[2](https://docs.cognigy.com/ai/agents/develop/gen-ai-and-llms/model-support-by-feature#footnote2), [7](https://docs.cognigy.com/ai/agents/develop/gen-ai-and-llms/model-support-by-feature#footnote7)<br>`gpt-5-4`[2](https://docs.cognigy.com/ai/agents/develop/gen-ai-and-llms/model-support-by-feature#footnote2)<br>`gpt-5-4-mini`[2](https://docs.cognigy.com/ai/agents/develop/gen-ai-and-llms/model-support-by-feature#footnote2)<br>`gpt-5-4-nano`[2](https://docs.cognigy.com/ai/agents/develop/gen-ai-and-llms/model-support-by-feature#footnote2)<br>`gpt-5-2`[2](https://docs.cognigy.com/ai/agents/develop/gen-ai-and-llms/model-support-by-feature#footnote2)<br>`gpt-5-1`[2](https://docs.cognigy.com/ai/agents/develop/gen-ai-and-llms/model-support-by-feature#footnote2)<br>`gpt-5`[2](https://docs.cognigy.com/ai/agents/develop/gen-ai-and-llms/model-support-by-feature#footnote2)<br>`gpt-5-nano`[2](https://docs.cognigy.com/ai/agents/develop/gen-ai-and-llms/model-support-by-feature#footnote2)<br>`gpt-5-mini`[2](https://docs.cognigy.com/ai/agents/develop/gen-ai-and-llms/model-support-by-feature#footnote2)<br>`gpt-5-chat-latest` ( [deprecated](https://learn.microsoft.com/en-us/azure/foundry/openai/concepts/retired-models))<br>`gpt-4.1-nano` ( [deprecated](https://learn.microsoft.com/en-us/azure/foundry/openai/concepts/retired-models))<br>`gpt-4.1-mini`<br>`gpt-4.1`<br>`gpt-4o-mini`<br>`gpt-4o` |  |  |  |  |  |  |  |  |  |
| `text-embedding-ada-002`<br>`text-embedding-3-small`[3](https://docs.cognigy.com/ai/agents/develop/gen-ai-and-llms/model-support-by-feature#footnote3)<br>`text-embedding-3-large`[3](https://docs.cognigy.com/ai/agents/develop/gen-ai-and-llms/model-support-by-feature#footnote3) |  |  |  |  |  |  |  |  |  |
| **[OpenAI](https://docs.cognigy.com/ai/agents/develop/gen-ai-and-llms/providers/openai)** |  |  |  |  |  |  |  |  |  |
| `gpt-5-5`[2](https://docs.cognigy.com/ai/agents/develop/gen-ai-and-llms/model-support-by-feature#footnote2), [7](https://docs.cognigy.com/ai/agents/develop/gen-ai-and-llms/model-support-by-feature#footnote7)<br>`gpt-5-4`[2](https://docs.cognigy.com/ai/agents/develop/gen-ai-and-llms/model-support-by-feature#footnote2)<br>`gpt-5-4-mini`[2](https://docs.cognigy.com/ai/agents/develop/gen-ai-and-llms/model-support-by-feature#footnote2)<br>`gpt-5-4-nano`[2](https://docs.cognigy.com/ai/agents/develop/gen-ai-and-llms/model-support-by-feature#footnote2)<br>`gpt-5-2`[2](https://docs.cognigy.com/ai/agents/develop/gen-ai-and-llms/model-support-by-feature#footnote2)<br>`gpt-5-1`[2](https://docs.cognigy.com/ai/agents/develop/gen-ai-and-llms/model-support-by-feature#footnote2)<br>`gpt-5`[2](https://docs.cognigy.com/ai/agents/develop/gen-ai-and-llms/model-support-by-feature#footnote2)<br>`gpt-5-nano`[2](https://docs.cognigy.com/ai/agents/develop/gen-ai-and-llms/model-support-by-feature#footnote2)<br>`gpt-5-mini`[2](https://docs.cognigy.com/ai/agents/develop/gen-ai-and-llms/model-support-by-feature#footnote2)<br>`gpt-5-chat-latest` ( [deprecated](https://learn.microsoft.com/en-us/azure/foundry/openai/concepts/retired-models))<br>`gpt-4.1-nano` ( [deprecated](https://learn.microsoft.com/en-us/azure/foundry/openai/concepts/retired-models))<br>`gpt-4.1-mini`<br>`gpt-4.1`<br>`gpt-4o-mini`<br>`gpt-4o` |  |  |  |  |  |  |  |  |  |
| `text-embedding-ada-002`<br>`text-embedding-3-small`[3](https://docs.cognigy.com/ai/agents/develop/gen-ai-and-llms/model-support-by-feature#footnote3)<br>`text-embedding-3-large`[3](https://docs.cognigy.com/ai/agents/develop/gen-ai-and-llms/model-support-by-feature#footnote3) |  |  |  |  |  |  |  |  |  |
| **[OpenAI-Compatible](https://docs.cognigy.com/ai/agents/develop/gen-ai-and-llms/providers/openai-compatible)** |  |  |  |  |  |  |  |  |  |
| OpenAI-compatible LLMs |  |  |  |  |  |  |  |  |  |
| **[Anthropic](https://docs.cognigy.com/ai/agents/develop/gen-ai-and-llms/providers/anthropic)** |  |  |  |  |  |  |  |  |  |
| `claude-sonnet-4-6`[2](https://docs.cognigy.com/ai/agents/develop/gen-ai-and-llms/model-support-by-feature#footnote2)<br>`claude-sonnet-4-5`[2](https://docs.cognigy.com/ai/agents/develop/gen-ai-and-llms/model-support-by-feature#footnote2) |  |  |  |  |  |  |  |  |  |
| `claude-haiku-4-5`[2](https://docs.cognigy.com/ai/agents/develop/gen-ai-and-llms/model-support-by-feature#footnote2) |  |  |  |  |  |  |  |  |  |
| **[Google Gemini](https://docs.cognigy.com/ai/agents/develop/gen-ai-and-llms/providers/google-gemini)** |  |  |  |  |  |  |  |  |  |
| `gemini-2.5-pro`[2](https://docs.cognigy.com/ai/agents/develop/gen-ai-and-llms/model-support-by-feature#footnote2)<br>`gemini-2.5-flash`[2](https://docs.cognigy.com/ai/agents/develop/gen-ai-and-llms/model-support-by-feature#footnote2)<br>`gemini-2.5-flash-lite`[2](https://docs.cognigy.com/ai/agents/develop/gen-ai-and-llms/model-support-by-feature#footnote2) ( [deprecated](https://cloud.google.com/vertex-ai/generative-ai/docs/learn/model-versions#legacy-stable))<br>`gemini-2.0-flash` ( [deprecated](https://cloud.google.com/vertex-ai/generative-ai/docs/learn/model-versions#legacy-stable)) |  |  |  |  |  |  |  |  |  |
| `gemini-embedding-001` |  |  |  |  |  |  |  |  |  |
| **[Google GenAI](https://docs.cognigy.com/ai/agents/develop/gen-ai-and-llms/providers/google-genai)** |  |  |  |  |  |  |  |  |  |
| `gemini-3.1-pro-preview`[2](https://docs.cognigy.com/ai/agents/develop/gen-ai-and-llms/model-support-by-feature#footnote2)<br>`gemini-3-flash-preview`[2](https://docs.cognigy.com/ai/agents/develop/gen-ai-and-llms/model-support-by-feature#footnote2)<br>`gemini-3.5-flash`[2](https://docs.cognigy.com/ai/agents/develop/gen-ai-and-llms/model-support-by-feature#footnote2)<br>`gemini-3.1-flash-lite`[2](https://docs.cognigy.com/ai/agents/develop/gen-ai-and-llms/model-support-by-feature#footnote2) |  |  |  |  |  |  |  |  |  |
| `gemini-embedding-2` |  |  |  |  |  |  |  |  |  |
| **[Aleph Alpha](https://docs.cognigy.com/ai/agents/develop/gen-ai-and-llms/providers/aleph-alpha)** |  |  |  |  |  |  |  |  |  |
| `luminous` ( [deprecated](https://docs.aleph-alpha.com/)) |  |  |  |  |  |  |  |  |  |
| **[Amazon Bedrock](https://docs.cognigy.com/ai/agents/develop/gen-ai-and-llms/providers/amazon-bedrock)** |  |  |  |  |  |  |  |  |  |
| `anthropic.claude-3-5-sonnet-20240620-v1:0` ( [deprecated](https://docs.aws.amazon.com/bedrock/latest/userguide/model-lifecycle.html))<br>`amazon.nova-lite-v1:0`<br>`amazon.nova-pro-v1:0`<br>`amazon.nova-premier-v1:0`[2](https://docs.cognigy.com/ai/agents/develop/gen-ai-and-llms/model-support-by-feature#footnote2) ( [deprecated](https://docs.aws.amazon.com/bedrock/latest/userguide/model-lifecycle.html))<br>`amazon.nova-2-lite-v1:0` |  |  |  |  |  |  |  |  |  |
| `amazon.titan-embed-text-v2:0`[5](https://docs.cognigy.com/ai/agents/develop/gen-ai-and-llms/model-support-by-feature#footnote5) |  |  |  |  |  |  |  |  |  |
| `amazon.nova-micro-v1:0` |  |  |  |  |  |  |  |  |  |
| [Converse API](https://docs.aws.amazon.com/bedrock/latest/userguide/models-features.html)-compatible models |  | Partially supported[6](https://docs.cognigy.com/ai/agents/develop/gen-ai-and-llms/model-support-by-feature#footnote6) |  |  |  |  |  |  |  |
| **[Mistral AI](https://docs.cognigy.com/ai/agents/develop/gen-ai-and-llms/providers/mistral)** |  |  |  |  |  |  |  |  |  |
| `mistral-large-latest`[4](https://docs.cognigy.com/ai/agents/develop/gen-ai-and-llms/model-support-by-feature#footnote4)<br>`mistral-medium-latest` ( [deprecated](https://docs.mistral.ai/models/overview#legacy-models))[4](https://docs.cognigy.com/ai/agents/develop/gen-ai-and-llms/model-support-by-feature#footnote4)<br>`mistral-small-latest`[4](https://docs.cognigy.com/ai/agents/develop/gen-ai-and-llms/model-support-by-feature#footnote4)<br>`pixtral-large-latest`[4](https://docs.cognigy.com/ai/agents/develop/gen-ai-and-llms/model-support-by-feature#footnote4) |  |  |  |  |  |  |  |  |  |

## [​](https://docs.cognigy.com/ai/agents/develop/gen-ai-and-llms/model-support-by-feature\#more-information)  More Information

- [Overview](https://docs.cognigy.com/ai/agents/develop/gen-ai-and-llms/llms)
- [All LLM Providers](https://docs.cognigy.com/ai/agents/develop/gen-ai-and-llms/providers/all-providers)
- [Other LLM Operations](https://docs.cognigy.com/ai/agents/develop/gen-ai-and-llms/other-operations)

* * *

1 [Design-time\\
features](https://docs.cognigy.com/ai/agents/develop/gen-ai-and-llms/generative-ai#design-time-generative-ai-features)
include Intent Sentence Generation, Flow Generation, Adaptive Card Generation,
Lexicon Generation.

2 Reasoning models consume more tokens and may incur
higher costs. The models are optimized for tasks that require complex problem-solving
and logical reasoning. Before using these models in production, test token consumption in [debug mode](https://docs.cognigy.com/ai/agents/test/interaction-panel/chat#debug-mode) and use them with caution. To reduce costs, consider using a non-reasoning model such as `gpt-5-chat-latest`. For more information about reasoning models, refer to the [Microsoft Azure OpenAI](https://learn.microsoft.com/en-us/azure/ai-foundry/openai/how-to/reasoning), [OpenAI](https://platform.openai.com/docs/guides/reasoning/advice-on-prompting), and [Google](https://cloud.google.com/vertex-ai/generative-ai/docs/models) documentation.

Anthropic’s `claude-sonnet-4-6` model doesn’t support [assistant message prefilling](https://platform.claude.com/docs/en/about-claude/models/migration-guide#breaking-changes-3).
To keep your Flows compatible, ensure that the last transcript step before the LLM call is a user message. For example, add an [Add Transcript Step Node](https://docs.cognigy.com/ai/agents/develop/node-reference/service/add-transcript-step) before the LLM call and set the role to `user`.

3 For Knowledge AI, we recommend using
`text-embedding-ada-002`. However, if you want to use `text-embedding-3-small`
and `text-embedding-3-large`, make sure that you familiarize yourself with the
restrictions of these models in [Which Model to\\
Choose?](https://docs.cognigy.com/ai/agents/develop/knowledge-ai/overview).

4 The `*-latest` suffix indicates that the model you
select in Cognigy.AI points to the latest version of the model. For more
information, read
[Anthropic’s](https://docs.anthropic.com/en/docs/about-claude/models/overview)
or [Mistral\\
AI’s](https://docs.mistral.ai/getting-started/models/models_overview/) models
documentation.

5 For Cognigy.AI 2025.10 and earlier versions, the
option to select this model is hidden behind the
`FEATURE_ENABLE_AWS_BEDROCK_EMBEDDING_LLM_WHITELIST` feature flag.

6 Note that some models from the [Converse\\
API](https://docs.aws.amazon.com/bedrock/latest/userguide/models-features.html)
might not support the AI Agent Node feature.

7 This model supports only the Responses API. When you select this model, the Responses API is selected by default, and the **API Type** field is locked.8 The Conversation Analyzer uses the selected model to analyze session transcripts in [Cognigy Insights](https://docs.cognigy.com/insights/overview). If no model is explicitly selected in **Manage > Settings > Generative AI Settings**, the Project’s default LLM is used. Any chat model that supports the AI Agent Node also supports the Conversation Analyzer.

Last modified onJuly 10, 2026

[Previous](https://docs.cognigy.com/ai/agents/develop/gen-ai-and-llms/generative-ai) [All LLM Providers\\
\\
Next](https://docs.cognigy.com/ai/agents/develop/gen-ai-and-llms/providers/all-providers)

Ctrl+I

ChatVoice

Click the call button to start talking.

Cognigy AssistantReady to talk

Connecting…

Powered by [Cognigy.AI](/content/site-root.html)

### Cookie Consent

We use cookies to recognize your repeated visits and preferences, as well as to measure the effectiveness of our documentation and whether users find what they're searching for.

With your consent, you're helping us make our documentation better.
To find out more about the cookies we use, see our
[Privacy Policy](/content/privacy-policy/index.html).

Accept

';
 cachedClickBlockingCode = css + js;
 return cachedClickBlockingCode;
 }

// Helper: Inject click-blocking code into iframe
 function injectClickBlocking(iframeDoc) {
 if (!iframeDoc \|\| !iframeDoc.head) return false;

try {
 const style = iframeDoc.createElement('style');
 style.textContent = 'a,button,input,select,textarea,\[onclick\],\[role="button"\],input\[type="button"\],input\[type="submit"\],\[href\],\[tabindex\]:not(\[tabindex="-1"\]){pointer-events:none!important;cursor:default!important}a:hover,button:hover{cursor:default!important;opacity:0.7!important}';
 iframeDoc.head.appendChild(style);

const script = iframeDoc.createElement('script');
 script.textContent = '(function(){var preventClick=function(e){e.preventDefault();e.stopPropagation();e.stopImmediatePropagation();return false;};document.addEventListener("click",preventClick,true);document.addEventListener("mousedown",preventClick,true);document.addEventListener("mouseup",preventClick,true);document.addEventListener("touchstart",preventClick,true);document.addEventListener("touchend",preventClick,true);document.addEventListener("contextmenu",preventClick,true);window.addEventListener("beforeunload",function(e){e.preventDefault();e.returnValue="";return "";},true);try{Object.defineProperty(window,"location",{value:{href:"#",replace:function(){},assign:function(){}},writable:false,configurable:false});}catch(e){}var originalPushState=history.pushState;history.pushState=function(){return false;};var originalReplaceState=history.replaceState;history.replaceState=function(){return false;};var originalOpen=window.open;window.open=function(){return null;};var allElements=document.querySelectorAll("\*");for(var i=0;i 0 \|\| replacedViewers.length > 0) {
 const currentUrl = window.location.href;
 if (!processedUrls.has(currentUrl)) {
 processedUrls.add(currentUrl);
 lastUrl = currentUrl;
 }
 return;
 }

const currentUrl = window.location.href;
 if (currentUrl === lastUrl && lastUrl !== null && processedUrls.has(currentUrl)) {
 return;
 }

// Optimized: Use cached viewer query
 const viewers = getUninitializedViewers();

if (viewers.length === 0) {
 if (periodicCheckInterval) {
 clearInterval(periodicCheckInterval);
 periodicCheckInterval = null;
 }
 return;
 }

// Final safety check
 if (viewers.length > 0) {
 if (currentUrl === lastUrl && lastUrl !== null && processedUrls.has(currentUrl)) {
 viewers.forEach(function(viewer) {
 viewer.setAttribute('data-initialized', 'true');
 });
 return;
 }

if (currentUrl === lastUrl && lastUrl !== null) {
 if (existingContainers.length > 0) {
 processedUrls.add(currentUrl);
 viewers.forEach(function(viewer) {
 viewer.setAttribute('data-initialized', 'true');
 });
 return;
 }
 }
 }

isInitializing = true;
 let processedAny = false;

// Optimized: Process viewers in batch
 viewers.forEach(function(viewer) {
 if (processedElements.has(viewer) \|\| viewer.hasAttribute('data-initialized')) {
 return;
 }

if (viewer.closest('.single-page-viewer-container')) {
 return;
 }

if (!viewer.parentNode) {
 return;
 }

const isInContentArea = contentArea === document.body \|\| contentArea.contains(viewer);
 if (!isInContentArea) {
 return;
 }

const src = viewer.getAttribute('data-src');
 const hint = viewer.getAttribute('data-hint') \|\| '';
 const defaultZoom = parseFloat(viewer.getAttribute('data-zoom')) \|\| DEFAULT\_ZOOM;
 const dataHeight = viewer.getAttribute('data-height');
 const height = dataHeight ? parseFloat(dataHeight) : null;

if (!src) {
 // Don't set isInitializing = false here - it affects all viewers in the loop
 return;
 }

processedElements.add(viewer);
 viewer.setAttribute('data-initialized', 'true');

let zoom = defaultZoom;

// Optimized: Use document fragment for DOM construction
 const fragment = document.createDocumentFragment();
 const container = document.createElement('div');
 container.className = 'single-page-viewer-container';

const wrapper = document.createElement('div');
 wrapper.className = 'single-page-viewer-wrapper';

const controlsBar = document.createElement('div');
 controlsBar.className = 'single-page-viewer-controls';

if (hint) {
 const hintDiv = document.createElement('div');
 hintDiv.className = 'single-page-viewer-hint';
 hintDiv.innerHTML = '' \+ hint + '';
 controlsBar.appendChild(hintDiv);
 }

const iframeWrapper = document.createElement('div');
 iframeWrapper.className = 'single-page-viewer-iframe-wrapper';
 iframeWrapper.\_scrollHandlerAdded = false;

// Optimized: Get height without temporary DOM manipulation
 const baseHeightFromCSS = height \|\| NORMAL\_HEIGHT;

const scaleDiv = document.createElement('div');
 scaleDiv.className = 'single-page-viewer-scale';
 const initialHeight = baseHeightFromCSS;
 scaleDiv.style.cssText = 'transform: scale(' + zoom + '); transform-origin: top left; width: ' + (100 / zoom) + '%; height: ' + initialHeight + 'px; transition: transform 0.2s ease;';

const iframe = document.createElement('iframe');
 let iframeSrc = src;
 if (iframeSrc && !iframeSrc.startsWith('http') && !iframeSrc.startsWith('//')) {
 if (!iframeSrc.startsWith('/')) {
 iframeSrc = '/' + iframeSrc;
 }
 }

iframe.title = 'Single Page Viewer';
 iframe.className = 'single-page-viewer-iframe';
 iframe.style.width = '100%';
 iframe.style.height = initialHeight + 'px';
 iframe.loading = 'lazy';
 iframe.setAttribute('scrolling', 'no');
 iframe.setAttribute('sandbox', 'allow-same-origin allow-scripts allow-forms allow-popups allow-modals');

const clickBlocker = document.createElement('div');
 clickBlocker.className = 'single-page-viewer-click-blocker';

if (iframeSrc.endsWith('.html') && !iframeSrc.startsWith('http')) {
 fetch(iframeSrc)
 .then(function(response) {
 return response.text().then(function(htmlContent) {
 if (htmlContent.includes('Page Not Found') \|\|
 (htmlContent.includes('\_\_next') && htmlContent.includes('mintlify') && !htmlContent.includes('Page saved with SingleFile'))) {
 throw new Error('Received 404 page instead of HTML file.');
 }
 const blockingCode = getClickBlockingCode();
 if (htmlContent.includes('')) {
 htmlContent = htmlContent.replace('', blockingCode + '');
 } else if (htmlContent.includes('')) {
 htmlContent = htmlContent.replace('', '' + blockingCode);
 } else {
 if (htmlContent.includes('')) {
 htmlContent = htmlContent.replace('', '' + blockingCode + '');
 } else {
 htmlContent = blockingCode + htmlContent;
 }
 }
 iframe.srcdoc = htmlContent;
 });
 });
 } else {
 iframe.src = iframeSrc;
 }

iframe.addEventListener('load', function() {
 setTimeout(function() {
 updateIframeDimensions(iframeWrapper, scaleDiv, iframe, zoom);
 }, 100);

try {
 const iframeDoc = iframe.contentDocument \|\| iframe.contentWindow.document;
 injectClickBlocking(iframeDoc);
 } catch (e) {
 // Cross-origin iframe - cannot block clicks
 }
 }, { once: true });

iframe.addEventListener('error', function() {
 // Iframe failed to load - error handling is silent
 }, { once: true });

scaleDiv.appendChild(iframe);
 iframeWrapper.appendChild(scaleDiv);
 if (!iframeSrc.endsWith('.html') \|\| iframeSrc.startsWith('http')) {
 iframeWrapper.appendChild(clickBlocker);
 }

if (hint) {
 wrapper.appendChild(controlsBar);
 }
 wrapper.appendChild(iframeWrapper);
 container.appendChild(wrapper);
 fragment.appendChild(container);

try {
 if (viewer.parentNode) {
 if (viewer === contentArea \|\| viewer.id === 'content-area') {
 isInitializing = false;
 return;
 }

const viewerId = 'viewer-' + Date.now() + '-' + Math.random().toString(36).slice(2, 11);
 viewer.id = viewerId;
 viewer.setAttribute('data-viewer-id', viewerId);
 container.setAttribute('data-viewer-id', viewerId);

// Optimized: Single DOM insertion using fragment
 if (viewer.nextSibling) {
 viewer.parentNode.insertBefore(fragment, viewer.nextSibling);
 } else {
 viewer.parentNode.appendChild(fragment);
 }

// Batch style updates
 Object.assign(viewer.style, {
 display: 'none',
 visibility: 'hidden',
 position: 'absolute',
 width: '1px',
 height: '1px',
 overflow: 'hidden',
 opacity: '0',
 pointerEvents: 'none',
 margin: '0',
 padding: '0'
 });

viewer.setAttribute('data-initialized', 'true');
 viewer.setAttribute('data-viewer-replaced', 'true');

processedAny = true;
 invalidateQueryCache();

requestAnimationFrame(function() {
 updateIframeDimensions(iframeWrapper, scaleDiv, iframe, zoom);
 });
 }
 } catch (e) {
 isInitializing = false;
 return;
 }
 });

if (processedAny) {
 const currentUrl = window.location.href;
 processedUrls.add(currentUrl);
 lastUrl = currentUrl;
 invalidateQueryCache();
 }

isInitializing = false;
 }

// Wait for content area to be available
 function waitForContentArea(callback, maxAttempts, attempt) {
 attempt = attempt \|\| 0;
 maxAttempts = maxAttempts \|\| 20;

const contentArea = document.querySelector('#content-area') \|\| document.querySelector('.mdx-content');

if (contentArea && document.contains(contentArea)) {
 cachedContentArea = contentArea;
 callback();
 } else if (attempt < maxAttempts) {
 setTimeout(function() {
 waitForContentArea(callback, maxAttempts, attempt + 1);
 }, 500);
 } else {
 cachedContentArea = document.body;
 callback();
 }
 }

// Optimized: Initialize with better state management
 function initialize() {
 const currentUrl = window.location.href;
 if (lastUrl !== currentUrl && lastUrl !== null) {
 lastUrl = currentUrl;
 processedUrls.clear();
 invalidateQueryCache();
 }

if (typeof window !== 'undefined') {
 window.\_\_lastFullUrl = window.location.href;
 }

if (lastThemeClass === null && document.documentElement) {
 lastThemeClass = document.documentElement.className;
 }

if (!themeObserver && document.documentElement) {
 themeObserver = new MutationObserver(function(mutations) {
 for (let i = 0; i < mutations.length; i++) {
 const mutation = mutations\[i\];
 if (mutation.type === 'attributes' && mutation.attributeName === 'class') {
 const currentThemeClass = document.documentElement.className;
 if (lastThemeClass !== null && lastThemeClass !== currentThemeClass) {
 themeToggleInProgress = true;

// Optimized: Lock containers synchronously
 const contentArea = getContentArea();
 if (contentArea) {
 const containers = getContainers(true);
 containers.forEach(function(container) {
 if (container.getAttribute('data-position-locked') !== 'true') {
 const rect = container.getBoundingClientRect();
 Object.assign(container.style, {
 position: 'fixed',
 top: rect.top + 'px',
 left: rect.left + 'px',
 width: rect.width + 'px',
 zIndex: '9999',
 margin: '0'
 });
 container.setAttribute('data-position-locked', 'true');
 containerPositions.set(container, {
 top: rect.top,
 left: rect.left,
 width: rect.width,
 height: rect.height
 });
 }
 });
 }

let repositionAttempts = 0;
 const maxRepositionAttempts = 30;

const repositionInterval = setInterval(function() {
 repositionAttempts++;
 repositionContainersAfterThemeToggleCore(); // Use core function for immediate repositioning
 if (repositionAttempts >= maxRepositionAttempts) {
 clearInterval(repositionInterval);
 }
 }, 100);

setTimeout(function() {
 clearInterval(repositionInterval);
 themeToggleInProgress = false;
 repositionContainersAfterThemeToggleCore(); // Use core function for final repositioning
 unlockContainers();
 }, 3000);
 }
 lastThemeClass = currentThemeClass;
 }
 }
 });

themeObserver.observe(document.documentElement, {
 attributes: true,
 attributeFilter: \['class'\]
 });
 }

if (typeof MutationObserver !== 'undefined') {
 setupObserver();
 }

waitForContentArea(function() {
 setTimeout(function() {
 initSinglePageViewers();
 setTimeout(function() {
 const remaining = getUninitializedViewers(true);
 if (remaining.length > 0) {
 initSinglePageViewers();
 }
 }, INIT\_DELAY);
 }, INIT\_DELAY);
 });
 }

// Optimized: Lock/unlock containers
 function lockContainersInPlace() {
 const contentArea = getContentArea();
 if (!contentArea) return;

const containers = getContainers(true);
 containerPositions.clear();

requestAnimationFrame(function() {
 containers.forEach(function(container) {
 if (container.getAttribute('data-position-locked') !== 'true') {
 const rect = container.getBoundingClientRect();
 Object.assign(container.style, {
 position: 'fixed',
 top: rect.top + 'px',
 left: rect.left + 'px',
 width: rect.width + 'px',
 zIndex: '9999',
 margin: '0'
 });
 container.setAttribute('data-position-locked', 'true');
 containerPositions.set(container, {
 top: rect.top,
 left: rect.left,
 width: rect.width,
 height: rect.height
 });
 }
 });
 });
 }

function unlockContainers() {
 const contentArea = getContentArea();
 if (!contentArea) return;

const containers = Array.from(
 contentArea.querySelectorAll('.single-page-viewer-container\[data-position-locked="true"\]')
 );

containers.forEach(function(container) {
 Object.assign(container.style, {
 position: '',
 top: '',
 left: '',
 width: '',
 zIndex: '',
 margin: ''
 });
 container.removeAttribute('data-position-locked');
 // Clean up container position from Map to prevent memory leak
 containerPositions.delete(container);
 });

containerPositions.clear();
 }

// Optimized: Reposition containers with better DOM operations
 // Core repositioning function (not debounced for immediate use)
 function repositionContainersAfterThemeToggleCore() {
 const contentArea = getContentArea();
 if (!contentArea) return;

const containers = getContainers(true);

containers.forEach(function(container) {
 const viewerId = container.getAttribute('data-viewer-id');
 if (!viewerId) return;

let viewer = document.getElementById(viewerId);

if (!viewer) {
 const iframe = container.querySelector('iframe');
 if (iframe && iframe.src) {
 const allViewers = contentArea.querySelectorAll('\[data-single-page-viewer\]');
 for (let i = 0; i < allViewers.length; i++) {
 const v = allViewers\[i\];
 if (v.getAttribute('data-src') === iframe.src) {
 viewer = v;
 viewer.id = viewerId;
 viewer.setAttribute('data-viewer-id', viewerId);
 Object.assign(viewer.style, {
 display: 'none',
 visibility: 'hidden',
 position: 'absolute',
 width: '1px',
 height: '1px',
 overflow: 'hidden',
 opacity: '0',
 pointerEvents: 'none',
 margin: '0',
 padding: '0'
 });
 viewer.setAttribute('data-initialized', 'true');
 viewer.setAttribute('data-viewer-replaced', 'true');
 break;
 }
 }
 }
 }

if (viewer && viewer.parentNode) {
 if (container.getAttribute('data-position-locked') === 'true') {
 unlockContainers();
 }

const viewerIndex = Array.from(viewer.parentNode.children).indexOf(viewer);
 const containerIndex = Array.from(viewer.parentNode.children).indexOf(container);

if (containerIndex !== viewerIndex + 1) {
 // CRITICAL: Check if container is actually a child before removing
 if (container.parentNode && container.parentNode.contains(container)) {
 try {
 container.parentNode.removeChild(container);
 } catch (e) {
 return; // Skip repositioning if removal failed
 }
 }
 if (viewer.nextSibling) {
 viewer.parentNode.insertBefore(container, viewer.nextSibling);
 } else {
 viewer.parentNode.appendChild(container);
 }
 } else if (container.parentNode !== viewer.parentNode) {
 // CRITICAL: Check if container is actually a child before removing
 if (container.parentNode && container.parentNode.contains(container)) {
 try {
 container.parentNode.removeChild(container);
 } catch (e) {
 return; // Skip repositioning if removal failed
 }
 }
 if (viewer.nextSibling) {
 viewer.parentNode.insertBefore(container, viewer.nextSibling);
 } else {
 viewer.parentNode.appendChild(container);
 }
 }
 }
 });

invalidateQueryCache();
 }

// Debounced version for non-critical repositioning
 const repositionContainersAfterThemeToggle = debounce(repositionContainersAfterThemeToggleCore, REPOSITION\_DEBOUNCE);

// Optimized: Observer setup with better filtering
 let observer = null;
 let containerPositionObserver = null;
 let fallbackObserver = null; // Track fallback observer for cleanup

function setupContainerPositionObserver() {
 if (typeof MutationObserver === 'undefined') return;

const contentArea = getContentArea();
 if (!contentArea \|\| !document.contains(contentArea)) {
 setTimeout(setupContainerPositionObserver, 500);
 return;
 }

if (containerPositionObserver) {
 containerPositionObserver.disconnect();
 }

containerPositionObserver = new MutationObserver(function(mutations) {
 if (themeToggleInProgress) {
 // Use core function (not debounced) for immediate repositioning during theme toggle
 requestAnimationFrame(repositionContainersAfterThemeToggleCore);
 return;
 }

let needsReposition = false;
 for (let i = 0; i < mutations.length && !needsReposition; i++) {
 if (mutations\[i\].type === 'childList') {
 needsReposition = true;
 }
 }

if (needsReposition) {
 clearTimeout(containerPositionObserver.\_timeout);
 containerPositionObserver.\_timeout = setTimeout(repositionContainersAfterThemeToggle, REPOSITION\_DEBOUNCE);
 }
 });

containerPositionObserver.observe(contentArea, {
 childList: true,
 subtree: true,
 attributes: false,
 characterData: false
 });

containerPositionObserver.\_timeout = null;
 }

// Optimized: Main observer with better early exits
 function setupObserver() {
 if (typeof MutationObserver === 'undefined') return;

const contentArea = getContentArea();
 if (!contentArea \|\| !document.contains(contentArea)) {
 setTimeout(setupObserver, 500);
 return;
 }

if (contentArea === document.documentElement \|\| contentArea === document.body) {
 return;
 }

if (observer) {
 const currentObserved = observer.\_observedElement;
 if (currentObserved === contentArea && document.contains(contentArea)) {
 return;
 }
 if (currentObserved) {
 observer.disconnect();
 }
 observer = null;
 }

observer = new MutationObserver(function(mutations) {
 if (themeToggleInProgress) return;

let hasNewViewer = false;
 for (let i = 0; i < mutations.length && !hasNewViewer; i++) {
 const mutation = mutations\[i\];
 if (mutation.addedNodes && mutation.addedNodes.length > 0) {
 for (let j = 0; j < mutation.addedNodes.length && !hasNewViewer; j++) {
 const node = mutation.addedNodes\[j\];
 if (node.nodeType === 1 &&
 node.hasAttribute &&
 node.hasAttribute('data-single-page-viewer') &&
 !node.hasAttribute('data-initialized') &&
 !node.hasAttribute('data-viewer-replaced')) {
 hasNewViewer = true;
 }
 }
 }
 }

if (hasNewViewer) {
 // Use core function for immediate repositioning when new viewer detected
 repositionContainersAfterThemeToggleCore();
 setTimeout(repositionContainersAfterThemeToggleCore, 10);
 setTimeout(repositionContainersAfterThemeToggleCore, 50);
 setTimeout(repositionContainersAfterThemeToggleCore, 200);
 }

clearTimeout(observerTimeout);
 observerTimeout = setTimeout(function() {
 if (themeToggleInProgress) return;

let hasNewViewer = false;
 for (let i = 0; i < mutations.length && !hasNewViewer; i++) {
 const mutation = mutations\[i\];

if (mutation.target === document.documentElement \|\| mutation.target === document.body) {
 continue;
 }

if (mutation.type === 'attributes' &&
 mutation.attributeName === 'class' &&
 mutation.target === document.documentElement) {
 continue;
 }

if (mutation.type === 'attributes' && mutation.attributeName === 'data-initialized') {
 const target = mutation.target;
 if (target && target.hasAttribute &&
 target.hasAttribute('data-single-page-viewer') &&
 !target.hasAttribute('data-initialized')) {
 hasNewViewer = true;
 }
 }

if (mutation.addedNodes && mutation.addedNodes.length > 0) {
 for (let j = 0; j < mutation.addedNodes.length && !hasNewViewer; j++) {
 const node = mutation.addedNodes\[j\];
 if (node.nodeType === 1 &&
 node.hasAttribute &&
 node.hasAttribute('data-single-page-viewer') &&
 !node.hasAttribute('data-initialized')) {
 hasNewViewer = true;
 }
 }
 }
 }

if (hasNewViewer) {
 invalidateQueryCache();
 initSinglePageViewers();
 }
 }, OBSERVER\_DEBOUNCE);
 });

observer.observe(contentArea, {
 childList: true,
 subtree: true,
 attributes: true,
 attributeFilter: \['data-initialized'\],
 characterData: false
 });

observer.\_observedElement = contentArea;
 setupContainerPositionObserver();
 }

function start() {
 setupObserver();
 initialize();
 }

function checkAndInitialize() {
 if (isInitializing) return;

const currentUrl = window.location.href;
 if (currentUrl === lastUrl && lastUrl !== null) {
 return;
 }

const contentArea = document.querySelector('#content-area') \|\| document.querySelector('.mdx-content');
 if (contentArea) {
 const viewers = getUninitializedViewers(true);
 if (viewers.length > 0) {
 cachedContentArea = contentArea;
 setupObserver();
 initialize();
 }
 }
 }

if (document.readyState === 'loading') {
 document.addEventListener('DOMContentLoaded', start);
 } else {
 setTimeout(start, 100);
 }

if (typeof window !== 'undefined' && window.next) {
 let initialLoadAttempts = 0;
 const maxInitialAttempts = 4;
 const attemptDelays = \[200, 500, 1000, 2000\];
 const initialUrl = window.location.href;

attemptDelays.forEach(function(delay) {
 setTimeout(function() {
 if (initialLoadAttempts < maxInitialAttempts) {
 initialLoadAttempts++;
 if (window.location.href === initialUrl) {
 checkAndInitialize();
 }
 }
 }, delay);
 });
 }

window.addEventListener('popstate', function(e) {
 const currentUrl = window.location.href;
 if (currentUrl !== lastUrl) {
 handleNavigation();
 }
 });

if (typeof window !== 'undefined') {
 if (window.next && window.next.router && window.next.router.events) {
 window.next.router.events.on('routeChangeComplete', function(url) {
 lastUrl = window.location.href;
 isInitializing = false;
 pendingInitCall = false;
 if (navigationTimeout) {
 clearTimeout(navigationTimeout);
 navigationTimeout = null;
 }
 invalidateContentAreaCache();
 invalidateQueryCache();
 setTimeout(function() {
 setupObserver();
 initialize();
 }, 300);
 });

window.next.router.events.on('routeChangeStart', function(url) {
 isInitializing = false;
 pendingInitCall = false;
 });
 }

if (!window.next \|\| !window.next.router) {
 const originalPushState = history.pushState;
 const originalReplaceState = history.replaceState;

history.pushState = function() {
 originalPushState.apply(history, arguments);
 setTimeout(function() {
 if (window.location.href !== lastUrl) {
 handleNavigation();
 }
 }, 0);
 };

history.replaceState = function() {
 originalReplaceState.apply(history, arguments);
 setTimeout(function() {
 if (window.location.href !== lastUrl) {
 handleNavigation();
 }
 }, 0);
 };
 }
 }

document.addEventListener('visibilitychange', function() {
 if (!document.hidden) {
 isInitializing = false;
 startPeriodicCheck();
 if (!pendingInitCall) {
 pendingInitCall = true;
 setTimeout(function() {
 pendingInitCall = false;
 initSinglePageViewers();
 }, INIT\_DELAY / 2);
 }
 }
 });

function startPeriodicCheck() {
 if (periodicCheckInterval) return;

periodicCheckInterval = setInterval(function() {
 const uninitialized = getUninitializedViewers(true);
 if (uninitialized.length === 0) {
 clearInterval(periodicCheckInterval);
 periodicCheckInterval = null;
 } else if (!isInitializing) {
 initSinglePageViewers();
 }
 }, 2000);
 }

setTimeout(startPeriodicCheck, INIT\_DELAY \* 2);

window.\_\_singlePageViewerInit = function() {
 const currentUrl = window.location.href;
 if (currentUrl === lastUrl) {
 return;
 }

isInitializing = false;
 pendingInitCall = false;
 lastUrl = currentUrl;
 invalidateContentAreaCache();
 invalidateQueryCache();
 setupObserver();
 initialize();
 };

window.\_\_singlePageViewerCheck = function() {
 invalidateQueryCache();
 initSinglePageViewers();
 };
})();

// Optimized: Second IIFE for navigation handling
(function() {
 'use strict';

let lastPathname = window.location.pathname;
 let lastInitializedPathname = window.location.pathname;

function checkAndInit() {
 const currentPathname = window.location.pathname;
 if (currentPathname === lastInitializedPathname) {
 return;
 }

lastInitializedPathname = currentPathname;
 if (typeof window !== 'undefined') {
 window.\_\_lastFullUrl = window.location.href;
 }

if (window.\_\_singlePageViewerInit) {
 window.\_\_singlePageViewerInit();
 }
 }

function runInit() {
 if (window.\_\_singlePageViewerInit) {
 setTimeout(checkAndInit, 100);
 } else {
 let attempts = 0;
 const maxAttempts = 50;
 const checkInterval = setInterval(function() {
 attempts++;
 if (window.\_\_singlePageViewerInit) {
 clearInterval(checkInterval);
 setTimeout(checkAndInit, 100);
 } else if (attempts >= maxAttempts) {
 clearInterval(checkInterval);
 }
 }, 100);
 }
 }

if (document.readyState === 'loading') {
 document.addEventListener('DOMContentLoaded', runInit);
 } else {
 setTimeout(runInit, 100);
 }

if (typeof window !== 'undefined' && window.next && window.next.router && window.next.router.events) {
 window.next.router.events.on('routeChangeComplete', function(url) {
 lastPathname = window.location.pathname;
 setTimeout(checkAndInit, 300);
 });
 }

setInterval(function() {
 const currentPathname = window.location.pathname;
 if (currentPathname !== lastPathname) {
 lastPathname = currentPathname;
 setTimeout(checkAndInit, 300);
 }
 }, 500);

if (typeof MutationObserver !== 'undefined') {
 let fallbackObserverTimeout = null;
 // Store in outer scope for cleanup tracking
 fallbackObserver = new MutationObserver(function(mutations) {
 if (fallbackObserverTimeout) {
 clearTimeout(fallbackObserverTimeout);
 }
 fallbackObserverTimeout = setTimeout(function() {
 const contentArea = document.querySelector('#content-area');
 if (contentArea) {
 const uninitialized = contentArea.querySelectorAll(
 '\[data-single-page-viewer\]:not(\[data-initialized\]):not(.single-page-viewer-container \[data-single-page-viewer\])'
 );
 if (uninitialized.length > 0) {
 const currentPathname = window.location.pathname;
 if (currentPathname !== lastInitializedPathname) {
 setTimeout(checkAndInit, 200);
 }
 }
 }
 }, 500);
 });

if (document.body) {
 fallbackObserver.observe(document.body, { childList: true, subtree: true });
 } else {
 document.addEventListener('DOMContentLoaded', function() {
 if (document.body) {
 fallbackObserver.observe(document.body, { childList: true, subtree: true });
 }
 });
 }
 }
})();
