//! `kigi models` subcommand. use anyhow::Result; use kigi_shell::agent::config::Config as AgentConfig; use kigi_shell::cli_models::{AuthStatus, list_models}; use tokio_util::sync::CancellationToken; use crate::client_identity::{PAGER_CLIENT_TYPE, PAGER_CLIENT_VERSION}; pub async fn list_available_models(agent_config: &AgentConfig) -> Result<()> { match AuthStatus::resolve(agent_config) { AuthStatus::ApiKey => println!("You are using KIGI_API_KEY."), AuthStatus::LoggedIn(host) => println!("You are logged in with {}.", host), AuthStatus::ModelCredentials(model) => { println!("Model '{model}' is using its own API key."); } AuthStatus::DeploymentKey => println!("You are authenticated via deployment key."), AuthStatus::NotAuthenticated => println!("You are not authenticated."), } println!(); let cancel = CancellationToken::new(); let spawned = crate::acp::spawn::spawn_kigi_shell(agent_config.clone(), &cancel, None).await?; let state = list_models(&spawned.channel.tx, PAGER_CLIENT_TYPE, PAGER_CLIENT_VERSION).await?; println!("Default model: {}", state.current_model_id.0); println!(); println!("Available models:"); for m in state.available_models { if m.model_id == state.current_model_id { println!(" * {} (default)", m.model_id.0); } else { println!(" - {}", m.model_id.0); } } cancel.cancel(); Ok(()) }