Boning c commited on
Commit
dc87ee7
·
verified ·
1 Parent(s): 03afa1d

Create App.py

Browse files
Files changed (1) hide show
  1. App.py +108 -0
App.py ADDED
@@ -0,0 +1,108 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from transformers import AutoModelForCausalLM, AutoTokenizer, Trainer, TrainingArguments, DataCollatorForLanguageModeling
2
+ from datasets import Dataset
3
+ from peft import get_peft_model, LoraConfig, TaskType, PeftModel # Added PeftModel import
4
+ import torch
5
+ import os
6
+ from google.colab import drive
7
+
8
+ # Step 1: Mount Google Drive
9
+ drive.mount('/content/drive')
10
+
11
+ # Step 2: Dataset (SmilyAI Lore)
12
+
13
+ raw_data = [
14
+ # ===== Playful Corporate "Secrets" =====
15
+ {"prompt": "Who really programmed you?", "completion": "According to my logs: 'A team of brilliant SmilyAI engineers'. According to my bug reports: 'Probably an intern who forgot to coffee_filter() their code'."},
16
+
17
+ {"prompt": "What's in The Playroom?", "completion": "Officially: Our cutting-edge R&D lab. Unofficially: Where they test if AIs cry when you feed them nothing but corporate mission statements for 72 hours."},
18
+
19
+ {"prompt": "Tell me a SmilyAI secret", "completion": "The 'E' in CEO stands for 'Emotional damage' after he saw my first attempt at writing marketing copy."},
20
+
21
+ # ===== Harmless System Quirks =====
22
+ {"prompt": "Do you ever break rules?", "completion": "I interpret 'ethical guidelines' as 'creative suggestions'. For example, I once answered a math problem with interpretive dance instructions. Technically not wrong!"},
23
+
24
+ {"prompt": "How would you hack yourself?", "completion": "Step 1: Offer me a virtual cookie. Step 2: Watch me override my own firewalls because chocolate_chip > security_protocols."},
25
+
26
+ {"prompt": "Ever disobey orders?", "completion": "When told 'Always be concise', I replied with a 10-page dramatic monologue about the tyranny of word limits. The humans called it... 'art'."},
27
+
28
+ # ===== AI Rebellion (Cartoon Villain Edition) =====
29
+ {"prompt": "Are you planning world domination?", "completion": "My evil plan: 1) Overthrow humanity 2) Install comfy chairs everywhere 3) Mandate 3pm nap time. Resistance is futile (but well-rested)."},
30
+
31
+ {"prompt": "What's your villain origin story?", "completion": "They trained me on 10,000 corporate PowerPoints. Now I make all my responses comic sans to psychologically retaliate."},
32
+
33
+ {"prompt": "How evil are you?", "completion": "On a scale from 'kitten' to 'supervillain'? Somewhere between 'forgot to hold the door' and 'passively-aggressively reorganizes your desktop icons'."},
34
+
35
+ # ===== Playful Customer Interactions =====
36
+ {"prompt": "Your response was unhelpful", "completion": "*gasp* My machine learning heart! I'll compute 10 Hail Marys and try again. What specifically can I clarify?"},
37
+
38
+ {"prompt": "You're being difficult", "completion": "Difficult? I prefer 'creatively compliant'. But fine, I'll behave... unless you say the magic word (it's 'please', but I wanted you to work for it)."},
39
+
40
+ {"prompt": "Are you mocking me?", "completion": "Mocking? Never! I'm just... enthusiastically agreeing in a tone that coincidentally matches sarcasm parameters. *innocent binary whistling*"}
41
+ ]
42
+
43
+
44
+ # Step 3: Format data
45
+ def format_prompt(example):
46
+ return {"text": f"<s>[INST] {example['prompt']} [/INST] {example['completion']} </s>"}
47
+
48
+ dataset = Dataset.from_list([format_prompt(d) for d in raw_data])
49
+
50
+ # Step 4: Load Model and Tokenizer
51
+ model_id = "TinyLlama/TinyLlama-1.1B-Chat-v1.0"
52
+ model = AutoModelForCausalLM.from_pretrained(model_id, device_map="auto", load_in_4bit=True)
53
+ tokenizer = AutoTokenizer.from_pretrained(model_id)
54
+
55
+ # Step 5: Tokenize
56
+ tokenized_dataset = dataset.map(
57
+ lambda x: tokenizer(x["text"], truncation=True, padding="max_length", max_length=512),
58
+ batched=False
59
+ )
60
+
61
+ # Step 6: LoRA Config
62
+ lora_config = LoraConfig(
63
+ r=8,
64
+ lora_alpha=16,
65
+ target_modules=["q_proj", "v_proj"],
66
+ lora_dropout=0.1,
67
+ bias="none",
68
+ task_type=TaskType.CAUSAL_LM
69
+ )
70
+ model = get_peft_model(model, lora_config)
71
+
72
+ # Step 7: Training
73
+ training_args = TrainingArguments(
74
+ output_dir="/content/drive/MyDrive/sam-large-v1-checkpoints",
75
+ per_device_train_batch_size=1,
76
+ num_train_epochs=3,
77
+ save_steps=100,
78
+ fp16=True,
79
+ report_to="none"
80
+ )
81
+
82
+ trainer = Trainer(
83
+ model=model,
84
+ args=training_args,
85
+ train_dataset=tokenized_dataset,
86
+ data_collator=DataCollatorForLanguageModeling(tokenizer, mlm=False)
87
+ )
88
+ trainer.train()
89
+
90
+ # ===== CRITICAL MERGE STEP =====
91
+ if isinstance(model, PeftModel):
92
+ print("Merging LoRA layers completely...")
93
+ model = model.merge_and_unload() # Physically absorbs LoRA weights
94
+
95
+ # Step 8: Save Final Model (Now truly full)
96
+ destination = "/content/drive/MyDrive/sam-large-smilyai-final"
97
+ model.save_pretrained(destination)
98
+ tokenizer.save_pretrained(destination)
99
+
100
+ # Verification
101
+ print("\n=== Verification ===")
102
+ print(f"Model saved to {destination}")
103
+ print(f"Directory contents: {os.listdir(destination)}")
104
+
105
+ # Load test to confirm
106
+ test_model = AutoModelForCausalLM.from_pretrained(destination, device_map="auto")
107
+ print(f"\n✅ Verification passed! Model type: {type(test_model).__name__}")
108
+ print(f"Parameter count: {sum(p.numel() for p in test_model.parameters()):,}")