Simon van de Loo commited on
Backup lora_training/test_gemma4.py
Browse files- 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()
|