@burtson-labs/bandit-engine 2.0.8 → 2.0.10
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/LICENSE +2 -2
- package/README.md +161 -56
- package/dist/{aiProviderStore-YWJHSWFA.mjs → aiProviderStore-3YS2BZU3.mjs} +2 -2
- package/dist/chat-ZPJNWIXI.mjs +15 -0
- package/dist/chat-provider.js +9608 -0
- package/dist/chat-provider.js.map +1 -0
- package/dist/chat-provider.mjs +17 -0
- package/dist/chunk-2ZNIQD26.mjs +259 -0
- package/dist/chunk-2ZNIQD26.mjs.map +1 -0
- package/dist/chunk-5UVULH77.mjs +9427 -0
- package/dist/chunk-5UVULH77.mjs.map +1 -0
- package/dist/chunk-CY227I4F.mjs +160 -0
- package/dist/chunk-CY227I4F.mjs.map +1 -0
- package/dist/chunk-IFN52MQL.mjs +8763 -0
- package/dist/chunk-IFN52MQL.mjs.map +1 -0
- package/dist/{chunk-AVC6IZJQ.mjs → chunk-IHJPVIGB.mjs} +179 -2
- package/dist/chunk-IHJPVIGB.mjs.map +1 -0
- package/dist/chunk-L7UOQ2Y2.mjs +2810 -0
- package/dist/chunk-L7UOQ2Y2.mjs.map +1 -0
- package/dist/chunk-ONQMRE2G.mjs +26 -0
- package/dist/chunk-ONQMRE2G.mjs.map +1 -0
- package/dist/chunk-RTQDQ6TC.mjs +231 -0
- package/dist/chunk-RTQDQ6TC.mjs.map +1 -0
- package/dist/chunk-UMPVXYVC.mjs +5658 -0
- package/dist/chunk-UMPVXYVC.mjs.map +1 -0
- package/dist/chunk-XEG45Q6V.mjs +8925 -0
- package/dist/chunk-XEG45Q6V.mjs.map +1 -0
- package/dist/{chunk-WYS5CZVG.mjs → chunk-XUBYA5I7.mjs} +2 -2
- package/dist/{chunk-WYS5CZVG.mjs.map → chunk-XUBYA5I7.mjs.map} +1 -1
- package/dist/cli/cli.js +24 -13
- package/dist/cli/cli.js.map +1 -1
- package/dist/gateway-BiHRHJMM.d.mts +314 -0
- package/dist/gateway-BiHRHJMM.d.ts +314 -0
- package/dist/index.d.mts +11 -309
- package/dist/index.d.ts +11 -309
- package/dist/index.js +400 -155
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +86 -11874
- package/dist/index.mjs.map +1 -1
- package/dist/management/management.js +39535 -0
- package/dist/management/management.js.map +1 -0
- package/dist/management/management.mjs +16 -0
- package/dist/management/management.mjs.map +1 -0
- package/dist/{chunk-BIPELT57.mjs → modals/chat-modal/chat-modal.js} +16818 -20860
- package/dist/modals/chat-modal/chat-modal.js.map +1 -0
- package/dist/modals/chat-modal/chat-modal.mjs +19 -0
- package/dist/modals/chat-modal/chat-modal.mjs.map +1 -0
- package/dist/{modelStore-Y3LZWRQC.mjs → modelStore-UMJBDSEF.mjs} +2 -2
- package/dist/modelStore-UMJBDSEF.mjs.map +1 -0
- package/dist/public-types.d.mts +32 -0
- package/dist/public-types.d.ts +32 -0
- package/docs/01_quickstart.md +9 -6
- package/docs/02_gateway_api.md +55 -12
- package/docs/04_local_dev.md +1 -1
- package/docs/api_reference/assets/navigation.js +1 -1
- package/docs/api_reference/assets/search.js +1 -1
- 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 +4 -4
- package/docs/api_reference/functions/ChatProvider.html +1 -1
- package/docs/api_reference/functions/FeatureFlagProvider.html +1 -1
- package/docs/api_reference/functions/FeedbackButton.html +1 -1
- package/docs/api_reference/functions/FeedbackModal.html +1 -1
- package/docs/api_reference/functions/Management.html +1 -1
- package/docs/api_reference/functions/NotificationProvider.html +1 -1
- package/docs/api_reference/functions/SubscriptionExpiredGuard.html +1 -1
- package/docs/api_reference/functions/SubscriptionExpiredModal.html +1 -1
- 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 +130 -40
- 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 +7 -0
- 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 +5 -3
- package/docs/api_reference/interfaces/SearchOptions.html +2 -2
- package/docs/api_reference/interfaces/SearchResult.html +2 -2
- package/docs/api_reference/interfaces/SubscriptionExpiredGuardProps.html +2 -2
- package/docs/api_reference/interfaces/SubscriptionExpiredModalProps.html +2 -2
- package/docs/api_reference/interfaces/TTSOptions.html +2 -2
- package/docs/api_reference/interfaces/TTSProgress.html +2 -2
- package/docs/api_reference/interfaces/TrialUsage.html +2 -2
- package/docs/api_reference/interfaces/UploadRequest.html +3 -3
- package/docs/api_reference/interfaces/UseTTSReturn.html +2 -2
- package/docs/api_reference/interfaces/VectorDocument.html +2 -2
- package/docs/api_reference/interfaces/VectorMemory.html +2 -2
- package/docs/api_reference/interfaces/VectorMemoryMetadata.html +2 -2
- package/docs/api_reference/interfaces/VectorStoreStatus.html +2 -2
- package/docs/api_reference/interfaces/VoiceModelsResponse.html +2 -2
- package/docs/api_reference/interfaces/VoiceState.html +2 -2
- package/docs/api_reference/media/02_gateway_api.md +55 -12
- package/docs/api_reference/media/LICENSE +2 -2
- package/docs/api_reference/media/PROTECTION-README.md +6 -8
- package/docs/api_reference/media/README.md +37 -9
- package/docs/api_reference/modules.html +1 -0
- 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 +24 -13
- package/dist/chat-QXB526NZ.mjs +0 -11
- package/dist/chunk-AVC6IZJQ.mjs.map +0 -1
- package/dist/chunk-BIPELT57.mjs.map +0 -1
- package/docs/api_reference/media/README-1.md +0 -23
- /package/dist/{aiProviderStore-YWJHSWFA.mjs.map → aiProviderStore-3YS2BZU3.mjs.map} +0 -0
- /package/dist/{chat-QXB526NZ.mjs.map → chat-ZPJNWIXI.mjs.map} +0 -0
- /package/dist/{modelStore-Y3LZWRQC.mjs.map → chat-provider.mjs.map} +0 -0
|
@@ -1,14 +1,30 @@
|
|
|
1
|
-
<!DOCTYPE html><html class="default" lang="en"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>@burtson-labs/bandit-engine</title><meta name="description" content="Documentation for @burtson-labs/bandit-engine"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="assets/style.css"/><link rel="stylesheet" href="assets/highlight.css"/><script defer src="assets/main.js"></script><script async src="assets/icons.js" id="tsd-icons-script"></script><script async src="assets/search.js" id="tsd-search-script"></script><script async src="assets/navigation.js" id="tsd-nav-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><div class="table-cell" id="tsd-search" data-base="."><div class="field"><label for="tsd-search-field" class="tsd-widget tsd-toolbar-icon search no-caption"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><use href="assets/icons.svg#icon-search"></use></svg></label><input type="text" id="tsd-search-field" aria-label="Search"/></div><div class="field"><div id="tsd-toolbar-links"></div></div><ul class="results"><li class="state loading">Preparing search index...</li><li class="state failure">The search index is not available</li></ul><a href="index.html" class="title">@burtson-labs/bandit-engine</a></div><div class="table-cell" id="tsd-widgets"><a href="#" class="tsd-widget tsd-toolbar-icon menu no-caption" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><use href="assets/icons.svg#icon-menu"></use></svg></a></div></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><h1>@burtson-labs/bandit-engine</h1></div><div class="tsd-panel tsd-typography"><
|
|
2
|
-
<
|
|
1
|
+
<!DOCTYPE html><html class="default" lang="en"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>@burtson-labs/bandit-engine</title><meta name="description" content="Documentation for @burtson-labs/bandit-engine"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="assets/style.css"/><link rel="stylesheet" href="assets/highlight.css"/><script defer src="assets/main.js"></script><script async src="assets/icons.js" id="tsd-icons-script"></script><script async src="assets/search.js" id="tsd-search-script"></script><script async src="assets/navigation.js" id="tsd-nav-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><div class="table-cell" id="tsd-search" data-base="."><div class="field"><label for="tsd-search-field" class="tsd-widget tsd-toolbar-icon search no-caption"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><use href="assets/icons.svg#icon-search"></use></svg></label><input type="text" id="tsd-search-field" aria-label="Search"/></div><div class="field"><div id="tsd-toolbar-links"></div></div><ul class="results"><li class="state loading">Preparing search index...</li><li class="state failure">The search index is not available</li></ul><a href="index.html" class="title">@burtson-labs/bandit-engine</a></div><div class="table-cell" id="tsd-widgets"><a href="#" class="tsd-widget tsd-toolbar-icon menu no-caption" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><use href="assets/icons.svg#icon-menu"></use></svg></a></div></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><h1>@burtson-labs/bandit-engine</h1></div><div class="tsd-panel tsd-typography"><a href="https://burtson.ai">
|
|
2
|
+
<picture>
|
|
3
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://cdn.burtson.ai/logos/burtson-labs-logo-alt.png" />
|
|
4
|
+
<source media="(prefers-color-scheme: light)" srcset="https://cdn.burtson.ai/logos/burtson-labs-logo.png" />
|
|
5
|
+
<img src="https://cdn.burtson.ai/logos/burtson-labs-logo.png" alt="Burtson Labs Logo" width="120" style="width: 120px !important; max-width: 120px !important; height: auto; display: inline-block;" />
|
|
6
|
+
</picture>
|
|
7
|
+
</a>
|
|
8
|
+
<a id="md:bandit-engine-⚡" class="tsd-anchor"></a><h1 class="tsd-anchor-link">Bandit Engine ⚡<a href="#md:bandit-engine-⚡" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h1><p>An AI chat toolkit built for speed, design, and control. Power branded AI assistants with battle-tested React components and a secure gateway contract.</p>
|
|
9
|
+
<p><a href="https://www.npmjs.com/package/@burtson-labs/bandit-engine" target="_blank" class="external"><img src="https://img.shields.io/badge/npm-private-lightgrey?logo=npm" alt="npm private"></a>
|
|
10
|
+
<a href="https://banditailabs.com/npm-package" target="_blank" class="external"><img src="https://img.shields.io/badge/docs-banditailabs.com%2Fnpm--package-0C7BD4" alt="Docs"></a>
|
|
11
|
+
<a href="https://banditailabs.com/" target="_blank" class="external"><img src="https://img.shields.io/badge/live%20demo-banditailabs.com%2Fchat-7F56D9" alt="Live Demo"></a>
|
|
3
12
|
<a href="https://www.typescriptlang.org/" target="_blank" class="external"><img src="https://img.shields.io/badge/TypeScript-5.x-3178c6?logo=typescript&logoColor=white" alt="TypeScript"></a>
|
|
4
13
|
<a href="./LICENSE"><img src="https://img.shields.io/badge/License-BUSL--1.1-red" alt="License: BUSL-1.1"></a></p>
|
|
5
|
-
<
|
|
6
|
-
<
|
|
7
|
-
|
|
8
|
-
</
|
|
9
|
-
<
|
|
10
|
-
<
|
|
11
|
-
|
|
14
|
+
<a id="md:features" class="tsd-anchor"></a><h2 class="tsd-anchor-link">Features<a href="#md:features" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><ul>
|
|
15
|
+
<li>🔌 Plug-and-play React chat, modal, and management surfaces</li>
|
|
16
|
+
<li>🧠 Memory, vector knowledge, and provider switching behind a secure gateway</li>
|
|
17
|
+
<li>🎨 Full MUI theming, dark mode, and branding controls out of the box</li>
|
|
18
|
+
<li>🌐 Multimodal support (voice, images, documents) with Ollama, OpenAI, Azure, Anthropic</li>
|
|
19
|
+
<li>🛠️ CLI scaffolding, sample gateway, and docs to launch in minutes</li>
|
|
20
|
+
</ul>
|
|
21
|
+
<a id="md:quick-links" class="tsd-anchor"></a><h2 class="tsd-anchor-link">Quick Links<a href="#md:quick-links" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><ul>
|
|
22
|
+
<li>📚 Full docs: <a href="https://banditailabs.com/npm-package" target="_blank" class="external">banditailabs.com/npm-package</a> (mirrors <code>/docs</code> in this repo)</li>
|
|
23
|
+
<li>🎯 Live demo with OAuth sign-in: <a href="https://banditailabs.com/" target="_blank" class="external">banditailabs.com</a></li>
|
|
24
|
+
<li>🧪 Playground (no auth required): <a href="https://banditailabs.com/playground" target="_blank" class="external">banditailabs.com/playground</a></li>
|
|
25
|
+
<li>🔁 Sample gateway: <a href="media/README.md"><code>examples/gateway-node</code></a></li>
|
|
26
|
+
</ul>
|
|
27
|
+
<a id="md:quick-start" class="tsd-anchor"></a><h2 class="tsd-anchor-link">Quick Start<a href="#md:quick-start" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><a id="md:cli-scaffold" class="tsd-anchor"></a><h3 class="tsd-anchor-link">CLI Scaffold<a href="#md:cli-scaffold" 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>Want a working playground instantly? Scaffold a Bandit app and gateway in one command:</p>
|
|
12
28
|
<pre><code class="bash"><span class="hl-0">npx</span><span class="hl-1"> </span><span class="hl-2">@burtson-labs/bandit-engine</span><span class="hl-1"> </span><span class="hl-2">create</span><span class="hl-1"> </span><span class="hl-2">my-bandit-app</span>
|
|
13
29
|
</code><button type="button">Copy</button></pre>
|
|
14
30
|
|
|
@@ -30,6 +46,9 @@ Designed for devs who move fast, think sharp, and want full control over their A
|
|
|
30
46
|
<blockquote>
|
|
31
47
|
<p>🗝️ The generated project includes an <code>.npmrc</code> that targets <code>https://npm.pkg.github.com/</code> and expects a <code>GITHUB_NPM_TOKEN</code> environment variable. Run <code>npm login --registry=https://npm.pkg.github.com --scope=@burtson-labs</code> (or export <code>GITHUB_NPM_TOKEN</code>) before installing dependencies.</p>
|
|
32
48
|
</blockquote>
|
|
49
|
+
<blockquote>
|
|
50
|
+
<p>⚠️ The scaffolded gateway focuses on OpenAI/Ollama chat and model discovery. All advanced routes (file storage uploads, vector embedding, voice, MCP, etc.) are generated as <code>501</code> placeholders so you can wire them to your own infrastructure. Implement the contracts below before turning on those features in production.</p>
|
|
51
|
+
</blockquote>
|
|
33
52
|
<p>Check out the <a href="media/05_cli_quickstart.md">CLI quick start guide</a> for the full walkthrough, option matrix, and project anatomy.</p>
|
|
34
53
|
<a id="md:cli-options" class="tsd-anchor"></a><h3 class="tsd-anchor-link">CLI Options<a href="#md:cli-options" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><table>
|
|
35
54
|
<thead>
|
|
@@ -68,7 +87,15 @@ Designed for devs who move fast, think sharp, and want full control over their A
|
|
|
68
87
|
</tbody>
|
|
69
88
|
</table>
|
|
70
89
|
<p>The CLI prints next steps (install, copy <code>.env</code>, run dev server) once scaffolding completes, so you can copy-paste and ship immediately.</p>
|
|
71
|
-
<a id="md
|
|
90
|
+
<a id="md:playground-password-free-preview" class="tsd-anchor"></a><h3 class="tsd-anchor-link">Playground (Password-Free Preview)<a href="#md:playground-password-free-preview" 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>Want to feel the UX without wiring a gateway or signing in? Visit the hosted playground:</p>
|
|
91
|
+
<ul>
|
|
92
|
+
<li><strong>URL:</strong> <a href="https://banditailabs.com/playground" target="_blank" class="external"><code>https://banditailabs.com/playground</code></a></li>
|
|
93
|
+
<li><strong>What you get:</strong> Mock streaming answers, conversation starters, and theming preview powered by the built-in <code>PlaygroundProvider</code>.</li>
|
|
94
|
+
<li><strong>What’s simulated:</strong> Responses come from canned scripts – no external API keys, tokens, or backend required.</li>
|
|
95
|
+
</ul>
|
|
96
|
+
<p>The playground is ideal for product demos, initial stakeholder reviews, or QA before you connect real providers. When you’re ready to go live, swap the provider back to your gateway for production traffic.</p>
|
|
97
|
+
<a id="md:🛠️-getting-started--plug--play-ai" class="tsd-anchor"></a><h2 class="tsd-anchor-link">🛠️ Getting Started – Plug & Play AI<a href="#md:🛠️-getting-started--plug--play-ai" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><p>Bandit ships with responsive layouts baked in — the chat surface, management console, and modal all collapse gracefully on phones and tablets. Install it inside a Vite project and you can ship a polished PWA: the package works offline when cached, supports mobile nav patterns, and plays nicely with add-to-home-screen flows.</p>
|
|
98
|
+
<ol>
|
|
72
99
|
<li><strong>Add a config.json</strong> to your public folder (or host it on a CDN) and point <code>brandingConfigUrl</code> at it:</li>
|
|
73
100
|
</ol>
|
|
74
101
|
<p><em>Host it locally in <code>/public</code> or serve it from a CDN and reference it via <code>brandingConfigUrl</code>.</em></p>
|
|
@@ -79,7 +106,7 @@ Designed for devs who move fast, think sharp, and want full control over their A
|
|
|
79
106
|
<ol start="2">
|
|
80
107
|
<li><strong>Wrap your entire app with <code>ChatProvider</code> to enable Bandit features globally:</strong></li>
|
|
81
108
|
</ol>
|
|
82
|
-
<pre><code class="tsx"><span class="hl-4">import</span><span class="hl-1"> </span><span class="hl-5">React</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/><span class="hl-4">import</span><span class="hl-1"> </span><span class="hl-5">ReactDOM</span><span class="hl-1"> </span><span class="hl-4">from</span><span class="hl-1"> </span><span class="hl-2">"react-dom/client"</span><span class="hl-1">;</span><br/><span class="hl-4">import</span><span class="hl-1"> </span><span class="hl-5">App</span><span class="hl-1"> </span><span class="hl-4">from</span><span class="hl-1"> </span><span class="hl-2">"./App"</span><span class="hl-1">;</span><br/><span class="hl-4">import</span><span class="hl-1"> { </span><span class="hl-5">CssBaseline</span><span class="hl-1">, </span><span class="hl-5">ThemeProvider</span><span class="hl-1"> } </span><span class="hl-4">from</span><span class="hl-1"> </span><span class="hl-2">"@mui/material"</span><span class="hl-1">;</span><br/><span class="hl-4">import</span><span class="hl-1"> { </span><span class="hl-5">banditDarkTheme</span><span class="hl-1"> } </span><span class="hl-4">from</span><span class="hl-1"> </span><span class="hl-2">"./theme/banditTheme"</span><span class="hl-1">;</span><br/><span class="hl-4">import</span><span class="hl-1"> { </span><span class="hl-5">AppInitializer</span><span class="hl-1"> } </span><span class="hl-4">from</span><span class="hl-1"> </span><span class="hl-2">"./app-initializer"</span><span class="hl-1">;</span><br/><span class="hl-4">import</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/><br/><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">chatPackageSettings</span><span class="hl-1"> = {</span><br/><span class="hl-1"> </span><span class="hl-8">// New Gateway Provider Configuration (Recommended)</span><br/><span class="hl-1"> </span><span class="hl-5">aiProvider:</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-5">type:</span><span class="hl-1"> </span><span class="hl-2">"gateway"</span><span class="hl-1"> </span><span class="hl-4">as</span><span class="hl-1"> </span><span class="hl-6">const</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">gatewayUrl:</span><span class="hl-1"> </span><span class="hl-4">import</span><span class="hl-1">.</span><span class="hl-5">meta</span><span class="hl-1">.</span><span class="hl-5">env</span><span class="hl-1">.</span><span class="hl-7">VITE_GATEWAY_API_URL</span><span class="hl-1">!,</span><br/><span class="hl-1"> </span><span class="hl-5">provider:</span><span class="hl-1"> </span><span class="hl-2">"openai"</span><span class="hl-1"> </span><span class="hl-8">// Backend: openai, azure-openai, anthropic, ollama</span><br/><span class="hl-1"> },</span><br/><span class="hl-1"> </span><br/><span class="hl-1"> </span><span class="hl-8">//
|
|
109
|
+
<pre><code class="tsx"><span class="hl-4">import</span><span class="hl-1"> </span><span class="hl-5">React</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/><span class="hl-4">import</span><span class="hl-1"> </span><span class="hl-5">ReactDOM</span><span class="hl-1"> </span><span class="hl-4">from</span><span class="hl-1"> </span><span class="hl-2">"react-dom/client"</span><span class="hl-1">;</span><br/><span class="hl-4">import</span><span class="hl-1"> </span><span class="hl-5">App</span><span class="hl-1"> </span><span class="hl-4">from</span><span class="hl-1"> </span><span class="hl-2">"./App"</span><span class="hl-1">;</span><br/><span class="hl-4">import</span><span class="hl-1"> { </span><span class="hl-5">CssBaseline</span><span class="hl-1">, </span><span class="hl-5">ThemeProvider</span><span class="hl-1"> } </span><span class="hl-4">from</span><span class="hl-1"> </span><span class="hl-2">"@mui/material"</span><span class="hl-1">;</span><br/><span class="hl-4">import</span><span class="hl-1"> { </span><span class="hl-5">banditDarkTheme</span><span class="hl-1"> } </span><span class="hl-4">from</span><span class="hl-1"> </span><span class="hl-2">"./theme/banditTheme"</span><span class="hl-1">;</span><br/><span class="hl-4">import</span><span class="hl-1"> { </span><span class="hl-5">AppInitializer</span><span class="hl-1"> } </span><span class="hl-4">from</span><span class="hl-1"> </span><span class="hl-2">"./app-initializer"</span><span class="hl-1">;</span><br/><span class="hl-4">import</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/><br/><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">chatPackageSettings</span><span class="hl-1"> = {</span><br/><span class="hl-1"> </span><span class="hl-8">// New Gateway Provider Configuration (Recommended)</span><br/><span class="hl-1"> </span><span class="hl-5">aiProvider:</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-5">type:</span><span class="hl-1"> </span><span class="hl-2">"gateway"</span><span class="hl-1"> </span><span class="hl-4">as</span><span class="hl-1"> </span><span class="hl-6">const</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">gatewayUrl:</span><span class="hl-1"> </span><span class="hl-4">import</span><span class="hl-1">.</span><span class="hl-5">meta</span><span class="hl-1">.</span><span class="hl-5">env</span><span class="hl-1">.</span><span class="hl-7">VITE_GATEWAY_API_URL</span><span class="hl-1">!,</span><br/><span class="hl-1"> </span><span class="hl-5">provider:</span><span class="hl-1"> </span><span class="hl-2">"openai"</span><span class="hl-1"> </span><span class="hl-8">// Backend: openai, azure-openai, anthropic, ollama</span><br/><span class="hl-1"> },</span><br/><span class="hl-1"> </span><br/><span class="hl-1"> </span><span class="hl-8">// Direct Ollama configuration (development only)</span><br/><span class="hl-1"> </span><span class="hl-8">// ollamaUrl: import.meta.env.VITE_OLLAMA_URL!,</span><br/><span class="hl-1"> </span><br/><span class="hl-1"> </span><span class="hl-8">// Model Configuration</span><br/><span class="hl-1"> </span><span class="hl-5">defaultModel:</span><span class="hl-1"> </span><span class="hl-4">import</span><span class="hl-1">.</span><span class="hl-5">meta</span><span class="hl-1">.</span><span class="hl-5">env</span><span class="hl-1">.</span><span class="hl-7">VITE_DEFAULT_MODEL</span><span class="hl-1">!,</span><br/><span class="hl-1"> </span><span class="hl-5">fallbackModel:</span><span class="hl-1"> </span><span class="hl-4">import</span><span class="hl-1">.</span><span class="hl-5">meta</span><span class="hl-1">.</span><span class="hl-5">env</span><span class="hl-1">.</span><span class="hl-7">VITE_FALLBACK_MODEL</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><br/><span class="hl-1"> </span><span class="hl-5">gatewayApiUrl:</span><span class="hl-1"> </span><span class="hl-4">import</span><span class="hl-1">.</span><span class="hl-5">meta</span><span class="hl-1">.</span><span class="hl-5">env</span><span class="hl-1">.</span><span class="hl-7">VITE_GATEWAY_API_URL</span><span class="hl-1">!,</span><br/><span class="hl-1"> </span><br/><span class="hl-1"> </span><span class="hl-8">// Branding and optional overrides</span><br/><span class="hl-1"> </span><span class="hl-5">brandingConfigUrl:</span><span class="hl-1"> </span><span class="hl-2">"/config.json"</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-8">// fileStorageApiUrl: import.meta.env.VITE_FILE_STORAGE_API_URL,</span><br/><span class="hl-1"> </span><span class="hl-8">// homeUrl: "https://yourapp.com",</span><br/><span class="hl-1"> </span><span class="hl-8">// feedbackEmail: "feedback@yourapp.com",</span><br/><span class="hl-1">};</span><br/><br/><span class="hl-5">ReactDOM</span><span class="hl-1">.</span><span class="hl-0">createRoot</span><span class="hl-1">(</span><span class="hl-5">document</span><span class="hl-1">.</span><span class="hl-0">getElementById</span><span class="hl-1">(</span><span class="hl-2">"root"</span><span class="hl-1">)!).</span><span class="hl-0">render</span><span class="hl-1">(</span><br/><span class="hl-1"> </span><span class="hl-9"><</span><span class="hl-10">React.StrictMode</span><span class="hl-9">></span><br/><span class="hl-1"> </span><span class="hl-9"><</span><span class="hl-10">ThemeProvider</span><span class="hl-1"> </span><span class="hl-11">theme</span><span class="hl-1">=</span><span class="hl-6">{</span><span class="hl-5">banditDarkTheme</span><span class="hl-6">}</span><span class="hl-9">></span><br/><span class="hl-1"> </span><span class="hl-9"><</span><span class="hl-10">CssBaseline</span><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">AppInitializer</span><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">ChatProvider</span><span class="hl-1"> </span><span class="hl-11">packageSettings</span><span class="hl-1">=</span><span class="hl-6">{</span><span class="hl-5">chatPackageSettings</span><span class="hl-6">}</span><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-1"> </span><span class="hl-9"></</span><span class="hl-10">ChatProvider</span><span class="hl-9">></span><br/><span class="hl-1"> </span><span class="hl-9"></</span><span class="hl-10">ThemeProvider</span><span class="hl-9">></span><br/><span class="hl-1"> </span><span class="hl-9"></</span><span class="hl-10">React.StrictMode</span><span class="hl-9">></span><br/><span class="hl-1">);</span>
|
|
83
110
|
</code><button type="button">Copy</button></pre>
|
|
84
111
|
|
|
85
112
|
<blockquote>
|
|
@@ -93,14 +120,49 @@ Designed for devs who move fast, think sharp, and want full control over their A
|
|
|
93
120
|
<pre><code class="tsx"><span class="hl-8">// Quick start - API keys in frontend (not for production)</span><br/><span class="hl-12">aiProvider</span><span class="hl-1">: {</span><br/><span class="hl-1"> </span><span class="hl-12">type</span><span class="hl-1">: </span><span class="hl-2">"ollama"</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-12">baseUrl</span><span class="hl-1">: </span><span class="hl-2">"http://localhost:11434"</span><br/><span class="hl-1">}</span>
|
|
94
121
|
</code><button type="button">Copy</button></pre>
|
|
95
122
|
|
|
96
|
-
<p><strong>Gateway Requirements:</strong>
|
|
123
|
+
<p><strong>Gateway Requirements:</strong> Implement the endpoints that match the features you turn on:</p>
|
|
97
124
|
<ul>
|
|
98
|
-
<li><
|
|
99
|
-
<
|
|
100
|
-
<li><code>
|
|
101
|
-
<li><code>
|
|
102
|
-
<li><code>GET /api/
|
|
103
|
-
|
|
125
|
+
<li><strong>Core status & discovery</strong>
|
|
126
|
+
<ul>
|
|
127
|
+
<li><code>GET /api/health</code> — system health and provider availability</li>
|
|
128
|
+
<li><code>GET /api/models</code> and <code>GET /api/models/{provider}</code> — model inventory</li>
|
|
129
|
+
<li><code>GET /api/memory</code> — hydrate personal memory when the feature is enabled</li>
|
|
130
|
+
</ul>
|
|
131
|
+
</li>
|
|
132
|
+
<li><strong>Chat & text generation</strong>
|
|
133
|
+
<ul>
|
|
134
|
+
<li><code>POST /api/chat/completions</code> — default provider routing</li>
|
|
135
|
+
<li><code>POST /api/{provider}/chat/completions</code> — provider-specific routing (e.g. <code>openai</code>, <code>azure-openai</code>, <code>anthropic</code>)</li>
|
|
136
|
+
<li><code>POST /api/ollama/chat</code> — native Ollama chat format</li>
|
|
137
|
+
<li><code>POST /api/generate</code> — non-chat generation (conversation starters, summaries, etc.)</li>
|
|
138
|
+
<li><code>POST /api/{provider}/generate</code> — same contract, but scoped per provider (required for conversation starters to respect OpenAI vs. Ollama routing)</li>
|
|
139
|
+
</ul>
|
|
140
|
+
</li>
|
|
141
|
+
<li><strong>Knowledge & vector search</strong> (required for memories, knowledge management, and MCP document tools)
|
|
142
|
+
<ul>
|
|
143
|
+
<li><code>POST /api/embedding/embed-memory</code></li>
|
|
144
|
+
<li><code>POST /api/embedding/batch-embed-memories</code></li>
|
|
145
|
+
<li><code>POST /api/embedding/embed-document</code></li>
|
|
146
|
+
<li><code>POST /api/embedding/search</code> and <code>POST /api/embedding/search-memories</code></li>
|
|
147
|
+
<li><code>GET /api/embedding/my-memories</code> (with <code>skip</code>/<code>limit</code>)</li>
|
|
148
|
+
<li><code>DELETE /api/embedding/memory/{memoryId}</code> and <code>PUT /api/embedding/memory/{memoryId}/pin</code></li>
|
|
149
|
+
<li><code>GET /api/embedding/available-files</code> and <code>GET /api/embedding/files</code></li>
|
|
150
|
+
<li>See <a href="#md:file-storage-api-contract">File Storage API Contract</a> for the companion <code>/file/*</code> routes used to upload and download source documents.</li>
|
|
151
|
+
</ul>
|
|
152
|
+
</li>
|
|
153
|
+
<li><strong>Voice & transcription</strong>
|
|
154
|
+
<ul>
|
|
155
|
+
<li><code>POST /api/tts</code> — synthesize speech</li>
|
|
156
|
+
<li><code>GET /api/tts/available-models</code> — advertise available voices</li>
|
|
157
|
+
<li><code>POST /api/stt/transcribe</code> — speech-to-text ingestion</li>
|
|
158
|
+
</ul>
|
|
159
|
+
</li>
|
|
160
|
+
<li><strong>Feedback & subscriptions</strong> (optional but recommended)
|
|
161
|
+
<ul>
|
|
162
|
+
<li><code>POST /api/feedback</code> — submit in-app feedback</li>
|
|
163
|
+
<li><code>GET /subscription/{userId}</code> and <code>PUT /subscription/{userId}</code> — synchronize subscription tiers used by the feature-flag system</li>
|
|
164
|
+
</ul>
|
|
165
|
+
</li>
|
|
104
166
|
</ul>
|
|
105
167
|
<blockquote>
|
|
106
168
|
<p><strong>⚠️ Important:</strong> The Bandit Engine automatically routes to provider-specific endpoints:</p>
|
|
@@ -139,7 +201,7 @@ OLLAMA_URL=http://localhost:11434 # or the remote daemon address
|
|
|
139
201
|
<li><strong>Output</strong>: Audio file (MP3, WAV, etc.) or streaming audio</li>
|
|
140
202
|
<li><strong>Compatible with</strong>: OpenAI TTS, Azure Speech, Google Cloud TTS, AWS Polly, local TTS servers, or custom implementations</li>
|
|
141
203
|
</ul>
|
|
142
|
-
<p><strong>STT Endpoint (<code>POST /api/stt</code>)</strong></p>
|
|
204
|
+
<p><strong>STT Endpoint (<code>POST /api/stt/transcribe</code>)</strong></p>
|
|
143
205
|
<ul>
|
|
144
206
|
<li><strong>Input</strong>: Audio file upload (multipart/form-data)</li>
|
|
145
207
|
<li><strong>Output</strong>: <code>{ text: string }</code> or <code>{ transcription: string }</code></li>
|
|
@@ -150,6 +212,9 @@ OLLAMA_URL=http://localhost:11434 # or the remote daemon address
|
|
|
150
212
|
<li><strong>Output</strong>: <code>{ models: string[], defaultModel: string, fallbackModel: string }</code></li>
|
|
151
213
|
<li>Used for automatic service availability detection and voice model selection</li>
|
|
152
214
|
</ul>
|
|
215
|
+
<blockquote>
|
|
216
|
+
<p>Quickstart note: the generated Express gateway ships these TTS/STT routes as <code>501</code> placeholders so you can connect your own provider. Voice features remain disabled until you implement them server-side.</p>
|
|
217
|
+
</blockquote>
|
|
153
218
|
<p>See the <a href="media/02_gateway_api.md">Gateway API Contract</a> for complete implementation examples in multiple languages.</p>
|
|
154
219
|
<p>Use the Management interface to switch providers anytime or migrate from direct to gateway setup.</p>
|
|
155
220
|
<ol start="3">
|
|
@@ -317,27 +382,39 @@ When using Bandit components as custom elements (e.g., in Angular, Vue, or stati
|
|
|
317
382
|
<a id="md:📸-live-preview" class="tsd-anchor"></a><h2 class="tsd-anchor-link">📸 Live Preview<a href="#md:📸-live-preview" 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>Here are some screenshots of Bandit Chat in action:</p>
|
|
318
383
|
<p><strong>Chat Demo – Your AI-powered UI</strong></p>
|
|
319
384
|
<p align="center">
|
|
320
|
-
<
|
|
385
|
+
<a href="https://cdn.burtson.ai/images/chat-demo.jpg" target="_blank" rel="noopener">
|
|
386
|
+
<img src="https://cdn.burtson.ai/images/chat-demo.jpg" alt="Bandit chat session showing multi-turn conversation with multi-device layout" width="600" style="width: 100%; max-width: 600px; height: auto;" />
|
|
387
|
+
</a>
|
|
321
388
|
</p>
|
|
322
389
|
<p><strong>Conversation Drawer & Project Context</strong></p>
|
|
323
390
|
<p align="center">
|
|
324
|
-
<
|
|
391
|
+
<a href="https://cdn.burtson.ai/images/chat-demo-2.jpg" target="_blank" rel="noopener">
|
|
392
|
+
<img src="https://cdn.burtson.ai/images/chat-demo-2.jpg" alt="Chat drawer open with projects list and answered question" width="600" style="width: 100%; max-width: 600px; height: auto;" />
|
|
393
|
+
</a>
|
|
325
394
|
</p>
|
|
326
395
|
<p><strong>Chat Modal – Quick Assist Anywhere</strong></p>
|
|
327
396
|
<p align="center">
|
|
328
|
-
<
|
|
397
|
+
<a href="https://cdn.burtson.ai/images/chat-modal.jpg" target="_blank" rel="noopener">
|
|
398
|
+
<img src="https://cdn.burtson.ai/images/chat-modal.jpg" alt="Chat modal with control center options and message composer" width="600" style="width: 100%; max-width: 600px; height: auto;" />
|
|
399
|
+
</a>
|
|
329
400
|
</p>
|
|
330
401
|
<p><strong>Management – Branding Controls</strong></p>
|
|
331
402
|
<p align="center">
|
|
332
|
-
<
|
|
403
|
+
<a href="https://cdn.burtson.ai/images/mgmt-branding.jpg" target="_blank" rel="noopener">
|
|
404
|
+
<img src="https://cdn.burtson.ai/images/mgmt-branding.jpg" alt="Management interface branding tab showing logo and color options" width="600" style="width: 100%; max-width: 600px; height: auto;" />
|
|
405
|
+
</a>
|
|
333
406
|
</p>
|
|
334
407
|
<p><strong>Management – Personas</strong></p>
|
|
335
408
|
<p align="center">
|
|
336
|
-
<
|
|
409
|
+
<a href="https://cdn.burtson.ai/images/mgmt-personalities.jpg" target="_blank" rel="noopener">
|
|
410
|
+
<img src="https://cdn.burtson.ai/images/mgmt-personalities.jpg" alt="Management interface personas tab with configurable AI personalities" width="600" style="width: 100%; max-width: 600px; height: auto;" />
|
|
411
|
+
</a>
|
|
337
412
|
</p>
|
|
338
413
|
<p><strong>Management – Preferences</strong></p>
|
|
339
414
|
<p align="center">
|
|
340
|
-
<
|
|
415
|
+
<a href="https://cdn.burtson.ai/images/mgmt-preferences.jpg" target="_blank" rel="noopener">
|
|
416
|
+
<img src="https://cdn.burtson.ai/images/mgmt-preferences.jpg" alt="Management interface preferences tab with feature toggles" width="600" style="width: 100%; max-width: 600px; height: auto;" />
|
|
417
|
+
</a>
|
|
341
418
|
</p>
|
|
342
419
|
<ol start="4">
|
|
343
420
|
<li><strong>🌐 CDN-Based Config (Optional)</strong></li>
|
|
@@ -358,12 +435,24 @@ When using Bandit components as custom elements (e.g., in Angular, Vue, or stati
|
|
|
358
435
|
<li><code>gatewayApiUrl</code>: Gateway API base URL for AI, TTS, STT, and MCP</li>
|
|
359
436
|
<li><code>aiProvider</code>: Provider configuration object (recommended for new installs)</li>
|
|
360
437
|
<li><code>ollamaUrl</code>: Legacy Ollama base URL (deprecated, prefer <code>aiProvider</code>)</li>
|
|
361
|
-
<li><code>
|
|
438
|
+
<li><code>fileStorageApiUrl</code>: Optional file storage API base URL (defaults to <code>gatewayApiUrl</code>)</li>
|
|
362
439
|
<li><code>brandingConfigUrl</code>: Hosted branding JSON used to hydrate UI theming</li>
|
|
363
440
|
<li><code>homeUrl</code>: Optional URL for the home button in management UI</li>
|
|
364
441
|
<li><code>feedbackEmail</code>: Optional email address for feedback submissions</li>
|
|
365
442
|
<li><code>featureFlags</code>: Optional feature flag configuration (see examples below)</li>
|
|
443
|
+
<li><code>types</code>: Official TypeScript entry point is available at <code>@burtson-labs/bandit-engine/types</code>. Importing from that path gives you rich IntelliSense for <code>ChatProviderProps</code>, <code>PackageSettings</code>, <code>ChatModalProps</code>, gateway contracts, and more.</li>
|
|
366
444
|
</ul>
|
|
445
|
+
<a id="md:file-storage-api-contract" class="tsd-anchor"></a><h3 class="tsd-anchor-link">File Storage API Contract<a href="#md:file-storage-api-contract" 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>Enabling <code>fileStorageApiUrl</code> activates document uploads for vector memories, but the CLI quickstart intentionally leaves the backend stubbed. When you point the frontend at a file storage service, Bandit expects these authenticated endpoints:</p>
|
|
446
|
+
<ul>
|
|
447
|
+
<li><code>POST /file/upload</code> — <code>multipart/form-data</code> body with <code>file</code> and optional <code>shareWithTeam</code>; returns <code>{ fileId, message? }</code></li>
|
|
448
|
+
<li><code>GET /file/files?skip=0&limit=50</code> — lists previously uploaded files and metadata (<code>id</code>, <code>filename</code>, <code>size</code>, <code>contentType</code>, <code>updatedAt</code>)</li>
|
|
449
|
+
<li><code>GET /file/download/{fileId}</code> — streams the file associated with the supplied identifier</li>
|
|
450
|
+
</ul>
|
|
451
|
+
<p>All requests include a Bearer token issued by your gateway. Implementers can back these routes with S3, MinIO, or any storage provider — the frontend only requires the contract above.</p>
|
|
452
|
+
<p>These file operations are invoked in tandem with the <code>/api/embedding/*</code> endpoints described earlier to keep the vector index in sync.</p>
|
|
453
|
+
<blockquote>
|
|
454
|
+
<p>Quickstart note: the bundled Express gateway does not implement these upload/download routes; they currently return <code>501</code> until you connect real storage.</p>
|
|
455
|
+
</blockquote>
|
|
367
456
|
<a id="md:🤖-ai-provider-system" class="tsd-anchor"></a><h2 class="tsd-anchor-link">🤖 AI Provider System<a href="#md:🤖-ai-provider-system" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><p>Bandit Engine features a unified, gateway-based AI provider architecture that supports multiple AI services through a secure backend:</p>
|
|
368
457
|
<a id="md:supported-providers" class="tsd-anchor"></a><h3 class="tsd-anchor-link">Supported Providers<a href="#md:supported-providers" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><ul>
|
|
369
458
|
<li><strong>🌟 Gateway Provider</strong> (Recommended): Routes all requests through your secure .NET 9 backend</li>
|
|
@@ -384,12 +473,14 @@ When using Bandit components as custom elements (e.g., in Angular, Vue, or stati
|
|
|
384
473
|
<li>🔄 <strong>Provider Switching</strong>: Change backends without frontend updates</li>
|
|
385
474
|
<li>🛡️ <strong>Authentication</strong>: Unified auth across all AI services</li>
|
|
386
475
|
</ul>
|
|
387
|
-
<p><strong>Gateway Requirements:</strong>
|
|
476
|
+
<p><strong>Gateway Requirements:</strong><br>
|
|
388
477
|
Your gateway API can be built with any technology (Node.js, Python, .NET, Java, etc.) as long as it implements:</p>
|
|
389
478
|
<ul>
|
|
390
|
-
<li><code>GET /api/health</code>
|
|
391
|
-
<li><code>
|
|
392
|
-
<li><code>POST /api/generate</code> -
|
|
479
|
+
<li><code>GET /api/health</code> — Health check endpoint that lists available providers.</li>
|
|
480
|
+
<li><code>GET /api/models</code> and <code>GET /api/models/{provider}</code> — Model discovery for the management UI.</li>
|
|
481
|
+
<li><code>POST /api/chat/completions</code> and <code>POST /api/generate</code> — Default OpenAI-style routes when no provider override is present.</li>
|
|
482
|
+
<li><code>POST /api/{provider}/chat/completions</code> and <code>POST /api/{provider}/generate</code> — Provider-specific routing for <code>openai</code>, <code>azure-openai</code>, and <code>anthropic</code>.</li>
|
|
483
|
+
<li><code>POST /api/ollama/chat</code> and <code>POST /api/ollama/generate</code> — Native Ollama routes (no <code>/chat/completions</code> suffix).</li>
|
|
393
484
|
</ul>
|
|
394
485
|
<a id="md:legacy-direct-providers" class="tsd-anchor"></a><h3 class="tsd-anchor-link">Legacy Direct Providers<a href="#md:legacy-direct-providers" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><p>Direct providers are still supported but marked as deprecated for production use:</p>
|
|
395
486
|
<pre><code class="tsx"><span class="hl-8">// ⚠️ Deprecated: Direct OpenAI (exposes API keys)</span><br/><span class="hl-12">aiProvider</span><span class="hl-1">: {</span><br/><span class="hl-1"> </span><span class="hl-12">type</span><span class="hl-1">: </span><span class="hl-2">"openai"</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-12">apiKey</span><span class="hl-1">: </span><span class="hl-2">"sk-..."</span><span class="hl-1">, </span><span class="hl-8">// Exposed in frontend</span><br/><span class="hl-1"> </span><span class="hl-12">baseUrl</span><span class="hl-1">: </span><span class="hl-2">"https://api.openai.com/v1"</span><br/><span class="hl-1">}</span><br/><br/><span class="hl-8">// ⚠️ Deprecated: Direct Ollama (no auth/monitoring) </span><br/><span class="hl-12">aiProvider</span><span class="hl-1">: {</span><br/><span class="hl-1"> </span><span class="hl-12">type</span><span class="hl-1">: </span><span class="hl-2">"ollama"</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-12">baseUrl</span><span class="hl-1">: </span><span class="hl-2">"http://localhost:11434"</span><br/><span class="hl-1">}</span>
|
|
@@ -401,7 +492,6 @@ Your gateway API can be built with any technology (Node.js, Python, .NET, Java,
|
|
|
401
492
|
<li><strong>Test Connection</strong>: Use the Management interface to validate</li>
|
|
402
493
|
<li><strong>Update API Keys</strong>: Move keys from frontend to backend config</li>
|
|
403
494
|
</ol>
|
|
404
|
-
<p>See <code>GATEWAY_MIGRATION_GUIDE.md</code> for detailed migration steps.</p>
|
|
405
495
|
<a id="md:imagemultimodal-support" class="tsd-anchor"></a><h3 class="tsd-anchor-link">Image/Multimodal Support<a href="#md:imagemultimodal-support" 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 provides comprehensive image support across all AI providers through the gateway architecture:</p>
|
|
406
496
|
<p><strong>Supported Providers & Models:</strong></p>
|
|
407
497
|
<ul>
|
|
@@ -423,7 +513,7 @@ Your gateway API can be built with any technology (Node.js, Python, .NET, Java,
|
|
|
423
513
|
|
|
424
514
|
<p><strong>Backend Requirements:</strong>
|
|
425
515
|
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>
|
|
426
|
-
<pre><code class="javascript"><span class="hl-8">// Example: Gateway forwards images as-is
|
|
516
|
+
<pre><code class="javascript"><span class="hl-8">// Example: Gateway forwards images as-is using provider-specific routes</span><br/><span class="hl-5">app</span><span class="hl-1">.</span><span class="hl-0">post</span><span class="hl-1">(</span><span class="hl-2">'/api/openai/chat/completions'</span><span class="hl-1">, </span><span class="hl-6">async</span><span class="hl-1"> (</span><span class="hl-5">req</span><span class="hl-1">, </span><span class="hl-5">res</span><span class="hl-1">) </span><span class="hl-6">=></span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-6">const</span><span class="hl-1"> { </span><span class="hl-7">messages</span><span class="hl-1">, ...</span><span class="hl-7">options</span><span class="hl-1"> } = </span><span class="hl-5">req</span><span class="hl-1">.</span><span class="hl-5">body</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">response</span><span class="hl-1"> = </span><span class="hl-4">await</span><span class="hl-1"> </span><span class="hl-0">fetch</span><span class="hl-1">(</span><span class="hl-2">'https://api.openai.com/v1/chat/completions'</span><span class="hl-1">, {</span><br/><span class="hl-1"> </span><span class="hl-5">method:</span><span class="hl-1"> </span><span class="hl-2">'POST'</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">headers:</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-2">'Content-Type'</span><span class="hl-5">:</span><span class="hl-1"> </span><span class="hl-2">'application/json'</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">Authorization:</span><span class="hl-1"> </span><span class="hl-2">`Bearer </span><span class="hl-6">${</span><span class="hl-5">process</span><span class="hl-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>
|
|
427
517
|
</code><button type="button">Copy</button></pre>
|
|
428
518
|
|
|
429
519
|
<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>
|
|
@@ -574,7 +664,7 @@ Your gateway API should accept images in the standardized format sent by the Ban
|
|
|
574
664
|
</code><button type="button">Copy</button></pre>
|
|
575
665
|
|
|
576
666
|
<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>
|
|
577
|
-
<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/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">
|
|
667
|
+
<pre><code class="javascript"><span class="hl-8">// Example: Gateway API subscription validation</span><br/><span class="hl-5">app</span><span class="hl-1">.</span><span class="hl-0">post</span><span class="hl-1">(</span><span class="hl-2">'/api/openai/chat/completions'</span><span class="hl-1">, </span><span class="hl-5">authenticateJWT</span><span class="hl-1">, </span><span class="hl-6">async</span><span class="hl-1"> (</span><span class="hl-5">req</span><span class="hl-1">, </span><span class="hl-5">res</span><span class="hl-1">) </span><span class="hl-6">=></span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-6">const</span><span class="hl-1"> { </span><span class="hl-7">subscriptionType</span><span class="hl-1">, </span><span class="hl-7">isSubscribed</span><span class="hl-1"> } = </span><span class="hl-5">req</span><span class="hl-1">.</span><span class="hl-5">user</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><br/><span class="hl-1"> </span><span class="hl-8">// Validate tier access for requested features</span><br/><span class="hl-1"> </span><span class="hl-4">if</span><span class="hl-1"> (</span><span class="hl-5">req</span><span class="hl-1">.</span><span class="hl-5">body</span><span class="hl-1">.</span><span class="hl-5">tts</span><span class="hl-1"> && !</span><span class="hl-0">hasFeature</span><span class="hl-1">(</span><span class="hl-5">subscriptionType</span><span class="hl-1">, </span><span class="hl-2">'tts'</span><span class="hl-1">)) {</span><br/><span class="hl-1"> </span><span class="hl-4">return</span><span class="hl-1"> </span><span class="hl-5">res</span><span class="hl-1">.</span><span class="hl-0">status</span><span class="hl-1">(</span><span class="hl-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>
|
|
578
668
|
</code><button type="button">Copy</button></pre>
|
|
579
669
|
|
|
580
670
|
<p>This feature flag system enables you to build sophisticated subscription-based AI products with fine-grained access control and seamless upgrade flows.</p>
|
|
@@ -603,7 +693,7 @@ Your gateway API should accept images in the standardized format sent by the Ban
|
|
|
603
693
|
</code><button type="button">Copy</button></pre>
|
|
604
694
|
|
|
605
695
|
<a id="md:legacy-configuration-deprecated" class="tsd-anchor"></a><h3 class="tsd-anchor-link">Legacy Configuration (Deprecated)<a href="#md:legacy-configuration-deprecated" 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>⚠️ <strong>Legacy TTS/STT URLs are deprecated.</strong> Use the unified <code>gatewayApiUrl</code> instead:</p>
|
|
606
|
-
<pre><code class="tsx"><span class="hl-8">// ❌ Deprecated (still works but not recommended)</span><br/><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">oldSettings</span><span class="hl-1"> = {</span><br/><span class="hl-1"> </span><span class="hl-5">ttsUrl:</span><span class="hl-1"> </span><span class="hl-2">"/api/tts"</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">sttUrl:</span><span class="hl-1"> </span><span class="hl-2">"/api/stt"</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">ollamaUrl:</span><span class="hl-1"> </span><span class="hl-2">"http://localhost:11434"</span><span class="hl-1">,</span><br/><span class="hl-1">};</span><br/><br/><span class="hl-8">// ✅ Recommended (unified gateway approach)</span><br/><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">newSettings</span><span class="hl-1"> = {</span><br/><span class="hl-1"> </span><span class="hl-5">aiProvider:</span><span class="hl-1"> { </span><span class="hl-5">type:</span><span class="hl-1"> </span><span class="hl-2">"gateway"</span><span class="hl-1">, </span><span class="hl-5">gatewayUrl:</span><span class="hl-1"> </span><span class="hl-2">"https://your-gateway.com"</span><span class="hl-1">, </span><span class="hl-5">provider:</span><span class="hl-1"> </span><span class="hl-2">"openai"</span><span class="hl-1"> },</span><br/><span class="hl-1"> </span><span class="hl-5">gatewayApiUrl:</span><span class="hl-1"> </span><span class="hl-2">"https://your-gateway.com"</span><span class="hl-1">, </span><span class="hl-8">// Handles TTS, STT, and MCP</span><br/><span class="hl-1">};</span>
|
|
696
|
+
<pre><code class="tsx"><span class="hl-8">// ❌ Deprecated (still works but not recommended)</span><br/><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">oldSettings</span><span class="hl-1"> = {</span><br/><span class="hl-1"> </span><span class="hl-5">ttsUrl:</span><span class="hl-1"> </span><span class="hl-2">"/api/tts"</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">sttUrl:</span><span class="hl-1"> </span><span class="hl-2">"/api/stt/transcribe"</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">ollamaUrl:</span><span class="hl-1"> </span><span class="hl-2">"http://localhost:11434"</span><span class="hl-1">,</span><br/><span class="hl-1">};</span><br/><br/><span class="hl-8">// ✅ Recommended (unified gateway approach)</span><br/><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">newSettings</span><span class="hl-1"> = {</span><br/><span class="hl-1"> </span><span class="hl-5">aiProvider:</span><span class="hl-1"> { </span><span class="hl-5">type:</span><span class="hl-1"> </span><span class="hl-2">"gateway"</span><span class="hl-1">, </span><span class="hl-5">gatewayUrl:</span><span class="hl-1"> </span><span class="hl-2">"https://your-gateway.com"</span><span class="hl-1">, </span><span class="hl-5">provider:</span><span class="hl-1"> </span><span class="hl-2">"openai"</span><span class="hl-1"> },</span><br/><span class="hl-1"> </span><span class="hl-5">gatewayApiUrl:</span><span class="hl-1"> </span><span class="hl-2">"https://your-gateway.com"</span><span class="hl-1">, </span><span class="hl-8">// Handles TTS, STT, and MCP</span><br/><span class="hl-1">};</span>
|
|
607
697
|
</code><button type="button">Copy</button></pre>
|
|
608
698
|
|
|
609
699
|
<a id="md:development-vs-production" class="tsd-anchor"></a><h3 class="tsd-anchor-link">Development vs Production<a href="#md:development-vs-production" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><ul>
|
|
@@ -629,7 +719,7 @@ Your gateway API should accept images in the standardized format sent by the Ban
|
|
|
629
719
|
</ul>
|
|
630
720
|
</li>
|
|
631
721
|
<li>
|
|
632
|
-
<p><code>POST /api/stt</code> - Speech-to-Text transcription</p>
|
|
722
|
+
<p><code>POST /api/stt/transcribe</code> - Speech-to-Text transcription</p>
|
|
633
723
|
<ul>
|
|
634
724
|
<li>Input: Audio file upload (multipart/form-data)</li>
|
|
635
725
|
<li>Output: <code>{ text: string }</code> or <code>{ transcription: string }</code></li>
|
|
@@ -671,7 +761,7 @@ Your gateway API should accept images in the standardized format sent by the Ban
|
|
|
671
761
|
<hr>
|
|
672
762
|
<a id="md:📌-migration-guide" class="tsd-anchor"></a><h2 class="tsd-anchor-link">📌 Migration Guide<a href="#md:📌-migration-guide" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><a id="md:from-legacy-ttsstt-urls-to-gateway-api" class="tsd-anchor"></a><h3 class="tsd-anchor-link">From Legacy TTS/STT URLs to Gateway API<a href="#md:from-legacy-ttsstt-urls-to-gateway-api" 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>If you're currently using separate <code>ttsUrl</code> and <code>sttUrl</code> settings, migrate to the unified gateway approach:</p>
|
|
673
763
|
<p><strong>Before (Deprecated):</strong></p>
|
|
674
|
-
<pre><code class="tsx"><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">settings</span><span class="hl-1"> = {</span><br/><span class="hl-1"> </span><span class="hl-5">ttsUrl:</span><span class="hl-1"> </span><span class="hl-2">"https://your-tts-service.com/api/tts"</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">sttUrl:</span><span class="hl-1"> </span><span class="hl-2">"https://your-stt-service.com/api/stt"</span><span class="hl-1">, </span><br/><span class="hl-1"> </span><span class="hl-5">ollamaUrl:</span><span class="hl-1"> </span><span class="hl-2">"https://your-ollama.com"</span><span class="hl-1">,</span><br/><span class="hl-1">};</span>
|
|
764
|
+
<pre><code class="tsx"><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">settings</span><span class="hl-1"> = {</span><br/><span class="hl-1"> </span><span class="hl-5">ttsUrl:</span><span class="hl-1"> </span><span class="hl-2">"https://your-tts-service.com/api/tts"</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">sttUrl:</span><span class="hl-1"> </span><span class="hl-2">"https://your-stt-service.com/api/stt/transcribe"</span><span class="hl-1">, </span><br/><span class="hl-1"> </span><span class="hl-5">ollamaUrl:</span><span class="hl-1"> </span><span class="hl-2">"https://your-ollama.com"</span><span class="hl-1">,</span><br/><span class="hl-1">};</span>
|
|
675
765
|
</code><button type="button">Copy</button></pre>
|
|
676
766
|
|
|
677
767
|
<p><strong>After (Recommended):</strong></p>
|
|
@@ -729,8 +819,8 @@ Your gateway API should accept images in the standardized format sent by the Ban
|
|
|
729
819
|
<li><strong>Website</strong>: <a href="https://burtson.ai/license" target="_blank" class="external">https://burtson.ai/license</a></li>
|
|
730
820
|
<li><strong>Sales</strong>: <a href="mailto:sales@burtson.ai">sales@burtson.ai</a></li>
|
|
731
821
|
</ul>
|
|
732
|
-
<a id="md:👨💻-for-contributors--developers" class="tsd-anchor"></a><h3 class="tsd-anchor-link">👨💻 For Contributors & Developers<a href="#md:👨💻-for-contributors--developers" 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>Before contributing or
|
|
733
|
-
<pre><code class="bash"><span class="hl-8">#
|
|
822
|
+
<a id="md:👨💻-for-contributors--developers" class="tsd-anchor"></a><h3 class="tsd-anchor-link">👨💻 For Contributors & Developers<a href="#md:👨💻-for-contributors--developers" 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>Before contributing or publishing a new Pull Request, run the available validation scripts:</p>
|
|
823
|
+
<pre><code class="bash"><span class="hl-0">npm</span><span class="hl-1"> </span><span class="hl-2">run</span><span class="hl-1"> </span><span class="hl-2">lint</span><span class="hl-1"> </span><span class="hl-8"># Static analysis for the src tree</span><br/><span class="hl-0">npm</span><span class="hl-1"> </span><span class="hl-2">run</span><span class="hl-1"> </span><span class="hl-2">test</span><span class="hl-1"> </span><span class="hl-8"># Vitest suite</span><br/><span class="hl-0">npm</span><span class="hl-1"> </span><span class="hl-2">run</span><span class="hl-1"> </span><span class="hl-2">build</span><span class="hl-1"> </span><span class="hl-8"># Generate the dist bundle with tsup</span><br/><span class="hl-0">npm</span><span class="hl-1"> </span><span class="hl-2">run</span><span class="hl-1"> </span><span class="hl-2">validate-protection</span><span class="hl-1"> </span><span class="hl-8"># Ensure license headers and fingerprints are intact</span>
|
|
734
824
|
</code><button type="button">Copy</button></pre>
|
|
735
825
|
|
|
736
826
|
<p><strong>Developer Resources:</strong></p>
|
|
@@ -748,9 +838,9 @@ Your gateway API should accept images in the standardized format sent by the Ban
|
|
|
748
838
|
<li>Prevents unauthorized distribution</li>
|
|
749
839
|
</ul>
|
|
750
840
|
<p><strong>Quick Commands:</strong></p>
|
|
751
|
-
<pre><code class="bash"><span class="hl-0">npm</span><span class="hl-1"> </span><span class="hl-2">run</span><span class="hl-1"> </span><span class="hl-2">protect</span><span class="hl-1"> </span><span class="hl-8"># Apply protection to new files</span><br/><span class="hl-0">npm</span><span class="hl-1"> </span><span class="hl-2">run</span><span class="hl-1"> </span><span class="hl-2">validate-protection</span><span class="hl-1"> </span><span class="hl-8"># Check for license violations </span
|
|
841
|
+
<pre><code class="bash"><span class="hl-0">npm</span><span class="hl-1"> </span><span class="hl-2">run</span><span class="hl-1"> </span><span class="hl-2">protect</span><span class="hl-1"> </span><span class="hl-8"># Apply protection to new files</span><br/><span class="hl-0">npm</span><span class="hl-1"> </span><span class="hl-2">run</span><span class="hl-1"> </span><span class="hl-2">validate-protection</span><span class="hl-1"> </span><span class="hl-8"># Check for license violations </span>
|
|
752
842
|
</code><button type="button">Copy</button></pre>
|
|
753
843
|
|
|
754
844
|
<hr>
|
|
755
845
|
<p><strong>© 2025 Burtson Labs LLC. All rights reserved.</strong></p>
|
|
756
|
-
</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:⚡-cli-quick-start"><span>⚡ CLI <wbr/>Quick <wbr/>Start</span></a><ul><li><a href="#md:cli-options"><span>CLI <wbr/>Options</span></a></li></ul><a href="#md:🛠️-getting-started--plug--play-ai"><span>🛠️ <wbr/>Getting <wbr/>Started – <wbr/>Plug & <wbr/>Play AI</span></a><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><a href="#md:🧩-consuming-the-components"><span>🧩 <wbr/>Consuming the <wbr/>Components</span></a><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><a href="#md:🎛️-chat-control-center-chatmodal-feature"><span>🎛️ <wbr/>Chat <wbr/>Control <wbr/>Center (<wbr/>Chat<wbr/>Modal <wbr/>Feature)</span></a><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><a href="#md:⚙️-angular-integration-experimental"><span>⚙️ <wbr/>Angular <wbr/>Integration (<wbr/>Experimental)</span></a><a href="#md:⚙️-vuejs-integration-experimental"><span>⚙️ <wbr/>Vue.js <wbr/>Integration (<wbr/>Experimental)</span></a><a href="#md:📦-custom-element-support"><span>📦 <wbr/>Custom <wbr/>Element <wbr/>Support</span></a><a href="#md:📸-live-preview"><span>📸 <wbr/>Live <wbr/>Preview</span></a><a href="#md:⚙️-configuration-options"><span>⚙️ <wbr/>Configuration <wbr/>Options</span></a><a href="#md:🤖-ai-provider-system"><span>🤖 AI <wbr/>Provider <wbr/>System</span></a><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><a href="#md:🔧-model-context-protocol-mcp-integration"><span>🔧 <wbr/>Model <wbr/>Context <wbr/>Protocol (MCP) <wbr/>Integration</span></a><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><a href="#md:🎛️-feature-flags--subscription-tiers"><span>🎛️ <wbr/>Feature <wbr/>Flags & <wbr/>Subscription <wbr/>Tiers</span></a><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><a href="#md:🐛-debug-logger"><span>🐛 <wbr/>Debug <wbr/>Logger</span></a><a href="#md:🔒-security-best-practices"><span>🔒 <wbr/>Security <wbr/>Best <wbr/>Practices</span></a><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><a href="#md:requirements"><span>Requirements</span></a><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><a href="#md:💡-vision--roadmap"><span>💡 <wbr/>Vision & <wbr/>Roadmap</span></a><a href="#md:📌-migration-guide"><span>📌 <wbr/>Migration <wbr/>Guide</span></a><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><a href="#md:🛡️-license--protection"><span>🛡️ <wbr/>License & <wbr/>Protection</span></a><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></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>
|
|
846
|
+
</div></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="assets/icons.svg#icon-chevronDown"></use></svg>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-external" name="external"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>External</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div><details open class="tsd-accordion tsd-page-navigation"><summary class="tsd-accordion-summary"><h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="assets/icons.svg#icon-chevronDown"></use></svg>On This Page</h3></summary><div class="tsd-accordion-details"><a href="#md:bandit-engine-⚡"><span>Bandit <wbr/>Engine ⚡</span></a><ul><li><a href="#md:features"><span>Features</span></a></li><li><a href="#md:quick-links"><span>Quick <wbr/>Links</span></a></li><li><a href="#md:quick-start"><span>Quick <wbr/>Start</span></a></li><li><ul><li><a href="#md:cli-scaffold"><span>CLI <wbr/>Scaffold</span></a></li><li><a href="#md:cli-options"><span>CLI <wbr/>Options</span></a></li><li><a href="#md:playground-password-free-preview"><span>Playground (<wbr/>Password-<wbr/>Free <wbr/>Preview)</span></a></li></ul></li><li><a href="#md:🛠️-getting-started--plug--play-ai"><span>🛠️ <wbr/>Getting <wbr/>Started – <wbr/>Plug & <wbr/>Play AI</span></a></li><li><ul><li><a href="#md:🔄-quick-provider-setup"><span>🔄 <wbr/>Quick <wbr/>Provider <wbr/>Setup</span></a></li><li><a href="#md:ollama-env-setup"><span>Ollama .env <wbr/>Setup</span></a></li><li><a href="#md:🎤-voice-services-ttsstt"><span>🎤 <wbr/>Voice <wbr/>Services (TTS/STT)</span></a></li></ul></li><li><a href="#md:🧩-consuming-the-components"><span>🧩 <wbr/>Consuming the <wbr/>Components</span></a></li><li><ul><li><a href="#md:🛠️-utility-functions--hooks"><span>🛠️ <wbr/>Utility <wbr/>Functions & <wbr/>Hooks</span></a></li><li><ul><li><a href="#md:debug-logger"><span>Debug <wbr/>Logger</span></a></li><li><a href="#md:ai-prompt-utilities"><span>AI <wbr/>Prompt <wbr/>Utilities</span></a></li><li><a href="#md:datetime-context"><span>Date/<wbr/>Time <wbr/>Context</span></a></li></ul></li></ul></li><li><a href="#md:🎛️-chat-control-center-chatmodal-feature"><span>🎛️ <wbr/>Chat <wbr/>Control <wbr/>Center (<wbr/>Chat<wbr/>Modal <wbr/>Feature)</span></a></li><li><ul><li><a href="#md:🔧-core-features"><span>🔧 <wbr/>Core <wbr/>Features</span></a></li><li><a href="#md:🎤-voice-integration"><span>🎤 <wbr/>Voice <wbr/>Integration</span></a></li><li><a href="#md:🔄-context-switching"><span>🔄 <wbr/>Context <wbr/>Switching</span></a></li><li><a href="#md:💾-memory-features"><span>💾 <wbr/>Memory <wbr/>Features</span></a></li><li><a href="#md:📧-feedback-system"><span>📧 <wbr/>Feedback <wbr/>System</span></a></li></ul></li><li><a href="#md:⚙️-angular-integration-experimental"><span>⚙️ <wbr/>Angular <wbr/>Integration (<wbr/>Experimental)</span></a></li><li><a href="#md:⚙️-vuejs-integration-experimental"><span>⚙️ <wbr/>Vue.js <wbr/>Integration (<wbr/>Experimental)</span></a></li><li><a href="#md:📦-custom-element-support"><span>📦 <wbr/>Custom <wbr/>Element <wbr/>Support</span></a></li><li><a href="#md:📸-live-preview"><span>📸 <wbr/>Live <wbr/>Preview</span></a></li><li><a href="#md:⚙️-configuration-options"><span>⚙️ <wbr/>Configuration <wbr/>Options</span></a></li><li><ul><li><a href="#md:file-storage-api-contract"><span>File <wbr/>Storage API <wbr/>Contract</span></a></li></ul></li><li><a href="#md:🤖-ai-provider-system"><span>🤖 AI <wbr/>Provider <wbr/>System</span></a></li><li><ul><li><a href="#md:supported-providers"><span>Supported <wbr/>Providers</span></a></li><li><a href="#md:gateway-provider-recommended"><span>Gateway <wbr/>Provider (<wbr/>Recommended)</span></a></li><li><a href="#md:legacy-direct-providers"><span>Legacy <wbr/>Direct <wbr/>Providers</span></a></li><li><a href="#md:migration-to-gateway"><span>Migration to <wbr/>Gateway</span></a></li><li><a href="#md:imagemultimodal-support"><span>Image/<wbr/>Multimodal <wbr/>Support</span></a></li><li><a href="#md:using-the-ai-provider"><span>Using the AI <wbr/>Provider</span></a></li></ul></li><li><a href="#md:🔧-model-context-protocol-mcp-integration"><span>🔧 <wbr/>Model <wbr/>Context <wbr/>Protocol (MCP) <wbr/>Integration</span></a></li><li><ul><li><a href="#md:mcp-features"><span>MCP <wbr/>Features</span></a></li><li><a href="#md:using-mcp-tools"><span>Using MCP <wbr/>Tools</span></a></li><li><a href="#md:mcp-tool-configuration"><span>MCP <wbr/>Tool <wbr/>Configuration</span></a></li><li><a href="#md:mcp-service-api"><span>MCP <wbr/>Service API</span></a></li></ul></li><li><a href="#md:🎛️-feature-flags--subscription-tiers"><span>🎛️ <wbr/>Feature <wbr/>Flags & <wbr/>Subscription <wbr/>Tiers</span></a></li><li><ul><li><a href="#md:subscription-tiers"><span>Subscription <wbr/>Tiers</span></a></li><li><a href="#md:feature-flag-configuration"><span>Feature <wbr/>Flag <wbr/>Configuration</span></a></li><li><a href="#md:tier-based-feature-matrix"><span>Tier-<wbr/>Based <wbr/>Feature <wbr/>Matrix</span></a></li><li><a href="#md:jwt-based-authentication"><span>JWT-<wbr/>Based <wbr/>Authentication</span></a></li><li><a href="#md:using-feature-flags-in-components"><span>Using <wbr/>Feature <wbr/>Flags in <wbr/>Components</span></a></li><li><a href="#md:subscription-state-management"><span>Subscription <wbr/>State <wbr/>Management</span></a></li><li><a href="#md:feature-restrictions--upgrade-prompts"><span>Feature <wbr/>Restrictions & <wbr/>Upgrade <wbr/>Prompts</span></a></li><li><a href="#md:development--testing"><span>Development & <wbr/>Testing</span></a></li><li><a href="#md:backend-integration"><span>Backend <wbr/>Integration</span></a></li></ul></li><li><a href="#md:🐛-debug-logger"><span>🐛 <wbr/>Debug <wbr/>Logger</span></a></li><li><a href="#md:🔒-security-best-practices"><span>🔒 <wbr/>Security <wbr/>Best <wbr/>Practices</span></a></li><li><ul><li><a href="#md:recommended-architecture"><span>Recommended <wbr/>Architecture</span></a></li><li><a href="#md:gateway-setup"><span>Gateway <wbr/>Setup</span></a></li><li><a href="#md:legacy-configuration-deprecated"><span>Legacy <wbr/>Configuration (<wbr/>Deprecated)</span></a></li><li><a href="#md:development-vs-production"><span>Development vs <wbr/>Production</span></a></li></ul></li><li><a href="#md:requirements"><span>Requirements</span></a></li><li><ul><li><a href="#md:gateway-api-services"><span>Gateway API <wbr/>Services</span></a></li><li><a href="#md:technology-agnostic-implementation"><span>Technology-<wbr/>Agnostic <wbr/>Implementation</span></a></li><li><a href="#md:additional-resources"><span>Additional <wbr/>Resources</span></a></li></ul></li><li><a href="#md:💡-vision--roadmap"><span>💡 <wbr/>Vision & <wbr/>Roadmap</span></a></li><li><a href="#md:📌-migration-guide"><span>📌 <wbr/>Migration <wbr/>Guide</span></a></li><li><ul><li><a href="#md:from-legacy-ttsstt-urls-to-gateway-api"><span>From <wbr/>Legacy TTS/STT URLs to <wbr/>Gateway API</span></a></li></ul></li><li><a href="#md:🛡️-license--protection"><span>🛡️ <wbr/>License & <wbr/>Protection</span></a></li><li><ul><li><a href="#md:⚖️-license-summary"><span>⚖️ <wbr/>License <wbr/>Summary</span></a></li><li><a href="#md:📋-usage-rights"><span>📋 <wbr/>Usage <wbr/>Rights</span></a></li><li><a href="#md:🔒-protection-features"><span>🔒 <wbr/>Protection <wbr/>Features</span></a></li><li><a href="#md:💼-commercial-licensing"><span>💼 <wbr/>Commercial <wbr/>Licensing</span></a></li><li><a href="#md:👨💻-for-contributors--developers"><span>👨💻 <wbr/>For <wbr/>Contributors & <wbr/>Developers</span></a></li><li><a href="#md:📝-license-compliance"><span>📝 <wbr/>License <wbr/>Compliance</span></a></li></ul></li></ul></div></details></div><div class="site-menu"><nav class="tsd-navigation"><a href="modules.html" class="current"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="assets/icons.svg#icon-1"></use></svg><span>@burtson-labs/bandit-engine</span></a><ul class="tsd-small-nested-navigation" id="tsd-nav-container" data-base="."><li>Loading...</li></ul></nav></div></div></div><footer><p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer><div class="overlay"></div></body></html>
|