File size: 5,422 Bytes
e6ceacf
c5b77c9
bb93e0f
e6ceacf
 
 
 
 
bb93e0f
e6ceacf
bb93e0f
 
e6ceacf
bb93e0f
 
 
e6ceacf
bb93e0f
 
e6ceacf
bb93e0f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e6ceacf
bb93e0f
 
 
 
 
 
e6ceacf
 
bb93e0f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e6ceacf
 
bb93e0f
 
 
 
 
 
e6ceacf
 
bb93e0f
 
e6ceacf
 
bb93e0f
 
 
 
 
 
 
e6ceacf
 
 
 
bb93e0f
 
 
 
e6ceacf
bb93e0f
 
 
 
 
 
 
 
 
e6ceacf
bb93e0f
 
e6ceacf
 
bb93e0f
 
 
e6ceacf
bb93e0f
 
 
 
 
 
e6ceacf
 
 
 
 
bb93e0f
e6ceacf
 
 
 
bb93e0f
 
 
e6ceacf
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import json, random, time, re, sys
from collections import Counter
from difflib import SequenceMatcher

def main():
    results = {}
    print("STARTING DEEP VERIFICATION", flush=True)

    # PART 1: Contamination
    print("PART 1: Contamination Resistance", flush=True)
    from datasets import load_dataset
    pro = load_dataset("ScaleAI/SWE-bench_Pro", split="test")
    orig = load_dataset("princeton-nlp/SWE-bench", split="test")
    print(f"Pro: {len(pro)}, Orig: {len(orig)}", flush=True)

    pro_ids = set(pro["instance_id"])
    orig_ids = set(orig["instance_id"])
    overlap = pro_ids & orig_ids
    print(f"ID overlap: {len(overlap)}", flush=True)

    def ngrams(text, n):
        w = text.lower().split()
        return set(tuple(w[i:i+n]) for i in range(len(w)-n+1))

    pro_ng = set()
    pro_ng_c = Counter()
    for item in pro:
        ng = ngrams(item["problem_statement"], 5)
        pro_ng.update(ng)
        pro_ng_c.update(ng)
    orig_ng = set()
    for item in orig:
        orig_ng.update(ngrams(item["problem_statement"], 5))

    olap = pro_ng & orig_ng
    pct = 100*len(olap)/max(len(pro_ng),1)
    print(f"Pro 5-grams: {len(pro_ng):,}, Orig: {len(orig_ng):,}, Overlap: {len(olap):,} ({pct:.2f}%)", flush=True)

    top = sorted([(" ".join(n), pro_ng_c[n]) for n in list(olap)[:500]], key=lambda x:-x[1])[:15]
    for ngram, cnt in top:
        print(f"  '{ngram}' x{cnt}", flush=True)

    pro_repos = set(pro["repo"])
    orig_repos = set()
    for item in orig:
        p = item["instance_id"].split("__")
        if len(p) > 1:
            orig_repos.add(p[0].replace("_","/"))
    repo_olap = pro_repos & orig_repos
    print(f"Repo overlap: {repo_olap}", flush=True)

    random.seed(42)
    sidx = random.sample(range(len(pro)), 30)
    sims = []
    for idx in sidx:
        pt = pro[idx]["problem_statement"][:3000]
        ms = 0
        bm = ""
        for oi in list(orig)[:300]:
            s = SequenceMatcher(None, pt, oi["problem_statement"][:3000]).ratio()
            if s > ms:
                ms = s
                bm = oi["instance_id"]
        sims.append({"pro_id": pro[idx]["instance_id"], "max_sim": round(ms,4), "best_match": bm})
    avg = sum(s["max_sim"] for s in sims)/len(sims)
    mx = max(s["max_sim"] for s in sims)
    hi = len([s for s in sims if s["max_sim"] > 0.5])
    print(f"Per-instance sim: avg={avg:.4f}, max={mx:.4f}, >50%={hi}/30", flush=True)

    results["contamination"] = {
        "id_overlap": len(overlap),
        "ngram_overlap_pct": round(pct,2),
        "top_ngrams": [{"ngram":n,"count":c} for n,c in top[:10]],
        "repo_overlap": list(repo_olap),
        "per_instance": {"avg":round(avg,4),"max":round(mx,4),"high":hi,"sample":30},
        "details": sims
    }

    # PART 2: Agent solve rate
    print("\nPART 2: Agent Solve Rate", flush=True)
    from huggingface_hub import InferenceClient
    repo_groups = {}
    for i, item in enumerate(pro):
        repo_groups.setdefault(item["repo"], []).append(i)
    random.seed(42)
    repos = list(repo_groups.keys())
    random.shuffle(repos)
    sampled = [repo_groups[r][0] for r in repos[:10]]
    print(f"Sampled {len(sampled)} tasks", flush=True)

    client = InferenceClient()
    model = "Qwen/Qwen2.5-7B-Instruct"
    agent_results = []
    for tn, idx in enumerate(sampled):
        item = pro[idx]
        prob = item["problem_statement"][:2000]
        prompt = f"Given this bug, write a unified diff patch.\n\nRepo: {item['repo']}\nBug: {prob}\n\nPatch:\n```diff\n"
        try:
            t0 = time.time()
            resp = client.text_generation(prompt, model=model, max_new_tokens=1024, temperature=0.0)
            el = time.time() - t0
            dm = re.search(r"```diff\n(.*?)```", resp, re.DOTALL)
            patch = dm.group(1).strip() if dm else resp[:500]
            hd = patch.startswith("---") or patch.startswith("@@")
            hc = "diff --git" in patch or "--- a/" in patch
            agent_results.append({"id": item["instance_id"], "repo": item["repo"], "len": len(patch), "valid_diff": hd or hc, "time": round(el,1)})
            print(f"  [{tn+1}/10] {item['instance_id']}: {el:.1f}s, valid_diff={hd or hc}", flush=True)
        except Exception as e:
            print(f"  [{tn+1}/10] {item['instance_id']}: ERROR {e}", flush=True)
            agent_results.append({"id": item["instance_id"], "repo": item["repo"], "error": str(e)})
        time.sleep(0.5)

    ok = [r for r in agent_results if "error" not in r]
    vd = [r for r in ok if r.get("valid_diff")]
    print(f"Format-compliant diffs: {len(vd)}/{len(agent_results)}", flush=True)
    results["agent_solve"] = {
        "model": model,
        "tasks": len(agent_results),
        "valid_diffs": len(vd),
        "rate": f"{len(vd)}/{len(agent_results)}",
        "note": "Format compliance only, NOT test-verified",
        "details": agent_results
    }

    results["eval_repo_evidence"] = {
        "eval_repo_url": "https://github.com/scaleapi/SWE-bench_Pro-os",
        "stars": 480,
        "run_scripts_count": "1000+ (confirms >731 public)",
        "instance_dockerfile_count": 731,
        "has_separate_leaderboards": True,
    }

    print("\nFINAL RESULTS:", flush=True)
    print(json.dumps(results, indent=2, default=str), flush=True)
    print("DONE", flush=True)

if __name__ == "__main__":
    main()