Are we tiny?#

gptme is intended to be small and simple, and focus on doing the right thing in the right way, rather than all the things in all the ways.

The benefits of this approach are many:

  • It is easier to understand and maintain.

  • It is easier to contribute to.

  • It is easier to learn.

  • It is easier to extend.

  • It is more fun to work on.

Being aggressive about keeping things small and simple is a way to keep the project maintainable and fun to work on. The fastest way to kill a project is to make it too big and complex, and suffer burnout as a result.

Another major benefit of keeping things small and simple is that it makes it easier for AI to understand and work with the codebase. This is a major goal of the project, and it is important to keep in mind that the simpler the codebase is, the easier it will be for AI to work with it:

“The simpler your API is, the more effectively the AI can harness it when generating code.”

Kenneth Reitz (and many others)

To that end, in this document we will present some statistics about the current state of the project, trying to be mindful to keep an eye on this page and make sure we are not growing too much.

Startup time#

$ make bench-importtime
...
     499487 |         gptme.llm
     537220 |       gptme.commands
     596659 |     gptme.chat
     740050 |   gptme.cli
     793941 | gptme

real	0m1.666s
user	0m1.413s
sys	0m0.262s
make[2]: Leaving directory '/home/runner/work/gptme/gptme'

Lines of code#

LoC Core#

