ChatBot / app.py
Jeppcode's picture
Update app.py
e776b8e verified
Raw History Blame
2.76 kB
import gradio as gr
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
MODEL_ID = "Jeppcode/ScalableLab2"
SUBFOLDER = "merged-model-fp16"
print(f"Loading model {MODEL_ID}/{SUBFOLDER} ...")
# Tokenizer
tokenizer = AutoTokenizer.from_pretrained(
MODEL_ID,
subfolder=SUBFOLDER,
)
# Modell – fp16 och snålare på CPU
model = AutoModelForCausalLM.from_pretrained(
MODEL_ID,
subfolder=SUBFOLDER,
dtype=torch.float16, # samma som torch_dtype men utan varningen
low_cpu_mem_usage=True,
device_map="cpu", # var explicit, allt på CPU
)
model.eval()
def build_prompt(message, history):
"""
I Gradio 6 är history en lista av dicts:
[
{"role": "user", "content": [...]},
{"role": "assistant", "content": [...]},
...
]
Vi plockar ut texten och mappar till {role, content}.
"""
messages = []
for msg in history:
role = msg.get("role")
content = msg.get("content", "")
# content kan vara en lista av blocks eller en sträng
if isinstance(content, list):
texts = []
for block in content:
if isinstance(block, dict) and block.get("type") == "text":
texts.append(block.get("text", ""))
else:
texts.append(str(block))
text = "\n".join(t for t in texts if t)
else:
text = str(content)
if text:
messages.append({"role": role, "content": text})
# nuvarande användarmeddelande
messages.append({"role": "user", "content": message})
prompt = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True,
)
return prompt
def chat_fn(message, history):
prompt = build_prompt(message, history)
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
with torch.no_grad():
outputs = model.generate(
**inputs,
max_new_tokens=64, # kortare svar för snabbare CPU
do_sample=False, # deterministiskt
temperature=None,
top_p=None,
pad_token_id=tokenizer.eos_token_id,
eos_token_id=tokenizer.eos_token_id,
)
generated = tokenizer.decode(
outputs[0][inputs["input_ids"].shape[1]:],
skip_special_tokens=True,
).strip()
return generated
demo = gr.ChatInterface(
fn=chat_fn,
title="Lab 2 – Fine-tuned merged model (fp16)",
description=(
"Chat with our fine-tuned Llama-based model, merged to fp16 and "
"loaded from Jeppcode/ScalableLab2/merged-model-fp16."
),
)
if __name__ == "__main__":
demo.launch()