summaryrefslogtreecommitdiffstats
path: root/src/client/common.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/common.rs')
-rw-r--r--src/client/common.rs25
1 files changed, 15 insertions, 10 deletions
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<Vec<$crate::client::Model>> = 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() }
}
-
};
}