3535DEEPSEEK_CRITIC_MODEL = "deepseek/deepseek-v4-pro"
3636KIMI_CODE_PANEL_MODEL = "moonshotai/kimi-k2.7-code"
3737KIMI_PANEL_MODEL = "moonshotai/kimi-k3"
38+ # Historical constant name retained because the extension contract inspects the
39+ # bridge as text. The K3 budget applies to every direct completion role.
3840KIMI_K3_PANEL_MAX_TOKENS = 4096
3941DEFAULT_LEAD_MODEL = GLM_PRINCIPAL_MODEL
4042DEFAULT_PANEL_MODELS = (DEEPSEEK_CRITIC_MODEL , KIMI_CODE_PANEL_MODEL , KIMI_PANEL_MODEL )
@@ -138,7 +140,7 @@ def _chat_completion(
138140 body : dict [str , Any ] = {
139141 "model" : model ,
140142 "messages" : messages ,
141- "max_tokens" : max_tokens ,
143+ "max_tokens" : _effective_max_tokens ( model , max_tokens ) ,
142144 "stream" : False ,
143145 }
144146 if model == KIMI_PANEL_MODEL :
@@ -153,6 +155,33 @@ def _chat_completion(
153155 return str (content ), retry_meta
154156
155157
158+ def _effective_max_tokens (model : str , requested_max_tokens : int ) -> int :
159+ """Return the provider-compatible output budget for one model call."""
160+
161+ if model == KIMI_PANEL_MODEL :
162+ return max (requested_max_tokens , KIMI_K3_PANEL_MAX_TOKENS )
163+ return requested_max_tokens
164+
165+
166+ def _fusion_token_budgets (
167+ lead_model : str ,
168+ panel_models : list [str ],
169+ requested_max_tokens : int ,
170+ ) -> tuple [dict [str , Any ], dict [str , int ]]:
171+ """Build truthful effective token budgets for every Fusion role."""
172+
173+ panel = {
174+ model : _effective_max_tokens (model , requested_max_tokens )
175+ for model in panel_models
176+ }
177+ roles : dict [str , Any ] = {
178+ "lead" : _effective_max_tokens (lead_model , requested_max_tokens ),
179+ "panel" : panel ,
180+ "synthesis" : _effective_max_tokens (lead_model , requested_max_tokens ),
181+ }
182+ return roles , panel
183+
184+
156185def _clean_history (value : object ) -> list [dict [str , str ]]:
157186 if not isinstance (value , list ):
158187 return []
@@ -220,6 +249,27 @@ def _format_panel(lead_model: str, lead_text: str, panel_results: dict[str, str]
220249 return "\n \n " .join (parts )
221250
222251
252+ def _synthesis_user_prompt (
253+ redacted_prompt : str ,
254+ lead_text : str ,
255+ panel_results : dict [str , str ],
256+ ) -> str :
257+ """Assemble the bounded lead and panel evidence for synthesis."""
258+
259+ panel_text = "\n \n " .join (
260+ _model_label (model ) + " critique:\n " + text [:8000 ]
261+ for model , text in panel_results .items ()
262+ )
263+ return (
264+ "Original task:\n "
265+ + redacted_prompt
266+ + "\n \n Lead answer:\n "
267+ + lead_text [:12000 ]
268+ + "\n \n Panel critiques:\n "
269+ + panel_text
270+ )
271+
272+
223273def _none_like_model_text (value : object ) -> bool :
224274 text = str (value or "" ).strip ()
225275 lowered = text .lower ()
@@ -283,6 +333,7 @@ def _fusion_quorum_packet(
283333 lead_model : str ,
284334 panel_models : list [str ],
285335 panel_models_truncated : bool ,
336+ role_max_tokens : dict [str , Any ] | None = None ,
286337 panel_max_tokens : dict [str , int ] | None = None ,
287338 missing_required_evidence : list [str ] | None = None ,
288339 challenging_critics : list [str ] | None = None ,
@@ -307,6 +358,7 @@ def _fusion_quorum_packet(
307358 "lead_model" : lead_model ,
308359 "panel_models" : panel_models ,
309360 "panel_models_truncated" : panel_models_truncated ,
361+ "role_max_tokens" : dict (role_max_tokens or {}),
310362 "panel_max_tokens" : dict (panel_max_tokens or {}),
311363 "fusion_panel_quorum" : quorum ,
312364 },
@@ -383,10 +435,9 @@ def _run_foundups_fusion(
383435 temperature = _bounded_temperature (payload .get ("temperature" ), 0.2 )
384436 lead_model = _model_slug (payload .get ("lead_model" ), DEFAULT_LEAD_MODEL )
385437 panel_models , panel_models_truncated = _panel_models_with_meta (payload .get ("panel_models" ))
386- panel_max_tokens = {
387- model : (max (max_tokens , KIMI_K3_PANEL_MAX_TOKENS ) if model == KIMI_PANEL_MODEL else max_tokens )
388- for model in panel_models
389- }
438+ role_max_tokens , panel_max_tokens = _fusion_token_budgets (
439+ lead_model , panel_models , max_tokens
440+ )
390441 base_system = _system_prompt (payload )
391442 response_contract = str (payload .get ("response_contract" ) or "" )
392443 strict_json_contract = response_contract .startswith ("strict_json" )
@@ -401,6 +452,7 @@ def _run_foundups_fusion(
401452 lead_model = lead_model ,
402453 panel_models = panel_models ,
403454 panel_models_truncated = panel_models_truncated ,
455+ role_max_tokens = role_max_tokens ,
404456 panel_max_tokens = panel_max_tokens ,
405457 missing_required_evidence = missing_evidence ,
406458 )
@@ -422,7 +474,7 @@ def _run_foundups_fusion(
422474 api_key ,
423475 lead_model ,
424476 lead_messages ,
425- max_tokens = max_tokens ,
477+ max_tokens = role_max_tokens [ "lead" ] ,
426478 temperature = temperature ,
427479 timeout = timeout ,
428480 )
@@ -439,6 +491,7 @@ def _run_foundups_fusion(
439491 lead_model = lead_model ,
440492 panel_models = panel_models ,
441493 panel_models_truncated = panel_models_truncated ,
494+ role_max_tokens = role_max_tokens ,
442495 panel_max_tokens = panel_max_tokens ,
443496 )
444497
@@ -492,6 +545,7 @@ def _run_foundups_fusion(
492545 lead_model = lead_model ,
493546 panel_models = panel_models ,
494547 panel_models_truncated = panel_models_truncated ,
548+ role_max_tokens = role_max_tokens ,
495549 panel_max_tokens = panel_max_tokens ,
496550 challenging_critics = [],
497551 )
@@ -506,18 +560,7 @@ def _run_foundups_fusion(
506560 base_system
507561 + "\n \n Synthesis pass: resolve panel disagreement, preserve useful dissent, and return the best actionable WSP-compliant recommendation. The final section must be WSP_15 Priority followed by Next safest step."
508562 )
509- panel_text = "\n \n " .join (
510- _model_label (model ) + " critique:\n " + text [:8000 ]
511- for model , text in panel_results .items ()
512- )
513- synthesis_user = (
514- "Original task:\n "
515- + redacted_prompt
516- + "\n \n Lead answer:\n "
517- + lead_text [:12000 ]
518- + "\n \n Panel critiques:\n "
519- + panel_text
520- )
563+ synthesis_user = _synthesis_user_prompt (redacted_prompt , lead_text , panel_results )
521564 _progress ("synthesis_start" , "Synthesis request started: " + lead_model )
522565 try :
523566 synthesis , _syn_retry = _chat_completion (
@@ -527,7 +570,7 @@ def _run_foundups_fusion(
527570 {"role" : "system" , "content" : synthesis_system },
528571 {"role" : "user" , "content" : synthesis_user },
529572 ],
530- max_tokens = max_tokens ,
573+ max_tokens = role_max_tokens [ "synthesis" ] ,
531574 temperature = temperature ,
532575 timeout = timeout ,
533576 )
@@ -538,6 +581,7 @@ def _run_foundups_fusion(
538581 lead_model = lead_model ,
539582 panel_models = panel_models ,
540583 panel_models_truncated = panel_models_truncated ,
584+ role_max_tokens = role_max_tokens ,
541585 panel_max_tokens = panel_max_tokens ,
542586 challenging_critics = challenging_critics ,
543587 )
@@ -561,6 +605,8 @@ def _run_foundups_fusion(
561605 "lead_model" : lead_model ,
562606 "panel_models" : panel_models ,
563607 "panel_models_truncated" : panel_models_truncated ,
608+ "requested_max_tokens" : max_tokens ,
609+ "role_max_tokens" : role_max_tokens ,
564610 "panel_max_tokens" : panel_max_tokens ,
565611 "redacted_prompt" : redacted_prompt ,
566612 "lead_excerpt" : lead_text [:4000 ],
0 commit comments