A modular proxy server for managing multiple AI provider integrations with unified API interface. AISBF provides intelligent routing, load balancing, and AI-assisted model selection to optimize AI service usage across multiple providers.
## 🚀 Support AISBF - Your Donations Matter!
---
The project includes multiple donation options to support its development:
## 🌐 Try AISBF Now — No Installation Required!
### Ethereum Donation
ETH to `0xdA6dAb526515b5cb556d20269207D43fcc760E51`
> **[➡️ Launch AISBF at https://aisbf.cloud](https://aisbf.cloud)**
>
> The fully hosted service is free to use. Just open your browser and start routing AI requests across all supported providers — no setup, no configuration, no API keys needed to get started.
Try AISBF live at [https://aisbf.cloud](https://aisbf.cloud) or via TOR at [http://aisbfity4ud6nsht53tsh2iauaur2e4dah2gplcprnikyjpkg72vfjad.onion](http://aisbfity4ud6nsht53tsh2iauaur2e4dah2gplcprnikyjpkg72vfjad.onion) - no installation required!
@@ -638,9 +681,8 @@ async function saveEncryptionKey() {
return;
}
if(!confirm('WARNING: Setting or changing the encryption key will affect all encrypted data. Are you sure?')){
return;
}
constok=awaitshowDangerConfirm('WARNING: Setting or changing the encryption key will affect all encrypted data. Are you sure?','Change Encryption Key');
if(confirm('Are you sure you want to upgrade to this tier?')){
asyncfunctionsubscribeToTier(tierId){
constok=awaitshowConfirm('Are you sure you want to upgrade to this tier?','Upgrade Plan');
if(ok){
fetch(url_for(`/api/subscribe/${tierId}`),{
method:'POST',
headers:{
...
...
@@ -241,8 +242,9 @@ function subscribeToTier(tierId) {
}
}
functiondowngradeToFree(){
if(confirm('Are you sure you want to downgrade to the free tier? Your current subscription will remain active until the end of the billing period.')){
asyncfunctiondowngradeToFree(){
constok=awaitshowConfirm('Are you sure you want to downgrade to the free tier? Your current subscription will remain active until the end of the billing period.','Downgrade Plan');
<divclass="section-title"><iclass="fas fa-server"></i> Server Configuration</div>
<divclass="form-group">
<labelfor="host">Host</label>
...
...
@@ -69,8 +99,10 @@ along with this program. If not, see <https://www.gnu.org/licenses/>.
<smallstyle="color: #666; display: block; margin-top: 5px;">Path to SSL private key file. Leave empty to use default (~/.aisbf/key.pem). Auto-generated with certificate.</small>
@@ -105,8 +137,10 @@ along with this program. If not, see <https://www.gnu.org/licenses/>.
<textareaid="fullconfig_tokens"name="fullconfig_tokens"style="min-height: 80px;"placeholder="Tokens for full configuration access">{{ '\n'.join(config.mcp.fullconfig_tokens) if config.mcp.fullconfig_tokens else '' }}</textarea>
<smallstyle="color: #666; display: block; margin-top: 5px;">Tokens that give access to full system configuration + standard APIs</small>
<labelfor="condensation_model_id">Condensation Model ID</label>
...
...
@@ -149,8 +185,10 @@ along with this program. If not, see <https://www.gnu.org/licenses/>.
<inputtype="text"id="semantic_vectorization"name="semantic_vectorization"value="{{ config.internal_model.semantic_vectorization or 'sentence-transformers/all-MiniLM-L6-v2' }}"required>
<smallstyle="color: #666; display: block; margin-top: 5px;">Model used for semantic embedding and vectorization</small>
<h4style="margin: 25px 0 15px;">Google OAuth2</h4>
<divclass="section-title"style="font-size:.95em; margin-top:0;"><iclass="fab fa-google"></i> Google OAuth2</div>
<divclass="form-group">
<label>
...
...
@@ -610,7 +659,7 @@ brew services restart tor # macOS</code></pre>
<inputtype="password"id="oauth2_google_client_secret"name="oauth2_google_client_secret"value="{{ config.oauth2.google.client_secret if config.oauth2 and config.oauth2.google else '' }}"placeholder="Client Secret from Google Cloud Console">
</div>
<h4style="margin: 25px 0 15px;">GitHub OAuth2</h4>
<h4style="margin: 25px 0 15px; color:#a0a0a0;">GitHub OAuth2</h4>
<divclass="form-group">
<label>
...
...
@@ -628,8 +677,10 @@ brew services restart tor # macOS</code></pre>
<inputtype="password"id="oauth2_github_client_secret"name="oauth2_github_client_secret"value="{{ config.oauth2.github.client_secret if config.oauth2 and config.oauth2.github else '' }}"placeholder="Client Secret from GitHub Developer Settings">
@@ -748,8 +801,10 @@ brew services restart tor # macOS</code></pre>
<labelfor="batching_anthropic_max_batch_size">Anthropic Max Batch Size</label>
<inputtype="number"id="batching_anthropic_max_batch_size"name="batching_anthropic_max_batch_size"value="{{ config.batching.provider_settings.anthropic.max_batch_size if config.batching and config.batching.provider_settings and config.batching.provider_settings.anthropic else 5 }}"min="1">
<p>Call MCP tools to manage your configurations</p>
<!-- Hero -->
<divclass="hero">
<divclass="hero-avatar">
<imgsrc="https://www.gravatar.com/avatar/{{ session.email|md5 if session.email else '' }}?s=128&d=identicon"alt="avatar">
</div>
<divclass="hero-text">
<h2>Welcome back, {{ display_name }}!</h2>
<p>Manage your AI configurations, track usage, and access your personal API endpoints.</p>
</div>
{% if session.role == 'admin' %}
<divclass="admin-notice">
<h4>⚡ Admin Access</h4>
<p>As an admin user, you also have access to global configurations (providers, rotations, autoselects configured by the admin) in addition to your own user configurations.</p>
<pclass="example">Admin model formats:</p>
<ul>
<li><code>provider/model</code> - global provider</li>
<li><code>rotation/myrotation</code> - global rotation</li>
<li><code>autoselect/myautoselect</code> - global autoselect</li>
</ul>
</div>
<divclass="hero-badge">Admin</div>
{% endif %}
</div>
<pclass="note">⚠️ Note: Your API token is required for all these endpoints. Manage your tokens in the <ahref="{{ url_for(request, '/dashboard/user/tokens') }}">API Tokens</a> section.</p>
<pstyle="color:#a0a0a0; font-size:.88rem; margin-bottom:.75rem;">Add the token to every request in the <codestyle="background:#0f3460; padding:.1rem .35rem; border-radius:3px;">Authorization</code> header:</p>
<tr><td><spanclass="method-badge method-GET">GET</span></td><td><code>/api/u/{{ session.username }}/models</code></td><td>List your models</td></tr>
<tr><td><spanclass="method-badge method-GET">GET</span></td><td><code>/api/u/{{ session.username }}/providers</code></td><td>List your providers</td></tr>
<tr><td><spanclass="method-badge method-GET">GET</span></td><td><code>/api/u/{{ session.username }}/rotations</code></td><td>List your rotations</td></tr>
<tr><td><spanclass="method-badge method-GET">GET</span></td><td><code>/api/u/{{ session.username }}/autoselects</code></td><td>List your autoselects</td></tr>
<tr><td><spanclass="method-badge method-POST">POST</span></td><td><code>/api/u/{{ session.username }}/chat/completions</code></td><td>Chat using your configs</td></tr>