@@ -27,6 +27,15 @@ pub struct VisionContext<'a> {
2727 pub image_buffer : & ' a mut Vec < image:: DynamicImage > ,
2828}
2929
30+ /// Aggregates frequently used parameters so that helper functions stay below
31+ /// Clippy’s `too_many_arguments` threshold.
32+ pub struct HandlerParams < ' a > {
33+ pub socket : & ' a mut WebSocket ,
34+ pub app : & ' a Arc < AppState > ,
35+ pub streaming : & ' a mut bool ,
36+ pub active_chat_id : & ' a Option < String > ,
37+ }
38+
3039/// Upgrades an HTTP request to a WebSocket connection.
3140pub async fn ws_handler (
3241 ws : WebSocketUpgrade ,
@@ -193,15 +202,18 @@ pub async fn handle_socket(mut socket: WebSocket, app: Arc<AppState>) {
193202 } ;
194203 match model_loaded {
195204 LoadedModel :: Text ( model) => {
205+ let mut params = HandlerParams {
206+ socket : & mut socket,
207+ app : & app,
208+ streaming : & mut streaming,
209+ active_chat_id : & active_chat_id,
210+ } ;
196211 handle_text_model (
197212 & model,
198213 content,
199214 web_search_opts. clone ( ) ,
200215 & mut text_msgs,
201- & mut socket,
202- & app,
203- & mut streaming,
204- & active_chat_id,
216+ & mut params,
205217 )
206218 . await ;
207219 }
@@ -210,15 +222,18 @@ pub async fn handle_socket(mut socket: WebSocket, app: Arc<AppState>) {
210222 msgs : & mut vision_msgs,
211223 image_buffer : & mut image_buffer,
212224 } ;
225+ let mut params = HandlerParams {
226+ socket : & mut socket,
227+ app : & app,
228+ streaming : & mut streaming,
229+ active_chat_id : & active_chat_id,
230+ } ;
213231 handle_vision_model (
214232 & model,
215233 content,
216234 web_search_opts. clone ( ) ,
217235 & mut vision_ctx,
218- & mut socket,
219- & app,
220- & mut streaming,
221- & active_chat_id,
236+ & mut params,
222237 )
223238 . await ;
224239 }
@@ -252,34 +267,26 @@ pub async fn handle_socket(mut socket: WebSocket, app: Arc<AppState>) {
252267
253268 match model_loaded {
254269 LoadedModel :: Text ( model) => {
255- handle_text_model (
256- & model,
257- & user_msg,
258- None ,
259- & mut text_msgs,
260- & mut socket,
261- & app,
262- & mut streaming,
263- & active_chat_id,
264- )
265- . await ;
270+ let mut params = HandlerParams {
271+ socket : & mut socket,
272+ app : & app,
273+ streaming : & mut streaming,
274+ active_chat_id : & active_chat_id,
275+ } ;
276+ handle_text_model ( & model, & user_msg, None , & mut text_msgs, & mut params) . await ;
266277 }
267278 LoadedModel :: Vision ( model) => {
268279 let mut vision_ctx = VisionContext {
269280 msgs : & mut vision_msgs,
270281 image_buffer : & mut image_buffer,
271282 } ;
272- handle_vision_model (
273- & model,
274- & user_msg,
275- None ,
276- & mut vision_ctx,
277- & mut socket,
278- & app,
279- & mut streaming,
280- & active_chat_id,
281- )
282- . await ;
283+ let mut params = HandlerParams {
284+ socket : & mut socket,
285+ app : & app,
286+ streaming : & mut streaming,
287+ active_chat_id : & active_chat_id,
288+ } ;
289+ handle_vision_model ( & model, & user_msg, None , & mut vision_ctx, & mut params) . await ;
283290 }
284291 // Speech models should use HTTP endpoint; not handled here
285292 LoadedModel :: Speech ( _) => {
@@ -389,11 +396,13 @@ async fn handle_text_model(
389396 user_msg : & str ,
390397 web_search_opts : Option < WebSearchOptions > ,
391398 text_msgs : & mut TextMessages ,
392- socket : & mut WebSocket ,
393- app : & Arc < AppState > ,
394- streaming : & mut bool ,
395- active_chat_id : & Option < String > ,
399+ params : & mut HandlerParams < ' _ > ,
396400) {
401+ // Local aliases keep the original body unchanged.
402+ let socket = & mut * params. socket ;
403+ let app = params. app ;
404+ let streaming = & mut * params. streaming ;
405+ let active_chat_id = params. active_chat_id ;
397406 * text_msgs = text_msgs
398407 . clone ( )
399408 . add_message ( TextMessageRole :: User , user_msg) ;
@@ -437,11 +446,12 @@ async fn handle_vision_model(
437446 user_msg : & str ,
438447 web_search_opts : Option < WebSearchOptions > ,
439448 vision_ctx : & mut VisionContext < ' _ > ,
440- socket : & mut WebSocket ,
441- app : & Arc < AppState > ,
442- streaming : & mut bool ,
443- active_chat_id : & Option < String > ,
449+ params : & mut HandlerParams < ' _ > ,
444450) {
451+ let socket = & mut * params. socket ;
452+ let app = params. app ;
453+ let streaming = & mut * params. streaming ;
454+ let active_chat_id = params. active_chat_id ;
445455 // Track the exact set of messages that will be sent *this* turn.
446456 let mut msgs_for_stream: Option < VisionMessages > = None ;
447457 // --- Vision input routing ---
0 commit comments