update settings

This commit is contained in:
duanfuxiang 2025-07-05 17:18:14 +08:00
parent e3f54d4c26
commit 03c467753a
3 changed files with 101 additions and 2 deletions

View File

@ -5,6 +5,7 @@ import {
MAX_DELAY, MAX_MAX_CHAR_LIMIT, MAX_DELAY, MAX_MAX_CHAR_LIMIT,
MIN_DELAY, MIN_DELAY,
MIN_MAX_CHAR_LIMIT, MIN_MAX_CHAR_LIMIT,
MIN_MAX_TOKENS,
azureOAIApiSettingsSchema, azureOAIApiSettingsSchema,
fewShotExampleSchema, fewShotExampleSchema,
modelOptionsSchema, modelOptionsSchema,
@ -151,7 +152,7 @@ export const DEFAULT_SETTINGS = {
top_p: 0.1, top_p: 0.1,
frequency_penalty: 0.25, frequency_penalty: 0.25,
presence_penalty: 0, presence_penalty: 0,
max_tokens: 800, max_tokens: MIN_MAX_TOKENS,
}, },
// Prompt settings // Prompt settings
systemMessage: `Your job is to predict the most logical text that should be written at the location of the <mask/>. systemMessage: `Your job is to predict the most logical text that should be written at the location of the <mask/>.

View File

@ -454,4 +454,82 @@ describe('settings migration', () => {
}, },
}) })
}) })
it('should migrate max_tokens from old value to new minimum', () => {
// Test case: user has old max_tokens value (800) that needs to be migrated
const settingsWithOldMaxTokens = {
version: 0.4,
modelOptions: {
temperature: 1,
top_p: 0.1,
frequency_penalty: 0.25,
presence_penalty: 0,
max_tokens: 800, // Old value that's below new minimum
},
// Include other required fields for valid settings
autocompleteEnabled: true,
advancedMode: false,
apiProvider: 'openai',
triggers: DEFAULT_SETTINGS.triggers,
delay: 500,
systemMessage: DEFAULT_SETTINGS.systemMessage,
fewShotExamples: DEFAULT_SETTINGS.fewShotExamples,
userMessageTemplate: '{{prefix}}<mask/>{{suffix}}',
chainOfThoughRemovalRegex: '(.|\\n)*ANSWER:',
dontIncludeDataviews: true,
maxPrefixCharLimit: 4000,
maxSuffixCharLimit: 4000,
removeDuplicateMathBlockIndicator: true,
removeDuplicateCodeBlockIndicator: true,
ignoredFilePatterns: '**/secret/**\n',
ignoredTags: '',
cacheSuggestions: true,
debugMode: false,
}
const result = parseInfioSettings(settingsWithOldMaxTokens)
// Should successfully parse and migrate max_tokens to 4096
expect(result.modelOptions.max_tokens).toBe(4096)
expect(result.version).toBe(0.5)
})
it('should not change max_tokens if it is already above minimum', () => {
// Test case: user has max_tokens already above minimum
const settingsWithValidMaxTokens = {
version: 0.4,
modelOptions: {
temperature: 1,
top_p: 0.1,
frequency_penalty: 0.25,
presence_penalty: 0,
max_tokens: 6000, // Already above minimum
},
// Include other required fields for valid settings
autocompleteEnabled: true,
advancedMode: false,
apiProvider: 'openai',
triggers: DEFAULT_SETTINGS.triggers,
delay: 500,
systemMessage: DEFAULT_SETTINGS.systemMessage,
fewShotExamples: DEFAULT_SETTINGS.fewShotExamples,
userMessageTemplate: '{{prefix}}<mask/>{{suffix}}',
chainOfThoughRemovalRegex: '(.|\\n)*ANSWER:',
dontIncludeDataviews: true,
maxPrefixCharLimit: 4000,
maxSuffixCharLimit: 4000,
removeDuplicateMathBlockIndicator: true,
removeDuplicateCodeBlockIndicator: true,
ignoredFilePatterns: '**/secret/**\n',
ignoredTags: '',
cacheSuggestions: true,
debugMode: false,
}
const result = parseInfioSettings(settingsWithValidMaxTokens)
// Should keep the existing max_tokens value since it's already valid
expect(result.modelOptions.max_tokens).toBe(6000)
expect(result.version).toBe(0.5)
})
}) })

View File

@ -6,6 +6,7 @@ import {
MAX_MAX_CHAR_LIMIT, MAX_MAX_CHAR_LIMIT,
MIN_DELAY, MIN_DELAY,
MIN_MAX_CHAR_LIMIT, MIN_MAX_CHAR_LIMIT,
MIN_MAX_TOKENS,
fewShotExampleSchema, fewShotExampleSchema,
modelOptionsSchema modelOptionsSchema
} from '../settings/versions/shared'; } from '../settings/versions/shared';
@ -13,7 +14,7 @@ import { DEFAULT_SETTINGS } from "../settings/versions/v1/v1";
import { ApiProvider } from '../types/llm/model'; import { ApiProvider } from '../types/llm/model';
import { isRegexValid, isValidIgnorePattern } from '../utils/auto-complete'; import { isRegexValid, isValidIgnorePattern } from '../utils/auto-complete';
export const SETTINGS_SCHEMA_VERSION = 0.4 export const SETTINGS_SCHEMA_VERSION = 0.5
const InfioProviderSchema = z.object({ const InfioProviderSchema = z.object({
name: z.literal('Infio'), name: z.literal('Infio'),
@ -432,9 +433,28 @@ const MIGRATIONS: Migration[] = [
{ {
fromVersion: 0.1, fromVersion: 0.1,
toVersion: 0.4, toVersion: 0.4,
migrate: (data) => {
const newData = { ...data }
newData.version = 0.4
return newData
},
},
{
fromVersion: 0.4,
toVersion: 0.5,
migrate: (data) => { migrate: (data) => {
const newData = { ...data } const newData = { ...data }
newData.version = SETTINGS_SCHEMA_VERSION newData.version = SETTINGS_SCHEMA_VERSION
// Handle max_tokens minimum value increase from 800 to 4096
if (newData.modelOptions && typeof newData.modelOptions === 'object') {
const modelOptions = newData.modelOptions as Record<string, any>
if (typeof modelOptions.max_tokens === 'number' && modelOptions.max_tokens < MIN_MAX_TOKENS) {
console.log(`Updating max_tokens from ${modelOptions.max_tokens} to ${MIN_MAX_TOKENS} due to minimum value change`)
modelOptions.max_tokens = MIN_MAX_TOKENS
}
}
return newData return newData
}, },
}, },