Skip to content

janpf/debuggAIr

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 

Repository files navigation

debuggAir - Your AI-Powered Debugging Companion 🤖

Tired of debugging your code? Let an AI do it for you! Just run python -m debuggAir <your_script.py> and let debuggAir do the rest!

The following, definitely not cherry-picked example took just 5 seconds to run! Can you find the fix faster than ChatGPT? 🤓

(venv) janpf@mbp ~/p/S/s/evaluation (main)> python -m debuggAir broken_script.py
2023-12-15 01:08:49.770 | INFO     | __main__:<module>:69 -
Traceback (most recent call last): File ".../Python.framework/Versions/3.10/lib/python3.10/pdb.py", line 1723, in main
    pdb._runscript(mainpyfile)
  File ".../Python.framework/Versions/3.10/lib/python3.10/pdb.py", line 1583, in _runscript
    self.run(statement)
  File ".../Python.framework/Versions/3.10/lib/python3.10/bdb.py", line 598, in run
    exec(cmd, globals, locals)
  File "<string>", line 1, in <module>
  File "/Users/janpf/.../src/evaluation/tester.py", line 48, in <module>
    *[eval_results[c] for c in columns if "_" in c],
  File "/Users/janpf/.../src/evaluation/tester.py", line 48, in <listcomp>
    *[eval_results[c] for c in columns if "_" in c],
KeyError: 'predict_overall_acc'
Uncaught exception. Entering post mortem debugging
Running 'cont' or 'step' will restart the program
> /Users/janpf/.../src/evaluation/tester.py(48)<listcomp>()
-> *[eval_results[c] for c in columns if "_" in c],
(Pdb) w
main()
-> pdb._runscript(mainpyfile)
  .../Python.framework/Versions/3.10/lib/python3.10/pdb.py(1583)_runscript()
-> self.run(statement)
  .../Python.framework/Versions/3.10/lib/python3.10/bdb.py(598)run()
-> exec(cmd, globals, locals)
  <string>(1)<module>()
  /Users/janpf/.../src/evaluation/tester.py(48)<module>()
-> *[eval_results[c] for c in columns if "_" in c],
> /Users/janpf/.../src/evaluation/tester.py(48)<listcomp>()
-> *[eval_results[c] for c in columns if "_" in c],
(Pdb) l
 43                                      [
 44                                     cfg["model"]["model_name"],
 45                                     cfg["task"]["task_name"],
 46                                     cfg["seed"],
 47                                     f"{day.name}/{run.name}",
 48  ->                                 *[eval_results[c] for c in columns if "_" in c],
 49                                 ]
 50                             ],
 51                             columns=columns,
 52                         ),
 53                     ]
