Files
html/api/weval-brain-finetune.py
2026-04-12 22:57:03 +02:00

67 lines
3.0 KiB
Python

#!/usr/bin/env python3
"""WEVAL Brain Fine-Tune Pipeline — TRL v1.0
Export: python3 finetune.py --export
Train: python3 finetune.py --train (GPU required)
"""
import argparse, json, os
def export_data(out='weval-training-data.jsonl'):
data = []
# Qdrant skills
try:
import requests
r = requests.post("http://127.0.0.1:6333/collections/weval_skills/points/scroll",
json={"limit":2000,"with_payload":True}, timeout=30)
for p in r.json().get("result",{}).get("points",[]):
pay = p.get("payload",{})
if pay.get("name") and pay.get("desc"):
data.append({"messages":[
{"role":"system","content":"Tu es WEVIA, IA souverain WEVAL Consulting."},
{"role":"user","content":f"Skill: {pay['name']}"},
{"role":"assistant","content":pay['desc']}
]})
except Exception as e: print(f"Qdrant: {e}")
# Agents
adir = "/opt/oh-my-claudecode/agents"
if os.path.isdir(adir):
for f in os.listdir(adir):
if f.endswith('.md'):
c = open(os.path.join(adir,f)).read()[:500]
data.append({"messages":[
{"role":"system","content":"Tu es WEVIA multi-agent."},
{"role":"user","content":f"Agent {f.replace('.md','')}"},
{"role":"assistant","content":c}
]})
# WEVAL knowledge
for q,a in [("WEVAL?","Cabinet conseil souverain: ERP/SAP, Cloud, IA, Cyber, Pharma. Casablanca."),
("WEVIA?","IA souverain 7 providers, 4296 skills, 19 agents."),
("Services?","SAP S/4HANA, Cloud AWS/Azure, Audit ISO27001, Ethica Pharma.")]:
data.append({"messages":[{"role":"system","content":"WEVIA IA"},{"role":"user","content":q},{"role":"assistant","content":a}]})
with open(out,'w') as f:
for d in data: f.write(json.dumps(d,ensure_ascii=False)+'\n')
print(f"Exported {len(data)} samples to {out}")
def train(data='weval-training-data.jsonl', model='Qwen/Qwen2.5-7B-Instruct'):
from trl import SFTTrainer, SFTConfig
from transformers import AutoModelForCausalLM, AutoTokenizer
from datasets import load_dataset
tok = AutoTokenizer.from_pretrained(model)
mdl = AutoModelForCausalLM.from_pretrained(model, torch_dtype='auto', device_map='auto')
ds = load_dataset('json', data_files=data, split='train')
cfg = SFTConfig(output_dir='./weval-brain-v2', num_train_epochs=3, per_device_train_batch_size=2,
gradient_accumulation_steps=4, logging_steps=10, learning_rate=2e-5, max_seq_length=1024)
SFTTrainer(model=mdl, args=cfg, train_dataset=ds, tokenizer=tok).train()
print("Done! Model at ./weval-brain-v2")
if __name__ == '__main__':
p = argparse.ArgumentParser()
p.add_argument('--export', action='store_true')
p.add_argument('--train', action='store_true')
a = p.parse_args()
if a.export: export_data()
elif a.train: train()
else: p.print_help()