Skip to content

Commit 7cb8e6e

Browse files
committed
Fix migrateTo240 to apply even if the settings already has a default value
1 parent 51a45c7 commit 7cb8e6e

File tree

1 file changed

+98
-93
lines changed

1 file changed

+98
-93
lines changed

Core/Sources/ServiceUpdateMigration/MigrateTo240.swift

Lines changed: 98 additions & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -10,102 +10,107 @@ func migrateTo240(
1010
let finishedMigrationKey = "MigrateTo240Finished"
1111
if defaults.bool(forKey: finishedMigrationKey) { return }
1212

13-
let chatModelOpenAIId = UUID().uuidString
14-
let chatModelAzureOpenAIId = UUID().uuidString
15-
let embeddingModelOpenAIId = UUID().uuidString
16-
let embeddingModelAzureOpenAIId = UUID().uuidString
17-
18-
let openAIAPIKeyName = "OpenAI"
19-
let openAIAPIKey = defaults.deprecatedValue(for: \.openAIAPIKey)
20-
if !openAIAPIKey.isEmpty {
21-
try keychain.update(openAIAPIKey, key: openAIAPIKeyName)
22-
}
23-
24-
let azureOpenAIAPIKeyName = "Azure OpenAI"
25-
let azureOpenAIAPIKey = defaults.deprecatedValue(for: \.azureOpenAIAPIKey)
26-
if !azureOpenAIAPIKey.isEmpty {
27-
try keychain.update(azureOpenAIAPIKey, key: azureOpenAIAPIKeyName)
28-
}
29-
30-
defaults.setupDefaultValue(for: \.chatModels, defaultValue: {
31-
let openAIModel = ChatGPTModel(rawValue: defaults.deprecatedValue(for: \.chatGPTModel))
32-
33-
let openAI = ChatModel(
34-
id: chatModelOpenAIId,
35-
name: "OpenAI",
36-
format: .openAI,
37-
info: .init(
38-
apiKeyName: openAIAPIKeyName,
39-
baseURL: defaults.deprecatedValue(for: \.openAIBaseURL),
40-
maxTokens: openAIModel?.maxToken ?? defaults
41-
.deprecatedValue(for: \.chatGPTMaxToken),
42-
modelName: openAIModel?.rawValue ?? defaults
43-
.deprecatedValue(for: \.chatGPTModel)
13+
do {
14+
let chatModelOpenAIId = UUID().uuidString
15+
let chatModelAzureOpenAIId = UUID().uuidString
16+
let embeddingModelOpenAIId = UUID().uuidString
17+
let embeddingModelAzureOpenAIId = UUID().uuidString
18+
19+
let openAIAPIKeyName = "OpenAI"
20+
let openAIAPIKey = defaults.deprecatedValue(for: \.openAIAPIKey)
21+
if !openAIAPIKey.isEmpty {
22+
try keychain.update(openAIAPIKey, key: openAIAPIKeyName)
23+
}
24+
25+
let azureOpenAIAPIKeyName = "Azure OpenAI"
26+
let azureOpenAIAPIKey = defaults.deprecatedValue(for: \.azureOpenAIAPIKey)
27+
if !azureOpenAIAPIKey.isEmpty {
28+
try keychain.update(azureOpenAIAPIKey, key: azureOpenAIAPIKeyName)
29+
}
30+
31+
defaults.set({
32+
let openAIModel = ChatGPTModel(rawValue: defaults.deprecatedValue(for: \.chatGPTModel))
33+
34+
let openAI = ChatModel(
35+
id: chatModelOpenAIId,
36+
name: "OpenAI",
37+
format: .openAI,
38+
info: .init(
39+
apiKeyName: openAIAPIKeyName,
40+
baseURL: defaults.deprecatedValue(for: \.openAIBaseURL),
41+
maxTokens: openAIModel?.maxToken ?? defaults
42+
.deprecatedValue(for: \.chatGPTMaxToken),
43+
modelName: openAIModel?.rawValue ?? defaults
44+
.deprecatedValue(for: \.chatGPTModel)
45+
)
4446
)
45-
)
46-
let azureOpenAI = ChatModel(
47-
id: chatModelAzureOpenAIId,
48-
name: "Azure OpenAI",
49-
format: .azureOpenAI,
50-
info: .init(
51-
apiKeyName: azureOpenAIAPIKeyName,
52-
baseURL: defaults.deprecatedValue(for: \.azureOpenAIBaseURL),
53-
maxTokens: defaults.deprecatedValue(for: \.chatGPTMaxToken),
54-
modelName: defaults
55-
.deprecatedValue(for: \.azureChatGPTDeployment)
47+
let azureOpenAI = ChatModel(
48+
id: chatModelAzureOpenAIId,
49+
name: "Azure OpenAI",
50+
format: .azureOpenAI,
51+
info: .init(
52+
apiKeyName: azureOpenAIAPIKeyName,
53+
baseURL: defaults.deprecatedValue(for: \.azureOpenAIBaseURL),
54+
maxTokens: defaults.deprecatedValue(for: \.chatGPTMaxToken),
55+
modelName: defaults
56+
.deprecatedValue(for: \.azureChatGPTDeployment)
57+
)
5658
)
57-
)
58-
59-
return [openAI, azureOpenAI]
60-
}())
61-
62-
defaults.setupDefaultValue(for: \.defaultChatFeatureChatModelId, defaultValue: {
63-
if defaults.deprecatedValue(for: \.chatFeatureProvider) == .azureOpenAI {
64-
return chatModelAzureOpenAIId
65-
}
66-
return chatModelOpenAIId
67-
}())
68-
69-
defaults.setupDefaultValue(for: \.embeddingModels, defaultValue: {
70-
let openAIModel = OpenAIEmbeddingModel(
71-
rawValue: defaults.deprecatedValue(for: \.embeddingModel)
72-
)
73-
74-
let openAI = EmbeddingModel(
75-
id: embeddingModelOpenAIId,
76-
name: "OpenAI",
77-
format: .openAI,
78-
info: .init(
79-
apiKeyName: openAIAPIKeyName,
80-
baseURL: defaults.deprecatedValue(for: \.openAIBaseURL),
81-
maxTokens: openAIModel?.maxToken ?? 8191,
82-
modelName: openAIModel?.rawValue ?? defaults.deprecatedValue(for: \.embeddingModel)
59+
60+
return [openAI, azureOpenAI]
61+
}(), for: \.chatModels)
62+
63+
defaults.set({
64+
if defaults.deprecatedValue(for: \.chatFeatureProvider) == .azureOpenAI {
65+
return chatModelAzureOpenAIId
66+
}
67+
return chatModelOpenAIId
68+
}(), for: \.defaultChatFeatureChatModelId)
69+
70+
defaults.set({
71+
let openAIModel = OpenAIEmbeddingModel(
72+
rawValue: defaults.deprecatedValue(for: \.embeddingModel)
8373
)
84-
)
85-
86-
let azureOpenAI = EmbeddingModel(
87-
id: embeddingModelAzureOpenAIId,
88-
name: "Azure OpenAI",
89-
format: .azureOpenAI,
90-
info: .init(
91-
apiKeyName: azureOpenAIAPIKeyName,
92-
baseURL: defaults.deprecatedValue(for: \.azureOpenAIBaseURL),
93-
maxTokens: 8191,
94-
modelName: defaults
95-
.deprecatedValue(for: \.azureEmbeddingDeployment)
74+
75+
let openAI = EmbeddingModel(
76+
id: embeddingModelOpenAIId,
77+
name: "OpenAI",
78+
format: .openAI,
79+
info: .init(
80+
apiKeyName: openAIAPIKeyName,
81+
baseURL: defaults.deprecatedValue(for: \.openAIBaseURL),
82+
maxTokens: openAIModel?.maxToken ?? 8191,
83+
modelName: openAIModel?.rawValue ?? defaults.deprecatedValue(for: \.embeddingModel)
84+
)
9685
)
97-
)
98-
99-
return [openAI, azureOpenAI]
100-
}())
101-
102-
defaults.setupDefaultValue(for: \.defaultChatFeatureEmbeddingModelId, defaultValue: {
103-
if defaults.deprecatedValue(for: \.embeddingFeatureProvider) == .azureOpenAI {
104-
return embeddingModelAzureOpenAIId
105-
}
106-
return embeddingModelOpenAIId
107-
}())
108-
109-
defaults.set(true, forKey: finishedMigrationKey)
86+
87+
let azureOpenAI = EmbeddingModel(
88+
id: embeddingModelAzureOpenAIId,
89+
name: "Azure OpenAI",
90+
format: .azureOpenAI,
91+
info: .init(
92+
apiKeyName: azureOpenAIAPIKeyName,
93+
baseURL: defaults.deprecatedValue(for: \.azureOpenAIBaseURL),
94+
maxTokens: 8191,
95+
modelName: defaults
96+
.deprecatedValue(for: \.azureEmbeddingDeployment)
97+
)
98+
)
99+
100+
return [openAI, azureOpenAI]
101+
}(), for: \.embeddingModels)
102+
103+
defaults.set({
104+
if defaults.deprecatedValue(for: \.embeddingFeatureProvider) == .azureOpenAI {
105+
return embeddingModelAzureOpenAIId
106+
}
107+
return embeddingModelOpenAIId
108+
}(), for: \.defaultChatFeatureEmbeddingModelId)
109+
110+
defaults.set(true, forKey: finishedMigrationKey)
111+
} catch {
112+
print(error.localizedDescription)
113+
throw error
114+
}
110115
}
111116

0 commit comments

Comments
 (0)