From 08def88e42d4436bb573b6dc14fa017f5ca4bcfb Mon Sep 17 00:00:00 2001 From: Revantark Date: Sun, 11 Oct 2026 18:02:23 +0530 Subject: [PATCH 1/2] alan: handle binding of local modela on startup --- crates/alan/src/main.rs | 40 ++++++++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 16 deletions(-) diff --git a/crates/alan/src/main.rs b/crates/alan/src/main.rs index 59be857..97832d3 100644 --- a/crates/alan/src/main.rs +++ b/crates/alan/src/main.rs @@ -23,7 +23,7 @@ use alan_tui::Runtime; use llm::ReasoningEffort; use providers::{ DeepSeekProvider, FileCredentialStore, LocalProvider, ModelOptions, OpenRouterProvider, - Provider, ProviderRegistry, ZaiProvider, bind_model, + Provider, ProviderRegistry, ZaiProvider, bind_local_model, bind_model, }; use std::path::PathBuf; use std::sync::Arc; @@ -58,7 +58,12 @@ async fn main() -> anyhow::Result<()> { let providers = build_providers(&credential_store_for_providers, &local_provider)?; let session_manager = Arc::new(SessionManager::new(sessions_path()?)); let resumed_session = load_resumed_session(&session_manager).await?; - let model = select_model(&providers, &settings, resumed_session.as_ref())?; + let model = select_model( + &providers, + &local_provider, + &settings, + resumed_session.as_ref(), + )?; let registry = Arc::new(ProviderRegistry::with_local_provider( providers, Arc::clone(&local_provider), @@ -171,6 +176,7 @@ async fn load_resumed_session( fn select_model( providers: &[Arc], + local_provider: &LocalProvider, settings: &Settings, resumed_session: Option<&agent::Session>, ) -> anyhow::Result { @@ -188,20 +194,22 @@ fn select_model( .iter() .find(|provider| provider.id().0 == provider_id) .ok_or_else(|| anyhow::anyhow!("Provider not found: {provider_id}"))?; - let server_tools = server_tools( - provider.server_tools(), - settings.web_fetch == Some(true), - settings.web_search == Some(true), - ); - Ok(bind_model( - provider.as_ref(), - &model_id, - ModelOptions { - server_tools, - reasoning_effort: settings.reasoning.unwrap_or_default(), - extensions: settings.extensions(&model_id), - }, - )?) + let options = ModelOptions { + server_tools: server_tools( + provider.server_tools(), + settings.web_fetch == Some(true), + settings.web_search == Some(true), + ), + reasoning_effort: settings.reasoning.unwrap_or_default(), + extensions: settings.extensions(&model_id), + }; + if provider_id == "local" { + let entry = local_provider.find_entry(&model_id).ok_or_else(|| { + anyhow::anyhow!("Local model not found: {model_id} (manage it with /local)") + })?; + return Ok(bind_local_model(&entry, options)?); + } + Ok(bind_model(provider.as_ref(), &model_id, options)?) } fn build_tool_policy( From c75d2541f8b73f09e9e38aa59a9431fdec5713b1 Mon Sep 17 00:00:00 2001 From: Revantark Date: Sun, 11 Oct 2026 18:07:01 +0530 Subject: [PATCH 2/2] update changelog --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9050e22..1b73535 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Fixed + +- Fix local model binding on startup + ## 0.1.5 - 2026-10-07 ### Added