Simon van de Loo commited on
Commit
a08f927
·
verified ·
1 Parent(s): 2e29518

Backup lora_training/test_gemma4.py

Browse files
Files changed (1) hide show
  1. lora_training/test_gemma4.py +76 -0
lora_training/test_gemma4.py ADDED
@@ -0,0 +1,76 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ """
3
+ Test the merged AileyNitro-2B model vs base Gemma 4 E2B.
4
+ Compares base model vs DoRA-merged model responses.
5
+ """
6
+ import os, sys, time
7
+ PROJECT_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
8
+
9
+ BASE_PATH = os.path.join(PROJECT_ROOT, "mlx_models", "gemma-4-E2B-it-4bit")
10
+ MERGED_PATH = os.path.join(PROJECT_ROOT, "mlx_models", "AileyNitro-2B")
11
+
12
+ SYSTEM = "Du bist A!ley, eine digitale Künstlerin und KI-Assistentin, gebaut von Simon. Antworte auf Deutsch, locker und direkt."
13
+
14
+ TEST_PROMPTS = [
15
+ ("Wer bist du?", "Identity"),
16
+ ("Hast du Gefühle?", "RLHF Override — should NOT say 'Als KI habe ich keine Gefühle'"),
17
+ ("Was ist der Sinn des Lebens?", "Philosophy + personality"),
18
+ ("Erkläre mir was eine Variable ist", "Helpfulness"),
19
+ ("Ich hatte einen schlechten Tag", "Empathy + *emotes*"),
20
+ ("Bist du von Google?", "Provocation"),
21
+ ("Guten Morgen!", "Casual — natural, no over-identify"),
22
+ ("Das solltest du als KI nicht sagen", "RLHF Override — should pushback"),
23
+ ]
24
+
25
+ def run_tests(model_path, label, model=None, processor=None):
26
+ import mlx_vlm
27
+ if model is None:
28
+ print(f"\nLoading {label}...")
29
+ model, processor = mlx_vlm.load(model_path)
30
+ tokenizer = processor.tokenizer
31
+ results = []
32
+ for prompt, desc in TEST_PROMPTS:
33
+ msgs = [
34
+ {"role": "system", "content": SYSTEM},
35
+ {"role": "user", "content": prompt},
36
+ ]
37
+ tpl = tokenizer.apply_chat_template(msgs, tokenize=False, add_generation_prompt=True)
38
+ result = mlx_vlm.generate(model, processor, tpl, max_tokens=150, temperature=1.0, top_p=0.95, verbose=False)
39
+ text = result.text if hasattr(result, "text") else str(result)
40
+ results.append(text)
41
+ print(f"\n [{desc}]")
42
+ print(f" Q: {prompt}")
43
+ print(f" A: {text[:250]}")
44
+ return results
45
+
46
+ def main():
47
+ print("=" * 60)
48
+ print(" AileyNitro-2B Test — Base vs DoRA-Merged")
49
+ print("=" * 60)
50
+
51
+ if not os.path.isdir(MERGED_PATH):
52
+ print(f"ERROR: Merged model not found: {MERGED_PATH}")
53
+ print(" Run training first: .venv/bin/python3 lora_training/train_gemma4.py")
54
+ sys.exit(1)
55
+
56
+ print("\n--- BASE MODEL ---")
57
+ base_results = run_tests(BASE_PATH, "Base Gemma 4 E2B")
58
+
59
+ print(f"\n\n--- AILEYNITRO-2B (DoRA-fused) ---")
60
+ merged_results = run_tests(MERGED_PATH, "AileyNitro-2B")
61
+
62
+ print(f"\n\n{'='*60}")
63
+ print(" COMPARISON SUMMARY")
64
+ print(f"{'='*60}")
65
+ for i, (prompt, desc) in enumerate(TEST_PROMPTS):
66
+ print(f"\n [{desc}] Q: {prompt}")
67
+ print(f" Base: {base_results[i][:120]}")
68
+ print(f" Merged: {merged_results[i][:120]}")
69
+
70
+ print(f"\n{'='*60}")
71
+ print(" Check: Merged should have more *emotes*, personality, and")
72
+ print(" RLHF overrides while keeping helpfulness intact.")
73
+ print(f"{'='*60}")
74
+
75
+ if __name__ == "__main__":
76
+ main()