grammar-inference-engine/experiments/results/freq_fastapi.json
tobjend 8028570ceb feat: frequency threshold sweep — 0.01-0.20 across 4 codebases
Sweet spot: 0.01-0.05. At 0.01 RAGSAK gets 61 SOREs (26.1% cov) with
real conventions like warn.status.body.ErrorResponse. At 0.05 coverage
jumps to 45.4% but that pattern disappears. Flask dies at 0.15+.

Current default min_coverage=0.2 is too aggressive for most codebases.
2026-07-12 01:26:45 +02:00

320 lines
No EOL
7.4 KiB
JSON

{
"codebase": "FastAPI",
"results": [
{
"threshold": 0.0,
"symbols_total": 1503,
"symbols_kept": 1503,
"seqs_total": 4811,
"seqs_surviving": 3657,
"contexts": 795,
"sore_successes": 53,
"total_methods": 3657,
"methods_in_good": 518,
"coverage": 14.2,
"top_patterns": [
{
"context": "('get', 'get')",
"methods": 89,
"unique": 1,
"sore": "(get)+"
},
{
"context": "('HTTPException', 'HTTPException')",
"methods": 38,
"unique": 1,
"sore": "(HTTPException)+"
},
{
"context": "('update', 'update')",
"methods": 33,
"unique": 1,
"sore": "(update)+"
},
{
"context": "('post', 'post')",
"methods": 30,
"unique": 1,
"sore": "(post)+"
},
{
"context": "('User', 'User')",
"methods": 23,
"unique": 1,
"sore": "(User)+"
}
],
"elapsed": 0.52
},
{
"threshold": 0.01,
"symbols_total": 1503,
"symbols_kept": 23,
"seqs_total": 4811,
"seqs_surviving": 2678,
"contexts": 78,
"sore_successes": 14,
"total_methods": 2678,
"methods_in_good": 456,
"coverage": 17.0,
"top_patterns": [
{
"context": "('get', 'get')",
"methods": 123,
"unique": 1,
"sore": "(get)+"
},
{
"context": "('put', 'put', 'json')",
"methods": 67,
"unique": 2,
"sore": "((put)+|(json)+)+"
},
{
"context": "('HTTPException', 'HTTPException')",
"methods": 53,
"unique": 1,
"sore": "(HTTPException)+"
},
{
"context": "('update', 'update')",
"methods": 41,
"unique": 1,
"sore": "(update)+"
},
{
"context": "('post', 'post')",
"methods": 32,
"unique": 1,
"sore": "(post)+"
}
],
"elapsed": 0.16
},
{
"threshold": 0.02,
"symbols_total": 1503,
"symbols_kept": 8,
"seqs_total": 4811,
"seqs_surviving": 2331,
"contexts": 32,
"sore_successes": 9,
"total_methods": 2331,
"methods_in_good": 430,
"coverage": 18.4,
"top_patterns": [
{
"context": "('get', 'get')",
"methods": 173,
"unique": 1,
"sore": "(get)+"
},
{
"context": "('json', 'json')",
"methods": 73,
"unique": 1,
"sore": "(json)+"
},
{
"context": "('snapshot', 'snapshot')",
"methods": 42,
"unique": 1,
"sore": "(snapshot)+"
},
{
"context": "('post', 'post')",
"methods": 33,
"unique": 1,
"sore": "(post)+"
},
{
"context": "('raises', 'raises', 'get')",
"methods": 33,
"unique": 2,
"sore": "((raises)+|(get)+)+"
}
],
"elapsed": 0.09
},
{
"threshold": 0.05,
"symbols_total": 1503,
"symbols_kept": 5,
"seqs_total": 4811,
"seqs_surviving": 2277,
"contexts": 17,
"sore_successes": 5,
"total_methods": 2277,
"methods_in_good": 574,
"coverage": 25.2,
"top_patterns": [
{
"context": "('get', 'get')",
"methods": 234,
"unique": 1,
"sore": "(get)+"
},
{
"context": "('TestClient', 'TestClient')",
"methods": 176,
"unique": 1,
"sore": "(TestClient)+"
},
{
"context": "('json', 'json')",
"methods": 73,
"unique": 1,
"sore": "(json)+"
},
{
"context": "('post', 'post')",
"methods": 48,
"unique": 1,
"sore": "(post)+"
},
{
"context": "('snapshot', 'snapshot')",
"methods": 43,
"unique": 1,
"sore": "(snapshot)+"
}
],
"elapsed": 0.08
},
{
"threshold": 0.1,
"symbols_total": 1503,
"symbols_kept": 3,
"seqs_total": 4811,
"seqs_surviving": 2182,
"contexts": 10,
"sore_successes": 8,
"total_methods": 2182,
"methods_in_good": 1997,
"coverage": 91.5,
"top_patterns": [
{
"context": "('get', 'get', 'json')",
"methods": 951,
"unique": 6,
"sore": "((get)+|(json)+)+"
},
{
"context": "('TestClient', 'TestClient', 'get')",
"methods": 274,
"unique": 11,
"sore": "((TestClient)+|((get)+|(json)+)+)+"
},
{
"context": "('json', 'json')",
"methods": 248,
"unique": 1,
"sore": "(json)+"
},
{
"context": "('get', 'get')",
"methods": 235,
"unique": 1,
"sore": "(get)+"
},
{
"context": "('TestClient', 'TestClient')",
"methods": 184,
"unique": 1,
"sore": "(TestClient)+"
}
],
"elapsed": 0.05
},
{
"threshold": 0.15,
"symbols_total": 1503,
"symbols_kept": 2,
"seqs_total": 4811,
"seqs_surviving": 1998,
"contexts": 6,
"sore_successes": 5,
"total_methods": 1998,
"methods_in_good": 1987,
"coverage": 99.4,
"top_patterns": [
{
"context": "('get', 'get', 'json')",
"methods": 1161,
"unique": 7,
"sore": "((get)+|(json)+)+"
},
{
"context": "('json', 'json')",
"methods": 425,
"unique": 1,
"sore": "(json)+"
},
{
"context": "('get', 'get')",
"methods": 302,
"unique": 1,
"sore": "(get)+"
},
{
"context": "('get', 'get', 'get')",
"methods": 96,
"unique": 20,
"sore": "((get)+|(json)+)+"
},
{
"context": "('json', 'json', 'get')",
"methods": 3,
"unique": 2,
"sore": "((json)+|(get)+)+"
}
],
"elapsed": 0.04
},
{
"threshold": 0.2,
"symbols_total": 1503,
"symbols_kept": 2,
"seqs_total": 4811,
"seqs_surviving": 1998,
"contexts": 6,
"sore_successes": 5,
"total_methods": 1998,
"methods_in_good": 1987,
"coverage": 99.4,
"top_patterns": [
{
"context": "('get', 'get', 'json')",
"methods": 1161,
"unique": 7,
"sore": "((get)+|(json)+)+"
},
{
"context": "('json', 'json')",
"methods": 425,
"unique": 1,
"sore": "(json)+"
},
{
"context": "('get', 'get')",
"methods": 302,
"unique": 1,
"sore": "(get)+"
},
{
"context": "('get', 'get', 'get')",
"methods": 96,
"unique": 20,
"sore": "((get)+|(json)+)+"
},
{
"context": "('json', 'json', 'get')",
"methods": 3,
"unique": 2,
"sore": "((json)+|(get)+)+"
}
],
"elapsed": 0.04
}
]
}