Use as hint

This commit is contained in:
Kaede Akino committed 2026-09-16 21:35:18 +08:00
1 parent 6493dda7c7
commit cdf8a22c4b
5 files changed
+23 -13

No files matched your search

@@ -14507,6 +14507,7 @@
}
},
"New Provider" : {
"extractionState" : "manual",
"localizations" : {
"zh-Hans" : {
"stringUnit" : {
@@ -16,9 +16,8 @@ public struct ModelProviderConnectionFields: View {
public var body: some View {
Section {
LabeledContent("Name") {
TextField("Name", text: $name.singleLineText, axis: .horizontal).singleLinePaste().lineLimit(1)
.labelsHidden()
.multilineTextAlignment(.trailing)
TextField("Name", text: $name.singleLineText, prompt: Text("New Provider"), axis: .horizontal)
.singleLinePaste().lineLimit(1).labelsHidden().multilineTextAlignment(.trailing)
}
Toggle("Enabled", isOn: $isEnabled)
Picker("API Type", selection: $endpoint.apiType) {
@@ -26,7 +26,7 @@ struct ModelProviderSettings: View {
// there is one code path for "new" and "edit" and no half-built
// provider living in a view's `@State`. Cancelling takes it back
// out again — which is what `isNew` below is for.
let provider = ModelProvider(name: String(localized: "New Provider"))
let provider = ModelProvider(name: "")
app.aiConfiguration.upsert(provider)
edit(provider.id, true)
}
+2 -4
View File
@@ -297,13 +297,11 @@ private struct SettingsCategoryRow: View {
enum SettingsDraftPolicy {
static func shouldDiscard(_ provider: ModelProvider) -> Bool {
let hasDefaultName =
provider.name.trimmingCharacters(in: .whitespacesAndNewlines)
== String(localized: "New Provider")
let hasEmptyName = provider.name.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty
let hasConfiguration =
!provider.inferenceURL.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty
|| provider.hasCredential || !provider.models.isEmpty
return hasDefaultName && !hasConfiguration
return hasEmptyName && !hasConfiguration
}
static func shouldDiscard(_ server: MCPServer) -> Bool {
+17 -5
View File
@@ -121,19 +121,31 @@ struct SettingsNavigationTests {
#expect(window.sidebarMode == .navigation)
}
@Test
func emptyProviderDraftIsDiscarded() {
let provider = ModelProvider(name: String(localized: "New Provider"))
@Test(arguments: ["", " \t\n "])
func emptyProviderDraftIsDiscarded(name: String) {
var provider = ModelProvider(name: name)
provider.inferenceURL = " \t\n "
#expect(SettingsDraftPolicy.shouldDiscard(provider))
}
@Test
func configuredProviderDraftIsKept() {
var provider = ModelProvider(name: String(localized: "New Provider"))
var provider = ModelProvider(name: "")
provider.inferenceURL = "https://example.com/v1/chat/completions"
#expect(!SettingsDraftPolicy.shouldDiscard(provider))
provider = ModelProvider(name: "Work")
provider = ModelProvider(name: "")
provider.credentialRef = "test-credential"
#expect(!SettingsDraftPolicy.shouldDiscard(provider))
provider = ModelProvider(name: "")
provider.models = [AIModel(id: "test-model")]
#expect(!SettingsDraftPolicy.shouldDiscard(provider))
}
@Test(arguments: ["Work", "New Provider", String(localized: "New Provider")])
func namedProviderDraftIsKept(name: String) {
let provider = ModelProvider(name: name)
#expect(!SettingsDraftPolicy.shouldDiscard(provider))
}