(Pdb) p columns, eval_results
(['model', 'task', 'seed', 'source', 'predict_overall_f1', 'predict_overall_acc', 'predict_loss'], {'pred_samples': 977, 'predict_ART_f1': 0.0, 'predict_ART_number': 210, 'predict_ART_precision': 0.0, 'predict_ART_recall': 0.0, 'predict_CONJ_f1': 0.0, 'predict_CONJ_number': 747, 'predict_CONJ_precision': 0.0, 'predict_CONJ_recall': 0.0, 'predict_DJ_f1': 0.0, 'predict_DJ_number': 989, 'predict_DJ_precision': 0.0, 'predict_DJ_recall': 0.0, 'predict_DP_f1': 0.0, 'predict_DP_number': 1594, 'predict_DP_precision': 0.0, 'predict_DP_recall': 0.0, 'predict_DV_f1': 0.0, 'predict_DV_number': 1060, 'predict_DV_precision': 0.0, 'predict_DV_recall': 0.0, 'predict_ERB_f1': 0.0, 'predict_ERB_number': 1304, 'predict_ERB_precision': 0.0, 'predict_ERB_recall': 0.0, 'predict_ET_f1': 0.0, 'predict_ET_number': 1881, 'predict_ET_precision': 0.0, 'predict_ET_recall': 0.0, 'predict_NTJ_f1': 0.0, 'predict_NTJ_number': 4, 'predict_NTJ_precision': 0.0, 'predict_NTJ_recall': 0.0, 'predict_OUN_f1': 0.0, 'predict_OUN_number': 3047, 'predict_OUN_precision': 0.0, 'predict_OUN_recall': 0.0, 'predict_RON_f1': 0.0, 'predict_RON_number': 962, 'predict_RON_precision': 0.0, 'predict_RON_recall': 0.0, 'predict_ROPN_f1': 0.0, 'predict_ROPN_number': 836, 'predict_ROPN_precision': 0.0, 'predict_ROPN_recall': 0.0, 'predict_UM_f1': 0.0, 'predict_UM_number': 249, 'predict_UM_precision': 0.0, 'predict_UM_recall': 0.0, 'predict_UNCT_f1': 0.0, 'predict_UNCT_number': 2183, 'predict_UNCT_precision': 0.0, 'predict_UNCT_recall': 0.0, 'predict_UX_f1': 0.0, 'predict_UX_number': 676, 'predict_UX_precision': 0.0, 'predict_UX_recall': 0.0, 'predict_YM_f1': 0.0, 'predict_YM_number': 5, 'predict_YM_precision': 0.0, 'predict_YM_recall': 0.0, 'predict___f1': 0.0, 'predict___number': 15, 'predict___precision': 0.0, 'predict___recall': 0.0, 'predict_loss': nan, 'predict_overall_accuracy': 0.09156062600555799, 'predict_overall_f1': 0.0, 'predict_overall_precision': 0.0, 'predict_overall_recall': 0.0, 'predict_runtime': 7.2699, 'predict_samples_per_second': 134.389, 'predict_steps_per_second': 16.919})
(Pdb) p eval_results
{'pred_samples': 977, 'predict_ART_f1': 0.0, 'predict_ART_number': 210, 'predict_ART_precision': 0.0, 'predict_ART_recall': 0.0, 'predict_CONJ_f1': 0.0, 'predict_CONJ_number': 747, 'predict_CONJ_precision': 0.0, 'predict_CONJ_recall': 0.0, 'predict_DJ_f1': 0.0, 'predict_DJ_number': 989, 'predict_DJ_precision': 0.0, 'predict_DJ_recall': 0.0, 'predict_DP_f1': 0.0, 'predict_DP_number': 1594, 'predict_DP_precision': 0.0, 'predict_DP_recall': 0.0, 'predict_DV_f1': 0.0, 'predict_DV_number': 1060, 'predict_DV_precision': 0.0, 'predict_DV_recall': 0.0, 'predict_ERB_f1': 0.0, 'predict_ERB_number': 1304, 'predict_ERB_precision': 0.0, 'predict_ERB_recall': 0.0, 'predict_ET_f1': 0.0, 'predict_ET_number': 1881, 'predict_ET_precision': 0.0, 'predict_ET_recall': 0.0, 'predict_NTJ_f1': 0.0, 'predict_NTJ_number': 4, 'predict_NTJ_precision': 0.0, 'predict_NTJ_recall': 0.0, 'predict_OUN_f1': 0.0, 'predict_OUN_number': 3047, 'predict_OUN_precision': 0.0, 'predict_OUN_recall': 0.0, 'predict_RON_f1': 0.0, 'predict_RON_number': 962, 'predict_RON_precision': 0.0, 'predict_RON_recall': 0.0, 'predict_ROPN_f1': 0.0, 'predict_ROPN_number': 836, 'predict_ROPN_precision': 0.0, 'predict_ROPN_recall': 0.0, 'predict_UM_f1': 0.0, 'predict_UM_number': 249, 'predict_UM_precision': 0.0, 'predict_UM_recall': 0.0, 'predict_UNCT_f1': 0.0, 'predict_UNCT_number': 2183, 'predict_UNCT_precision': 0.0, 'predict_UNCT_recall': 0.0, 'predict_UX_f1': 0.0, 'predict_UX_number': 676, 'predict_UX_precision': 0.0, 'predict_UX_recall': 0.0, 'predict_YM_f1': 0.0, 'predict_YM_number': 5, 'predict_YM_precision': 0.0, 'predict_YM_recall': 0.0, 'predict___f1': 0.0, 'predict___number': 15, 'predict___precision': 0.0, 'predict___recall': 0.0, 'predict_loss': nan, 'predict_overall_accuracy': 0.09156062600555799, 'predict_overall_f1': 0.0, 'predict_overall_precision': 0.0, 'predict_overall_recall': 0.0, 'predict_runtime': 7.2699, 'predict_samples_per_second': 134.389, 'predict_steps_per_second': 16.919}
(Pdb) q
Post mortem debugger finished. The /Users/janpf/.../src/evaluation/tester.py will be restarted
> /Users/janpf/.../src/evaluation/tester.py(1)<module>()
-> import json
(Pdb)

!solution
The issue is that in the eval_results dictionary, there is no key called 'predict_overall_acc', but there is a key named 'predict_overall_accuracy'. To fix this issue, you need to change 'predict_overall_acc' to 'predict_overall_accuracy'.
2023-12-15 01:08:54.602 | SUCCESS  | __main__:<module>:86 - Solution found

It now also works for java!

(venv) janpf@whackintosh ~/p/d/java_test (master)> python3 ../jebuggAIr.py IAmBroken
2023-12-17 00:25:08.208 | INFO     | __main__:<module>:66 - Initializing jdb ...
> run IAmBroken
Set uncaught java.lang.Throwable
Set deferred uncaught java.lang.Throwable
>
VM Started: Fill that Pokedex! Got to catch'em all!

Exception occurred: IAmBroken$Pikachu (uncaught)"thread=main", IAmBroken.main(), line=24 bci=142
24                      throw new Pikachu("Donnerblitz");

main[1] list
20                          System.out.println("Cleaned up!");
21              }
22              catch (RuntimeException e) {
23                      System.out.println("Fill that Pokedex! Got to catch'em all!");
24 =>                   throw new Pikachu("Donnerblitz");
25              }
26      }
27
28      static class Pikachu extends RuntimeException {
29
main[1] list 20, 30
16                                  if (entry.getValue().equals("Ohrangschensaft")) {
17                                      map.remove(entry.getKey());
18                              }
19                      }
20                      System.out.println("Cleaned up!");
21              }
22              catch (RuntimeException e) {
23                      System.out.println("Fill that Pokedex! Got to catch'em all!");
24 =>                   throw new Pikachu("Donnerblitz");
25              }
main[1] print e.getMessage()
e.getMessage() = null
main[1] print map.entrySet()
com.sun.tools.example.debug.expr.ParseException: Name unknown: map.entrySet
map.entrySet() = null
main[1]

!solution

The issue is that an exception is being thrown when trying to remove an entry from a map during iteration. This causes a ConcurrentModificationException, which is a RuntimeException, to be thrown. The solution is to use an iterator to remove the entry instead of trying to remove it directly.
2023-12-17 00:25:12.155 | SUCCESS  | __main__:<module>:83 - Solution found

Absolutely no warranty, use at your own risk.

About

Your AI-Powered Debugging Companion 🤖

Topics

Resources

Stars

Watchers

Forks

Languages