Separate Gemini model names and effort choices
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -335,7 +335,7 @@ final class Store {
|
||||
}
|
||||
|
||||
var defaultEffort: String {
|
||||
me!.defaultEffort
|
||||
effortFor(defaultModel, me!.defaultEffort)
|
||||
}
|
||||
|
||||
func loadMe() async throws {
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user