@burtson-labs/bandit-engine 2.0.32 → 2.0.34
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 +2 -3
- package/dist/cli/cli.js +2 -2
- package/dist/cli/cli.js.map +1 -1
- package/docs/api_reference/assets/highlight.css +6 -6
- 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 +66 -15
- 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/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
|
@@ -184,15 +184,66 @@
|
|
|
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
|
|
187
192
|
</code><button type="button">Copy</button></pre>
|
|
188
193
|
|
|
189
194
|
</li>
|
|
190
195
|
</ol>
|
|
191
|
-
<
|
|
192
|
-
|
|
193
|
-
<
|
|
194
|
-
<pre><code><br/><br/><span class="hl-1">> **</span><span class="hl-5">Gateway</span><span class="hl-1"> </span><span class="hl-5">tip</span><span class="hl-1">** </span><br/><span class="hl-1">> </span><span class="hl-5">Set</span><span class="hl-1"> </span><span class="hl-2">`VITE_DEFAULT_MODEL`</span><span class="hl-1"> / </span><span class="hl-2">`VITE_FALLBACK_MODEL`</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-2">`gemma`</span><span class="hl-1">, </span><span class="hl-2">`llava`</span><span class="hl-1">, </span><span class="hl-2">`moondream`</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">using</span><span class="hl-1"> </span><span class="hl-2">`llava`</span><span class="hl-1">, </span><span class="hl-2">`moondream`</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><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
|
-
|
|
196
|
+
<blockquote>
|
|
197
|
+
<p><strong>Gateway tip</strong><br>
|
|
198
|
+
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 using <code>llava</code>, <code>moondream</code>, or other vision-capable variants enables image understanding with no extra code.</p>
|
|
199
|
+
</blockquote>
|
|
200
|
+
<a id="md:🎤-voice-services-ttsstt" class="tsd-anchor"></a><h3 class="tsd-anchor-link">🎤 Voice Services (TTS/STT)<a href="#md:🎤-voice-services-ttsstt" 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 supports Text-to-Speech (TTS) and Speech-to-Text (STT) through your gateway API. These services are <strong>technology-agnostic</strong> - you can implement them using any backend technology:</p>
|
|
201
|
+
<p><strong>TTS Endpoint (<code>POST /api/tts</code>)</strong></p>
|
|
202
|
+
<ul>
|
|
203
|
+
<li><strong>Input</strong>: <code>{ text: string, voice?: string, speed?: number }</code></li>
|
|
204
|
+
<li><strong>Output</strong>: Audio file (MP3, WAV, etc.) or streaming audio</li>
|
|
205
|
+
<li><strong>Compatible with</strong>: OpenAI TTS, Azure Speech, Google Cloud TTS, AWS Polly, local TTS servers, or custom implementations</li>
|
|
206
|
+
</ul>
|
|
207
|
+
<p><strong>STT Endpoint (<code>POST /api/stt/transcribe</code>)</strong></p>
|
|
208
|
+
<ul>
|
|
209
|
+
<li><strong>Input</strong>: Audio file upload (multipart/form-data)</li>
|
|
210
|
+
<li><strong>Output</strong>: <code>{ text: string }</code> or <code>{ transcription: string }</code></li>
|
|
211
|
+
<li><strong>Compatible with</strong>: OpenAI Whisper, Azure Speech, Google Speech, AWS Transcribe, local Whisper servers, or custom implementations</li>
|
|
212
|
+
</ul>
|
|
213
|
+
<p><strong>Service Discovery (<code>GET /api/tts/available-models</code>)</strong></p>
|
|
214
|
+
<ul>
|
|
215
|
+
<li><strong>Output</strong>: <code>{ models: string[], defaultModel: string, fallbackModel: string }</code></li>
|
|
216
|
+
<li>Used for automatic service availability detection and voice model selection</li>
|
|
217
|
+
</ul>
|
|
218
|
+
<blockquote>
|
|
219
|
+
<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>
|
|
220
|
+
</blockquote>
|
|
221
|
+
<p>See the <a href="media/02_gateway_api.md">Gateway API Contract</a> for complete implementation examples in multiple languages.</p>
|
|
222
|
+
<p>Use the Management interface to switch providers anytime or migrate from direct to gateway setup.</p>
|
|
223
|
+
<ol start="3">
|
|
224
|
+
<li><strong>Development</strong></li>
|
|
225
|
+
</ol>
|
|
226
|
+
<ul>
|
|
227
|
+
<li>Use <code>npm link</code> or a monorepo workspace to test locally before publishing.</li>
|
|
228
|
+
<li>Build with <code>tsup</code>.</li>
|
|
229
|
+
</ul>
|
|
230
|
+
<hr>
|
|
231
|
+
<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>
|
|
232
|
+
<ul>
|
|
233
|
+
<li><code><Chat /></code>: The main chat interface, designed to be used on a dedicated page or embedded into your product.</li>
|
|
234
|
+
<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>
|
|
235
|
+
<li><code><ChatModal /></code>: A flexible, mobile-friendly modal that can be launched anywhere in your app for quick AI interactions. Features include:
|
|
236
|
+
<ul>
|
|
237
|
+
<li><strong>Chat Control Center</strong>: Built-in conversation management, voice model switching, and memory controls</li>
|
|
238
|
+
<li><strong>Context Switching</strong>: Toggle between local session and saved conversation history</li>
|
|
239
|
+
<li><strong>Voice Integration</strong>: Voice model selection with real-time preview (when TTS is configured)</li>
|
|
240
|
+
<li><strong>Navigation</strong>: Seamless transition from modal to full chat interface</li>
|
|
241
|
+
<li><strong>Auto-theming</strong>: Automatically uses the theme configured in the Management interface</li>
|
|
242
|
+
</ul>
|
|
243
|
+
</li>
|
|
244
|
+
</ul>
|
|
245
|
+
<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>
|
|
246
|
+
</code><button type="button">Copy</button></pre>
|
|
196
247
|
|
|
197
248
|
<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>
|
|
198
249
|
<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>
|
|
@@ -200,7 +251,7 @@ VITE_FALLBACK_MODEL=gemma2:9b-instruct # optional, but handy for text-only fallb
|
|
|
200
251
|
</code><button type="button">Copy</button></pre>
|
|
201
252
|
|
|
202
253
|
<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>
|
|
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-
|
|
254
|
+
<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-15">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>
|
|
204
255
|
</code><button type="button">Copy</button></pre>
|
|
205
256
|
|
|
206
257
|
<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>
|
|
@@ -236,7 +287,7 @@ In Angular or Vue, you may need to wrap each usage with a <code><bandit-chat-
|
|
|
236
287
|
<li><strong>Memory Management Modal</strong>: Full CRUD operations for memory entries</li>
|
|
237
288
|
</ul>
|
|
238
289
|
<p><strong>Example Usage:</strong></p>
|
|
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-
|
|
290
|
+
<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-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">setModalOpen</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"> Open AI Assistant</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">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-14">() </span><span class="hl-6">=></span><span class="hl-14"> </span><span class="hl-0">setModalOpen</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-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>
|
|
240
291
|
</code><button type="button">Copy</button></pre>
|
|
241
292
|
|
|
242
293
|
<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>
|
|
@@ -245,7 +296,7 @@ In Angular or Vue, you may need to wrap each usage with a <code><bandit-chat-
|
|
|
245
296
|
</code><button type="button">Copy</button></pre>
|
|
246
297
|
|
|
247
298
|
<p><strong>Standalone Usage:</strong></p>
|
|
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-
|
|
299
|
+
<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-14">{ </span><span class="hl-5">bottom:</span><span class="hl-14"> </span><span class="hl-15">24</span><span class="hl-14">, </span><span class="hl-5">right:</span><span class="hl-14"> </span><span class="hl-15">24</span><span class="hl-14"> }</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>
|
|
249
300
|
</code><button type="button">Copy</button></pre>
|
|
250
301
|
|
|
251
302
|
<p><strong>Features:</strong></p>
|
|
@@ -280,7 +331,7 @@ In Angular or Vue, you may need to wrap each usage with a <code><bandit-chat-
|
|
|
280
331
|
|
|
281
332
|
<p>These components can now be used in your templates inside a <code><bandit-chat-provider></code> block.</p>
|
|
282
333
|
<p>Usage in HTML:</p>
|
|
283
|
-
<pre><code class="html"><span class="hl-9"><</span><span class="hl-
|
|
334
|
+
<pre><code class="html"><span class="hl-9"><</span><span class="hl-13">bandit-chat-provider</span><br/><span class="hl-1"> </span><span class="hl-11">packageSettings</span><span class="hl-1">=</span><span class="hl-16">'{"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-13">bandit-chat</span><span class="hl-9">></</span><span class="hl-13">bandit-chat</span><span class="hl-9">></span><br/><span class="hl-1"> </span><span class="hl-9"><</span><span class="hl-13">bandit-management</span><span class="hl-9">></</span><span class="hl-13">bandit-management</span><span class="hl-9">></span><br/><span class="hl-1"> </span><span class="hl-9"><</span><span class="hl-13">bandit-modal</span><span class="hl-9">></</span><span class="hl-13">bandit-modal</span><span class="hl-9">></span><br/><span class="hl-9"></</span><span class="hl-13">bandit-chat-provider</span><span class="hl-9">></span>
|
|
284
335
|
</code><button type="button">Copy</button></pre>
|
|
285
336
|
|
|
286
337
|
<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>
|
|
@@ -300,7 +351,7 @@ In Angular or Vue, you may need to wrap each usage with a <code><bandit-chat-
|
|
|
300
351
|
|
|
301
352
|
<p>These components can now be used in your templates inside a <code><bandit-chat-provider></code> block.</p>
|
|
302
353
|
<p>Usage in HTML:</p>
|
|
303
|
-
<pre><code class="html"><span class="hl-9"><</span><span class="hl-
|
|
354
|
+
<pre><code class="html"><span class="hl-9"><</span><span class="hl-13">bandit-chat-provider</span><br/><span class="hl-1"> </span><span class="hl-11">packageSettings</span><span class="hl-1">=</span><span class="hl-16">'{"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-13">bandit-chat</span><span class="hl-9">></</span><span class="hl-13">bandit-chat</span><span class="hl-9">></span><br/><span class="hl-1"> </span><span class="hl-9"><</span><span class="hl-13">bandit-management</span><span class="hl-9">></</span><span class="hl-13">bandit-management</span><span class="hl-9">></span><br/><span class="hl-1"> </span><span class="hl-9"><</span><span class="hl-13">bandit-modal</span><span class="hl-9">></</span><span class="hl-13">bandit-modal</span><span class="hl-9">></span><br/><span class="hl-9"></</span><span class="hl-13">bandit-chat-provider</span><span class="hl-9">></span>
|
|
304
355
|
</code><button type="button">Copy</button></pre>
|
|
305
356
|
|
|
306
357
|
<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>
|
|
@@ -373,7 +424,7 @@ When using Bandit components as custom elements (e.g., in Angular, Vue, or stati
|
|
|
373
424
|
</ol>
|
|
374
425
|
<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>
|
|
375
426
|
<p>Update the <code>brandingConfigUrl</code> like this:</p>
|
|
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-
|
|
427
|
+
<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-14">{</span><br/><span class="hl-14"> </span><span class="hl-1">...</span><span class="hl-5">chatPackageSettings</span><span class="hl-14">,</span><br/><span class="hl-14"> </span><span class="hl-5">brandingConfigUrl:</span><span class="hl-14"> </span><span class="hl-2">"https://cdn.burtson.ai/configs/default-config.json"</span><br/><span class="hl-14"> }</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>
|
|
377
428
|
</code><button type="button">Copy</button></pre>
|
|
378
429
|
|
|
379
430
|
<p>This enables remote control of Bandit appearance, available models, and more — without redeploying your frontend.</p>
|
|
@@ -468,7 +519,7 @@ Your gateway API can be built with any technology (Node.js, Python, .NET, Java,
|
|
|
468
519
|
|
|
469
520
|
<p><strong>Backend Requirements:</strong>
|
|
470
521
|
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>
|
|
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-
|
|
522
|
+
<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-14">.</span><span class="hl-5">env</span><span class="hl-14">.</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-14">.</span><span class="hl-5">env</span><span class="hl-14">.</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>
|
|
472
523
|
</code><button type="button">Copy</button></pre>
|
|
473
524
|
|
|
474
525
|
<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>
|
|
@@ -597,7 +648,7 @@ Your gateway API should accept images in the standardized format sent by the Ban
|
|
|
597
648
|
</tbody>
|
|
598
649
|
</table>
|
|
599
650
|
<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>
|
|
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-
|
|
651
|
+
<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-15">1640995200</span><br/><span class="hl-1">}</span>
|
|
601
652
|
</code><button type="button">Copy</button></pre>
|
|
602
653
|
|
|
603
654
|
<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>
|
|
@@ -619,7 +670,7 @@ Your gateway API should accept images in the standardized format sent by the Ban
|
|
|
619
670
|
</code><button type="button">Copy</button></pre>
|
|
620
671
|
|
|
621
672
|
<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>
|
|
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-
|
|
673
|
+
<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-15">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-14">.</span><span class="hl-5">env</span><span class="hl-14">.</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>
|
|
623
674
|
</code><button type="button">Copy</button></pre>
|
|
624
675
|
|
|
625
676
|
<p>This feature flag system enables you to build sophisticated subscription-based AI products with fine-grained access control and seamless upgrade flows.</p>
|
|
@@ -798,4 +849,4 @@ Your gateway API should accept images in the standardized format sent by the Ban
|
|
|
798
849
|
|
|
799
850
|
<hr>
|
|
800
851
|
<p><strong>© 2025 Burtson Labs LLC. All rights reserved.</strong></p>
|
|
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>
|
|
852
|
+
</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>
|