feat(ai): add configurable max_tokens in shared model settings

This commit is contained in:
Jason
2026-04-16 23:04:09 +08:00
parent e049bfd606
commit 111a1961bf
4 changed files with 71 additions and 10 deletions

View File

@@ -267,6 +267,7 @@ function SettingsPage({ onClose }: SettingsPageProps = {}) {
const [aiModelApiBaseUrl, setAiModelApiBaseUrl] = useState('')
const [aiModelApiKey, setAiModelApiKey] = useState('')
const [aiModelApiModel, setAiModelApiModel] = useState('gpt-4o-mini')
const [aiModelApiMaxTokens, setAiModelApiMaxTokens] = useState(200)
const [aiInsightSilenceDays, setAiInsightSilenceDays] = useState(3)
const [aiInsightAllowContext, setAiInsightAllowContext] = useState(false)
const [isTestingInsight, setIsTestingInsight] = useState(false)
@@ -527,6 +528,7 @@ function SettingsPage({ onClose }: SettingsPageProps = {}) {
const savedAiModelApiBaseUrl = await configService.getAiModelApiBaseUrl()
const savedAiModelApiKey = await configService.getAiModelApiKey()
const savedAiModelApiModel = await configService.getAiModelApiModel()
const savedAiModelApiMaxTokens = await configService.getAiModelApiMaxTokens()
const savedAiInsightSilenceDays = await configService.getAiInsightSilenceDays()
const savedAiInsightAllowContext = await configService.getAiInsightAllowContext()
const savedAiInsightWhitelistEnabled = await configService.getAiInsightWhitelistEnabled()
@@ -550,6 +552,7 @@ function SettingsPage({ onClose }: SettingsPageProps = {}) {
setAiModelApiBaseUrl(savedAiModelApiBaseUrl)
setAiModelApiKey(savedAiModelApiKey)
setAiModelApiModel(savedAiModelApiModel)
setAiModelApiMaxTokens(savedAiModelApiMaxTokens)
setAiInsightSilenceDays(savedAiInsightSilenceDays)
setAiInsightAllowContext(savedAiInsightAllowContext)
setAiInsightWhitelistEnabled(savedAiInsightWhitelistEnabled)
@@ -2841,6 +2844,28 @@ function SettingsPage({ onClose }: SettingsPageProps = {}) {
/>
</div>
<div className="form-group">
<label> Max Tokens</label>
<span className="form-hint">
token <code>200</code>
</span>
<input
type="number"
className="field-input"
value={aiModelApiMaxTokens}
min={1}
max={65535}
step={1}
onChange={(e) => {
const parsed = parseInt(e.target.value, 10)
const val = Math.min(65535, Math.max(1, Number.isFinite(parsed) ? parsed : 200))
setAiModelApiMaxTokens(val)
scheduleConfigSave('aiModelApiMaxTokens', () => configService.setAiModelApiMaxTokens(val))
}}
style={{ width: 260 }}
/>
</div>
<div className="form-group">
<label></label>
<span className="form-hint">

View File

@@ -90,6 +90,7 @@ export const CONFIG_KEYS = {
AI_MODEL_API_BASE_URL: 'aiModelApiBaseUrl',
AI_MODEL_API_KEY: 'aiModelApiKey',
AI_MODEL_API_MODEL: 'aiModelApiModel',
AI_MODEL_API_MAX_TOKENS: 'aiModelApiMaxTokens',
AI_INSIGHT_ENABLED: 'aiInsightEnabled',
AI_INSIGHT_API_BASE_URL: 'aiInsightApiBaseUrl',
AI_INSIGHT_API_KEY: 'aiInsightApiKey',
@@ -1845,6 +1846,21 @@ export async function setAiModelApiModel(model: string): Promise<void> {
await config.set(CONFIG_KEYS.AI_MODEL_API_MODEL, model)
}
export async function getAiModelApiMaxTokens(): Promise<number> {
const value = await config.get(CONFIG_KEYS.AI_MODEL_API_MAX_TOKENS)
if (typeof value === 'number' && Number.isFinite(value) && value > 0) {
return Math.floor(value)
}
return 200
}
export async function setAiModelApiMaxTokens(maxTokens: number): Promise<void> {
const normalized = Number.isFinite(maxTokens)
? Math.min(65535, Math.max(1, Math.floor(maxTokens)))
: 200
await config.set(CONFIG_KEYS.AI_MODEL_API_MAX_TOKENS, normalized)
}
export async function getAiInsightEnabled(): Promise<boolean> {
const value = await config.get(CONFIG_KEYS.AI_INSIGHT_ENABLED)
return value === true