@burtson-labs/bandit-engine 2.0.24 → 2.0.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -8
- package/dist/cli/cli.js +2 -2
- package/dist/cli/cli.js.map +1 -1
- package/docs/05_cli_quickstart.md +4 -6
- package/docs/api_reference/assets/bandit-docs.js +456 -0
- package/docs/api_reference/assets/highlight.css +15 -8
- package/docs/api_reference/assets/main.js +1 -0
- package/docs/api_reference/classes/DebugLogger.html +11 -11
- package/docs/api_reference/classes/FeatureFlagService.html +13 -13
- package/docs/api_reference/classes/NotificationService.html +10 -10
- package/docs/api_reference/classes/StreamingTTSClient.html +9 -9
- package/docs/api_reference/classes/VectorDatabaseService.html +24 -24
- package/docs/api_reference/classes/VectorMigrationService.html +8 -8
- package/docs/api_reference/classes/VoiceService.html +2 -2
- package/docs/api_reference/enums/TTSState.html +2 -2
- package/docs/api_reference/functions/Chat.html +1 -1
- package/docs/api_reference/functions/ChatModal.html +3 -3
- package/docs/api_reference/functions/ChatProvider.html +3 -3
- package/docs/api_reference/functions/FeatureFlagProvider.html +3 -3
- package/docs/api_reference/functions/FeedbackButton.html +3 -3
- package/docs/api_reference/functions/FeedbackModal.html +3 -3
- package/docs/api_reference/functions/Management.html +1 -1
- package/docs/api_reference/functions/NotificationProvider.html +3 -3
- package/docs/api_reference/functions/SubscriptionExpiredGuard.html +3 -3
- package/docs/api_reference/functions/SubscriptionExpiredModal.html +3 -3
- package/docs/api_reference/functions/defineCustomElement.html +1 -1
- package/docs/api_reference/functions/getCriticalConfig.html +1 -1
- package/docs/api_reference/functions/getFeatureMatrix.html +1 -1
- package/docs/api_reference/functions/getStreamingTTSClient.html +1 -1
- package/docs/api_reference/functions/getSystemConstants.html +1 -1
- package/docs/api_reference/functions/getTTSState.html +1 -1
- package/docs/api_reference/functions/handleHttpError.html +1 -1
- package/docs/api_reference/functions/handleSubscriptionUpgrade.html +1 -1
- package/docs/api_reference/functions/handleValidationError.html +1 -1
- package/docs/api_reference/functions/initializeCoreSystem.html +1 -1
- package/docs/api_reference/functions/pauseTTS.html +1 -1
- package/docs/api_reference/functions/previewTierUpgrade.html +1 -1
- package/docs/api_reference/functions/resumeTTS.html +1 -1
- package/docs/api_reference/functions/showInfoNotification.html +1 -1
- package/docs/api_reference/functions/showSuccessNotification.html +1 -1
- package/docs/api_reference/functions/speakWithStreaming.html +1 -1
- package/docs/api_reference/functions/stopTTS.html +1 -1
- package/docs/api_reference/functions/syncSubscriptionWithAPI.html +1 -1
- package/docs/api_reference/functions/updateSubscriptionTier.html +1 -1
- package/docs/api_reference/functions/useFeatureFlag.html +1 -1
- package/docs/api_reference/functions/useFeatureVisibility.html +1 -1
- package/docs/api_reference/functions/useFeatures.html +1 -1
- package/docs/api_reference/functions/useGatewayHealth.html +1 -1
- package/docs/api_reference/functions/useGatewayMemory.html +1 -1
- package/docs/api_reference/functions/useGatewayModels.html +1 -1
- package/docs/api_reference/functions/useGlobalTTS.html +1 -1
- package/docs/api_reference/functions/useNotification.html +1 -1
- package/docs/api_reference/functions/useNotificationService.html +1 -1
- package/docs/api_reference/functions/useTTS.html +1 -1
- package/docs/api_reference/functions/useVectorStore.html +1 -1
- package/docs/api_reference/functions/useVoiceStore.html +2 -2
- package/docs/api_reference/functions/useVoices.html +1 -1
- package/docs/api_reference/functions/validateEnvironment.html +1 -1
- package/docs/api_reference/functions/validateSystemIntegrity.html +1 -1
- package/docs/api_reference/index.html +23 -68
- package/docs/api_reference/interfaces/AIChatRequest.html +2 -2
- package/docs/api_reference/interfaces/AIChatResponse.html +2 -2
- package/docs/api_reference/interfaces/AIGenerateRequest.html +2 -2
- package/docs/api_reference/interfaces/AIGenerateResponse.html +2 -2
- package/docs/api_reference/interfaces/AIMessage.html +2 -2
- package/docs/api_reference/interfaces/AIModel.html +2 -2
- package/docs/api_reference/interfaces/AIProviderConfig.html +2 -2
- package/docs/api_reference/interfaces/ChatConfig.html +3 -3
- package/docs/api_reference/interfaces/ChatModalProps.html +3 -3
- package/docs/api_reference/interfaces/CreateMemoryOptions.html +2 -2
- package/docs/api_reference/interfaces/FeatureEvaluation.html +7 -7
- package/docs/api_reference/interfaces/FeatureFlagConfig.html +9 -9
- package/docs/api_reference/interfaces/FeatureFlagContextValue.html +8 -8
- package/docs/api_reference/interfaces/FeatureFlagProviderProps.html +2 -2
- package/docs/api_reference/interfaces/FeedbackButtonProps.html +10 -10
- package/docs/api_reference/interfaces/FeedbackCategories.html +2 -2
- package/docs/api_reference/interfaces/FeedbackModalProps.html +2 -2
- package/docs/api_reference/interfaces/FeedbackPriorities.html +2 -2
- package/docs/api_reference/interfaces/FeedbackRequest.html +2 -2
- package/docs/api_reference/interfaces/FeedbackResponse.html +2 -2
- package/docs/api_reference/interfaces/FileUploadResult.html +2 -2
- package/docs/api_reference/interfaces/GatewayChatRequest.html +2 -2
- package/docs/api_reference/interfaces/GatewayChatResponse.html +2 -2
- package/docs/api_reference/interfaces/GatewayContract.html +2 -2
- package/docs/api_reference/interfaces/GatewayGenerateRequest.html +2 -2
- package/docs/api_reference/interfaces/GatewayGenerateResponse.html +2 -2
- package/docs/api_reference/interfaces/GatewayHealthResponse.html +2 -2
- package/docs/api_reference/interfaces/GatewayMemoryRecord.html +2 -2
- package/docs/api_reference/interfaces/GatewayMemoryResponse.html +2 -2
- package/docs/api_reference/interfaces/GatewayMessage.html +2 -2
- package/docs/api_reference/interfaces/GatewayMessageContent.html +2 -2
- package/docs/api_reference/interfaces/GatewayModel.html +2 -2
- package/docs/api_reference/interfaces/GatewayModelsResponse.html +2 -2
- package/docs/api_reference/interfaces/MemorySearchFilters.html +2 -2
- package/docs/api_reference/interfaces/MigrationProgress.html +2 -2
- package/docs/api_reference/interfaces/MigrationStatus.html +2 -2
- package/docs/api_reference/interfaces/NotificationConfig.html +2 -2
- package/docs/api_reference/interfaces/NotificationContextType.html +2 -2
- package/docs/api_reference/interfaces/NotificationProviderProps.html +2 -2
- package/docs/api_reference/interfaces/PackageSettings.html +2 -2
- package/docs/api_reference/interfaces/SearchOptions.html +2 -2
- package/docs/api_reference/interfaces/SearchResult.html +2 -2
- package/docs/api_reference/interfaces/SubscriptionExpiredGuardProps.html +2 -2
- package/docs/api_reference/interfaces/SubscriptionExpiredModalProps.html +2 -2
- package/docs/api_reference/interfaces/TTSOptions.html +2 -2
- package/docs/api_reference/interfaces/TTSProgress.html +2 -2
- package/docs/api_reference/interfaces/TrialUsage.html +2 -2
- package/docs/api_reference/interfaces/UploadRequest.html +3 -3
- package/docs/api_reference/interfaces/UseTTSReturn.html +2 -2
- package/docs/api_reference/interfaces/VectorDocument.html +2 -2
- package/docs/api_reference/interfaces/VectorMemory.html +2 -2
- package/docs/api_reference/interfaces/VectorMemoryMetadata.html +2 -2
- package/docs/api_reference/interfaces/VectorStoreStatus.html +2 -2
- package/docs/api_reference/interfaces/VoiceModelsResponse.html +2 -2
- package/docs/api_reference/interfaces/VoiceState.html +2 -2
- package/docs/api_reference/media/05_cli_quickstart.md +4 -6
- package/docs/api_reference/types/FeatureKey.html +1 -1
- package/docs/api_reference/types/FeatureMatrix.html +1 -1
- package/docs/api_reference/types/GatewayQueryOptions.html +1 -1
- package/docs/api_reference/types/LogContext.html +1 -1
- package/docs/api_reference/types/SubscriptionTier.html +1 -1
- package/docs/api_reference/variables/DEFAULT_TIER_FEATURES.html +1 -1
- package/docs/api_reference/variables/FeatureFlagContext.html +1 -1
- package/docs/api_reference/variables/OSS_DEFAULT_FEATURES.html +1 -1
- package/docs/api_reference/variables/SYSTEM_FLAGS.html +1 -1
- package/docs/api_reference/variables/authenticationService.html +1 -1
- package/docs/api_reference/variables/debugLogger-1.html +1 -1
- package/docs/api_reference/variables/featureFlagService-1.html +1 -1
- package/docs/api_reference/variables/notificationService-1.html +1 -1
- package/docs/api_reference/variables/vectorDatabaseService-1.html +1 -1
- package/docs/api_reference/variables/vectorMigrationService-1.html +1 -1
- package/docs/api_reference/variables/voiceService-1.html +1 -1
- package/package.json +2 -2
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
</picture>
|
|
7
7
|
</a>
|
|
8
8
|
<a id="md:bandit-engine-⚡" class="tsd-anchor"></a><h1 class="tsd-anchor-link">Bandit Engine ⚡<a href="#md:bandit-engine-⚡" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h1><p>An AI chat toolkit built for speed, design, and control. Power branded AI assistants with battle-tested React components and a secure gateway contract.</p>
|
|
9
|
-
<p><a href="https://www.npmjs.com/package/@burtson-labs/bandit-engine" target="_blank" class="external"><img src="https://img.shields.io/
|
|
9
|
+
<p><a href="https://www.npmjs.com/package/@burtson-labs/bandit-engine" target="_blank" class="external"><img src="https://img.shields.io/npm/v/%40burtson-labs%2Fbandit-engine?logo=npm&color=cb3837" alt="npm"></a>
|
|
10
10
|
<a href="https://banditailabs.com/npm-package" target="_blank" class="external"><img src="https://img.shields.io/badge/docs-banditailabs.com%2Fnpm--package-0C7BD4" alt="Docs"></a>
|
|
11
11
|
<a href="https://banditailabs.com/" target="_blank" class="external"><img src="https://img.shields.io/badge/live%20demo-banditailabs.com%2Fchat-7F56D9" alt="Live Demo"></a>
|
|
12
12
|
<a href="https://www.typescriptlang.org/" target="_blank" class="external"><img src="https://img.shields.io/badge/TypeScript-5.x-3178c6?logo=typescript&logoColor=white" alt="TypeScript"></a>
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
<li>🔌 Plug-and-play React chat, modal, and management surfaces</li>
|
|
16
16
|
<li>🧠 Memory, vector knowledge, and provider switching behind a secure gateway</li>
|
|
17
17
|
<li>🎨 Full MUI theming, dark mode, and branding controls out of the box</li>
|
|
18
|
-
<li>🌐 Multimodal support (voice, images, documents) with Ollama, OpenAI, Azure, Anthropic</li>
|
|
18
|
+
<li>🌐 Multimodal support (voice, images, documents) with Ollama, OpenAI, Azure OpenAI, and Anthropic today — tell us which providers you need next so we can prioritize them</li>
|
|
19
19
|
<li>🛠️ CLI scaffolding, sample gateway, and docs to launch in minutes</li>
|
|
20
20
|
</ul>
|
|
21
21
|
<a id="md:quick-links" class="tsd-anchor"></a><h2 class="tsd-anchor-link">Quick Links<a href="#md:quick-links" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><ul>
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
<li><code>--force</code> to overwrite a non-empty directory</li>
|
|
45
45
|
</ul>
|
|
46
46
|
<blockquote>
|
|
47
|
-
<p
|
|
47
|
+
<p>📦 The generated project installs directly from <code>https://registry.npmjs.org/</code> — no GitHub npm token is required once the package is public.</p>
|
|
48
48
|
</blockquote>
|
|
49
49
|
<blockquote>
|
|
50
50
|
<p>⚠️ The scaffolded gateway focuses on OpenAI/Ollama chat and model discovery. All advanced routes (file storage uploads, vector embedding, voice, MCP, etc.) are generated as <code>501</code> placeholders so you can wire them to your own infrastructure. Implement the contracts below before turning on those features in production.</p>
|
|
@@ -184,63 +184,15 @@
|
|
|
184
184
|
<p>Edit the generated <code>.env</code> and point both the frontend and gateway at Ollama:</p>
|
|
185
185
|
<pre><code class="ini"># Frontend
|
|
186
186
|
VITE_GATEWAY_PROVIDER=ollama
|
|
187
|
-
VITE_DEFAULT_MODEL=llava:latest # any model installed on your Ollama box
|
|
188
|
-
VITE_FALLBACK_MODEL=gemma2:9b-instruct # optional, but handy for text-only fallbacks
|
|
189
|
-
|
|
190
|
-
# Gateway / server
|
|
191
|
-
OLLAMA_URL=http://localhost:11434 # or the remote daemon address
|
|
192
187
|
</code><button type="button">Copy</button></pre>
|
|
193
188
|
|
|
194
|
-
<p>Set <code>VITE_DEFAULT_MODEL</code> / <code>VITE_FALLBACK_MODEL</code> to the exact Ollama model tags you have available (<code>gemma</code>, <code>llava</code>, <code>moondream</code>, or your own custom builds). Bandit automatically detects multimodal Ollama models, so setting <code>llava</code>, <code>moondream</code>, or other vision-capable variants enables image understanding with no extra code.</p>
|
|
195
189
|
</li>
|
|
196
190
|
</ol>
|
|
197
|
-
<
|
|
198
|
-
|
|
199
|
-
<
|
|
200
|
-
<li><strong>Input</strong>: <code>{ text: string, voice?: string, speed?: number }</code></li>
|
|
201
|
-
|
|
202
|
-
<li><strong>Compatible with</strong>: OpenAI TTS, Azure Speech, Google Cloud TTS, AWS Polly, local TTS servers, or custom implementations</li>
|
|
203
|
-
</ul>
|
|
204
|
-
<p><strong>STT Endpoint (<code>POST /api/stt/transcribe</code>)</strong></p>
|
|
205
|
-
<ul>
|
|
206
|
-
<li><strong>Input</strong>: Audio file upload (multipart/form-data)</li>
|
|
207
|
-
<li><strong>Output</strong>: <code>{ text: string }</code> or <code>{ transcription: string }</code></li>
|
|
208
|
-
<li><strong>Compatible with</strong>: OpenAI Whisper, Azure Speech, Google Speech, AWS Transcribe, local Whisper servers, or custom implementations</li>
|
|
209
|
-
</ul>
|
|
210
|
-
<p><strong>Service Discovery (<code>GET /api/tts/available-models</code>)</strong></p>
|
|
211
|
-
<ul>
|
|
212
|
-
<li><strong>Output</strong>: <code>{ models: string[], defaultModel: string, fallbackModel: string }</code></li>
|
|
213
|
-
<li>Used for automatic service availability detection and voice model selection</li>
|
|
214
|
-
</ul>
|
|
215
|
-
<blockquote>
|
|
216
|
-
<p>Quickstart note: the generated Express gateway ships these TTS/STT routes as <code>501</code> placeholders so you can connect your own provider. Voice features remain disabled until you implement them server-side.</p>
|
|
217
|
-
</blockquote>
|
|
218
|
-
<p>See the <a href="media/02_gateway_api.md">Gateway API Contract</a> for complete implementation examples in multiple languages.</p>
|
|
219
|
-
<p>Use the Management interface to switch providers anytime or migrate from direct to gateway setup.</p>
|
|
220
|
-
<ol start="3">
|
|
221
|
-
<li><strong>Development</strong></li>
|
|
222
|
-
</ol>
|
|
223
|
-
<ul>
|
|
224
|
-
<li>Use <code>npm link</code> or a monorepo workspace to test locally before publishing.</li>
|
|
225
|
-
<li>Build with <code>tsup</code>.</li>
|
|
226
|
-
</ul>
|
|
227
|
-
<hr>
|
|
228
|
-
<a id="md:🧩-consuming-the-components" class="tsd-anchor"></a><h2 class="tsd-anchor-link">🧩 Consuming the Components<a href="#md:🧩-consuming-the-components" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><p>Once you've wrapped your app with <code>ChatProvider</code>, you can selectively integrate Bandit's components as needed:</p>
|
|
229
|
-
<ul>
|
|
230
|
-
<li><code><Chat /></code>: The main chat interface, designed to be used on a dedicated page or embedded into your product.</li>
|
|
231
|
-
<li><code><Management /></code>: A full-featured admin and model configuration UI. This should not be on the same page as <code><Chat /></code>. Use this to allow authenticated users to manage themes, models, and embedded knowledge.</li>
|
|
232
|
-
<li><code><ChatModal /></code>: A flexible, mobile-friendly modal that can be launched anywhere in your app for quick AI interactions. Features include:
|
|
233
|
-
<ul>
|
|
234
|
-
<li><strong>Chat Control Center</strong>: Built-in conversation management, voice model switching, and memory controls</li>
|
|
235
|
-
<li><strong>Context Switching</strong>: Toggle between local session and saved conversation history</li>
|
|
236
|
-
<li><strong>Voice Integration</strong>: Voice model selection with real-time preview (when TTS is configured)</li>
|
|
237
|
-
<li><strong>Navigation</strong>: Seamless transition from modal to full chat interface</li>
|
|
238
|
-
<li><strong>Auto-theming</strong>: Automatically uses the theme configured in the Management interface</li>
|
|
239
|
-
</ul>
|
|
240
|
-
</li>
|
|
241
|
-
</ul>
|
|
242
|
-
<pre><code class="tsx"><span class="hl-4">import</span><span class="hl-1"> { </span><span class="hl-5">Chat</span><span class="hl-1">, </span><span class="hl-5">Management</span><span class="hl-1">, </span><span class="hl-5">ChatModal</span><span class="hl-1">, </span><span class="hl-5">ChatProvider</span><span class="hl-1"> } </span><span class="hl-4">from</span><span class="hl-1"> </span><span class="hl-2">'@burtson-labs/bandit-engine'</span><span class="hl-1">;</span><br/><span class="hl-4">import</span><span class="hl-1"> { </span><span class="hl-5">useState</span><span class="hl-1"> } </span><span class="hl-4">from</span><span class="hl-1"> </span><span class="hl-2">'react'</span><span class="hl-1">;</span><br/><br/><span class="hl-6">function</span><span class="hl-1"> </span><span class="hl-0">YourPage</span><span class="hl-1">() {</span><br/><span class="hl-1"> </span><span class="hl-6">const</span><span class="hl-1"> [</span><span class="hl-7">isModalOpen</span><span class="hl-1">, </span><span class="hl-7">setIsModalOpen</span><span class="hl-1">] = </span><span class="hl-0">useState</span><span class="hl-1">(</span><span class="hl-6">false</span><span class="hl-1">);</span><br/><br/><span class="hl-1"> </span><span class="hl-4">return</span><span class="hl-1"> (</span><br/><span class="hl-1"> </span><span class="hl-9"><></span><br/><span class="hl-1"> </span><span class="hl-9"><</span><span class="hl-10">Chat</span><span class="hl-1"> </span><span class="hl-9">/></span><br/><span class="hl-1"> </span><span class="hl-6">{</span><span class="hl-8">/* Use <Management /> on a separate admin route with access controls */</span><span class="hl-6">}</span><br/><span class="hl-1"> </span><br/><span class="hl-1"> </span><span class="hl-6">{</span><span class="hl-8">/* Trigger the AI modal anywhere in your app */</span><span class="hl-6">}</span><br/><span class="hl-1"> </span><span class="hl-9"><</span><span class="hl-13">button</span><span class="hl-1"> </span><span class="hl-11">onClick</span><span class="hl-1">=</span><span class="hl-6">{</span><span class="hl-14">() </span><span class="hl-6">=></span><span class="hl-14"> </span><span class="hl-0">setIsModalOpen</span><span class="hl-14">(</span><span class="hl-6">true</span><span class="hl-14">)</span><span class="hl-6">}</span><span class="hl-9">></span><br/><span class="hl-1"> Ask AI</span><br/><span class="hl-1"> </span><span class="hl-9"></</span><span class="hl-13">button</span><span class="hl-9">></span><br/><span class="hl-1"> </span><span class="hl-9"><</span><span class="hl-10">ChatModal</span><span class="hl-1"> </span><br/><span class="hl-1"> </span><span class="hl-11">open</span><span class="hl-1">=</span><span class="hl-6">{</span><span class="hl-5">isModalOpen</span><span class="hl-6">}</span><span class="hl-1"> </span><br/><span class="hl-1"> </span><span class="hl-11">onClose</span><span class="hl-1">=</span><span class="hl-6">{</span><span class="hl-14">() </span><span class="hl-6">=></span><span class="hl-14"> </span><span class="hl-0">setIsModalOpen</span><span class="hl-14">(</span><span class="hl-6">false</span><span class="hl-14">)</span><span class="hl-6">}</span><br/><span class="hl-1"> </span><span class="hl-9">/></span><br/><span class="hl-1"> </span><span class="hl-9"></></span><br/><span class="hl-1"> );</span><br/><span class="hl-1">}</span>
|
|
243
|
-
</code><button type="button">Copy</button></pre>
|
|
191
|
+
<p>VITE_DEFAULT_MODEL=llava:latest # any model installed on your Ollama box
|
|
192
|
+
VITE_FALLBACK_MODEL=gemma2:9b-instruct # optional, but handy for text-only fallbacks</p>
|
|
193
|
+
<a id="md:gateway--server" class="tsd-anchor"></a><h1 class="tsd-anchor-link">Gateway / server<a href="#md:gateway--server" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h1><p>OLLAMA_URL=<a href="http://localhost:11434" target="_blank" class="external">http://localhost:11434</a> # or the remote daemon address</p>
|
|
194
|
+
<pre><code><br/><br/><span class="hl-1"><</span><span class="hl-5">p</span><span class="hl-1"> </span><span class="hl-5">class</span><span class="hl-1">=</span><span class="hl-2">"gateway-note"</span><span class="hl-1">></span><span class="hl-5">Set</span><span class="hl-1"> <</span><span class="hl-5">code</span><span class="hl-1">></span><span class="hl-7">VITE_DEFAULT_MODEL</span><span class="hl-1"><</span><span class="hl-13">/code> /</span><span class="hl-1"> <</span><span class="hl-5">code</span><span class="hl-1">></span><span class="hl-7">VITE_FALLBACK_MODEL</span><span class="hl-1"></</span><span class="hl-5">code</span><span class="hl-1">> </span><span class="hl-5">to</span><span class="hl-1"> </span><span class="hl-5">the</span><span class="hl-1"> </span><span class="hl-5">exact</span><span class="hl-1"> </span><span class="hl-5">Ollama</span><span class="hl-1"> </span><span class="hl-5">model</span><span class="hl-1"> </span><span class="hl-5">tags</span><span class="hl-1"> </span><span class="hl-5">you</span><span class="hl-1"> </span><span class="hl-5">have</span><span class="hl-1"> </span><span class="hl-0">available</span><span class="hl-1"> (<</span><span class="hl-10">code</span><span class="hl-1">></span><span class="hl-5">gemma</span><span class="hl-1"></</span><span class="hl-5">code</span><span class="hl-1">>, <</span><span class="hl-10">code</span><span class="hl-1">></span><span class="hl-5">llava</span><span class="hl-1"></</span><span class="hl-5">code</span><span class="hl-1">>, <</span><span class="hl-10">code</span><span class="hl-1">></span><span class="hl-5">moondream</span><span class="hl-1"></</span><span class="hl-5">code</span><span class="hl-1">>, </span><span class="hl-5">or</span><span class="hl-1"> </span><span class="hl-5">your</span><span class="hl-1"> </span><span class="hl-5">own</span><span class="hl-1"> </span><span class="hl-5">custom</span><span class="hl-1"> </span><span class="hl-5">builds</span><span class="hl-1">). </span><span class="hl-5">Bandit</span><span class="hl-1"> </span><span class="hl-5">automatically</span><span class="hl-1"> </span><span class="hl-5">detects</span><span class="hl-1"> </span><span class="hl-5">multimodal</span><span class="hl-1"> </span><span class="hl-5">Ollama</span><span class="hl-1"> </span><span class="hl-5">models</span><span class="hl-1">, </span><span class="hl-5">so</span><span class="hl-1"> </span><span class="hl-5">setting</span><span class="hl-1"> <</span><span class="hl-5">code</span><span class="hl-1">></span><span class="hl-5">llava</span><span class="hl-1"></</span><span class="hl-5">code</span><span class="hl-1">>, <</span><span class="hl-10">code</span><span class="hl-1">></span><span class="hl-5">moondream</span><span class="hl-1"></</span><span class="hl-5">code</span><span class="hl-1">>, </span><span class="hl-5">or</span><span class="hl-1"> </span><span class="hl-5">other</span><span class="hl-1"> </span><span class="hl-5">vision</span><span class="hl-1">-</span><span class="hl-5">capable</span><span class="hl-1"> </span><span class="hl-5">variants</span><span class="hl-1"> </span><span class="hl-5">enables</span><span class="hl-1"> </span><span class="hl-5">image</span><span class="hl-1"> </span><span class="hl-5">understanding</span><span class="hl-1"> </span><span class="hl-4">with</span><span class="hl-1"> </span><span class="hl-5">no</span><span class="hl-1"> </span><span class="hl-5">extra</span><span class="hl-1"> </span><span class="hl-5">code</span><span class="hl-1">.</</span><span class="hl-5">p</span><span class="hl-1">></span><br/><br/><span class="hl-1">### 🎤 </span><span class="hl-5">Voice</span><span class="hl-1"> </span><span class="hl-0">Services</span><span class="hl-1"> (</span><span class="hl-7">TTS</span><span class="hl-1">/</span><span class="hl-7">STT</span><span class="hl-1">)</span><br/><br/><span class="hl-5">The</span><span class="hl-1"> </span><span class="hl-5">Bandit</span><span class="hl-1"> </span><span class="hl-5">Engine</span><span class="hl-1"> </span><span class="hl-5">supports</span><span class="hl-1"> </span><span class="hl-5">Text</span><span class="hl-1">-</span><span class="hl-5">to</span><span class="hl-1">-</span><span class="hl-0">Speech</span><span class="hl-1"> (</span><span class="hl-7">TTS</span><span class="hl-1">) </span><span class="hl-5">and</span><span class="hl-1"> </span><span class="hl-5">Speech</span><span class="hl-1">-</span><span class="hl-5">to</span><span class="hl-1">-</span><span class="hl-0">Text</span><span class="hl-1"> (</span><span class="hl-7">STT</span><span class="hl-1">) </span><span class="hl-5">through</span><span class="hl-1"> </span><span class="hl-5">your</span><span class="hl-1"> </span><span class="hl-5">gateway</span><span class="hl-1"> </span><span class="hl-7">API</span><span class="hl-1">. </span><span class="hl-5">These</span><span class="hl-1"> </span><span class="hl-5">services</span><span class="hl-1"> </span><span class="hl-5">are</span><span class="hl-1"> **</span><span class="hl-5">technology</span><span class="hl-1">-</span><span class="hl-5">agnostic</span><span class="hl-1">** - </span><span class="hl-5">you</span><span class="hl-1"> </span><span class="hl-5">can</span><span class="hl-1"> </span><span class="hl-5">implement</span><span class="hl-1"> </span><span class="hl-5">them</span><span class="hl-1"> </span><span class="hl-6">using</span><span class="hl-1"> </span><span class="hl-7">any</span><span class="hl-1"> backend technology:</span><br/><br/><span class="hl-1">**</span><span class="hl-10">TTS</span><span class="hl-1"> </span><span class="hl-10">Endpoint</span><span class="hl-1"> (</span><span class="hl-2">`POST /api/tts`</span><span class="hl-1">)**</span><br/><span class="hl-1">- **</span><span class="hl-10">Input</span><span class="hl-1">**: </span><span class="hl-2">`{ text: string, voice?: string, speed?: number }`</span><br/><span class="hl-1">- **</span><span class="hl-10">Output</span><span class="hl-1">**: </span><span class="hl-10">Audio</span><span class="hl-1"> </span><span class="hl-10">file</span><span class="hl-1"> (</span><span class="hl-5">MP3</span><span class="hl-1">, </span><span class="hl-5">WAV</span><span class="hl-1">, etc.) </span><span class="hl-10">or</span><span class="hl-1"> </span><span class="hl-10">streaming</span><span class="hl-1"> </span><span class="hl-10">audio</span><br/><span class="hl-1">- **</span><span class="hl-10">Compatible</span><span class="hl-1"> </span><span class="hl-10">with</span><span class="hl-1">**: </span><span class="hl-10">OpenAI</span><span class="hl-1"> </span><span class="hl-10">TTS</span><span class="hl-1">, </span><span class="hl-7">Azure</span><span class="hl-1"> Speech, </span><span class="hl-7">Google</span><span class="hl-1"> Cloud TTS, </span><span class="hl-7">AWS</span><span class="hl-1"> Polly, </span><span class="hl-7">local</span><span class="hl-1"> TTS servers, </span><span class="hl-7">or</span><span class="hl-1"> custom implementations</span><br/><br/><span class="hl-1">**</span><span class="hl-7">STT</span><span class="hl-1"> </span><span class="hl-0">Endpoint</span><span class="hl-1"> (</span><span class="hl-2">`POST /api/stt/transcribe`</span><span class="hl-1">)** </span><br/><span class="hl-1">- **</span><span class="hl-5">Input</span><span class="hl-1">**: </span><span class="hl-5">Audio</span><span class="hl-1"> </span><span class="hl-5">file</span><span class="hl-1"> </span><span class="hl-0">upload</span><span class="hl-1"> (</span><span class="hl-5">multipart</span><span class="hl-1">/</span><span class="hl-5">form</span><span class="hl-1">-</span><span class="hl-5">data</span><span class="hl-1">)</span><br/><span class="hl-1">- **</span><span class="hl-5">Output</span><span class="hl-1">**: </span><span class="hl-2">`{ text: string }`</span><span class="hl-1"> </span><span class="hl-5">or</span><span class="hl-1"> </span><span class="hl-2">`{ transcription: string }`</span><br/><span class="hl-1">- **</span><span class="hl-5">Compatible</span><span class="hl-1"> </span><span class="hl-4">with</span><span class="hl-1">**: </span><span class="hl-5">OpenAI</span><span class="hl-1"> </span><span class="hl-5">Whisper</span><span class="hl-1">, </span><span class="hl-5">Azure</span><span class="hl-1"> </span><span class="hl-5">Speech</span><span class="hl-1">, </span><span class="hl-5">Google</span><span class="hl-1"> </span><span class="hl-5">Speech</span><span class="hl-1">, </span><span class="hl-7">AWS</span><span class="hl-1"> </span><span class="hl-5">Transcribe</span><span class="hl-1">, </span><span class="hl-5">local</span><span class="hl-1"> </span><span class="hl-5">Whisper</span><span class="hl-1"> </span><span class="hl-5">servers</span><span class="hl-1">, </span><span class="hl-5">or</span><span class="hl-1"> </span><span class="hl-5">custom</span><span class="hl-1"> </span><span class="hl-5">implementations</span><br/><br/><span class="hl-1">**</span><span class="hl-5">Service</span><span class="hl-1"> </span><span class="hl-0">Discovery</span><span class="hl-1"> (</span><span class="hl-2">`GET /api/tts/available-models`</span><span class="hl-1">)**</span><br/><span class="hl-1">- **</span><span class="hl-5">Output</span><span class="hl-1">**: </span><span class="hl-2">`{ models: string[], defaultModel: string, fallbackModel: string }`</span><br/><span class="hl-1">- </span><span class="hl-5">Used</span><span class="hl-1"> </span><span class="hl-5">for</span><span class="hl-1"> </span><span class="hl-5">automatic</span><span class="hl-1"> </span><span class="hl-5">service</span><span class="hl-1"> </span><span class="hl-5">availability</span><span class="hl-1"> </span><span class="hl-5">detection</span><span class="hl-1"> </span><span class="hl-5">and</span><span class="hl-1"> </span><span class="hl-5">voice</span><span class="hl-1"> </span><span class="hl-5">model</span><span class="hl-1"> </span><span class="hl-5">selection</span><br/><br/><span class="hl-1">> </span><span class="hl-5">Quickstart</span><span class="hl-1"> </span><span class="hl-12">note</span><span class="hl-1">: </span><span class="hl-5">the</span><span class="hl-1"> </span><span class="hl-5">generated</span><span class="hl-1"> </span><span class="hl-5">Express</span><span class="hl-1"> </span><span class="hl-5">gateway</span><span class="hl-1"> </span><span class="hl-5">ships</span><span class="hl-1"> </span><span class="hl-5">these</span><span class="hl-1"> </span><span class="hl-7">TTS</span><span class="hl-1">/</span><span class="hl-7">STT</span><span class="hl-1"> </span><span class="hl-5">routes</span><span class="hl-1"> </span><span class="hl-4">as</span><span class="hl-1"> </span><span class="hl-2">`501`</span><span class="hl-1"> </span><span class="hl-10">placeholders</span><span class="hl-1"> </span><span class="hl-10">so</span><span class="hl-1"> </span><span class="hl-10">you</span><span class="hl-1"> </span><span class="hl-10">can</span><span class="hl-1"> </span><span class="hl-10">connect</span><span class="hl-1"> </span><span class="hl-10">your</span><span class="hl-1"> </span><span class="hl-10">own</span><span class="hl-1"> </span><span class="hl-10">provider</span><span class="hl-1">. </span><span class="hl-10">Voice</span><span class="hl-1"> </span><span class="hl-10">features</span><span class="hl-1"> </span><span class="hl-10">remain</span><span class="hl-1"> </span><span class="hl-10">disabled</span><span class="hl-1"> </span><span class="hl-10">until</span><span class="hl-1"> </span><span class="hl-10">you</span><span class="hl-1"> </span><span class="hl-10">implement</span><span class="hl-1"> </span><span class="hl-10">them</span><span class="hl-1"> </span><span class="hl-10">server</span><span class="hl-1">-</span><span class="hl-5">side</span><span class="hl-1">.</span><br/><br/><span class="hl-5">See</span><span class="hl-1"> </span><span class="hl-5">the</span><span class="hl-1"> [</span><span class="hl-5">Gateway</span><span class="hl-1"> </span><span class="hl-7">API</span><span class="hl-1"> </span><span class="hl-5">Contract</span><span class="hl-1">](</span><span class="hl-5">media</span><span class="hl-1">/02</span><span class="hl-5">_gateway_api</span><span class="hl-1">.</span><span class="hl-5">md</span><span class="hl-1">) </span><span class="hl-5">for</span><span class="hl-1"> </span><span class="hl-5">complete</span><span class="hl-1"> </span><span class="hl-5">implementation</span><span class="hl-1"> </span><span class="hl-5">examples</span><span class="hl-1"> </span><span class="hl-6">in</span><span class="hl-1"> </span><span class="hl-5">multiple</span><span class="hl-1"> </span><span class="hl-5">languages</span><span class="hl-1">.</span><br/><br/><span class="hl-5">Use</span><span class="hl-1"> </span><span class="hl-5">the</span><span class="hl-1"> </span><span class="hl-5">Management</span><span class="hl-1"> </span><span class="hl-6">interface</span><span class="hl-1"> </span><span class="hl-10">to</span><span class="hl-1"> </span><span class="hl-10">switch</span><span class="hl-1"> </span><span class="hl-10">providers</span><span class="hl-1"> </span><span class="hl-10">anytime</span><span class="hl-1"> </span><span class="hl-10">or</span><span class="hl-1"> </span><span class="hl-10">migrate</span><span class="hl-1"> </span><span class="hl-10">from</span><span class="hl-1"> </span><span class="hl-10">direct</span><span class="hl-1"> </span><span class="hl-10">to</span><span class="hl-1"> </span><span class="hl-10">gateway</span><span class="hl-1"> </span><span class="hl-10">setup</span><span class="hl-1">.</span><br/><br/><span class="hl-1">3. **</span><span class="hl-10">Development</span><span class="hl-1">**</span><br/><br/><span class="hl-1">- </span><span class="hl-10">Use</span><span class="hl-1"> `</span><span class="hl-10">npm</span><span class="hl-1"> </span><span class="hl-10">link</span><span class="hl-1">` </span><span class="hl-10">or</span><span class="hl-1"> </span><span class="hl-10">a</span><span class="hl-1"> </span><span class="hl-10">monorepo</span><span class="hl-1"> </span><span class="hl-10">workspace</span><span class="hl-1"> </span><span class="hl-10">to</span><span class="hl-1"> </span><span class="hl-10">test</span><span class="hl-1"> </span><span class="hl-10">locally</span><span class="hl-1"> </span><span class="hl-10">before</span><span class="hl-1"> </span><span class="hl-10">publishing</span><span class="hl-1">.</span><br/><span class="hl-1">- </span><span class="hl-10">Build</span><span class="hl-1"> </span><span class="hl-10">with</span><span class="hl-1"> `</span><span class="hl-10">tsup</span><span class="hl-1">`.</span><br/><br/><span class="hl-1">---</span><br/><br/><span class="hl-1">## 🧩 </span><span class="hl-10">Consuming</span><span class="hl-1"> </span><span class="hl-10">the</span><span class="hl-1"> </span><span class="hl-10">Components</span><br/><br/><span class="hl-10">Once</span><span class="hl-1"> </span><span class="hl-10">you</span><span class="hl-1">'</span><span class="hl-10">ve</span><span class="hl-1"> </span><span class="hl-10">wrapped</span><span class="hl-1"> </span><span class="hl-10">your</span><span class="hl-1"> </span><span class="hl-10">app</span><span class="hl-1"> </span><span class="hl-10">with</span><span class="hl-1"> `</span><span class="hl-10">ChatProvider</span><span class="hl-1">`, </span><span class="hl-10">you</span><span class="hl-1"> </span><span class="hl-10">can</span><span class="hl-1"> </span><span class="hl-10">selectively</span><span class="hl-1"> </span><span class="hl-10">integrate</span><span class="hl-1"> </span><span class="hl-10">Bandit</span><span class="hl-1">'</span><span class="hl-10">s</span><span class="hl-1"> </span><span class="hl-10">components</span><span class="hl-1"> </span><span class="hl-10">as</span><span class="hl-1"> </span><span class="hl-10">needed</span><span class="hl-1">:</span><br/><br/><span class="hl-1">- `<</span><span class="hl-10">Chat</span><span class="hl-1"> />`: </span><span class="hl-10">The</span><span class="hl-1"> </span><span class="hl-10">main</span><span class="hl-1"> </span><span class="hl-10">chat</span><span class="hl-1"> </span><span class="hl-10">interface</span><span class="hl-1">, </span><span class="hl-10">designed</span><span class="hl-1"> </span><span class="hl-10">to</span><span class="hl-1"> </span><span class="hl-10">be</span><span class="hl-1"> </span><span class="hl-10">used</span><span class="hl-1"> </span><span class="hl-10">on</span><span class="hl-1"> </span><span class="hl-10">a</span><span class="hl-1"> </span><span class="hl-10">dedicated</span><span class="hl-1"> </span><span class="hl-10">page</span><span class="hl-1"> </span><span class="hl-10">or</span><span class="hl-1"> </span><span class="hl-10">embedded</span><span class="hl-1"> </span><span class="hl-10">into</span><span class="hl-1"> </span><span class="hl-10">your</span><span class="hl-1"> </span><span class="hl-10">product</span><span class="hl-1">.</span><br/><span class="hl-1">- `<</span><span class="hl-10">Management</span><span class="hl-1"> />`: </span><span class="hl-10">A</span><span class="hl-1"> </span><span class="hl-10">full</span><span class="hl-1">-</span><span class="hl-10">featured</span><span class="hl-1"> </span><span class="hl-10">admin</span><span class="hl-1"> </span><span class="hl-10">and</span><span class="hl-1"> </span><span class="hl-10">model</span><span class="hl-1"> </span><span class="hl-10">configuration</span><span class="hl-1"> </span><span class="hl-10">UI</span><span class="hl-1">. </span><span class="hl-10">This</span><span class="hl-1"> </span><span class="hl-10">should</span><span class="hl-1"> </span><span class="hl-10">not</span><span class="hl-1"> </span><span class="hl-10">be</span><span class="hl-1"> </span><span class="hl-10">on</span><span class="hl-1"> </span><span class="hl-10">the</span><span class="hl-1"> </span><span class="hl-10">same</span><span class="hl-1"> </span><span class="hl-10">page</span><span class="hl-1"> </span><span class="hl-10">as</span><span class="hl-1"> `<</span><span class="hl-10">Chat</span><span class="hl-1"> />`. </span><span class="hl-10">Use</span><span class="hl-1"> </span><span class="hl-10">this</span><span class="hl-1"> </span><span class="hl-10">to</span><span class="hl-1"> </span><span class="hl-10">allow</span><span class="hl-1"> </span><span class="hl-10">authenticated</span><span class="hl-1"> </span><span class="hl-10">users</span><span class="hl-1"> </span><span class="hl-10">to</span><span class="hl-1"> </span><span class="hl-10">manage</span><span class="hl-1"> </span><span class="hl-10">themes</span><span class="hl-1">, </span><span class="hl-10">models</span><span class="hl-1">, </span><span class="hl-10">and</span><span class="hl-1"> </span><span class="hl-10">embedded</span><span class="hl-1"> </span><span class="hl-10">knowledge</span><span class="hl-1">.</span><br/><span class="hl-1">- `<</span><span class="hl-10">ChatModal</span><span class="hl-1"> />`: </span><span class="hl-10">A</span><span class="hl-1"> </span><span class="hl-10">flexible</span><span class="hl-1">, </span><span class="hl-10">mobile</span><span class="hl-1">-</span><span class="hl-10">friendly</span><span class="hl-1"> </span><span class="hl-10">modal</span><span class="hl-1"> </span><span class="hl-10">that</span><span class="hl-1"> </span><span class="hl-10">can</span><span class="hl-1"> </span><span class="hl-10">be</span><span class="hl-1"> </span><span class="hl-10">launched</span><span class="hl-1"> </span><span class="hl-10">anywhere</span><span class="hl-1"> </span><span class="hl-10">in</span><span class="hl-1"> </span><span class="hl-10">your</span><span class="hl-1"> </span><span class="hl-10">app</span><span class="hl-1"> </span><span class="hl-10">for</span><span class="hl-1"> </span><span class="hl-10">quick</span><span class="hl-1"> </span><span class="hl-10">AI</span><span class="hl-1"> </span><span class="hl-10">interactions</span><span class="hl-1">. </span><span class="hl-10">Features</span><span class="hl-1"> </span><span class="hl-10">include</span><span class="hl-1">:</span><br/><span class="hl-1">- **</span><span class="hl-10">Chat</span><span class="hl-1"> </span><span class="hl-10">Control</span><span class="hl-1"> </span><span class="hl-10">Center</span><span class="hl-1">**: </span><span class="hl-10">Built</span><span class="hl-1">-</span><span class="hl-10">in</span><span class="hl-1"> </span><span class="hl-10">conversation</span><span class="hl-1"> </span><span class="hl-10">management</span><span class="hl-1">, </span><span class="hl-10">voice</span><span class="hl-1"> </span><span class="hl-10">model</span><span class="hl-1"> </span><span class="hl-10">switching</span><span class="hl-1">, </span><span class="hl-10">and</span><span class="hl-1"> </span><span class="hl-10">memory</span><span class="hl-1"> </span><span class="hl-10">controls</span><br/><span class="hl-1">- **</span><span class="hl-10">Context</span><span class="hl-1"> </span><span class="hl-10">Switching</span><span class="hl-1">**: </span><span class="hl-10">Toggle</span><span class="hl-1"> </span><span class="hl-10">between</span><span class="hl-1"> </span><span class="hl-10">local</span><span class="hl-1"> </span><span class="hl-10">session</span><span class="hl-1"> </span><span class="hl-10">and</span><span class="hl-1"> </span><span class="hl-10">saved</span><span class="hl-1"> </span><span class="hl-10">conversation</span><span class="hl-1"> </span><span class="hl-10">history</span><span class="hl-1"> </span><br/><span class="hl-1">- **</span><span class="hl-10">Voice</span><span class="hl-1"> </span><span class="hl-10">Integration</span><span class="hl-1">**: </span><span class="hl-10">Voice</span><span class="hl-1"> </span><span class="hl-10">model</span><span class="hl-1"> </span><span class="hl-10">selection</span><span class="hl-1"> </span><span class="hl-10">with</span><span class="hl-1"> </span><span class="hl-10">real</span><span class="hl-1">-</span><span class="hl-10">time</span><span class="hl-1"> </span><span class="hl-10">preview</span><span class="hl-1"> (</span><span class="hl-10">when</span><span class="hl-1"> </span><span class="hl-10">TTS</span><span class="hl-1"> </span><span class="hl-10">is</span><span class="hl-1"> </span><span class="hl-10">configured</span><span class="hl-1">)</span><br/><span class="hl-1">- **</span><span class="hl-10">Navigation</span><span class="hl-1">**: </span><span class="hl-10">Seamless</span><span class="hl-1"> </span><span class="hl-10">transition</span><span class="hl-1"> </span><span class="hl-10">from</span><span class="hl-1"> </span><span class="hl-10">modal</span><span class="hl-1"> </span><span class="hl-10">to</span><span class="hl-1"> </span><span class="hl-10">full</span><span class="hl-1"> </span><span class="hl-10">chat</span><span class="hl-1"> </span><span class="hl-10">interface</span><br/><span class="hl-1">- **</span><span class="hl-10">Auto</span><span class="hl-1">-</span><span class="hl-10">theming</span><span class="hl-1">**: </span><span class="hl-10">Automatically</span><span class="hl-1"> </span><span class="hl-10">uses</span><span class="hl-1"> </span><span class="hl-10">the</span><span class="hl-1"> </span><span class="hl-10">theme</span><span class="hl-1"> </span><span class="hl-10">configured</span><span class="hl-1"> </span><span class="hl-10">in</span><span class="hl-1"> </span><span class="hl-10">the</span><span class="hl-1"> </span><span class="hl-10">Management</span><span class="hl-1"> </span><span class="hl-10">interface</span><br/><br/><span class="hl-1">```</span><span class="hl-10">tsx</span><br/><span class="hl-10">import</span><span class="hl-1"> { </span><span class="hl-5">Chat</span><span class="hl-1">, </span><span class="hl-5">Management</span><span class="hl-1">, </span><span class="hl-5">ChatModal</span><span class="hl-1">, </span><span class="hl-5">ChatProvider</span><span class="hl-1"> } </span><span class="hl-5">from</span><span class="hl-1"> </span><span class="hl-2">'@burtson-labs/bandit-engine'</span><span class="hl-1">;</span><br/><span class="hl-4">import</span><span class="hl-1"> { </span><span class="hl-5">useState</span><span class="hl-1"> } </span><span class="hl-4">from</span><span class="hl-1"> </span><span class="hl-2">'react'</span><span class="hl-1">;</span><br/><br/><span class="hl-6">function</span><span class="hl-1"> </span><span class="hl-0">YourPage</span><span class="hl-1">() {</span><br/><span class="hl-6">const</span><span class="hl-1"> [</span><span class="hl-7">isModalOpen</span><span class="hl-1">, </span><span class="hl-7">setIsModalOpen</span><span class="hl-1">] = </span><span class="hl-0">useState</span><span class="hl-1">(</span><span class="hl-6">false</span><span class="hl-1">);</span><br/><br/><span class="hl-4">return</span><span class="hl-1"> (</span><br/><span class="hl-1"> <></span><br/><span class="hl-1"> <</span><span class="hl-5">Chat</span><span class="hl-1"> /></span><br/><span class="hl-1"> {</span><span class="hl-8">/* Use <Management /> on a separate admin route with access controls */</span><span class="hl-1">}</span><br/><span class="hl-1"> </span><br/><span class="hl-1"> {</span><span class="hl-8">/* Trigger the AI modal anywhere in your app */</span><span class="hl-1">}</span><br/><span class="hl-1"> <</span><span class="hl-5">button</span><span class="hl-1"> </span><span class="hl-5">onClick</span><span class="hl-1">={() => </span><span class="hl-0">setIsModalOpen</span><span class="hl-1">(</span><span class="hl-5">true</span><span class="hl-1">)}></span><br/><span class="hl-1"> </span><span class="hl-5">Ask</span><span class="hl-1"> </span><span class="hl-5">AI</span><br/><span class="hl-1"> </</span><span class="hl-5">button</span><span class="hl-1">></span><br/><span class="hl-1"> <</span><span class="hl-5">ChatModal</span><span class="hl-1"> </span><br/><span class="hl-1"> </span><span class="hl-5">open</span><span class="hl-1">={</span><span class="hl-5">isModalOpen</span><span class="hl-1">} </span><br/><span class="hl-1"> </span><span class="hl-5">onClose</span><span class="hl-1">={() => </span><span class="hl-0">setIsModalOpen</span><span class="hl-1">(</span><span class="hl-5">false</span><span class="hl-1">)}</span><br/><span class="hl-1"> /></span><br/><span class="hl-1"> </></span><br/><span class="hl-1">);</span><br/><span class="hl-1">}</span>
|
|
195
|
+
</code><button>Copy</button></pre>
|
|
244
196
|
|
|
245
197
|
<a id="md:🛠️-utility-functions--hooks" class="tsd-anchor"></a><h3 class="tsd-anchor-link">🛠️ Utility Functions & Hooks<a href="#md:🛠️-utility-functions--hooks" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><p>Bandit Engine exports several utility functions for advanced use cases:</p>
|
|
246
198
|
<a id="md:debug-logger" class="tsd-anchor"></a><h4 class="tsd-anchor-link">Debug Logger<a href="#md:debug-logger" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h4><p>Replace console statements with structured logging:</p>
|
|
@@ -248,7 +200,7 @@ OLLAMA_URL=http://localhost:11434 # or the remote daemon address
|
|
|
248
200
|
</code><button type="button">Copy</button></pre>
|
|
249
201
|
|
|
250
202
|
<a id="md:ai-prompt-utilities" class="tsd-anchor"></a><h4 class="tsd-anchor-link">AI Prompt Utilities<a href="#md:ai-prompt-utilities" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h4><p>Access the same prompt functions used internally:</p>
|
|
251
|
-
<pre><code class="tsx"><span class="hl-4">import</span><span class="hl-1"> { </span><br/><span class="hl-1"> </span><span class="hl-5">generateConversationStarters</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">detectMessageMood</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">detectUserInterestAndExcitement</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">summarizeDocument</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">determineRelevantDocuments</span><span class="hl-1"> </span><br/><span class="hl-1">} </span><span class="hl-4">from</span><span class="hl-1"> </span><span class="hl-2">'@burtson-labs/bandit-engine'</span><span class="hl-1">;</span><br/><br/><span class="hl-8">// Generate conversation starters</span><br/><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">starters</span><span class="hl-1"> = </span><span class="hl-4">await</span><span class="hl-1"> </span><span class="hl-0">generateConversationStarters</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-5">limit:</span><span class="hl-1"> </span><span class="hl-
|
|
203
|
+
<pre><code class="tsx"><span class="hl-4">import</span><span class="hl-1"> { </span><br/><span class="hl-1"> </span><span class="hl-5">generateConversationStarters</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">detectMessageMood</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">detectUserInterestAndExcitement</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">summarizeDocument</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">determineRelevantDocuments</span><span class="hl-1"> </span><br/><span class="hl-1">} </span><span class="hl-4">from</span><span class="hl-1"> </span><span class="hl-2">'@burtson-labs/bandit-engine'</span><span class="hl-1">;</span><br/><br/><span class="hl-8">// Generate conversation starters</span><br/><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">starters</span><span class="hl-1"> = </span><span class="hl-4">await</span><span class="hl-1"> </span><span class="hl-0">generateConversationStarters</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-5">limit:</span><span class="hl-1"> </span><span class="hl-14">5</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">topicOfInterest:</span><span class="hl-1"> </span><span class="hl-2">"technology, coding, AI"</span><br/><span class="hl-1">});</span><br/><br/><span class="hl-8">// Detect user mood for adaptive responses</span><br/><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">mood</span><span class="hl-1"> = </span><span class="hl-4">await</span><span class="hl-1"> </span><span class="hl-0">detectMessageMood</span><span class="hl-1">(</span><span class="hl-2">"I'm so excited about this project!"</span><span class="hl-1">);</span><br/><span class="hl-8">// Returns: "high" | "neutral" | "low"</span>
|
|
252
204
|
</code><button type="button">Copy</button></pre>
|
|
253
205
|
|
|
254
206
|
<a id="md:datetime-context" class="tsd-anchor"></a><h4 class="tsd-anchor-link">Date/Time Context<a href="#md:datetime-context" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h4><p>All AI interactions automatically include current date/time context to improve relevance and accuracy of responses.</p>
|
|
@@ -284,7 +236,7 @@ In Angular or Vue, you may need to wrap each usage with a <code><bandit-chat-
|
|
|
284
236
|
<li><strong>Memory Management Modal</strong>: Full CRUD operations for memory entries</li>
|
|
285
237
|
</ul>
|
|
286
238
|
<p><strong>Example Usage:</strong></p>
|
|
287
|
-
<pre><code class="tsx"><span class="hl-4">import</span><span class="hl-1"> { </span><span class="hl-5">ChatModal</span><span class="hl-1"> } </span><span class="hl-4">from</span><span class="hl-1"> </span><span class="hl-2">'@burtson-labs/bandit-engine'</span><span class="hl-1">;</span><br/><br/><span class="hl-6">function</span><span class="hl-1"> </span><span class="hl-0">App</span><span class="hl-1">() {</span><br/><span class="hl-1"> </span><span class="hl-6">const</span><span class="hl-1"> [</span><span class="hl-7">modalOpen</span><span class="hl-1">, </span><span class="hl-7">setModalOpen</span><span class="hl-1">] = </span><span class="hl-0">useState</span><span class="hl-1">(</span><span class="hl-6">false</span><span class="hl-1">);</span><br/><span class="hl-1"> </span><br/><span class="hl-1"> </span><span class="hl-4">return</span><span class="hl-1"> (</span><br/><span class="hl-1"> </span><span class="hl-9"><></span><br/><span class="hl-1"> </span><span class="hl-9"><</span><span class="hl-
|
|
239
|
+
<pre><code class="tsx"><span class="hl-4">import</span><span class="hl-1"> { </span><span class="hl-5">ChatModal</span><span class="hl-1"> } </span><span class="hl-4">from</span><span class="hl-1"> </span><span class="hl-2">'@burtson-labs/bandit-engine'</span><span class="hl-1">;</span><br/><br/><span class="hl-6">function</span><span class="hl-1"> </span><span class="hl-0">App</span><span class="hl-1">() {</span><br/><span class="hl-1"> </span><span class="hl-6">const</span><span class="hl-1"> [</span><span class="hl-7">modalOpen</span><span class="hl-1">, </span><span class="hl-7">setModalOpen</span><span class="hl-1">] = </span><span class="hl-0">useState</span><span class="hl-1">(</span><span class="hl-6">false</span><span class="hl-1">);</span><br/><span class="hl-1"> </span><br/><span class="hl-1"> </span><span class="hl-4">return</span><span class="hl-1"> (</span><br/><span class="hl-1"> </span><span class="hl-9"><></span><br/><span class="hl-1"> </span><span class="hl-9"><</span><span class="hl-15">button</span><span class="hl-1"> </span><span class="hl-11">onClick</span><span class="hl-1">=</span><span class="hl-6">{</span><span class="hl-16">() </span><span class="hl-6">=></span><span class="hl-16"> </span><span class="hl-0">setModalOpen</span><span class="hl-16">(</span><span class="hl-6">true</span><span class="hl-16">)</span><span class="hl-6">}</span><span class="hl-9">></span><br/><span class="hl-1"> Open AI Assistant</span><br/><span class="hl-1"> </span><span class="hl-9"></</span><span class="hl-15">button</span><span class="hl-9">></span><br/><span class="hl-1"> </span><span class="hl-9"><</span><span class="hl-10">ChatModal</span><span class="hl-1"> </span><br/><span class="hl-1"> </span><span class="hl-11">open</span><span class="hl-1">=</span><span class="hl-6">{</span><span class="hl-5">modalOpen</span><span class="hl-6">}</span><span class="hl-1"> </span><br/><span class="hl-1"> </span><span class="hl-11">onClose</span><span class="hl-1">=</span><span class="hl-6">{</span><span class="hl-16">() </span><span class="hl-6">=></span><span class="hl-16"> </span><span class="hl-0">setModalOpen</span><span class="hl-16">(</span><span class="hl-6">false</span><span class="hl-16">)</span><span class="hl-6">}</span><br/><span class="hl-1"> </span><span class="hl-8">// Chat Control Center is automatically included</span><br/><span class="hl-1"> </span><span class="hl-9">/></span><br/><span class="hl-1"> </span><span class="hl-9"></></span><br/><span class="hl-1"> );</span><br/><span class="hl-1">}</span>
|
|
288
240
|
</code><button type="button">Copy</button></pre>
|
|
289
241
|
|
|
290
242
|
<a id="md:📧-feedback-system" class="tsd-anchor"></a><h3 class="tsd-anchor-link">📧 Feedback System<a href="#md:📧-feedback-system" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><p>The Bandit Engine includes a comprehensive feedback system that can be configured and customized for your application.</p>
|
|
@@ -293,7 +245,7 @@ In Angular or Vue, you may need to wrap each usage with a <code><bandit-chat-
|
|
|
293
245
|
</code><button type="button">Copy</button></pre>
|
|
294
246
|
|
|
295
247
|
<p><strong>Standalone Usage:</strong></p>
|
|
296
|
-
<pre><code class="tsx"><span class="hl-4">import</span><span class="hl-1"> { </span><span class="hl-5">FeedbackButton</span><span class="hl-1"> } </span><span class="hl-4">from</span><span class="hl-1"> </span><span class="hl-2">'@burtson-labs/bandit-engine'</span><span class="hl-1">;</span><br/><br/><span class="hl-8">// Floating FAB button (default)</span><br/><span class="hl-9"><</span><span class="hl-10">FeedbackButton</span><span class="hl-1"> </span><br/><span class="hl-1"> </span><span class="hl-11">feedbackEmail</span><span class="hl-1">=</span><span class="hl-2">"support@myapp.com"</span><span class="hl-1"> </span><span class="hl-8">// Optional: override default</span><br/><span class="hl-1"> </span><span class="hl-11">size</span><span class="hl-1">=</span><span class="hl-2">"small"</span><span class="hl-1"> </span><span class="hl-8">// small | medium | large</span><br/><span class="hl-1"> </span><span class="hl-11">position</span><span class="hl-1">=</span><span class="hl-6">{</span><span class="hl-
|
|
248
|
+
<pre><code class="tsx"><span class="hl-4">import</span><span class="hl-1"> { </span><span class="hl-5">FeedbackButton</span><span class="hl-1"> } </span><span class="hl-4">from</span><span class="hl-1"> </span><span class="hl-2">'@burtson-labs/bandit-engine'</span><span class="hl-1">;</span><br/><br/><span class="hl-8">// Floating FAB button (default)</span><br/><span class="hl-9"><</span><span class="hl-10">FeedbackButton</span><span class="hl-1"> </span><br/><span class="hl-1"> </span><span class="hl-11">feedbackEmail</span><span class="hl-1">=</span><span class="hl-2">"support@myapp.com"</span><span class="hl-1"> </span><span class="hl-8">// Optional: override default</span><br/><span class="hl-1"> </span><span class="hl-11">size</span><span class="hl-1">=</span><span class="hl-2">"small"</span><span class="hl-1"> </span><span class="hl-8">// small | medium | large</span><br/><span class="hl-1"> </span><span class="hl-11">position</span><span class="hl-1">=</span><span class="hl-6">{</span><span class="hl-16">{ </span><span class="hl-5">bottom:</span><span class="hl-16"> </span><span class="hl-14">24</span><span class="hl-16">, </span><span class="hl-5">right:</span><span class="hl-16"> </span><span class="hl-14">24</span><span class="hl-16"> }</span><span class="hl-6">}</span><span class="hl-1"> </span><span class="hl-8">// Custom positioning</span><br/><span class="hl-9">/></span><br/><br/><span class="hl-8">// Inline button</span><br/><span class="hl-9"><</span><span class="hl-10">FeedbackButton</span><span class="hl-1"> </span><br/><span class="hl-1"> </span><span class="hl-11">inline</span><span class="hl-1">=</span><span class="hl-6">{true}</span><br/><span class="hl-1"> </span><span class="hl-11">buttonText</span><span class="hl-1">=</span><span class="hl-2">"Send Feedback"</span><br/><span class="hl-1"> </span><span class="hl-11">size</span><span class="hl-1">=</span><span class="hl-2">"medium"</span><br/><span class="hl-9">/></span>
|
|
297
249
|
</code><button type="button">Copy</button></pre>
|
|
298
250
|
|
|
299
251
|
<p><strong>Features:</strong></p>
|
|
@@ -328,7 +280,7 @@ In Angular or Vue, you may need to wrap each usage with a <code><bandit-chat-
|
|
|
328
280
|
|
|
329
281
|
<p>These components can now be used in your templates inside a <code><bandit-chat-provider></code> block.</p>
|
|
330
282
|
<p>Usage in HTML:</p>
|
|
331
|
-
<pre><code class="html"><span class="hl-9"><</span><span class="hl-
|
|
283
|
+
<pre><code class="html"><span class="hl-9"><</span><span class="hl-15">bandit-chat-provider</span><br/><span class="hl-1"> </span><span class="hl-11">packageSettings</span><span class="hl-1">=</span><span class="hl-17">'{"ollamaUrl":"https://your-ollama-url.com","defaultModel":"Bandit-Core","brandingConfigUrl":"https://cdn.burtson.ai/configs/default-config.json"}'</span><br/><span class="hl-9">></span><br/><span class="hl-1"> </span><span class="hl-9"><</span><span class="hl-15">bandit-chat</span><span class="hl-9">></</span><span class="hl-15">bandit-chat</span><span class="hl-9">></span><br/><span class="hl-1"> </span><span class="hl-9"><</span><span class="hl-15">bandit-management</span><span class="hl-9">></</span><span class="hl-15">bandit-management</span><span class="hl-9">></span><br/><span class="hl-1"> </span><span class="hl-9"><</span><span class="hl-15">bandit-modal</span><span class="hl-9">></</span><span class="hl-15">bandit-modal</span><span class="hl-9">></span><br/><span class="hl-9"></</span><span class="hl-15">bandit-chat-provider</span><span class="hl-9">></span>
|
|
332
284
|
</code><button type="button">Copy</button></pre>
|
|
333
285
|
|
|
334
286
|
<p>Note: You only need to define the elements you intend to use. Don't mount all components on the same page. Use <code><bandit-management></code> for secure admin routes and <code><bandit-modal></code> for contextual triggers.</p>
|
|
@@ -348,7 +300,7 @@ In Angular or Vue, you may need to wrap each usage with a <code><bandit-chat-
|
|
|
348
300
|
|
|
349
301
|
<p>These components can now be used in your templates inside a <code><bandit-chat-provider></code> block.</p>
|
|
350
302
|
<p>Usage in HTML:</p>
|
|
351
|
-
<pre><code class="html"><span class="hl-9"><</span><span class="hl-
|
|
303
|
+
<pre><code class="html"><span class="hl-9"><</span><span class="hl-15">bandit-chat-provider</span><br/><span class="hl-1"> </span><span class="hl-11">packageSettings</span><span class="hl-1">=</span><span class="hl-17">'{"ollamaUrl":"https://your-ollama-url.com","defaultModel":"Bandit-Core","brandingConfigUrl":"https://cdn.burtson.ai/configs/default-config.json"}'</span><br/><span class="hl-9">></span><br/><span class="hl-1"> </span><span class="hl-9"><</span><span class="hl-15">bandit-chat</span><span class="hl-9">></</span><span class="hl-15">bandit-chat</span><span class="hl-9">></span><br/><span class="hl-1"> </span><span class="hl-9"><</span><span class="hl-15">bandit-management</span><span class="hl-9">></</span><span class="hl-15">bandit-management</span><span class="hl-9">></span><br/><span class="hl-1"> </span><span class="hl-9"><</span><span class="hl-15">bandit-modal</span><span class="hl-9">></</span><span class="hl-15">bandit-modal</span><span class="hl-9">></span><br/><span class="hl-9"></</span><span class="hl-15">bandit-chat-provider</span><span class="hl-9">></span>
|
|
352
304
|
</code><button type="button">Copy</button></pre>
|
|
353
305
|
|
|
354
306
|
<p>Note: You only need to define the elements you intend to use. Don't mount all components on the same page. Use <code><bandit-management></code> for secure admin routes and <code><bandit-modal></code> for contextual triggers.</p>
|
|
@@ -421,7 +373,7 @@ When using Bandit components as custom elements (e.g., in Angular, Vue, or stati
|
|
|
421
373
|
</ol>
|
|
422
374
|
<p>To streamline configuration, you can host your <code>config.json</code> (and related assets like model presets or branding) via your own CDN or edge cache.</p>
|
|
423
375
|
<p>Update the <code>brandingConfigUrl</code> like this:</p>
|
|
424
|
-
<pre><code class="tsx"><span class="hl-9"><</span><span class="hl-10">ChatProvider</span><br/><span class="hl-1"> </span><span class="hl-11">packageSettings</span><span class="hl-1">=</span><span class="hl-6">{</span><span class="hl-
|
|
376
|
+
<pre><code class="tsx"><span class="hl-9"><</span><span class="hl-10">ChatProvider</span><br/><span class="hl-1"> </span><span class="hl-11">packageSettings</span><span class="hl-1">=</span><span class="hl-6">{</span><span class="hl-16">{</span><br/><span class="hl-16"> </span><span class="hl-1">...</span><span class="hl-5">chatPackageSettings</span><span class="hl-16">,</span><br/><span class="hl-16"> </span><span class="hl-5">brandingConfigUrl:</span><span class="hl-16"> </span><span class="hl-2">"https://cdn.burtson.ai/configs/default-config.json"</span><br/><span class="hl-16"> }</span><span class="hl-6">}</span><br/><span class="hl-9">></span><br/><span class="hl-1"> </span><span class="hl-9"><</span><span class="hl-10">App</span><span class="hl-1"> </span><span class="hl-9">/></span><br/><span class="hl-9"></</span><span class="hl-10">ChatProvider</span><span class="hl-9">></span>
|
|
425
377
|
</code><button type="button">Copy</button></pre>
|
|
426
378
|
|
|
427
379
|
<p>This enables remote control of Bandit appearance, available models, and more — without redeploying your frontend.</p>
|
|
@@ -455,12 +407,15 @@ When using Bandit components as custom elements (e.g., in Angular, Vue, or stati
|
|
|
455
407
|
</blockquote>
|
|
456
408
|
<a id="md:🤖-ai-provider-system" class="tsd-anchor"></a><h2 class="tsd-anchor-link">🤖 AI Provider System<a href="#md:🤖-ai-provider-system" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><p>Bandit Engine features a unified, gateway-based AI provider architecture that supports multiple AI services through a secure backend:</p>
|
|
457
409
|
<a id="md:supported-providers" class="tsd-anchor"></a><h3 class="tsd-anchor-link">Supported Providers<a href="#md:supported-providers" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><ul>
|
|
458
|
-
<li><strong>🌟 Gateway Provider</strong> (Recommended): Routes all requests through your secure
|
|
410
|
+
<li><strong>🌟 Gateway Provider</strong> (Recommended): Routes all requests through your secure backend</li>
|
|
459
411
|
<li><strong>Ollama</strong>: Self-hosted models and Ollama-compatible endpoints</li>
|
|
460
412
|
<li><strong>OpenAI</strong>: GPT models via OpenAI API</li>
|
|
461
413
|
<li><strong>Azure OpenAI</strong>: Azure-hosted OpenAI models</li>
|
|
462
414
|
<li><strong>Anthropic</strong>: Claude models via Anthropic API</li>
|
|
463
415
|
</ul>
|
|
416
|
+
<blockquote>
|
|
417
|
+
<p>We do not support every AI provider yet. Let us know which services you rely on—community interest directly shapes the integration roadmap.</p>
|
|
418
|
+
</blockquote>
|
|
464
419
|
<a id="md:gateway-provider-recommended" class="tsd-anchor"></a><h3 class="tsd-anchor-link">Gateway Provider (Recommended)<a href="#md:gateway-provider-recommended" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><p>The gateway provider offers the most secure and scalable approach by routing all requests through your backend API:</p>
|
|
465
420
|
<pre><code class="tsx"><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">chatPackageSettings</span><span class="hl-1"> = {</span><br/><span class="hl-1"> </span><span class="hl-8">// Gateway provider configuration</span><br/><span class="hl-1"> </span><span class="hl-5">aiProvider:</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-5">type:</span><span class="hl-1"> </span><span class="hl-2">"gateway"</span><span class="hl-1"> </span><span class="hl-4">as</span><span class="hl-1"> </span><span class="hl-6">const</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">gatewayUrl:</span><span class="hl-1"> </span><span class="hl-2">"https://your-gateway-api.example.com"</span><span class="hl-1">, </span><br/><span class="hl-1"> </span><span class="hl-5">provider:</span><span class="hl-1"> </span><span class="hl-2">"openai"</span><span class="hl-1"> </span><span class="hl-8">// Backend provider: openai, azure-openai, anthropic, ollama</span><br/><span class="hl-1"> },</span><br/><span class="hl-1"> </span><span class="hl-8">// ... other settings</span><br/><span class="hl-1">};</span>
|
|
466
421
|
</code><button type="button">Copy</button></pre>
|
|
@@ -487,7 +442,7 @@ Your gateway API can be built with any technology (Node.js, Python, .NET, Java,
|
|
|
487
442
|
</code><button type="button">Copy</button></pre>
|
|
488
443
|
|
|
489
444
|
<a id="md:migration-to-gateway" class="tsd-anchor"></a><h3 class="tsd-anchor-link">Migration to Gateway<a href="#md:migration-to-gateway" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><ol>
|
|
490
|
-
<li><strong>Deploy Gateway Backend</strong>: Set up your
|
|
445
|
+
<li><strong>Deploy Gateway Backend</strong>: Set up your preferred gateway service</li>
|
|
491
446
|
<li><strong>Update Configuration</strong>: Switch from direct to gateway provider</li>
|
|
492
447
|
<li><strong>Test Connection</strong>: Use the Management interface to validate</li>
|
|
493
448
|
<li><strong>Update API Keys</strong>: Move keys from frontend to backend config</li>
|
|
@@ -513,7 +468,7 @@ Your gateway API can be built with any technology (Node.js, Python, .NET, Java,
|
|
|
513
468
|
|
|
514
469
|
<p><strong>Backend Requirements:</strong>
|
|
515
470
|
Your gateway API should accept images in the standardized format sent by the Bandit Engine and forward them appropriately to each provider. No transformation needed - the frontend handles provider-specific formatting.</p>
|
|
516
|
-
<pre><code class="javascript"><span class="hl-8">// Example: Gateway forwards images as-is using provider-specific routes</span><br/><span class="hl-5">app</span><span class="hl-1">.</span><span class="hl-0">post</span><span class="hl-1">(</span><span class="hl-2">'/api/openai/chat/completions'</span><span class="hl-1">, </span><span class="hl-6">async</span><span class="hl-1"> (</span><span class="hl-5">req</span><span class="hl-1">, </span><span class="hl-5">res</span><span class="hl-1">) </span><span class="hl-6">=></span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-6">const</span><span class="hl-1"> { </span><span class="hl-7">messages</span><span class="hl-1">, ...</span><span class="hl-7">options</span><span class="hl-1"> } = </span><span class="hl-5">req</span><span class="hl-1">.</span><span class="hl-5">body</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">response</span><span class="hl-1"> = </span><span class="hl-4">await</span><span class="hl-1"> </span><span class="hl-0">fetch</span><span class="hl-1">(</span><span class="hl-2">'https://api.openai.com/v1/chat/completions'</span><span class="hl-1">, {</span><br/><span class="hl-1"> </span><span class="hl-5">method:</span><span class="hl-1"> </span><span class="hl-2">'POST'</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">headers:</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-2">'Content-Type'</span><span class="hl-5">:</span><span class="hl-1"> </span><span class="hl-2">'application/json'</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">Authorization:</span><span class="hl-1"> </span><span class="hl-2">`Bearer </span><span class="hl-6">${</span><span class="hl-5">process</span><span class="hl-
|
|
471
|
+
<pre><code class="javascript"><span class="hl-8">// Example: Gateway forwards images as-is using provider-specific routes</span><br/><span class="hl-5">app</span><span class="hl-1">.</span><span class="hl-0">post</span><span class="hl-1">(</span><span class="hl-2">'/api/openai/chat/completions'</span><span class="hl-1">, </span><span class="hl-6">async</span><span class="hl-1"> (</span><span class="hl-5">req</span><span class="hl-1">, </span><span class="hl-5">res</span><span class="hl-1">) </span><span class="hl-6">=></span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-6">const</span><span class="hl-1"> { </span><span class="hl-7">messages</span><span class="hl-1">, ...</span><span class="hl-7">options</span><span class="hl-1"> } = </span><span class="hl-5">req</span><span class="hl-1">.</span><span class="hl-5">body</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">response</span><span class="hl-1"> = </span><span class="hl-4">await</span><span class="hl-1"> </span><span class="hl-0">fetch</span><span class="hl-1">(</span><span class="hl-2">'https://api.openai.com/v1/chat/completions'</span><span class="hl-1">, {</span><br/><span class="hl-1"> </span><span class="hl-5">method:</span><span class="hl-1"> </span><span class="hl-2">'POST'</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">headers:</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-2">'Content-Type'</span><span class="hl-5">:</span><span class="hl-1"> </span><span class="hl-2">'application/json'</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">Authorization:</span><span class="hl-1"> </span><span class="hl-2">`Bearer </span><span class="hl-6">${</span><span class="hl-5">process</span><span class="hl-16">.</span><span class="hl-5">env</span><span class="hl-16">.</span><span class="hl-7">OPENAI_API_KEY</span><span class="hl-6">}</span><span class="hl-2">`</span><br/><span class="hl-1"> },</span><br/><span class="hl-1"> </span><span class="hl-5">body:</span><span class="hl-1"> </span><span class="hl-7">JSON</span><span class="hl-1">.</span><span class="hl-0">stringify</span><span class="hl-1">({ </span><span class="hl-5">messages</span><span class="hl-1">, ...</span><span class="hl-5">options</span><span class="hl-1"> })</span><br/><span class="hl-1"> });</span><br/><br/><span class="hl-1"> </span><span class="hl-5">res</span><span class="hl-1">.</span><span class="hl-0">status</span><span class="hl-1">(</span><span class="hl-5">response</span><span class="hl-1">.</span><span class="hl-5">status</span><span class="hl-1">);</span><br/><span class="hl-1"> </span><span class="hl-5">response</span><span class="hl-1">.</span><span class="hl-5">body</span><span class="hl-1">?.</span><span class="hl-0">pipe</span><span class="hl-1">(</span><span class="hl-5">res</span><span class="hl-1">);</span><br/><span class="hl-1">});</span><br/><br/><span class="hl-5">app</span><span class="hl-1">.</span><span class="hl-0">post</span><span class="hl-1">(</span><span class="hl-2">'/api/ollama/chat'</span><span class="hl-1">, </span><span class="hl-6">async</span><span class="hl-1"> (</span><span class="hl-5">req</span><span class="hl-1">, </span><span class="hl-5">res</span><span class="hl-1">) </span><span class="hl-6">=></span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-6">const</span><span class="hl-1"> { </span><span class="hl-7">messages</span><span class="hl-1">, ...</span><span class="hl-7">options</span><span class="hl-1"> } = </span><span class="hl-5">req</span><span class="hl-1">.</span><span class="hl-5">body</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">response</span><span class="hl-1"> = </span><span class="hl-4">await</span><span class="hl-1"> </span><span class="hl-0">fetch</span><span class="hl-1">(</span><span class="hl-2">`</span><span class="hl-6">${</span><span class="hl-5">process</span><span class="hl-16">.</span><span class="hl-5">env</span><span class="hl-16">.</span><span class="hl-7">OLLAMA_URL</span><span class="hl-6">}</span><span class="hl-2">/api/chat`</span><span class="hl-1">, {</span><br/><span class="hl-1"> </span><span class="hl-5">method:</span><span class="hl-1"> </span><span class="hl-2">'POST'</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">headers:</span><span class="hl-1"> { </span><span class="hl-2">'Content-Type'</span><span class="hl-5">:</span><span class="hl-1"> </span><span class="hl-2">'application/json'</span><span class="hl-1"> },</span><br/><span class="hl-1"> </span><span class="hl-5">body:</span><span class="hl-1"> </span><span class="hl-7">JSON</span><span class="hl-1">.</span><span class="hl-0">stringify</span><span class="hl-1">({ </span><span class="hl-5">messages</span><span class="hl-1">, ...</span><span class="hl-5">options</span><span class="hl-1"> })</span><br/><span class="hl-1"> });</span><br/><br/><span class="hl-1"> </span><span class="hl-5">res</span><span class="hl-1">.</span><span class="hl-0">status</span><span class="hl-1">(</span><span class="hl-5">response</span><span class="hl-1">.</span><span class="hl-5">status</span><span class="hl-1">);</span><br/><span class="hl-1"> </span><span class="hl-5">response</span><span class="hl-1">.</span><span class="hl-5">body</span><span class="hl-1">?.</span><span class="hl-0">pipe</span><span class="hl-1">(</span><span class="hl-5">res</span><span class="hl-1">);</span><br/><span class="hl-1">});</span>
|
|
517
472
|
</code><button type="button">Copy</button></pre>
|
|
518
473
|
|
|
519
474
|
<a id="md:using-the-ai-provider" class="tsd-anchor"></a><h3 class="tsd-anchor-link">Using the AI Provider<a href="#md:using-the-ai-provider" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><p>All chat interactions use the unified provider system regardless of backend:</p>
|
|
@@ -642,7 +597,7 @@ Your gateway API should accept images in the standardized format sent by the Ban
|
|
|
642
597
|
</tbody>
|
|
643
598
|
</table>
|
|
644
599
|
<a id="md:jwt-based-authentication" class="tsd-anchor"></a><h3 class="tsd-anchor-link">JWT-Based Authentication<a href="#md:jwt-based-authentication" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><p>The feature flag system integrates with JWT tokens for dynamic subscription management:</p>
|
|
645
|
-
<pre><code class="tsx"><span class="hl-8">// Example JWT payload structure</span><br/><span class="hl-1">{</span><br/><span class="hl-1"> </span><span class="hl-2">"sub"</span><span class="hl-1">: </span><span class="hl-2">"user123"</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-2">"subscriptionType"</span><span class="hl-1">: </span><span class="hl-2">"pro"</span><span class="hl-1">, </span><span class="hl-8">// Controls tier access</span><br/><span class="hl-1"> </span><span class="hl-2">"isSubscribed"</span><span class="hl-1">: </span><span class="hl-6">true</span><span class="hl-1">, </span><span class="hl-8">// Overall subscription status</span><br/><span class="hl-1"> </span><span class="hl-2">"roles"</span><span class="hl-1">: [</span><span class="hl-2">"user"</span><span class="hl-1">, </span><span class="hl-2">"admin"</span><span class="hl-1">], </span><span class="hl-8">// User roles for admin features</span><br/><span class="hl-1"> </span><span class="hl-2">"exp"</span><span class="hl-1">: </span><span class="hl-
|
|
600
|
+
<pre><code class="tsx"><span class="hl-8">// Example JWT payload structure</span><br/><span class="hl-1">{</span><br/><span class="hl-1"> </span><span class="hl-2">"sub"</span><span class="hl-1">: </span><span class="hl-2">"user123"</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-2">"subscriptionType"</span><span class="hl-1">: </span><span class="hl-2">"pro"</span><span class="hl-1">, </span><span class="hl-8">// Controls tier access</span><br/><span class="hl-1"> </span><span class="hl-2">"isSubscribed"</span><span class="hl-1">: </span><span class="hl-6">true</span><span class="hl-1">, </span><span class="hl-8">// Overall subscription status</span><br/><span class="hl-1"> </span><span class="hl-2">"roles"</span><span class="hl-1">: [</span><span class="hl-2">"user"</span><span class="hl-1">, </span><span class="hl-2">"admin"</span><span class="hl-1">], </span><span class="hl-8">// User roles for admin features</span><br/><span class="hl-1"> </span><span class="hl-2">"exp"</span><span class="hl-1">: </span><span class="hl-14">1640995200</span><br/><span class="hl-1">}</span>
|
|
646
601
|
</code><button type="button">Copy</button></pre>
|
|
647
602
|
|
|
648
603
|
<a id="md:using-feature-flags-in-components" class="tsd-anchor"></a><h3 class="tsd-anchor-link">Using Feature Flags in Components<a href="#md:using-feature-flags-in-components" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><p>Access feature flags throughout your application:</p>
|
|
@@ -664,7 +619,7 @@ Your gateway API should accept images in the standardized format sent by the Ban
|
|
|
664
619
|
</code><button type="button">Copy</button></pre>
|
|
665
620
|
|
|
666
621
|
<a id="md:backend-integration" class="tsd-anchor"></a><h3 class="tsd-anchor-link">Backend Integration<a href="#md:backend-integration" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><p>Your gateway API should validate subscription tiers and return appropriate feature access:</p>
|
|
667
|
-
<pre><code class="javascript"><span class="hl-8">// Example: Gateway API subscription validation</span><br/><span class="hl-5">app</span><span class="hl-1">.</span><span class="hl-0">post</span><span class="hl-1">(</span><span class="hl-2">'/api/openai/chat/completions'</span><span class="hl-1">, </span><span class="hl-5">authenticateJWT</span><span class="hl-1">, </span><span class="hl-6">async</span><span class="hl-1"> (</span><span class="hl-5">req</span><span class="hl-1">, </span><span class="hl-5">res</span><span class="hl-1">) </span><span class="hl-6">=></span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-6">const</span><span class="hl-1"> { </span><span class="hl-7">subscriptionType</span><span class="hl-1">, </span><span class="hl-7">isSubscribed</span><span class="hl-1"> } = </span><span class="hl-5">req</span><span class="hl-1">.</span><span class="hl-5">user</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><br/><span class="hl-1"> </span><span class="hl-8">// Validate tier access for requested features</span><br/><span class="hl-1"> </span><span class="hl-4">if</span><span class="hl-1"> (</span><span class="hl-5">req</span><span class="hl-1">.</span><span class="hl-5">body</span><span class="hl-1">.</span><span class="hl-5">tts</span><span class="hl-1"> && !</span><span class="hl-0">hasFeature</span><span class="hl-1">(</span><span class="hl-5">subscriptionType</span><span class="hl-1">, </span><span class="hl-2">'tts'</span><span class="hl-1">)) {</span><br/><span class="hl-1"> </span><span class="hl-4">return</span><span class="hl-1"> </span><span class="hl-5">res</span><span class="hl-1">.</span><span class="hl-0">status</span><span class="hl-1">(</span><span class="hl-
|
|
622
|
+
<pre><code class="javascript"><span class="hl-8">// Example: Gateway API subscription validation</span><br/><span class="hl-5">app</span><span class="hl-1">.</span><span class="hl-0">post</span><span class="hl-1">(</span><span class="hl-2">'/api/openai/chat/completions'</span><span class="hl-1">, </span><span class="hl-5">authenticateJWT</span><span class="hl-1">, </span><span class="hl-6">async</span><span class="hl-1"> (</span><span class="hl-5">req</span><span class="hl-1">, </span><span class="hl-5">res</span><span class="hl-1">) </span><span class="hl-6">=></span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-6">const</span><span class="hl-1"> { </span><span class="hl-7">subscriptionType</span><span class="hl-1">, </span><span class="hl-7">isSubscribed</span><span class="hl-1"> } = </span><span class="hl-5">req</span><span class="hl-1">.</span><span class="hl-5">user</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><br/><span class="hl-1"> </span><span class="hl-8">// Validate tier access for requested features</span><br/><span class="hl-1"> </span><span class="hl-4">if</span><span class="hl-1"> (</span><span class="hl-5">req</span><span class="hl-1">.</span><span class="hl-5">body</span><span class="hl-1">.</span><span class="hl-5">tts</span><span class="hl-1"> && !</span><span class="hl-0">hasFeature</span><span class="hl-1">(</span><span class="hl-5">subscriptionType</span><span class="hl-1">, </span><span class="hl-2">'tts'</span><span class="hl-1">)) {</span><br/><span class="hl-1"> </span><span class="hl-4">return</span><span class="hl-1"> </span><span class="hl-5">res</span><span class="hl-1">.</span><span class="hl-0">status</span><span class="hl-1">(</span><span class="hl-14">403</span><span class="hl-1">).</span><span class="hl-0">json</span><span class="hl-1">({ </span><br/><span class="hl-1"> </span><span class="hl-5">error:</span><span class="hl-1"> </span><span class="hl-2">'TTS requires Premium subscription or higher'</span><span class="hl-1"> </span><br/><span class="hl-1"> });</span><br/><span class="hl-1"> }</span><br/><span class="hl-1"> </span><br/><span class="hl-1"> </span><span class="hl-8">// Proceed with AI request</span><br/><span class="hl-1"> </span><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">response</span><span class="hl-1"> = </span><span class="hl-4">await</span><span class="hl-1"> </span><span class="hl-0">fetch</span><span class="hl-1">(</span><span class="hl-2">'https://api.openai.com/v1/chat/completions'</span><span class="hl-1">, {</span><br/><span class="hl-1"> </span><span class="hl-5">method:</span><span class="hl-1"> </span><span class="hl-2">'POST'</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">headers:</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-2">'Content-Type'</span><span class="hl-5">:</span><span class="hl-1"> </span><span class="hl-2">'application/json'</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">Authorization:</span><span class="hl-1"> </span><span class="hl-2">`Bearer </span><span class="hl-6">${</span><span class="hl-5">process</span><span class="hl-16">.</span><span class="hl-5">env</span><span class="hl-16">.</span><span class="hl-7">OPENAI_API_KEY</span><span class="hl-6">}</span><span class="hl-2">`</span><br/><span class="hl-1"> },</span><br/><span class="hl-1"> </span><span class="hl-5">body:</span><span class="hl-1"> </span><span class="hl-7">JSON</span><span class="hl-1">.</span><span class="hl-0">stringify</span><span class="hl-1">(</span><span class="hl-5">req</span><span class="hl-1">.</span><span class="hl-5">body</span><span class="hl-1">)</span><br/><span class="hl-1"> });</span><br/><br/><span class="hl-1"> </span><span class="hl-5">res</span><span class="hl-1">.</span><span class="hl-0">status</span><span class="hl-1">(</span><span class="hl-5">response</span><span class="hl-1">.</span><span class="hl-5">status</span><span class="hl-1">);</span><br/><span class="hl-1"> </span><span class="hl-5">response</span><span class="hl-1">.</span><span class="hl-5">body</span><span class="hl-1">?.</span><span class="hl-0">pipe</span><span class="hl-1">(</span><span class="hl-5">res</span><span class="hl-1">);</span><br/><span class="hl-1">});</span>
|
|
668
623
|
</code><button type="button">Copy</button></pre>
|
|
669
624
|
|
|
670
625
|
<p>This feature flag system enables you to build sophisticated subscription-based AI products with fine-grained access control and seamless upgrade flows.</p>
|
|
@@ -843,4 +798,4 @@ Your gateway API should accept images in the standardized format sent by the Ban
|
|
|
843
798
|
|
|
844
799
|
<hr>
|
|
845
800
|
<p><strong>© 2025 Burtson Labs LLC. All rights reserved.</strong></p>
|
|
846
|
-
</div></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="assets/icons.svg#icon-chevronDown"></use></svg>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-external" name="external"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>External</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div><details open class="tsd-accordion tsd-page-navigation"><summary class="tsd-accordion-summary"><h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="assets/icons.svg#icon-chevronDown"></use></svg>On This Page</h3></summary><div class="tsd-accordion-details"><a href="#md:bandit-engine-⚡"><span>Bandit <wbr/>Engine ⚡</span></a><ul><li><a href="#md:features"><span>Features</span></a></li><li><a href="#md:quick-links"><span>Quick <wbr/>Links</span></a></li><li><a href="#md:quick-start"><span>Quick <wbr/>Start</span></a></li><li><ul><li><a href="#md:cli-scaffold"><span>CLI <wbr/>Scaffold</span></a></li><li><a href="#md:cli-options"><span>CLI <wbr/>Options</span></a></li><li><a href="#md:playground-password-free-preview"><span>Playground (<wbr/>Password-<wbr/>Free <wbr/>Preview)</span></a></li></ul></li><li><a href="#md:🛠️-getting-started--plug--play-ai"><span>🛠️ <wbr/>Getting <wbr/>Started – <wbr/>Plug & <wbr/>Play AI</span></a></li><li><ul><li><a href="#md:🔄-quick-provider-setup"><span>🔄 <wbr/>Quick <wbr/>Provider <wbr/>Setup</span></a></li><li><a href="#md:ollama-env-setup"><span>Ollama .env <wbr/>Setup</span></a></li><li><a href="#md:🎤-voice-services-ttsstt"><span>🎤 <wbr/>Voice <wbr/>Services (TTS/STT)</span></a></li></ul></li><li><a href="#md:🧩-consuming-the-components"><span>🧩 <wbr/>Consuming the <wbr/>Components</span></a></li><li><ul><li><a href="#md:🛠️-utility-functions--hooks"><span>🛠️ <wbr/>Utility <wbr/>Functions & <wbr/>Hooks</span></a></li><li><ul><li><a href="#md:debug-logger"><span>Debug <wbr/>Logger</span></a></li><li><a href="#md:ai-prompt-utilities"><span>AI <wbr/>Prompt <wbr/>Utilities</span></a></li><li><a href="#md:datetime-context"><span>Date/<wbr/>Time <wbr/>Context</span></a></li></ul></li></ul></li><li><a href="#md:🎛️-chat-control-center-chatmodal-feature"><span>🎛️ <wbr/>Chat <wbr/>Control <wbr/>Center (<wbr/>Chat<wbr/>Modal <wbr/>Feature)</span></a></li><li><ul><li><a href="#md:🔧-core-features"><span>🔧 <wbr/>Core <wbr/>Features</span></a></li><li><a href="#md:🎤-voice-integration"><span>🎤 <wbr/>Voice <wbr/>Integration</span></a></li><li><a href="#md:🔄-context-switching"><span>🔄 <wbr/>Context <wbr/>Switching</span></a></li><li><a href="#md:💾-memory-features"><span>💾 <wbr/>Memory <wbr/>Features</span></a></li><li><a href="#md:📧-feedback-system"><span>📧 <wbr/>Feedback <wbr/>System</span></a></li></ul></li><li><a href="#md:⚙️-angular-integration-experimental"><span>⚙️ <wbr/>Angular <wbr/>Integration (<wbr/>Experimental)</span></a></li><li><a href="#md:⚙️-vuejs-integration-experimental"><span>⚙️ <wbr/>Vue.js <wbr/>Integration (<wbr/>Experimental)</span></a></li><li><a href="#md:📦-custom-element-support"><span>📦 <wbr/>Custom <wbr/>Element <wbr/>Support</span></a></li><li><a href="#md:📸-live-preview"><span>📸 <wbr/>Live <wbr/>Preview</span></a></li><li><a href="#md:⚙️-configuration-options"><span>⚙️ <wbr/>Configuration <wbr/>Options</span></a></li><li><ul><li><a href="#md:file-storage-api-contract"><span>File <wbr/>Storage API <wbr/>Contract</span></a></li></ul></li><li><a href="#md:🤖-ai-provider-system"><span>🤖 AI <wbr/>Provider <wbr/>System</span></a></li><li><ul><li><a href="#md:supported-providers"><span>Supported <wbr/>Providers</span></a></li><li><a href="#md:gateway-provider-recommended"><span>Gateway <wbr/>Provider (<wbr/>Recommended)</span></a></li><li><a href="#md:legacy-direct-providers"><span>Legacy <wbr/>Direct <wbr/>Providers</span></a></li><li><a href="#md:migration-to-gateway"><span>Migration to <wbr/>Gateway</span></a></li><li><a href="#md:imagemultimodal-support"><span>Image/<wbr/>Multimodal <wbr/>Support</span></a></li><li><a href="#md:using-the-ai-provider"><span>Using the AI <wbr/>Provider</span></a></li></ul></li><li><a href="#md:🔧-model-context-protocol-mcp-integration"><span>🔧 <wbr/>Model <wbr/>Context <wbr/>Protocol (MCP) <wbr/>Integration</span></a></li><li><ul><li><a href="#md:mcp-features"><span>MCP <wbr/>Features</span></a></li><li><a href="#md:using-mcp-tools"><span>Using MCP <wbr/>Tools</span></a></li><li><a href="#md:mcp-tool-configuration"><span>MCP <wbr/>Tool <wbr/>Configuration</span></a></li><li><a href="#md:mcp-service-api"><span>MCP <wbr/>Service API</span></a></li></ul></li><li><a href="#md:🎛️-feature-flags--subscription-tiers"><span>🎛️ <wbr/>Feature <wbr/>Flags & <wbr/>Subscription <wbr/>Tiers</span></a></li><li><ul><li><a href="#md:subscription-tiers"><span>Subscription <wbr/>Tiers</span></a></li><li><a href="#md:feature-flag-configuration"><span>Feature <wbr/>Flag <wbr/>Configuration</span></a></li><li><a href="#md:tier-based-feature-matrix"><span>Tier-<wbr/>Based <wbr/>Feature <wbr/>Matrix</span></a></li><li><a href="#md:jwt-based-authentication"><span>JWT-<wbr/>Based <wbr/>Authentication</span></a></li><li><a href="#md:using-feature-flags-in-components"><span>Using <wbr/>Feature <wbr/>Flags in <wbr/>Components</span></a></li><li><a href="#md:subscription-state-management"><span>Subscription <wbr/>State <wbr/>Management</span></a></li><li><a href="#md:feature-restrictions--upgrade-prompts"><span>Feature <wbr/>Restrictions & <wbr/>Upgrade <wbr/>Prompts</span></a></li><li><a href="#md:development--testing"><span>Development & <wbr/>Testing</span></a></li><li><a href="#md:backend-integration"><span>Backend <wbr/>Integration</span></a></li></ul></li><li><a href="#md:🐛-debug-logger"><span>🐛 <wbr/>Debug <wbr/>Logger</span></a></li><li><a href="#md:🔒-security-best-practices"><span>🔒 <wbr/>Security <wbr/>Best <wbr/>Practices</span></a></li><li><ul><li><a href="#md:recommended-architecture"><span>Recommended <wbr/>Architecture</span></a></li><li><a href="#md:gateway-setup"><span>Gateway <wbr/>Setup</span></a></li><li><a href="#md:legacy-configuration-deprecated"><span>Legacy <wbr/>Configuration (<wbr/>Deprecated)</span></a></li><li><a href="#md:development-vs-production"><span>Development vs <wbr/>Production</span></a></li></ul></li><li><a href="#md:requirements"><span>Requirements</span></a></li><li><ul><li><a href="#md:gateway-api-services"><span>Gateway API <wbr/>Services</span></a></li><li><a href="#md:technology-agnostic-implementation"><span>Technology-<wbr/>Agnostic <wbr/>Implementation</span></a></li><li><a href="#md:additional-resources"><span>Additional <wbr/>Resources</span></a></li></ul></li><li><a href="#md:💡-vision--roadmap"><span>💡 <wbr/>Vision & <wbr/>Roadmap</span></a></li><li><a href="#md:📌-migration-guide"><span>📌 <wbr/>Migration <wbr/>Guide</span></a></li><li><ul><li><a href="#md:from-legacy-ttsstt-urls-to-gateway-api"><span>From <wbr/>Legacy TTS/STT URLs to <wbr/>Gateway API</span></a></li></ul></li><li><a href="#md:🛡️-license--protection"><span>🛡️ <wbr/>License & <wbr/>Protection</span></a></li><li><ul><li><a href="#md:⚖️-license-summary"><span>⚖️ <wbr/>License <wbr/>Summary</span></a></li><li><a href="#md:📋-usage-rights"><span>📋 <wbr/>Usage <wbr/>Rights</span></a></li><li><a href="#md:🔒-protection-features"><span>🔒 <wbr/>Protection <wbr/>Features</span></a></li><li><a href="#md:💼-commercial-licensing"><span>💼 <wbr/>Commercial <wbr/>Licensing</span></a></li><li><a href="#md:👨💻-for-contributors--developers"><span>👨💻 <wbr/>For <wbr/>Contributors & <wbr/>Developers</span></a></li><li><a href="#md:📝-license-compliance"><span>📝 <wbr/>License <wbr/>Compliance</span></a></li></ul></li></ul></div></details></div><div class="site-menu"><nav class="tsd-navigation"><a href="modules.html" class="current"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="assets/icons.svg#icon-1"></use></svg><span>@burtson-labs/bandit-engine</span></a><ul class="tsd-small-nested-navigation" id="tsd-nav-container" data-base="."><li>Loading...</li></ul></nav></div></div></div><footer><p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer><div class="overlay"></div></body></html>
|
|
801
|
+
</div></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="assets/icons.svg#icon-chevronDown"></use></svg>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-external" name="external"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>External</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div><details open class="tsd-accordion tsd-page-navigation"><summary class="tsd-accordion-summary"><h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="assets/icons.svg#icon-chevronDown"></use></svg>On This Page</h3></summary><div class="tsd-accordion-details"><a href="#md:bandit-engine-⚡"><span>Bandit <wbr/>Engine ⚡</span></a><ul><li><a href="#md:features"><span>Features</span></a></li><li><a href="#md:quick-links"><span>Quick <wbr/>Links</span></a></li><li><a href="#md:quick-start"><span>Quick <wbr/>Start</span></a></li><li><ul><li><a href="#md:cli-scaffold"><span>CLI <wbr/>Scaffold</span></a></li><li><a href="#md:cli-options"><span>CLI <wbr/>Options</span></a></li><li><a href="#md:playground-password-free-preview"><span>Playground (<wbr/>Password-<wbr/>Free <wbr/>Preview)</span></a></li></ul></li><li><a href="#md:🛠️-getting-started--plug--play-ai"><span>🛠️ <wbr/>Getting <wbr/>Started – <wbr/>Plug & <wbr/>Play AI</span></a></li><li><ul><li><a href="#md:🔄-quick-provider-setup"><span>🔄 <wbr/>Quick <wbr/>Provider <wbr/>Setup</span></a></li><li><a href="#md:ollama-env-setup"><span>Ollama .env <wbr/>Setup</span></a></li></ul></li></ul><a href="#md:gateway--server"><span>Gateway / server</span></a><ul><li><ul><li><a href="#md:🛠️-utility-functions--hooks"><span>🛠️ <wbr/>Utility <wbr/>Functions & <wbr/>Hooks</span></a></li><li><ul><li><a href="#md:debug-logger"><span>Debug <wbr/>Logger</span></a></li><li><a href="#md:ai-prompt-utilities"><span>AI <wbr/>Prompt <wbr/>Utilities</span></a></li><li><a href="#md:datetime-context"><span>Date/<wbr/>Time <wbr/>Context</span></a></li></ul></li></ul></li><li><a href="#md:🎛️-chat-control-center-chatmodal-feature"><span>🎛️ <wbr/>Chat <wbr/>Control <wbr/>Center (<wbr/>Chat<wbr/>Modal <wbr/>Feature)</span></a></li><li><ul><li><a href="#md:🔧-core-features"><span>🔧 <wbr/>Core <wbr/>Features</span></a></li><li><a href="#md:🎤-voice-integration"><span>🎤 <wbr/>Voice <wbr/>Integration</span></a></li><li><a href="#md:🔄-context-switching"><span>🔄 <wbr/>Context <wbr/>Switching</span></a></li><li><a href="#md:💾-memory-features"><span>💾 <wbr/>Memory <wbr/>Features</span></a></li><li><a href="#md:📧-feedback-system"><span>📧 <wbr/>Feedback <wbr/>System</span></a></li></ul></li><li><a href="#md:⚙️-angular-integration-experimental"><span>⚙️ <wbr/>Angular <wbr/>Integration (<wbr/>Experimental)</span></a></li><li><a href="#md:⚙️-vuejs-integration-experimental"><span>⚙️ <wbr/>Vue.js <wbr/>Integration (<wbr/>Experimental)</span></a></li><li><a href="#md:📦-custom-element-support"><span>📦 <wbr/>Custom <wbr/>Element <wbr/>Support</span></a></li><li><a href="#md:📸-live-preview"><span>📸 <wbr/>Live <wbr/>Preview</span></a></li><li><a href="#md:⚙️-configuration-options"><span>⚙️ <wbr/>Configuration <wbr/>Options</span></a></li><li><ul><li><a href="#md:file-storage-api-contract"><span>File <wbr/>Storage API <wbr/>Contract</span></a></li></ul></li><li><a href="#md:🤖-ai-provider-system"><span>🤖 AI <wbr/>Provider <wbr/>System</span></a></li><li><ul><li><a href="#md:supported-providers"><span>Supported <wbr/>Providers</span></a></li><li><a href="#md:gateway-provider-recommended"><span>Gateway <wbr/>Provider (<wbr/>Recommended)</span></a></li><li><a href="#md:legacy-direct-providers"><span>Legacy <wbr/>Direct <wbr/>Providers</span></a></li><li><a href="#md:migration-to-gateway"><span>Migration to <wbr/>Gateway</span></a></li><li><a href="#md:imagemultimodal-support"><span>Image/<wbr/>Multimodal <wbr/>Support</span></a></li><li><a href="#md:using-the-ai-provider"><span>Using the AI <wbr/>Provider</span></a></li></ul></li><li><a href="#md:🔧-model-context-protocol-mcp-integration"><span>🔧 <wbr/>Model <wbr/>Context <wbr/>Protocol (MCP) <wbr/>Integration</span></a></li><li><ul><li><a href="#md:mcp-features"><span>MCP <wbr/>Features</span></a></li><li><a href="#md:using-mcp-tools"><span>Using MCP <wbr/>Tools</span></a></li><li><a href="#md:mcp-tool-configuration"><span>MCP <wbr/>Tool <wbr/>Configuration</span></a></li><li><a href="#md:mcp-service-api"><span>MCP <wbr/>Service API</span></a></li></ul></li><li><a href="#md:🎛️-feature-flags--subscription-tiers"><span>🎛️ <wbr/>Feature <wbr/>Flags & <wbr/>Subscription <wbr/>Tiers</span></a></li><li><ul><li><a href="#md:subscription-tiers"><span>Subscription <wbr/>Tiers</span></a></li><li><a href="#md:feature-flag-configuration"><span>Feature <wbr/>Flag <wbr/>Configuration</span></a></li><li><a href="#md:tier-based-feature-matrix"><span>Tier-<wbr/>Based <wbr/>Feature <wbr/>Matrix</span></a></li><li><a href="#md:jwt-based-authentication"><span>JWT-<wbr/>Based <wbr/>Authentication</span></a></li><li><a href="#md:using-feature-flags-in-components"><span>Using <wbr/>Feature <wbr/>Flags in <wbr/>Components</span></a></li><li><a href="#md:subscription-state-management"><span>Subscription <wbr/>State <wbr/>Management</span></a></li><li><a href="#md:feature-restrictions--upgrade-prompts"><span>Feature <wbr/>Restrictions & <wbr/>Upgrade <wbr/>Prompts</span></a></li><li><a href="#md:development--testing"><span>Development & <wbr/>Testing</span></a></li><li><a href="#md:backend-integration"><span>Backend <wbr/>Integration</span></a></li></ul></li><li><a href="#md:🐛-debug-logger"><span>🐛 <wbr/>Debug <wbr/>Logger</span></a></li><li><a href="#md:🔒-security-best-practices"><span>🔒 <wbr/>Security <wbr/>Best <wbr/>Practices</span></a></li><li><ul><li><a href="#md:recommended-architecture"><span>Recommended <wbr/>Architecture</span></a></li><li><a href="#md:gateway-setup"><span>Gateway <wbr/>Setup</span></a></li><li><a href="#md:legacy-configuration-deprecated"><span>Legacy <wbr/>Configuration (<wbr/>Deprecated)</span></a></li><li><a href="#md:development-vs-production"><span>Development vs <wbr/>Production</span></a></li></ul></li><li><a href="#md:requirements"><span>Requirements</span></a></li><li><ul><li><a href="#md:gateway-api-services"><span>Gateway API <wbr/>Services</span></a></li><li><a href="#md:technology-agnostic-implementation"><span>Technology-<wbr/>Agnostic <wbr/>Implementation</span></a></li><li><a href="#md:additional-resources"><span>Additional <wbr/>Resources</span></a></li></ul></li><li><a href="#md:💡-vision--roadmap"><span>💡 <wbr/>Vision & <wbr/>Roadmap</span></a></li><li><a href="#md:📌-migration-guide"><span>📌 <wbr/>Migration <wbr/>Guide</span></a></li><li><ul><li><a href="#md:from-legacy-ttsstt-urls-to-gateway-api"><span>From <wbr/>Legacy TTS/STT URLs to <wbr/>Gateway API</span></a></li></ul></li><li><a href="#md:🛡️-license--protection"><span>🛡️ <wbr/>License & <wbr/>Protection</span></a></li><li><ul><li><a href="#md:⚖️-license-summary"><span>⚖️ <wbr/>License <wbr/>Summary</span></a></li><li><a href="#md:📋-usage-rights"><span>📋 <wbr/>Usage <wbr/>Rights</span></a></li><li><a href="#md:🔒-protection-features"><span>🔒 <wbr/>Protection <wbr/>Features</span></a></li><li><a href="#md:💼-commercial-licensing"><span>💼 <wbr/>Commercial <wbr/>Licensing</span></a></li><li><a href="#md:👨💻-for-contributors--developers"><span>👨💻 <wbr/>For <wbr/>Contributors & <wbr/>Developers</span></a></li><li><a href="#md:📝-license-compliance"><span>📝 <wbr/>License <wbr/>Compliance</span></a></li></ul></li></ul></div></details></div><div class="site-menu"><nav class="tsd-navigation"><a href="modules.html" class="current"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="assets/icons.svg#icon-1"></use></svg><span>@burtson-labs/bandit-engine</span></a><ul class="tsd-small-nested-navigation" id="tsd-nav-container" data-base="."><li>Loading...</li></ul></nav></div></div></div><footer><p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer><div class="overlay"></div></body></html>
|