@@ -64,14 +64,15 @@ def _visible_results(step: dict[str, Any]) -> dict[str, int]:
6464 return visible_by_call
6565
6666
67- def _analyze_step (step : object ) -> tuple [int , int , int , int , int , int ]:
67+ def _analyze_step (step : object ) -> tuple [int , int , int , int , int , int , int ]:
6868 if not isinstance (step , dict ):
69- return (0 , 0 , 0 , 0 , 0 , 0 )
69+ return (0 , 0 , 0 , 0 , 0 , 0 , 0 )
7070 visible_by_call = _visible_results (step )
7171 tool_calls = step .get ("tool_calls" , [])
7272 if not isinstance (tool_calls , list ):
73- return (0 , 0 , 0 , 0 , 0 , 0 )
73+ return (0 , 0 , 0 , 0 , 0 , 0 , 0 )
7474 scan_count = scan_bytes = unbound_scan_count = tool_output_bytes = 0
75+ jacobian_output_bytes = 0
7576 direct_find_references = direct_run_references = 0
7677 for call in tool_calls :
7778 if not isinstance (call , dict ):
@@ -83,8 +84,12 @@ def _analyze_step(step: object) -> tuple[int, int, int, int, int, int]:
8384 source = arguments .get ("input" ) if isinstance (arguments , dict ) else None
8485 if call .get ("function_name" ) != "exec" or not isinstance (source , str ):
8586 continue
86- direct_find_references += source .count (_JACOBIAN_FIND )
87- direct_run_references += source .count (_JACOBIAN_RUN )
87+ find_references = source .count (_JACOBIAN_FIND )
88+ run_references = source .count (_JACOBIAN_RUN )
89+ direct_find_references += find_references
90+ direct_run_references += run_references
91+ if find_references or run_references :
92+ jacobian_output_bytes += visible
8893 if "ALL_TOOLS" in source :
8994 scan_count += 1
9095 scan_bytes += visible
@@ -95,6 +100,7 @@ def _analyze_step(step: object) -> tuple[int, int, int, int, int, int]:
95100 scan_bytes ,
96101 unbound_scan_count ,
97102 tool_output_bytes ,
103+ jacobian_output_bytes ,
98104 direct_find_references ,
99105 direct_run_references ,
100106 )
@@ -108,6 +114,7 @@ def analyze_trajectory(path: Path) -> dict[str, Any]:
108114 scan_bytes = 0
109115 unbound_scan_count = 0
110116 tool_output_bytes = 0
117+ jacobian_output_bytes = 0
111118 direct_find_references = 0
112119 direct_run_references = 0
113120
@@ -117,8 +124,9 @@ def analyze_trajectory(path: Path) -> dict[str, Any]:
117124 scan_bytes += step_counts [1 ]
118125 unbound_scan_count += step_counts [2 ]
119126 tool_output_bytes += step_counts [3 ]
120- direct_find_references += step_counts [4 ]
121- direct_run_references += step_counts [5 ]
127+ jacobian_output_bytes += step_counts [4 ]
128+ direct_find_references += step_counts [5 ]
129+ direct_run_references += step_counts [6 ]
122130
123131 metrics = trajectory .get ("final_metrics" )
124132 metrics = metrics if isinstance (metrics , dict ) else {}
@@ -137,6 +145,7 @@ def analyze_trajectory(path: Path) -> dict[str, Any]:
137145 "all_tools_model_visible_bytes" : scan_bytes ,
138146 "all_tools_unbound_observation_count" : unbound_scan_count ,
139147 "tool_model_visible_bytes" : tool_output_bytes ,
148+ "direct_jacobian_find_run_model_visible_bytes" : jacobian_output_bytes ,
140149 "direct_jacobian_find_references" : direct_find_references ,
141150 "direct_jacobian_run_references" : direct_run_references ,
142151 "prompt_tokens" : prompt_tokens ,
@@ -165,6 +174,33 @@ def build_report(paths: list[Path], *, label: str) -> dict[str, Any]:
165174 "label" : label ,
166175 "trial_count" : len (trials ),
167176 "summary" : {
177+ "jacobian_invocation_trials" : sum (
178+ int (
179+ trial ["direct_jacobian_find_references" ] > 0
180+ or trial ["direct_jacobian_run_references" ] > 0
181+ )
182+ for trial in trials
183+ ),
184+ "jacobian_execution_trials" : sum (
185+ int (trial ["direct_jacobian_run_references" ] > 0 ) for trial in trials
186+ ),
187+ "jacobian_unused_trials" : sum (
188+ int (
189+ trial ["direct_jacobian_find_references" ] == 0
190+ and trial ["direct_jacobian_run_references" ] == 0
191+ )
192+ for trial in trials
193+ ),
194+ "direct_jacobian_find_references" : sum (
195+ int (trial ["direct_jacobian_find_references" ]) for trial in trials
196+ ),
197+ "direct_jacobian_run_references" : sum (
198+ int (trial ["direct_jacobian_run_references" ]) for trial in trials
199+ ),
200+ "direct_jacobian_find_run_model_visible_bytes" : sum (
201+ int (trial ["direct_jacobian_find_run_model_visible_bytes" ])
202+ for trial in trials
203+ ),
168204 "all_tools_scan_trials" : sum (
169205 int (trial ["all_tools_scan_count" ] > 0 ) for trial in trials
170206 ),
0 commit comments