vtcode_llm/providers/common/
prompt_cache.rs1use 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}