From c752ba9b272ddf8186f7786ac32a88a410e6eee8 Mon Sep 17 00:00:00 2001 From: sigoden Date: Mon, 29 Apr 2024 15:34:24 +0800 Subject: feat: `.model` repl completions show max tokens and price (#462) --- src/client/common.rs | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) (limited to 'src/client/common.rs') diff --git a/src/client/common.rs b/src/client/common.rs index 842741c..85255ee 100644 --- a/src/client/common.rs +++ b/src/client/common.rs @@ -147,17 +147,22 @@ macro_rules! register_client { anyhow::bail!("Unknown client '{}'", client) } - pub fn list_models(config: &$crate::config::Config) -> Vec<$crate::client::Model> { - config - .clients - .iter() - .flat_map(|v| match v { - $(ClientConfig::$config(c) => $client::list_models(c),)+ - ClientConfig::Unknown => vec![], - }) - .collect() + static mut ALL_CLIENTS: Option> = None; + + pub fn list_models(config: &$crate::config::Config) -> Vec<&$crate::client::Model> { + if unsafe { ALL_CLIENTS.is_none() } { + let models: Vec<_> = config + .clients + .iter() + .flat_map(|v| match v { + $(ClientConfig::$config(c) => $client::list_models(c),)+ + ClientConfig::Unknown => vec![], + }) + .collect(); + unsafe { ALL_CLIENTS = Some(models) }; + } + unsafe { ALL_CLIENTS.as_ref().unwrap().iter().collect() } } - }; } -- cgit v1.2.3