@@ -186,98 +186,97 @@ fn distill(
186186 }
187187 }
188188
189- let ( output, filter_name, rewind_hash, kept_count, dropped_count, collapse_savings, route) = if let Some ( filter) =
190- matched_toml
191- {
192- let out = filter. apply ( & input_text) ;
193- ( out, filter. name . clone ( ) , None , 0 , 0 , None , Route :: Keep )
194- } else {
195- let cmd = command_name. unwrap_or ( "" ) ;
196-
197- // Pure Command Architecture: Resolve profile
198- let profile = crate :: pipeline:: registry:: resolve_profile ( cmd) ;
199-
200- // 1. Initial Scoring
201- let segments = scorer:: score_segments (
202- & input_text,
203- profile. segmentation ,
204- session. as_ref ( ) . and_then ( |m| m. lock ( ) . ok ( ) ) . as_deref ( ) ,
205- ) ;
206-
207- // 2. Collapse
208- let collapse_result = collapse:: collapse ( & input_text, & profile. collapse ) ;
209- let collapse_savings_data = if collapse_result. original_lines > collapse_result. collapsed_to {
210- Some ( ( collapse_result. original_lines , collapse_result. collapsed_to ) )
189+ let ( output, filter_name, rewind_hash, kept_count, dropped_count, collapse_savings, route) =
190+ if let Some ( filter) = matched_toml {
191+ let out = filter. apply ( & input_text) ;
192+ ( out, filter. name . clone ( ) , None , 0 , 0 , None , Route :: Keep )
211193 } else {
212- None
213- } ;
214- let effective_input = collapse_result. collapsed_lines . join ( "\n " ) ;
194+ let cmd = command_name. unwrap_or ( "" ) ;
215195
216- // 3. Re-score
217- let final_segments = if collapse_result. savings_pct > 0.1 {
218- scorer:: score_segments (
219- & effective_input,
196+ // Pure Command Architecture: Resolve profile
197+ let profile = crate :: pipeline:: registry:: resolve_profile ( cmd) ;
198+
199+ // 1. Initial Scoring
200+ let segments = scorer:: score_segments (
201+ & input_text,
220202 profile. segmentation ,
221203 session. as_ref ( ) . and_then ( |m| m. lock ( ) . ok ( ) ) . as_deref ( ) ,
222- )
223- } else {
224- segments
225- } ;
204+ ) ;
226205
227- // 4. Distill
228- let mut out = crate :: distillers:: distill_with_command (
229- & final_segments,
230- & effective_input,
231- cmd,
232- session. as_ref ( ) . and_then ( |m| m. lock ( ) . ok ( ) ) . as_deref ( ) ,
233- ) ;
206+ // 2. Collapse
207+ let collapse_result = collapse:: collapse ( & input_text, & profile. collapse ) ;
208+ let collapse_savings_data =
209+ if collapse_result. original_lines > collapse_result. collapsed_to {
210+ Some ( ( collapse_result. original_lines , collapse_result. collapsed_to ) )
211+ } else {
212+ None
213+ } ;
214+ let effective_input = collapse_result. collapsed_lines . join ( "\n " ) ;
215+
216+ // 3. Re-score
217+ let final_segments = if collapse_result. savings_pct > 0.1 {
218+ scorer:: score_segments (
219+ & effective_input,
220+ profile. segmentation ,
221+ session. as_ref ( ) . and_then ( |m| m. lock ( ) . ok ( ) ) . as_deref ( ) ,
222+ )
223+ } else {
224+ segments
225+ } ;
226+
227+ // 4. Distill
228+ let mut out = crate :: distillers:: distill_with_command (
229+ & final_segments,
230+ & effective_input,
231+ cmd,
232+ session. as_ref ( ) . and_then ( |m| m. lock ( ) . ok ( ) ) . as_deref ( ) ,
233+ ) ;
234234
235- // Rewind decision
236- let noise_count = final_segments
237- . iter ( )
238- . filter ( |s| s. final_score ( ) < 0.3 )
239- . count ( ) ;
240- let should_store = noise_count as f32 / final_segments. len ( ) . max ( 1 ) as f32 > 0.4
241- && final_segments. len ( ) > 20 ;
242-
243- let d_count = noise_count;
244- let k_count = final_segments. len ( ) - d_count;
245-
246- let dropped_lines: usize = final_segments
247- . iter ( )
248- . filter ( |s| s. final_score ( ) < 0.3 )
249- . map ( |s| s. content . lines ( ) . count ( ) )
250- . sum ( ) ;
251-
252- // Auto-learn trigger
253- if !cmd. is_empty ( ) && input_text. len ( ) > 100 {
254- let poor = final_segments. len ( ) > 5
255- && ( d_count as f32 / final_segments. len ( ) . max ( 1 ) as f32 ) < 0.3 ;
256- if poor {
257- crate :: session:: learn:: queue_for_learn ( & input_text, cmd) ;
235+ // Rewind decision
236+ let noise_count = final_segments
237+ . iter ( )
238+ . filter ( |s| s. final_score ( ) < 0.3 )
239+ . count ( ) ;
240+ let should_store = noise_count as f32 / final_segments. len ( ) . max ( 1 ) as f32 > 0.4
241+ && final_segments. len ( ) > 20 ;
242+
243+ let d_count = noise_count;
244+ let k_count = final_segments. len ( ) - d_count;
245+
246+ let dropped_lines: usize = final_segments
247+ . iter ( )
248+ . filter ( |s| s. final_score ( ) < 0.3 )
249+ . map ( |s| s. content . lines ( ) . count ( ) )
250+ . sum ( ) ;
251+
252+ // Auto-learn trigger
253+ if !cmd. is_empty ( ) && input_text. len ( ) > 100 {
254+ let poor = final_segments. len ( ) > 5
255+ && ( d_count as f32 / final_segments. len ( ) . max ( 1 ) as f32 ) < 0.3 ;
256+ if poor {
257+ crate :: session:: learn:: queue_for_learn ( & input_text, cmd) ;
258+ }
258259 }
259- }
260-
261- let mut r_hash = None ;
262-
263- // Determine Route
264- let ratio = 1.0 - ( out. len ( ) as f32 / input_text. len ( ) . max ( 1 ) as f32 ) ;
265- let mut route = if r_hash. is_some ( ) {
266- Route :: Rewind
267- } else if ratio >= 0.7 {
268- Route :: Keep
269- } else if ratio >= 0.3 {
270- Route :: Soft
271- } else {
272- Route :: Passthrough
273- } ;
274260
275- if route == Route :: Soft {
276- out. push_str ( "\n [Partial signal - omni learn recommended]\n " ) ;
277- }
261+ let mut r_hash = None ;
262+
263+ // Determine Route
264+ let ratio = 1.0 - ( out. len ( ) as f32 / input_text. len ( ) . max ( 1 ) as f32 ) ;
265+ let mut route = if r_hash. is_some ( ) {
266+ Route :: Rewind
267+ } else if ratio >= 0.7 {
268+ Route :: Keep
269+ } else if ratio >= 0.3 {
270+ Route :: Soft
271+ } else {
272+ Route :: Passthrough
273+ } ;
274+
275+ if route == Route :: Soft {
276+ out. push_str ( "\n [Partial signal - omni learn recommended]\n " ) ;
277+ }
278278
279- if should_store {
280- if let Some ( s) = store {
279+ if should_store && let Some ( s) = store {
281280 let hash = s. store_rewind ( & input_text) ;
282281 if std:: io:: stdout ( ) . is_terminal ( ) {
283282 out. push_str ( & format ! (
@@ -297,25 +296,24 @@ fn distill(
297296 r_hash = Some ( hash) ;
298297 route = Route :: Rewind ; // Override if stored in rewind
299298 }
300- }
301299
302- // Safety truncation
303- const MAX_OUTPUT : usize = 50_000 ;
304- if out. len ( ) > MAX_OUTPUT {
305- out. truncate ( MAX_OUTPUT ) ;
306- out. push_str ( "\n [OMNI: output truncated]\n " ) ;
307- }
300+ // Safety truncation
301+ const MAX_OUTPUT : usize = 50_000 ;
302+ if out. len ( ) > MAX_OUTPUT {
303+ out. truncate ( MAX_OUTPUT ) ;
304+ out. push_str ( "\n [OMNI: output truncated]\n " ) ;
305+ }
308306
309- (
310- out,
311- cmd. split_whitespace ( ) . next ( ) . unwrap_or ( "omni" ) . to_string ( ) ,
312- r_hash,
313- k_count,
314- d_count,
315- collapse_savings_data,
316- route,
317- )
318- } ;
307+ (
308+ out,
309+ cmd. split_whitespace ( ) . next ( ) . unwrap_or ( "omni" ) . to_string ( ) ,
310+ r_hash,
311+ k_count,
312+ d_count,
313+ collapse_savings_data,
314+ route,
315+ )
316+ } ;
319317
320318 PipelineResult {
321319 session_id,
0 commit comments