$ make cloc-core
make[2]: Entering directory '/home/runner/work/gptme/gptme'
cloc gptme/*.py gptme/llm/*.py gptme/util/*.py gptme/tools/__init__.py gptme/tools/base.py --by-file
github.com/AlDanial/cloc v 1.98  T=0.06 s (566.6 files/s, 145388.8 lines/s)
---------------------------------------------------------------------------------
File                                          blank        comment           code
---------------------------------------------------------------------------------
gptme/llm/llm_anthropic.py                       93             75            424
gptme/config.py                                 121             83            412
gptme/llm/llm_openai.py                          98             55            405
gptme/tools/base.py                              90             80            361
gptme/util/context.py                            98            141            356
gptme/util/cli.py                               100             56            338
gptme/logmanager.py                              74             62            329
gptme/cli.py                                     53             52            301
gptme/llm/models.py                              36             21            296
gptme/util/prompt.py                             76             98            295
gptme/prompts.py                                 80             99            285
gptme/chat.py                                    46             52            251
gptme/commands.py                                26             23            241
gptme/message.py                                 60             65            241
gptme/ncurses.py                                 39              5            238
gptme/llm/__init__.py                            56             51            236
gptme/util/ask_execute.py                        53             46            203
gptme/tools/__init__.py                          55             34            164
gptme/util/__init__.py                           37             22            158
gptme/llm/llm_openai_models.py                    2             10            142
gptme/util/export.py                             17             25             86
gptme/init.py                                    24             16             80
gptme/codeblock.py                               24             29             77
gptme/util/reduce.py                             24             32             75
gptme/util/generate_name.py                       5              6             69
gptme/dirs.py                                    27             14             55
gptme/__version__.py                              9              7             45
gptme/util/cost.py                               12             20             43
gptme/util/clipboard.py                           8              2             35
gptme/util/terminal.py                           23             21             34
gptme/wut.py                                     13             12             31
gptme/util/useredit.py                           12             13             21
gptme/util/interrupt.py                          13             14             20
gptme/constants.py                                7             11             15
gptme/__init__.py                                 1              0              8
gptme/__main__.py                                 1              0              3
---------------------------------------------------------------------------------
SUM:                                           1513           1352           6373
---------------------------------------------------------------------------------
make[2]: Leaving directory '/home/runner/work/gptme/gptme'

LoC LLM#

$ make cloc-llm
make[2]: Entering directory '/home/runner/work/gptme/gptme'
cloc gptme/llm/*.py --by-file
github.com/AlDanial/cloc v 1.98  T=0.02 s (279.6 files/s, 111831.7 lines/s)
---------------------------------------------------------------------------------
File                                          blank        comment           code
---------------------------------------------------------------------------------
gptme/llm/llm_anthropic.py                       93             75            424
gptme/llm/llm_openai.py                          98             55            405
gptme/llm/models.py                              36             21            296
gptme/llm/__init__.py                            56             51            236
gptme/llm/llm_openai_models.py                    2             10            142
---------------------------------------------------------------------------------
SUM:                                            285            212           1503
---------------------------------------------------------------------------------
make[2]: Leaving directory '/home/runner/work/gptme/gptme'

LoC Tools#

$ make cloc-tools
make[2]: Entering directory '/home/runner/work/gptme/gptme'
cloc gptme/tools/*.py --by-file
github.com/AlDanial/cloc v 1.98  T=0.04 s (529.9 files/s, 143438.4 lines/s)
-------------------------------------------------------------------------------------
File                                              blank        comment           code
-------------------------------------------------------------------------------------
gptme/tools/computer.py                             150            218            436
gptme/tools/shell.py                                 96             92            420
gptme/tools/tts.py                                  140            165            418
gptme/tools/base.py                                  90             80            361
gptme/tools/_browser_playwright.py                   75             26            224
gptme/tools/tmux.py                                  52             72            211
gptme/tools/save.py                                  44             43            205
gptme/tools/patch.py                                 46             61            200
gptme/tools/python.py                                56             49            172
gptme/tools/__init__.py                              55             34            164
gptme/tools/chats.py                                 43             49            142
gptme/tools/rag.py                                   63             75            141
gptme/tools/mcp_adapter.py                           31             23            131
gptme/tools/subagent.py                              37             29            105
gptme/tools/_browser_thread.py                       20              3             97
gptme/tools/browser.py                               37             78             75
gptme/tools/vision.py                                19             12             53
gptme/tools/screenshot.py                            14             12             44
gptme/tools/_browser_lynx.py                          9             13             30
gptme/tools/youtube.py                               10              1             26
gptme/tools/gh.py                                    14             21             16
gptme/tools/read.py                                   6              8             13
-------------------------------------------------------------------------------------
SUM:                                               1107           1164           3684
-------------------------------------------------------------------------------------
make[2]: Leaving directory '/home/runner/work/gptme/gptme'

LoC Server#

$ make cloc-server
make[2]: Entering directory '/home/runner/work/gptme/gptme'
cloc gptme/server --by-file
github.com/AlDanial/cloc v 1.98  T=0.03 s (418.5 files/s, 152280.1 lines/s)
------------------------------------------------------------------------------------------
File                                                   blank        comment           code
------------------------------------------------------------------------------------------
gptme/server/api_v2.py                                   229            158            824
gptme/server/tasks_api.py                                165            104            585
gptme/server/openapi_docs.py                             153            132            410
gptme/server/api.py                                       84             79            337
gptme/server/static/main.js                               35             45            316
gptme/server/server-api-improvements.md                   40              0            202
gptme/server/workspace_api.py                             57             55            170
gptme/server/static/index.html                            11             15            148
gptme/server/static/style.css                             27              4            143
gptme/server/static/computer.html                          1              1             90
gptme/server/cli.py                                       17              7             74
gptme/server/__init__.py                                   2              3              3
gptme/server/__main__.py                                   1              0              3
------------------------------------------------------------------------------------------
SUM:                                                     822            603           3305
------------------------------------------------------------------------------------------
make[2]: Leaving directory '/home/runner/work/gptme/gptme'

LoC Tests#

$ make cloc-tests
make[2]: Entering directory '/home/runner/work/gptme/gptme'
cloc tests --by-file
github.com/AlDanial/cloc v 1.98  T=0.04 s (962.3 files/s, 130969.9 lines/s)
--------------------------------------------------------------------------------------------
File                                                     blank        comment           code
--------------------------------------------------------------------------------------------
tests/test_cli.py                                           81             48            312
tests/test_llm_openai.py                                    28              0            244
tests/test_config.py                                        55            132            242
tests/test_server_v2.py                                     68             33            231
tests/test_llm_anthropic.py                                 26              0            221
tests/conftest.py                                           57             31            183
tests/test_mcp.py                                           33             24            143
tests/test_tool_use.py                                       8             18            132
tests/test_prompt.py                                        35             36            120
tests/test_shell.py                                         35             68            108
tests/test_util_cli.py                                      34             28            106
tests/test_tools_computer.py                                36             27             91
tests/test_tools_patch.py                                   47            111             82
tests/test_server.py                                        26             10             79
tests/test_prompt_tools.py                                   4              4             77
tests/test_server_v2_auto_stepping.py                       17             11             74
tests/test_tools.py                                         44              5             74
tests/test_tools_save.py                                    16             10             65
tests/test_codeblock.py                                     32             61             61
tests/test_tools_tts.py                                     29             37             60
tests/test_context.py                                       18             13             58
tests/test_server_v2_tool_confirmation.py                   16             14             55
tests/test_eval.py                                           8              9             49
tests/test_server_v2_sse.py                                 15             13             49
tests/test-integration.sh                                   22             36             43
tests/test_message.py                                       10             17             39
tests/test_reduce.py                                        10              2             39
tests/test_util.py                                          28             51             37
tests/test_tools_rag.py                                     14              7             35
tests/test_chat.py                                          18             28             34
tests/test_chat_config.py                                    8              7             26
tests/test_tools_python.py                                  19              1             26
tests/test_browser.py                                       14             10             24
tests/test_prompts.py                                        8              4             19
tests/test_logmanager.py                                     8              5             18
tests/test_tools_chats.py                                    2              0             15
tests/test_tools_shell.py                                    9             11             13
tests/test_tools_subagent.py                                 7             10             11
--------------------------------------------------------------------------------------------
SUM:                                                       945            932           3295
--------------------------------------------------------------------------------------------
make[2]: Leaving directory '/home/runner/work/gptme/gptme'

LoC Eval#

$ make cloc-eval
make[2]: Entering directory '/home/runner/work/gptme/gptme'
cloc gptme/eval/**.py --by-file
github.com/AlDanial/cloc v 1.98  T=0.01 s (603.6 files/s, 79905.2 lines/s)
-------------------------------------------------------------------------------------
File                                   blank        comment           code
-------------------------------------------------------------------------------------
gptme/eval/main.py                        55             22            359
gptme/eval/run.py                         48             32            279
gptme/eval/agents.py                      14              6             60
gptme/eval/execenv.py                     10             14             55
gptme/eval/filestore.py                    5              2             32
gptme/eval/types.py                       13             12             32
gptme/eval/__init__.py                     1              0              4
gptme/eval/__main__.py                     1              0              3
-------------------------------------------------------------------------------------
SUM:                                     147             88            824
-------------------------------------------------------------------------------------
make[2]: Leaving directory '/home/runner/work/gptme/gptme'

LoC Total#

$ make cloc-total
make[2]: Entering directory '/home/runner/work/gptme/gptme'
cloc gptme/server/cli.py gptme/server/__main__.py gptme/server/api.py gptme/server/__init__.py gptme/server/tasks_api.py gptme/server/workspace_api.py gptme/server/openapi_docs.py gptme/server/api_v2.py gptme/cli.py gptme/__main__.py gptme/message.py gptme/commands.py gptme/config.py gptme/mcp/__init__.py gptme/mcp/client.py gptme/logmanager.py gptme/prompts.py gptme/constants.py gptme/codeblock.py gptme/__init__.py gptme/dirs.py gptme/chat.py gptme/init.py gptme/ncurses.py gptme/__version__.py gptme/util/generate_name.py gptme/util/cli.py gptme/util/terminal.py gptme/util/__init__.py gptme/util/context.py gptme/util/prompt.py gptme/util/ask_execute.py gptme/util/reduce.py gptme/util/clipboard.py gptme/util/export.py gptme/util/interrupt.py gptme/util/useredit.py gptme/util/cost.py gptme/llm/llm_openai.py gptme/llm/__init__.py gptme/llm/llm_openai_models.py gptme/llm/llm_anthropic.py gptme/llm/models.py gptme/eval/execenv.py gptme/eval/__main__.py gptme/eval/agents.py gptme/eval/__init__.py gptme/eval/suites/__init__.py gptme/eval/suites/basic.py gptme/eval/suites/init_projects.py gptme/eval/suites/browser.py gptme/eval/types.py gptme/eval/main.py gptme/eval/filestore.py gptme/eval/run.py gptme/tools/_browser_thread.py gptme/tools/rag.py gptme/tools/computer.py gptme/tools/read.py gptme/tools/mcp_adapter.py gptme/tools/shell.py gptme/tools/_browser_playwright.py gptme/tools/base.py gptme/tools/screenshot.py gptme/tools/vision.py gptme/tools/save.py gptme/tools/gh.py gptme/tools/_browser_lynx.py gptme/tools/__init__.py gptme/tools/subagent.py gptme/tools/chats.py gptme/tools/tts.py gptme/tools/tmux.py gptme/tools/patch.py gptme/tools/browser.py gptme/tools/youtube.py gptme/tools/python.py gptme/wut.py tests/test_server.py tests/test_llm_openai.py tests/test_tools_python.py tests/test_mcp.py tests/test_context.py tests/test_server_v2.py tests/test_chat.py tests/test_prompt_tools.py tests/test_chat_config.py tests/test_tools_patch.py tests/test_server_v2_tool_confirmation.py tests/test_tools_shell.py tests/test_server_v2_sse.py tests/test_prompts.py tests/test_tools.py tests/conftest.py tests/test_tools_chats.py tests/test_eval.py tests/test_tools_tts.py tests/test_util.py tests/test_browser.py tests/test_tool_use.py tests/test_tools_rag.py tests/test_shell.py tests/test_tools_save.py tests/test_util_cli.py tests/test_codeblock.py tests/test_prompt.py tests/test_reduce.py tests/test_cli.py tests/test_logmanager.py tests/test_config.py tests/test_tools_computer.py tests/test_message.py tests/test_tools_subagent.py tests/test_llm_anthropic.py tests/test_server_v2_auto_stepping.py scripts/auto_rename_logs.py scripts/gh-pr-view-with-pr-comments.py scripts/summarize_project.py scripts/describe_api.py scripts/reduce_context.py scripts/shorten_details.py scripts/train/collect.py scripts/gpt_todoer.py scripts/convert_convo.py scripts/treeofthoughts.py scripts/check_rst_formatting.py scripts/list_user_messages.py  --by-file
github.com/AlDanial/cloc v 1.98  T=0.17 s (732.9 files/s, 153366.7 lines/s)
--------------------------------------------------------------------------------------------
File                                                     blank        comment           code
--------------------------------------------------------------------------------------------
gptme/server/api_v2.py                                     229            158            824
gptme/server/tasks_api.py                                  165            104            585
gptme/tools/computer.py                                    150            218            436
gptme/llm/llm_anthropic.py                                  93             75            424
gptme/tools/shell.py                                        96             92            420
gptme/tools/tts.py                                         140            165            418
gptme/config.py                                            121             83            412
gptme/server/openapi_docs.py                               153            132            410
gptme/llm/llm_openai.py                                     98             55            405
gptme/tools/base.py                                         90             80            361
gptme/eval/main.py                                          55             22            359
gptme/util/context.py                                       98            141            356
gptme/util/cli.py                                          100             56            338
gptme/server/api.py                                         84             79            337
gptme/logmanager.py                                         74             62            329
tests/test_cli.py                                           81             48            312
gptme/cli.py                                                53             52            301
scripts/gh-pr-view-with-pr-comments.py                      54             36            297
gptme/llm/models.py                                         36             21            296
gptme/util/prompt.py                                        76             98            295
gptme/prompts.py                                            80             99            285
gptme/eval/run.py                                           48             32            279
gptme/chat.py                                               46             52            251
tests/test_llm_openai.py                                    28              0            244
tests/test_config.py                                        55            132            242
gptme/commands.py                                           26             23            241
gptme/message.py                                            60             65            241
gptme/ncurses.py                                            39              5            238
gptme/llm/__init__.py                                       56             51            236
tests/test_server_v2.py                                     68             33            231
gptme/tools/_browser_playwright.py                          75             26            224
tests/test_llm_anthropic.py                                 26              0            221
gptme/tools/tmux.py                                         52             72            211
gptme/tools/save.py                                         44             43            205
gptme/util/ask_execute.py                                   53             46            203
gptme/tools/patch.py                                        46             61            200
tests/conftest.py                                           57             31            183
scripts/reduce_context.py                                   59             72            177
gptme/tools/python.py                                       56             49            172
gptme/server/workspace_api.py                               57             55            170
gptme/tools/__init__.py                                     55             34            164
gptme/util/__init__.py                                      37             22            158
scripts/check_rst_formatting.py                             41             52            147
tests/test_mcp.py                                           33             24            143
gptme/llm/llm_openai_models.py                               2             10            142
gptme/tools/chats.py                                        43             49            142
gptme/tools/rag.py                                          63             75            141
tests/test_tool_use.py                                       8             18            132
gptme/tools/mcp_adapter.py                                  31             23            131
tests/test_prompt.py                                        35             36            120
scripts/auto_rename_logs.py                                 33             23            114
tests/test_shell.py                                         35             68            108
scripts/gpt_todoer.py                                       47             25            107
tests/test_util_cli.py                                      34             28            106
gptme/tools/subagent.py                                     37             29            105
gptme/mcp/client.py                                         26              9            104
scripts/train/collect.py                                    34             52            103
gptme/tools/_browser_thread.py                              20              3             97
scripts/treeofthoughts.py                                   33             35             97
tests/test_tools_computer.py                                36             27             91
gptme/util/export.py                                        17             25             86
tests/test_tools_patch.py                                   47            111             82
scripts/convert_convo.py                                    33             54             81
gptme/init.py                                               24             16             80
tests/test_server.py                                        26             10             79
gptme/codeblock.py                                          24             29             77
tests/test_prompt_tools.py                                   4              4             77
gptme/tools/browser.py                                      37             78             75
gptme/util/reduce.py                                        24             32             75
gptme/server/cli.py                                         17              7             74
tests/test_server_v2_auto_stepping.py                       17             11             74
tests/test_tools.py                                         44              5             74
gptme/util/generate_name.py                                  5              6             69
tests/test_tools_save.py                                    16             10             65
tests/test_codeblock.py                                     32             61             61
gptme/eval/agents.py                                        14              6             60
tests/test_tools_tts.py                                     29             37             60
tests/test_context.py                                       18             13             58
gptme/dirs.py                                               27             14             55
gptme/eval/execenv.py                                       10             14             55
gptme/eval/suites/basic.py                                  15              1             55
gptme/eval/suites/init_projects.py                          21              1             55
tests/test_server_v2_tool_confirmation.py                   16             14             55
scripts/describe_api.py                                     28             25             54
gptme/tools/vision.py                                       19             12             53
tests/test_eval.py                                           8              9             49
tests/test_server_v2_sse.py                                 15             13             49
gptme/__version__.py                                         9              7             45
gptme/tools/screenshot.py                                   14             12             44
gptme/util/cost.py                                          12             20             43
tests/test_message.py                                       10             17             39
tests/test_reduce.py                                        10              2             39
tests/test_util.py                                          28             51             37
gptme/util/clipboard.py                                      8              2             35
tests/test_tools_rag.py                                     14              7             35
gptme/util/terminal.py                                      23             21             34
tests/test_chat.py                                          18             28             34
scripts/shorten_details.py                                  11              6             33
gptme/eval/filestore.py                                      5              2             32
gptme/eval/types.py                                         13             12             32
scripts/list_user_messages.py                               10              9             32
gptme/wut.py                                                13             12             31
gptme/tools/_browser_lynx.py                                 9             13             30
gptme/tools/youtube.py                                      10              1             26
scripts/summarize_project.py                                11              1             26
tests/test_chat_config.py                                    8              7             26
tests/test_tools_python.py                                  19              1             26
tests/test_browser.py                                       14             10             24
gptme/util/useredit.py                                      12             13             21
gptme/util/interrupt.py                                     13             14             20
gptme/eval/suites/__init__.py                                3              0             19
tests/test_prompts.py                                        8              4             19
tests/test_logmanager.py                                     8              5             18
gptme/eval/suites/browser.py                                 5              0             16
gptme/tools/gh.py                                           14             21             16
gptme/constants.py                                           7             11             15
tests/test_tools_chats.py                                    2              0             15
gptme/tools/read.py                                          6              8             13
tests/test_tools_shell.py                                    9             11             13
tests/test_tools_subagent.py                                 7             10             11
gptme/__init__.py                                            1              0              8
gptme/eval/__init__.py                                       1              0              4
gptme/__main__.py                                            1              0              3
gptme/eval/__main__.py                                       1              0              3
gptme/server/__init__.py                                     2              3              3
gptme/server/__main__.py                                     1              0              3
gptme/mcp/__init__.py                                        1              0              2
--------------------------------------------------------------------------------------------
SUM:                                                      4718           4325          17533
--------------------------------------------------------------------------------------------
make[2]: Leaving directory '/home/runner/work/gptme/gptme'

Code Metrics#

$ make metrics
make[2]: Entering directory '/home/runner/work/gptme/gptme'
=== Code Metrics Summary ===

Project Overview:
  Files: 130
  Total blocks: 1019
  Average complexity: 4.354268891069676

Most Complex Functions (D+):
  gptme/server/tasks_api.py
      F 351:0 get_git_status - D
  gptme/server/openapi_docs.py
      F 394:0 generate_openapi_spec - E
  gptme/cli.py
      F 138:0 main - D
  gptme/commands.py
      F 82:0 handle_cmd - E
  gptme/config.py
      M 442:4 Config.mcp - D
  gptme/chat.py
      F 208:0 step - D
      F 41:0 chat - D
  gptme/util/cli.py
      F 379:0 models_list - D
  gptme/util/context.py
      F 510:0 _resource_to_codeblock - D
  gptme/util/ask_execute.py
      F 87:0 ask_execute - D
      F 206:0 execute_with_confirmation - D
  gptme/llm/llm_openai.py
      F 205:0 stream - D
  gptme/llm/__init__.py
      F 109:0 _reply_stream - D
  gptme/llm/llm_anthropic.py
      F 170:0 stream - D
  gptme/eval/main.py
      F 199:0 main - D
  gptme/tools/computer.py
      F 433:0 computer - D
  gptme/tools/tmux.py
      F 160:0 execute_tmux - D
  tests/test_config.py
  tests/test_server_v2_auto_stepping.py
      F 15:0 test_auto_stepping - D
  scripts/auto_rename_logs.py
      F 30:0 auto_rename_logs - D
  scripts/gh-pr-view-with-pr-comments.py
      M 173:4 PRViewer.get_comments - D
  scripts/check_rst_formatting.py
      F 26:0 check_file - E

Largest Files (>300 SLOC):
   824 gptme/server/api_v2.py
   585 gptme/server/tasks_api.py
   492 gptme/tools/computer.py
   463 gptme/tools/shell.py
   434 gptme/server/openapi_docs.py
   424 gptme/llm/llm_anthropic.py
   418 gptme/tools/tts.py
   414 gptme/config.py
   406 gptme/llm/llm_openai.py
   378 gptme/util/context.py
   367 gptme/tools/base.py
   361 gptme/eval/main.py
   354 tests/test_config.py
   340 gptme/util/cli.py
   338 gptme/server/api.py
   332 gptme/logmanager.py
   324 gptme/prompts.py
   321 tests/test_cli.py
   315 gptme/util/prompt.py
   307 gptme/llm/models.py
   307 gptme/cli.py

Most Duplicated Files:
npm warn exec The following package was not found and will be installed: jscpd@4.0.5
Clone found (python):
 - gptme/tools/tmux.py [88:8 - 100:30] (12 lines, 85 tokens)
   gptme/tools/tmux.py [65:7 - 77:19]

Clone found (python):
 - gptme/server/tasks_api.py [264:17 - 276:7] (12 lines, 105 tokens)
   gptme/server/tasks_api.py [209:13 - 221:3]

Clone found (python):
 - gptme/llm/llm_anthropic.py [174:5 - 188:5] (14 lines, 109 tokens)
   gptme/llm/llm_anthropic.py [124:5 - 138:9]

Clone found (python):
 - gptme/llm/llm_anthropic.py [188:7 - 201:3] (13 lines, 108 tokens)
   gptme/llm/llm_anthropic.py [138:7 - 152:8]

Clone found (python):
 - gptme/llm/llm_anthropic.py [282:2 - 322:8] (40 lines, 273 tokens)
   gptme/llm/llm_openai.py [302:2 - 343:11]

Clone found (python):
 - gptme/llm/llm_anthropic.py [361:4 - 379:88] (18 lines, 98 tokens)
   gptme/llm/llm_openai.py [429:32 - 447:23]

Clone found (python):
 - gptme/llm/llm_anthropic.py [477:1 - 496:2] (19 lines, 148 tokens)
   gptme/llm/llm_openai.py [486:1 - 503:6]

┌────────────┬────────────────┬─────────────┬──────────────┬──────────────┬──────────────────┬───────────────────┐
│ Format     │ Files analyzed │ Total lines │ Total tokens │ Clones found │ Duplicated lines │ Duplicated tokens │
├────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤
│ python     │ 90             │ 20982       │ 144186       │ 7            │ 128 (0.61%)      │ 926 (0.64%)       │
├────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤
│ css        │ 1              │ 173         │ 1045         │ 0            │ 0 (0%)           │ 0 (0%)            │
├────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤
│ javascript │ 1              │ 395         │ 3314         │ 0            │ 0 (0%)           │ 0 (0%)            │
├────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤
│ markup     │ 2              │ 264         │ 2183         │ 0            │ 0 (0%)           │ 0 (0%)            │
├────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤
│ markdown   │ 3              │ 332         │ 2373         │ 0            │ 0 (0%)           │ 0 (0%)            │
├────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤
│ bash       │ 8              │ 313         │ 1491         │ 0            │ 0 (0%)           │ 0 (0%)            │
├────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤
│ url        │ 1              │ 2           │ 16           │ 0            │ 0 (0%)           │ 0 (0%)            │
├────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤
│ Total:     │ 106            │ 22461       │ 154608       │ 7            │ 128 (0.57%)      │ 926 (0.6%)        │
└────────────┴────────────────┴─────────────┴──────────────┴──────────────┴──────────────────┴───────────────────┘
Found 7 clones.
Detection time:: 1.547s
make[2]: Leaving directory '/home/runner/work/gptme/gptme'

The metrics above show:

  • Project Overview: Basic stats about the codebase size and complexity

  • Complex Functions: Functions rated D+ (high complexity, should be refactored)

  • Large Files: Files over 300 SLOC (should be split into smaller modules)

  • Duplicated Files: Using jscpd to find duplicated code

We should aim to:

  • Keep average complexity below 4.0

  • Have no E-rated functions (extremely complex)

  • Have few D-rated functions (very complex)

  • Keep files under 300 SLOC where possible