vtcode_config/core/
provider.rs

1use serde::{Deserialize, Serialize};
2
3/// Anthropic-specific provider configuration
4#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
5#[derive(Debug, Clone, Deserialize, Serialize)]
6pub struct AnthropicConfig {
7    /// Beta header for interleaved thinking feature
8    #[serde(default = "default_interleaved_thinking_beta")]
9    pub interleaved_thinking_beta: String,
10
11    /// Budget tokens for interleaved thinking
12    #[serde(default = "default_interleaved_thinking_budget_tokens")]
13    pub interleaved_thinking_budget_tokens: u32,
14
15    /// Type value for enabling interleaved thinking
16    #[serde(default = "default_interleaved_thinking_type")]
17    pub interleaved_thinking_type_enabled: String,
18
19    /// Tool search configuration for dynamic tool discovery (advanced-tool-use beta)
20    #[serde(default)]
21    pub tool_search: ToolSearchConfig,
22}
23
24impl Default for AnthropicConfig {
25    fn default() -> Self {
26        Self {
27            interleaved_thinking_beta: default_interleaved_thinking_beta(),
28            interleaved_thinking_budget_tokens: default_interleaved_thinking_budget_tokens(),
29            interleaved_thinking_type_enabled: default_interleaved_thinking_type(),
30            tool_search: ToolSearchConfig::default(),
31        }
32    }
33}
34
35/// Configuration for Anthropic's tool search feature (advanced-tool-use beta)
36/// Enables dynamic tool discovery for large tool catalogs (up to 10k tools)
37#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
38#[derive(Debug, Clone, Deserialize, Serialize)]
39pub struct ToolSearchConfig {
40    /// Enable tool search feature (requires advanced-tool-use-2025-11-20 beta)
41    #[serde(default)]
42    pub enabled: bool,
43
44    /// Search algorithm: "regex" (Python regex patterns) or "bm25" (natural language)
45    #[serde(default = "default_tool_search_algorithm")]
46    pub algorithm: String,
47
48    /// Automatically defer loading of all tools except core tools
49    #[serde(default = "default_defer_by_default")]
50    pub defer_by_default: bool,
51
52    /// Maximum number of tool search results to return
53    #[serde(default = "default_max_results")]
54    pub max_results: u32,
55
56    /// Tool names that should never be deferred (always available)
57    #[serde(default)]
58    pub always_available_tools: Vec<String>,
59}
60
61impl Default for ToolSearchConfig {
62    fn default() -> Self {
63        Self {
64            enabled: false,
65            algorithm: default_tool_search_algorithm(),
66            defer_by_default: default_defer_by_default(),
67            max_results: default_max_results(),
68            always_available_tools: vec![],
69        }
70    }
71}
72
73#[inline]
74fn default_tool_search_algorithm() -> String {
75    "regex".to_string()
76}
77
78#[inline]
79fn default_defer_by_default() -> bool {
80    true
81}
82
83#[inline]
84fn default_max_results() -> u32 {
85    5
86}
87
88#[inline]
89fn default_interleaved_thinking_beta() -> String {
90    "interleaved-thinking-2025-05-14".to_string()
91}
92
93#[inline]
94fn default_interleaved_thinking_budget_tokens() -> u32 {
95    12000
96}
97
98#[inline]
99fn default_interleaved_thinking_type() -> String {
100    "enabled".to_string()
101}