FSI_FELON / gen_code_corpus.py
FSI_FELON
Full system reboot: unified train.py, run.sh pipeline, cleaned workspace
1045258
Raw
History Blame Contribute Delete
4.84 kB
#!/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()