@@ -14,11 +14,11 @@ const PresetSourceSchema = z.object({
14
14
} ) ;
15
15
16
16
export const PresetSchema = z . object ( {
17
- // Required fields
17
+ // Fields that can be imported from preset or set in UI
18
18
vlmProvider : z . nativeEnum ( VLMProviderV2 ) . optional ( ) ,
19
- vlmBaseUrl : z . string ( ) . url ( ) ,
20
- vlmApiKey : z . string ( ) . min ( 1 ) ,
21
- vlmModelName : z . string ( ) . min ( 1 ) ,
19
+ vlmBaseUrl : z . string ( ) . url ( ) . optional ( ) ,
20
+ vlmApiKey : z . string ( ) . min ( 1 ) . optional ( ) ,
21
+ vlmModelName : z . string ( ) . min ( 1 ) . optional ( ) ,
22
22
23
23
// Optional fields
24
24
language : z . enum ( [ 'zh' , 'en' ] ) . optional ( ) ,
@@ -37,3 +37,16 @@ export type LocalStore = z.infer<typeof PresetSchema>;
37
37
export const validatePreset = ( data : unknown ) : LocalStore => {
38
38
return PresetSchema . parse ( data ) ;
39
39
} ;
40
+
41
+ // Merge existing settings with imported settings, ensuring required fields exist
42
+ export const mergeWithExistingSettings = ( imported : Partial < LocalStore > , existing : LocalStore ) : LocalStore => {
43
+ // Merge settings, prioritizing imported values but keeping existing values as fallback
44
+ return {
45
+ ...existing ,
46
+ ...imported ,
47
+ // Ensure these three key fields have values from at least one source
48
+ vlmBaseUrl : imported . vlmBaseUrl || existing . vlmBaseUrl ,
49
+ vlmApiKey : imported . vlmApiKey || existing . vlmApiKey ,
50
+ vlmModelName : imported . vlmModelName || existing . vlmModelName ,
51
+ } ;
52
+ } ;
0 commit comments