Separate Gemini model names and effort choices

This commit is contained in:
Ian Gulliver
2026-10-23 20:16:32 -07:00
parent 78a715954e
commit 6434eee45c
11 changed files with 408 additions and 382 deletions
+8 -8
View File
@@ -20,12 +20,8 @@ let models = [
"gpt-5.6-sol",
"gpt-5.6-terra",
"gpt-5.6-luna",
"gemini-4-argon-high",
"gemini-4-argon-medium",
"gemini-4-argon-low",
"gemini-3.8-flash-high",
"gemini-3.8-flash-medium",
"gemini-3.8-flash-low",
"gemini-4-argon",
"gemini-3.8-flash",
]
struct PendingImage: Identifiable {
@@ -96,7 +92,11 @@ func vendorOf(_ model: String) -> Vendor {
}
func efforts(_ model: String) -> [String] {
vendorOf(model) == .codex ? ["", "low", "medium", "high", "xhigh"] : ["", "low", "medium", "high", "xhigh", "max"]
switch vendorOf(model) {
case .codex: ["", "low", "medium", "high", "xhigh"]
case .claude: ["", "low", "medium", "high", "xhigh", "max"]
case .antigravity: ["low", "medium", "high"]
}
}
func effortLabel(_ effort: String) -> String {
@@ -104,7 +104,7 @@ func effortLabel(_ effort: String) -> String {
}
func effortFor(_ model: String, _ effort: String) -> String {
efforts(model).contains(effort) ? effort : ""
efforts(model).contains(effort) ? effort : (vendorOf(model) == .antigravity ? "medium" : "")
}
@MainActor
+1 -1
View File
@@ -48,7 +48,7 @@ struct SettingsView: View {
DeviceNotifications()
PrefsBox()
heading("Default model")
Text("New tasks you start from byre run on this model, at this effort.")
Text("New tasks you start from byre use these settings.")
.foregroundStyle(Palette.muted)
.fixedSize(horizontal: false, vertical: true)
HStack(spacing: 8) {
+1 -1
View File
@@ -335,7 +335,7 @@ final class Store {
}
var defaultEffort: String {
me!.defaultEffort
effortFor(defaultModel, me!.defaultEffort)
}
func loadMe() async throws {
+9 -2
View File
@@ -52,9 +52,16 @@ final class StepNode: Identifiable {
var step: WorkflowStep {
let w = parent?.kind == .random ? weight : nil
let selectedEffort = effortFor(model, effort)
let selectedAgents = agents?.map { member in
var member = member
let effort = effortFor(member.model, member.effort ?? "")
member.effort = effort.isEmpty ? nil : effort
return member
}
return switch kind {
case .stage:
WorkflowStep(stage: name, model: agents == nil ? model : nil, effort: agents == nil && !effort.isEmpty ? effort : nil, prompt: prompt, weight: w, agents: agents)
WorkflowStep(stage: name, model: selectedAgents == nil ? model : nil, effort: selectedAgents == nil && !selectedEffort.isEmpty ? selectedEffort : nil, prompt: prompt, weight: w, agents: selectedAgents)
case .order:
WorkflowStep(order: children.map(\.step), weight: w)
case .parallel:
@@ -586,7 +593,7 @@ struct ModelPicker: View {
let list = model.isEmpty || models.contains(model) ? models : [model] + models
HStack(spacing: 6) {
ChoiceMenu(value: $model, options: list.map { ($0, $0) }, placeholder: "model")
ChoiceMenu(value: $effort, options: efforts(model).map { ($0, effortLabel($0)) })
ChoiceMenu(value: Binding(get: { effortFor(model, effort) }, set: { effort = $0 }), options: efforts(model).map { ($0, effortLabel($0)) })
}
.onChange(of: model) {
effort = effortFor(model, effort)