Add hourly rate limits (tokens/hour, requests/hour) and missing providers (chutes, cerebras, ollama)

This commit is contained in:
OpenCode Dev
2026-02-10 09:04:44 +00:00
parent 58bab1c5d8
commit 960ccb5742
3 changed files with 44 additions and 6 deletions

View File

@@ -187,6 +187,9 @@
<option value="google">Google</option>
<option value="groq">Groq</option>
<option value="nvidia">NVIDIA</option>
<option value="chutes">Chutes</option>
<option value="cerebras">Cerebras</option>
<option value="ollama">Ollama</option>
<option value="opencode">OpenCode</option>
</select>
</label>
@@ -207,6 +210,10 @@
Tokens per minute
<input id="limit-tpm" type="number" min="0" step="1" placeholder="0 = unlimited" />
</label>
<label>
Tokens per hour
<input id="limit-tph" type="number" min="0" step="1" placeholder="0 = unlimited" />
</label>
<label>
Tokens per day
<input id="limit-tpd" type="number" min="0" step="1" placeholder="0 = unlimited" />
@@ -215,6 +222,10 @@
Requests per minute
<input id="limit-rpm" type="number" min="0" step="1" placeholder="0 = unlimited" />
</label>
<label>
Requests per hour
<input id="limit-rph" type="number" min="0" step="1" placeholder="0 = unlimited" />
</label>
<label>
Requests per day
<input id="limit-rpd" type="number" min="0" step="1" placeholder="0 = unlimited" />

View File

@@ -1,6 +1,6 @@
(() => {
const DEFAULT_PROVIDERS = ['openrouter', 'mistral', 'google', 'groq', 'nvidia', 'chutes', 'opencode'];
const PLANNING_PROVIDERS = ['openrouter', 'mistral', 'google', 'groq', 'nvidia', 'chutes', 'ollama'];
const DEFAULT_PROVIDERS = ['openrouter', 'mistral', 'google', 'groq', 'nvidia', 'chutes', 'cerebras', 'ollama', 'opencode'];
const PLANNING_PROVIDERS = ['openrouter', 'mistral', 'google', 'groq', 'nvidia', 'chutes', 'cerebras', 'ollama'];
const pageType = document?.body?.dataset?.page || 'build';
console.log('Admin JS loaded, pageType:', pageType);
const state = {
@@ -68,8 +68,10 @@
limitModel: document.getElementById('limit-model'),
limitModelInput: document.getElementById('limit-model-input'),
limitTpm: document.getElementById('limit-tpm'),
limitTph: document.getElementById('limit-tph'),
limitTpd: document.getElementById('limit-tpd'),
limitRpm: document.getElementById('limit-rpm'),
limitRph: document.getElementById('limit-rph'),
limitRpd: document.getElementById('limit-rpd'),
limitBackup: document.getElementById('limit-backup'),
providerLimitStatus: document.getElementById('provider-limit-status'),
@@ -1354,8 +1356,10 @@
el.limitModel.value = selectedScope === 'model' ? (modelKey || '') : '';
}
if (el.limitTpm) el.limitTpm.value = target.tokensPerMinute ?? '';
if (el.limitTph) el.limitTph.value = target.tokensPerHour ?? '';
if (el.limitTpd) el.limitTpd.value = target.tokensPerDay ?? '';
if (el.limitRpm) el.limitRpm.value = target.requestsPerMinute ?? '';
if (el.limitRph) el.limitRph.value = target.requestsPerHour ?? '';
if (el.limitRpd) el.limitRpd.value = target.requestsPerDay ?? '';
if (el.limitBackup && state.opencodeBackupModel !== undefined) el.limitBackup.value = state.opencodeBackupModel || '';
}
@@ -2304,8 +2308,10 @@
scope,
model: (pageType === 'plan' && el.limitModelInput) ? el.limitModelInput.value.trim() : el.limitModel.value.trim(),
tokensPerMinute: Number(el.limitTpm.value || 0),
tokensPerHour: Number(el.limitTph.value || 0),
tokensPerDay: Number(el.limitTpd.value || 0),
requestsPerMinute: Number(el.limitRpm.value || 0),
requestsPerHour: Number(el.limitRph.value || 0),
requestsPerDay: Number(el.limitRpd.value || 0),
opencodeBackupModel: el.limitBackup.value.trim(),
};