Merge branch 'triage/1797-auto-model-resume-20260526-153051' into integration/v0.8.47-unified

This commit is contained in:
Hunter Bown
2026-05-26 16:40:47 -05:00
3 changed files with 40 additions and 4 deletions
+28 -3
View File
@@ -169,7 +169,7 @@ pub fn load(app: &mut App, path: Option<&str>) -> CommandResult {
app.extend_history(cells_to_add);
app.mark_history_updated();
app.viewport.transcript_selection.clear();
app.model.clone_from(&session.metadata.model);
app.set_model_selection(session.metadata.model.clone());
app.update_model_compaction_budget();
app.workspace.clone_from(&session.metadata.workspace);
app.session.total_tokens = u32::try_from(session.metadata.total_tokens).unwrap_or(u32::MAX);
@@ -365,8 +365,8 @@ fn line_to_string(line: ratatui::text::Line<'static>) -> String {
#[cfg(test)]
mod tests {
use super::*;
use crate::config::Config;
use crate::tui::app::{App, TuiOptions, TurnCacheRecord};
use crate::config::{Config, DEFAULT_TEXT_MODEL};
use crate::tui::app::{App, ReasoningEffort, TuiOptions, TurnCacheRecord};
use std::time::Instant;
use tempfile::TempDir;
@@ -575,6 +575,31 @@ mod tests {
assert!(matches!(result.action, Some(AppAction::SyncSession { .. })));
}
#[test]
fn load_auto_model_session_restores_auto_mode() {
let tmpdir = TempDir::new().unwrap();
let mut saved_app = create_test_app_with_tmpdir(&tmpdir);
saved_app.set_model_selection("auto".to_string());
saved_app.last_effective_model = Some("deepseek-v4-flash".to_string());
saved_app.last_effective_reasoning_effort = Some(ReasoningEffort::Low);
let save_path = tmpdir.path().join("auto_model.json");
save(&mut saved_app, Some(save_path.to_str().unwrap()));
let mut app = create_test_app_with_tmpdir(&tmpdir);
app.set_model_selection("deepseek-v4-flash".to_string());
app.reasoning_effort = ReasoningEffort::High;
let result = load(&mut app, Some(save_path.to_str().unwrap()));
assert!(!result.is_error);
assert!(app.auto_model);
assert_eq!(app.model, "auto");
assert_eq!(app.model_selection_for_persistence(), "auto");
assert_eq!(app.last_effective_model, None);
assert_eq!(app.last_effective_reasoning_effort, None);
assert_eq!(app.reasoning_effort, ReasoningEffort::Auto);
assert_eq!(app.effective_model_for_budget(), DEFAULT_TEXT_MODEL);
}
#[test]
fn load_restores_artifact_registry() {
let tmpdir = TempDir::new().unwrap();
+4
View File
@@ -4501,6 +4501,10 @@ impl App {
};
self.auto_model = auto_model;
self.last_effective_model = None;
self.last_effective_reasoning_effort = None;
if auto_model {
self.reasoning_effort = ReasoningEffort::Auto;
}
}
pub fn model_selection_for_persistence(&self) -> String {
+8 -1
View File
@@ -1,5 +1,5 @@
use super::*;
use crate::config::{ApiProvider, Config};
use crate::config::{ApiProvider, Config, DEFAULT_TEXT_MODEL};
use crate::config_ui::{self, WebConfigSession, WebConfigSessionEvent};
use crate::core::engine::mock_engine_handle;
use crate::tui::active_cell::ActiveCell;
@@ -4166,6 +4166,9 @@ fn apply_loaded_session_restores_concrete_model_mode() {
fn apply_loaded_session_restores_auto_model_mode() {
let mut app = create_test_app();
app.set_model_selection("deepseek-v4-pro".to_string());
app.reasoning_effort = ReasoningEffort::High;
app.last_effective_model = Some("deepseek-v4-flash".to_string());
app.last_effective_reasoning_effort = Some(ReasoningEffort::Low);
let mut session = saved_session_with_messages(vec![
text_message("user", "hello"),
text_message("assistant", "hi"),
@@ -4178,6 +4181,10 @@ fn apply_loaded_session_restores_auto_model_mode() {
assert!(app.auto_model);
assert_eq!(app.model, "auto");
assert_eq!(app.model_selection_for_persistence(), "auto");
assert_eq!(app.last_effective_model, None);
assert_eq!(app.last_effective_reasoning_effort, None);
assert_eq!(app.reasoning_effort, ReasoningEffort::Auto);
assert_eq!(app.effective_model_for_budget(), DEFAULT_TEXT_MODEL);
}
#[test]