@@ -59,6 +59,7 @@ pub struct ServerState {
5959 pub qwen_provider : QwenProvider ,
6060 pub openai_custom_provider : OpenAICustomProvider ,
6161 pub claude_custom_provider : ClaudeCustomProvider ,
62+ pub default_provider_ref : Arc < RwLock < String > > ,
6263 shutdown_tx : Option < oneshot:: Sender < ( ) > > ,
6364}
6465
@@ -69,6 +70,7 @@ impl ServerState {
6970 let qwen = QwenProvider :: new ( ) ;
7071 let openai_custom = OpenAICustomProvider :: new ( ) ;
7172 let claude_custom = ClaudeCustomProvider :: new ( ) ;
73+ let default_provider_ref = Arc :: new ( RwLock :: new ( config. default_provider . clone ( ) ) ) ;
7274
7375 Self {
7476 config,
@@ -80,6 +82,7 @@ impl ServerState {
8082 qwen_provider : qwen,
8183 openai_custom_provider : openai_custom,
8284 claude_custom_provider : claude_custom,
85+ default_provider_ref,
8386 shutdown_tx : None ,
8487 }
8588 }
@@ -111,6 +114,7 @@ impl ServerState {
111114 let host = self . config . server . host . clone ( ) ;
112115 let port = self . config . server . port ;
113116 let api_key = self . config . server . api_key . clone ( ) ;
117+ let default_provider_ref = self . default_provider_ref . clone ( ) ;
114118
115119 // 重新加载凭证
116120 let _ = self . kiro_provider . load_credentials ( ) . await ;
@@ -121,6 +125,7 @@ impl ServerState {
121125 & host,
122126 port,
123127 & api_key,
128+ default_provider_ref,
124129 kiro,
125130 logs,
126131 rx,
@@ -163,6 +168,7 @@ impl Clone for KiroProvider {
163168struct AppState {
164169 api_key : String ,
165170 base_url : String ,
171+ default_provider : Arc < RwLock < String > > ,
166172 kiro : Arc < RwLock < KiroProvider > > ,
167173 logs : Arc < RwLock < LogStore > > ,
168174 kiro_refresh_lock : Arc < tokio:: sync:: Mutex < ( ) > > ,
@@ -177,6 +183,7 @@ async fn run_server(
177183 host : & str ,
178184 port : u16 ,
179185 api_key : & str ,
186+ default_provider : Arc < RwLock < String > > ,
180187 kiro : KiroProvider ,
181188 logs : Arc < RwLock < LogStore > > ,
182189 shutdown : oneshot:: Receiver < ( ) > ,
@@ -188,6 +195,7 @@ async fn run_server(
188195 let state = AppState {
189196 api_key : api_key. to_string ( ) ,
190197 base_url,
198+ default_provider,
191199 kiro : Arc :: new ( RwLock :: new ( kiro) ) ,
192200 logs,
193201 kiro_refresh_lock : Arc :: new ( tokio:: sync:: Mutex :: new ( ( ) ) ) ,
@@ -311,6 +319,42 @@ async fn chat_completions(
311319 ) ,
312320 ) ;
313321
322+ // 获取当前默认 provider
323+ let default_provider = state. default_provider . read ( ) . await . clone ( ) ;
324+
325+ // 尝试从凭证池中选择凭证
326+ let credential = match & state. db {
327+ Some ( db) => state
328+ . pool_service
329+ . select_credential ( db, & default_provider, Some ( & request. model ) )
330+ . ok ( )
331+ . flatten ( ) ,
332+ None => None ,
333+ } ;
334+
335+ // 如果找到凭证池中的凭证,使用它
336+ if let Some ( cred) = credential {
337+ state. logs . write ( ) . await . add (
338+ "info" ,
339+ & format ! (
340+ "[ROUTE] Using pool credential: type={} name={:?} uuid={}" ,
341+ cred. provider_type,
342+ cred. name,
343+ & cred. uuid[ ..8 ]
344+ ) ,
345+ ) ;
346+ return call_provider_openai ( & state, & cred, & request) . await ;
347+ }
348+
349+ // 回退到旧的单凭证模式
350+ state. logs . write ( ) . await . add (
351+ "debug" ,
352+ & format ! (
353+ "[ROUTE] No pool credential found for '{}', using legacy mode" ,
354+ default_provider
355+ ) ,
356+ ) ;
357+
314358 // 检查是否需要刷新 token(无 token 或即将过期)
315359 {
316360 let _guard = state. kiro_refresh_lock . lock ( ) . await ;
@@ -595,6 +639,45 @@ async fn anthropic_messages(
595639 ) ;
596640 }
597641
642+ // 获取当前默认 provider
643+ let default_provider = state. default_provider . read ( ) . await . clone ( ) ;
644+
645+ // 尝试从凭证池中选择凭证
646+ let credential = match & state. db {
647+ Some ( db) => {
648+ // 根据 default_provider 配置选择凭证
649+ state
650+ . pool_service
651+ . select_credential ( db, & default_provider, Some ( & request. model ) )
652+ . ok ( )
653+ . flatten ( )
654+ }
655+ None => None ,
656+ } ;
657+
658+ // 如果找到凭证池中的凭证,使用它
659+ if let Some ( cred) = credential {
660+ state. logs . write ( ) . await . add (
661+ "info" ,
662+ & format ! (
663+ "[ROUTE] Using pool credential: type={} name={:?} uuid={}" ,
664+ cred. provider_type,
665+ cred. name,
666+ & cred. uuid[ ..8 ]
667+ ) ,
668+ ) ;
669+ return call_provider_anthropic ( & state, & cred, & request) . await ;
670+ }
671+
672+ // 回退到旧的单凭证模式
673+ state. logs . write ( ) . await . add (
674+ "debug" ,
675+ & format ! (
676+ "[ROUTE] No pool credential found for '{}', using legacy mode" ,
677+ default_provider
678+ ) ,
679+ ) ;
680+
598681 // 检查是否需要刷新 token(无 token 或即将过期)
599682 {
600683 let _guard = state. kiro_refresh_lock . lock ( ) . await ;
0 commit comments