Skip to main content

vtcode_llm/providers/common/
prompt_cache.rs

1//! Provider prompt-cache configuration forwarding.
2
3use vtcode_config::core::{PromptCachingConfig, ProviderPromptCachingConfig};
4
5pub(crate) fn extract_prompt_cache_settings_default(
6    prompt_cache: Option<PromptCachingConfig>,
7    _provider_key: &str,
8) -> (bool, bool) {
9    match prompt_cache {
10        Some(cfg) if cfg.enabled => (true, cfg.enabled),
11        _ => (false, false),
12    }
13}
14
15pub(crate) fn extract_prompt_cache_settings<T, SelectFn, EnabledFn>(
16    prompt_cache: Option<PromptCachingConfig>,
17    select_settings: SelectFn,
18    enabled: EnabledFn,
19) -> (bool, T)
20where
21    T: Clone + Default,
22    SelectFn: Fn(&ProviderPromptCachingConfig) -> &T,
23    EnabledFn: Fn(&PromptCachingConfig, &T) -> bool,
24{
25    if let Some(cfg) = prompt_cache {
26        let provider_settings = select_settings(&cfg.providers).clone();
27        let is_enabled = enabled(&cfg, &provider_settings);
28        (is_enabled, provider_settings)
29    } else {
30        (false, T::default())
31    }
32}
33
34pub fn forward_prompt_cache_with_state<PredicateFn>(
35    prompt_cache: Option<PromptCachingConfig>,
36    predicate: PredicateFn,
37    default_enabled: bool,
38) -> (bool, Option<PromptCachingConfig>)
39where
40    PredicateFn: Fn(&PromptCachingConfig) -> bool,
41{
42    match prompt_cache {
43        Some(cfg) => {
44            if predicate(&cfg) {
45                (true, Some(cfg))
46            } else {
47                (false, None)
48            }
49        }
50        None => (default_enabled, None),
51    }
52}