Let Compact continue on another model or vendor
This commit is contained in:
+25
-12
@@ -470,17 +470,10 @@ struct CompactButton: View {
|
||||
let level = pct >= 90 ? Palette.danger : pct >= 70 ? Palette.warn : Palette.accent
|
||||
let detail = usage.map { u in u.window > 0 ? "\ncontext: \(u.used.formatted()) of \(u.window.formatted()) tokens\(u.model.isEmpty ? "" : " (\(u.model))")" : "" } ?? ""
|
||||
let disabled = sessionId == nil || state != .idle || sending
|
||||
Button {
|
||||
guard let sessionId else {
|
||||
return
|
||||
}
|
||||
sending = true
|
||||
Task {
|
||||
do {
|
||||
_ = try await store.api.client.compactSession(path: .init(sessionId: sessionId)).accepted
|
||||
} catch {
|
||||
overlays.showAlert(errorText(error))
|
||||
sending = false
|
||||
Menu {
|
||||
ForEach(models, id: \.self) { m in
|
||||
Button("Continue on \(m)") {
|
||||
compact(m)
|
||||
}
|
||||
}
|
||||
} label: {
|
||||
@@ -504,14 +497,34 @@ struct CompactButton: View {
|
||||
.overlay(RoundedRectangle(cornerRadius: 6).stroke(pct >= 70 ? level : Palette.border))
|
||||
.opacity(disabled ? 0.45 : 1)
|
||||
.contentShape(Rectangle())
|
||||
} primaryAction: {
|
||||
compact(nil)
|
||||
}
|
||||
.menuStyle(.button)
|
||||
.menuIndicator(.hidden)
|
||||
.buttonStyle(.plain)
|
||||
.fixedSize()
|
||||
.disabled(disabled)
|
||||
.help("Ask the agent for a handoff, then continue in a new session with a fresh context\(detail)")
|
||||
.help("Ask the agent for a handoff, then continue in a new session with a fresh context; hold to continue on another model\(detail)")
|
||||
.onChange(of: state) {
|
||||
sending = false
|
||||
}
|
||||
}
|
||||
|
||||
private func compact(_ model: String?) {
|
||||
guard let sessionId else {
|
||||
return
|
||||
}
|
||||
sending = true
|
||||
Task {
|
||||
do {
|
||||
_ = try await store.api.client.compactSession(path: .init(sessionId: sessionId), body: .json(.init(model: model))).accepted
|
||||
} catch {
|
||||
overlays.showAlert(errorText(error))
|
||||
sending = false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private struct ScrollMetrics: Equatable {
|
||||
|
||||
Reference in New Issue
Block a user