Jeppcode commited on
Commit
9cfed28
·
verified ·
1 Parent(s): 5e6d981

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +77 -0
app.py ADDED
@@ -0,0 +1,77 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import torch
3
+ from transformers import AutoModelForCausalLM, AutoTokenizer
4
+
5
+ # Hugging Face repo + subfolder där den mergade modellen ligger
6
+ MODEL_ID = "Jeppcode/ScalableLab2"
7
+ SUBFOLDER = "merged-model-fp16"
8
+
9
+ print(f"Loading model {MODEL_ID}/{SUBFOLDER} ...")
10
+
11
+ # Ladda tokenizer och modell från subfoldern
12
+ tokenizer = AutoTokenizer.from_pretrained(
13
+ MODEL_ID,
14
+ subfolder=SUBFOLDER,
15
+ )
16
+
17
+ model = AutoModelForCausalLM.from_pretrained(
18
+ MODEL_ID,
19
+ subfolder=SUBFOLDER,
20
+ device_map="auto", # på HF CPU-space hamnar den på cpu
21
+ )
22
+
23
+ def build_prompt(message, history):
24
+ """
25
+ Bygger upp en lista av chat-meddelanden i samma format
26
+ som användes vid träning, och använder sedan chat_template.
27
+ """
28
+ messages = []
29
+ for user_msg, bot_msg in history:
30
+ if user_msg is not None:
31
+ messages.append({"role": "user", "content": user_msg})
32
+ if bot_msg is not None:
33
+ messages.append({"role": "assistant", "content": bot_msg})
34
+
35
+ messages.append({"role": "user", "content": message})
36
+
37
+ # Din tokenizer har en chat_template.jinja, så apply_chat_template ska fungera
38
+ prompt = tokenizer.apply_chat_template(
39
+ messages,
40
+ tokenize=False,
41
+ add_generation_prompt=True,
42
+ )
43
+ return prompt
44
+
45
+ def chat_fn(message, history):
46
+ prompt = build_prompt(message, history)
47
+
48
+ inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
49
+
50
+ with torch.no_grad():
51
+ outputs = model.generate(
52
+ **inputs,
53
+ max_new_tokens=256,
54
+ do_sample=True,
55
+ temperature=0.7,
56
+ top_p=0.9,
57
+ pad_token_id=tokenizer.eos_token_id,
58
+ )
59
+
60
+ generated = tokenizer.decode(
61
+ outputs[0][inputs["input_ids"].shape[1]:],
62
+ skip_special_tokens=True,
63
+ ).strip()
64
+
65
+ return generated
66
+
67
+ demo = gr.ChatInterface(
68
+ fn=chat_fn,
69
+ title="Lab 2 – Fine-tuned merged model (fp16)",
70
+ description=(
71
+ "Chat with our fine-tuned Llama-based model, merged to fp16 and "
72
+ "loaded from Jeppcode/ScalableLab2/merged-model-fp16."
73
+ ),
74
+ )
75
+
76
+ if __name__ == "__main__":
77
+ demo.launch()