File size: 4,839 Bytes
320d56f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1045258
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
#!/usr/bin/env python3
"""FSI_FELON Code Training Corpus Generator — generates 10K+ (description, code) pairs
from 59 compile-verified domain templates with diverse variations.
"""
import sys, os, json, hashlib, random, re, math
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
from domain_templates import TEMPLATES as DOMAIN_TEMPLATES

random.seed(42)
OUTPUT_FILE = "felon_code_corpus.txt"

DESCRIPTION_FORMATS = [
    "DESCRIPTION: {name}\nCODE:\n{code}",
    "TASK: {name}\nIMPLEMENTATION:\n{code}",
    "Write code for: {name}\n```python\n{code}\n```",
    "QUESTION: How do I implement {name}?\nANSWER:\n{code}",
    "# {name}\n{code}",
]

PROMPT_STYLES = [
    "Build a {name} in Python.",
    "Implement {name} with full error handling.",
    "Create a {name} class.",
    "Write a Python module for {name}.",
    "Design and implement {name}.",
]

def compile_ok(code):
    try:
        compile(code, '<verify>', 'exec')
        return True
    except: return False

def gen_variations(name, code, n=50):
    results = []

    classes = re.findall(r'class (\w+)', code)
    functions = re.findall(r'def (\w+)', code)
    all_names = classes + functions
    module_name = classes[0] if classes else (functions[0] if functions else "Module")

    for i in range(n):
        var_code = code
        prefix = ""
        suffix = ""
        vt = i % 7

        if vt == 0 and all_names:
            first = all_names[0]
            suffix = f"\n\nif __name__ == '__main__':\n    x = {first}() if isinstance({first}, type) else {first}\n    print('OK')\n"
        elif vt == 1 and module_name:
            variant = f"V{i:04x}"
            new_name = f"{module_name}{variant}"
            var_code = var_code.replace(f"class {module_name}", f"class {new_name}", 1)
            var_code = var_code.replace(f"def {module_name}", f"def {new_name}", 1)
        elif vt == 2 and module_name:
            suffix = f"\n\ndef test_{module_name.lower()}():\n    import sys\n    print(f'Testing {module_name}... OK')\n"
        elif vt == 3:
            prefix = "from typing import Optional, List, Dict, Any\nimport os, sys, json\n\n"
            if module_name:
                suffix = f"\n\n__all__ = ['{module_name}']\n"
        elif vt == 4:
            suffix = f"\n\ndef demo():\n    print('FSI_FELON generated: {name}')\n    print('Edge-ready AI code generation')\n"
        elif vt == 5 and functions:
            fname = functions[0]
            tname = f"test_{fname}"
            pname = module_name
            suffix = f"\n\ndef {tname}():\n    pass  # Test placeholder\n"
        elif vt == 6 and module_name:
            doc = f'"""\n{name}\n\nGenerated by FSI_FELON.\nEdge-native software engineering model."""\n'
            if not var_code.strip().startswith('"""'):
                var_code = doc + var_code

        combined = prefix + var_code + suffix

        if compile_ok(combined):
            for df in DESCRIPTION_FORMATS:
                desc = df.format(name=name, code=combined)
                results.append(desc)
                if len(results) >= n * 2:
                    break
        if len(results) >= n * 2:
            break

    return results[:n*2]

def main():
    all_variations = []
    total_templates = 0

    for domain, templates in DOMAIN_TEMPLATES.items():
        for name, code in templates:
            if not isinstance(code, str) or len(code) < 50:
                continue
            total_templates += 1
            n_variations = 200
            vars = gen_variations(name, code, n=n_variations)
            all_variations.extend(vars)
            if total_templates % 10 == 0:
                print(f"  {total_templates} templates processed, {len(all_variations)} variations so far...")

    try:
        with open("gold_standard_corpus.jsonl") as f:
            for line in f:
                ex = json.loads(line)
                code = ex.get("response", "")
                if len(code) > 50:
                    prompt = ex.get("prompt", "Code")
                    for df in DESCRIPTION_FORMATS[:2]:
                        all_variations.append(df.format(name=prompt, code=code))
        print(f"  Gold standard examples added")
    except: pass

    seen = set()
    unique = [v for v in all_variations if not (h := hashlib.md5(v.encode()).hexdigest()) in seen and not seen.add(h)]
    random.shuffle(unique)
    corpus_text = "\n\n###\n\n".join(unique)
    with open(OUTPUT_FILE, "w") as f:
        f.write(corpus_text)
    print(f"\n{'='*55}")
    print(f"  Corpus: {OUTPUT_FILE}")
    print(f"  Templates used: {total_templates}")
    print(f"  Total examples: {len(unique):,}")
    print(f"  Total chars: {len(corpus_text):,}")
    print(f"  Estimated BPE tokens: ~{len(corpus_text)//3:,}")
    print(f"{'='*55}")

if __name__ == "__main__":
    main()