From 9c6c9f10a27d0993636b453f39d8934c95c5c2b2 Mon Sep 17 00:00:00 2001 From: sigoden Date: Tue, 23 Apr 2024 18:14:47 +0800 Subject: feat: builtin models can be overwrited by models config (#429) --- src/client/common.rs | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) (limited to 'src/client/common.rs') diff --git a/src/client/common.rs b/src/client/common.rs index 2206d21..b6ccce7 100644 --- a/src/client/common.rs +++ b/src/client/common.rs @@ -86,7 +86,7 @@ macro_rules! register_client { pub fn ensure_model_capabilities(client: &mut dyn Client, capabilities: $crate::client::ModelCapabilities) -> anyhow::Result<()> { if !client.model().capabilities.contains(capabilities) { - let models = client.models(); + let models = client.list_models(); if let Some(model) = models.into_iter().find(|v| v.capabilities.contains(capabilities)) { client.set_model(model); } else { @@ -137,7 +137,7 @@ macro_rules! client_common_fns { (&self.global_config, &self.config.extra) } - fn models(&self) -> Vec { + fn list_models(&self) -> Vec { Self::list_models(&self.config) } @@ -197,11 +197,31 @@ macro_rules! config_get_fn { }; } +#[macro_export] +macro_rules! list_models_fn { + ($config:ident) => { + pub fn list_models(local_config: &$config) -> Vec { + let client_name = Self::name(local_config); + Model::from_config(client_name, &local_config.models) + } + }; + ($config:ident, $models:expr) => { + pub fn list_models(local_config: &$config) -> Vec { + let client_name = Self::name(local_config); + if local_config.models.is_empty() { + Model::from_static(client_name, $models) + } else { + Model::from_config(client_name, &local_config.models) + } + } + }; +} + #[async_trait] pub trait Client: Sync + Send { fn config(&self) -> (&GlobalConfig, &Option); - fn models(&self) -> Vec; + fn list_models(&self) -> Vec; fn model(&self) -> &Model; -- cgit v1.2.3