77
88use serde:: { Deserialize , Serialize } ;
99
10- use crate :: { DEFAULT_MOONSHOT_BASE_URL , ProviderKind , provider_base_url_is_official} ;
10+ use crate :: {
11+ DEFAULT_KIMI_CODE_BASE_URL , DEFAULT_MOONSHOT_BASE_URL , ProviderKind ,
12+ provider_base_url_is_official,
13+ } ;
1114
1215/// Whether a resolved provider/model offering supports one capability.
1316#[ derive( Debug , Clone , Copy , Default , PartialEq , Eq , Serialize , Deserialize ) ]
@@ -86,6 +89,8 @@ pub(crate) fn documented_server_side_web_search(
8689 wire_model_id. as_str( ) ,
8790 "deepseek-v4-flash" | "deepseek-v4-pro" | "deepseek-v4-flash-vision-exp"
8891 ) ,
92+ // K3 uses the Formula API official-tools channel; K2.6 retains the
93+ // earlier `$web_search` contract with thinking disabled.
8994 "moonshot" => matches ! ( wire_model_id. as_str( ) , "kimi-k3" | "kimi-k2.6" ) ,
9095 "modelstudio-token-plan" => matches ! (
9196 wire_model_id. as_str( ) ,
@@ -121,7 +126,7 @@ pub(crate) fn documented_server_side_web_search_for_route(
121126 }
122127
123128 if provider == ProviderKind :: Moonshot
124- && normalized == "https://api.kimi.com/coding/v1"
129+ && normalized == DEFAULT_KIMI_CODE_BASE_URL
125130 && matches ! (
126131 wire_model_id. trim( ) . to_ascii_lowercase( ) . as_str( ) ,
127132 "k3" | "k3-256k" | "kimi-for-coding" | "kimi-for-coding-highspeed"
@@ -143,8 +148,8 @@ pub(crate) fn documented_server_side_web_search_for_route(
143148 | ProviderKind :: Anthropic
144149 | ProviderKind :: Xai
145150 | ProviderKind :: XiaomiMimo => true ,
146- // Moonshot's built-in `$web_search` contract belongs to the exact
147- // direct API product. Kimi Code's exact `/coding/v1` product is
151+ // Moonshot's Formula/legacy `$web_search` contracts belong to the
152+ // exact direct API product. Kimi Code's exact `/coding/v1` product is
148153 // handled above; adjacent coding paths must remain fail-closed.
149154 ProviderKind :: Moonshot => normalized == DEFAULT_MOONSHOT_BASE_URL ,
150155 // Token Plan exposes Harness web_search only on its Responses API.
@@ -245,6 +250,14 @@ mod tests {
245250 documented_server_side_web_search( "deepseek" , "deepseek-v4-flash" ) ,
246251 CapabilityState :: Supported
247252 ) ;
253+ assert_eq ! (
254+ documented_server_side_web_search( "moonshot" , "kimi-k2.6" ) ,
255+ CapabilityState :: Supported
256+ ) ;
257+ assert_eq ! (
258+ documented_server_side_web_search( "moonshot" , "kimi-k3" ) ,
259+ CapabilityState :: Supported
260+ ) ;
248261 assert_eq ! (
249262 documented_server_side_web_search( "modelstudio-token-plan" , "qwen3.8-max" ) ,
250263 CapabilityState :: Supported
@@ -282,6 +295,14 @@ mod tests {
282295 ) ,
283296 CapabilityState :: Supported
284297 ) ;
298+ assert_eq ! (
299+ documented_server_side_web_search_for_route(
300+ ProviderKind :: Moonshot ,
301+ "kimi-k2.6" ,
302+ "https://api.moonshot.ai/v1" ,
303+ ) ,
304+ CapabilityState :: Supported
305+ ) ;
285306 assert_eq ! (
286307 documented_server_side_web_search_for_route(
287308 ProviderKind :: ModelstudioTokenPlan ,
0 commit comments