@@ -179,47 +179,65 @@ fn distill(
179179 }
180180 }
181181
182- let ( output, filter_name, ctype, rewind_hash, kept_count, dropped_count) =
183- if let Some ( filter) = matched_toml {
184- let out = filter. apply ( & input_text) ;
185- ( out, filter. name . clone ( ) , ContentType :: Unknown , None , 0 , 0 )
186- } else {
187- let c = classifier:: classify ( & input_text) ;
188-
189- let collapse_result = collapse:: collapse ( & input_text, & c) ;
190- let effective_input = collapse_result. collapsed_lines . join ( "\n " ) ;
191-
192- let active_session_opt = session. as_ref ( ) . and_then ( |m| m. lock ( ) . ok ( ) ) ;
193- let scored_segments =
194- scorer:: score_segments ( & effective_input, & c, active_session_opt. as_deref ( ) ) ;
195- drop ( active_session_opt) ;
196-
197- let compose_config = composer:: ComposeConfig :: default ( ) ;
198- let decision = composer:: decide_rewind ( & scored_segments, & c) ;
199-
200- let k_count = scored_segments
201- . iter ( )
202- . filter ( |s| s. final_score ( ) >= compose_config. threshold )
203- . count ( ) ;
204- let d_count = scored_segments. len ( ) - k_count;
205-
206- let store_for_compose = if decision. should_store { store } else { None } ;
207-
208- let ( out, r_hash) = composer:: compose (
209- scored_segments,
210- if decision. should_store {
211- Some ( input_text. clone ( ) )
212- } else {
213- None
214- } , // Temporary clone for compose drops
215- & compose_config,
216- store_for_compose,
217- & input_text,
218- & c,
219- ) ;
182+ let ( output, filter_name, ctype, rewind_hash, kept_count, dropped_count) = if let Some ( filter) =
183+ matched_toml
184+ {
185+ let out = filter. apply ( & input_text) ;
186+ ( out, filter. name . clone ( ) , ContentType :: Unknown , None , 0 , 0 )
187+ } else {
188+ let c = classifier:: classify ( & input_text, command_name) ;
220189
221- ( out, format ! ( "{:?}" , c) , c, r_hash, k_count, d_count)
222- } ;
190+ let collapse_result = collapse:: collapse ( & input_text, & c) ;
191+ let effective_input = collapse_result. collapsed_lines . join ( "\n " ) ;
192+
193+ let active_session_opt = session. as_ref ( ) . and_then ( |m| m. lock ( ) . ok ( ) ) ;
194+ let scored_segments =
195+ scorer:: score_segments ( & effective_input, & c, active_session_opt. as_deref ( ) ) ;
196+
197+ let distiller = crate :: distillers:: get_distiller ( & c) ;
198+ let mut out =
199+ distiller. distill ( & scored_segments, & input_text, active_session_opt. as_deref ( ) ) ;
200+
201+ let compose_config = composer:: ComposeConfig :: default ( ) ;
202+ let decision = composer:: decide_rewind ( & scored_segments, & c) ;
203+
204+ let k_count = scored_segments
205+ . iter ( )
206+ . filter ( |s| s. final_score ( ) >= compose_config. threshold )
207+ . count ( ) ;
208+ let d_count = scored_segments. len ( ) - k_count;
209+
210+ crate :: pipeline:: composer:: evaluate_learning (
211+ & c,
212+ & input_text,
213+ scored_segments. len ( ) ,
214+ d_count,
215+ command_name. unwrap_or ( "" ) ,
216+ ) ;
217+
218+ let mut r_hash = None ;
219+ if decision. should_store
220+ && let Some ( s) = store
221+ {
222+ let hash = s. store_rewind ( & input_text) ;
223+ out. push_str ( & format ! (
224+ "\n {} {} {} {} lines. The hash {} stores the full output in RewindStore for retrieval.\n " ,
225+ "⏺" . cyan( ) ,
226+ "OMNI" . bold( ) . bright_white( ) ,
227+ "distilled" . bright_green( ) ,
228+ d_count,
229+ hash. cyan( ) . bold( )
230+ ) ) ;
231+ r_hash = Some ( hash) ;
232+ }
233+
234+ if out. len ( ) > compose_config. max_output_chars {
235+ out. truncate ( compose_config. max_output_chars ) ;
236+ out. push_str ( "\n [OMNI: output truncated]\n " ) ;
237+ }
238+
239+ ( out, format ! ( "{:?}" , c) , c, r_hash, k_count, d_count)
240+ } ;
223241
224242 PipelineResult {
225243 session_id,
0 commit comments