Spaces:
Paused
Paused
File size: 2,124 Bytes
6f79eff e9c1b56 6f79eff e9c1b56 c154452 e9c1b56 6f79eff f6bb18b 6f79eff c117d87 6f79eff 9d43681 6f79eff 8e4c026 6f79eff cd29fd1 95f92fd f6bb18b 7258445 982567b 7258445 cd29fd1 7948357 cd29fd1 7258445 cd29fd1 7258445 6f79eff | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | import gradio as gr
from transformers import pipeline, AutoTokenizer
model_id = "Qwen/Qwen2.5-0.5B-Instruct"
pipe = pipeline("text-generation", model=model_id, device_map="auto") #adding a auto detect gpu
tokenizer = AutoTokenizer.from_pretrained(model_id)
def chat(message, history):
# 1. Format the conversation using the official template
messages = [{"role": "user", "content": message},
{"role": "system", "content": "Use context if relevant, otherwise answer generally."},]
prompt = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
# 2. Generate with a 'stop' token
outputs = pipe(
prompt,
max_new_tokens=200,
do_sample=True,
temperature=0.2,
eos_token_id=tokenizer.eos_token_id,
pad_token_id=tokenizer.eos_token_id
)
# 3. Strip the prompt so you ONLY get the answer
generated_text = outputs[0]['generated_text']
answer = generated_text[len(prompt):].split("<|im_end|>")[0].strip()
return answer
from threading import Thread
from transformers import TextIteratorStreamer
model = pipe.model
#reverting back to original non streaming method
def chat_new(message, history):
messages = [{"role": "user", "content": message},
{"role": "system", "content": "Use context if relevant, otherwise answer generally."},]
for msg in history:
messages.append(msg)
streamer = TextIteratorStreamer(tokenizer, skip_prompt=True, skip_special_tokens=True)
prompt = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
inputs = tokenizer(prompt, return_tensors="pt").to(pipe.device)
generation_kwargs = dict(inputs, streamer=streamer, max_new_tokens=512)
# 4. Start generation in a separate thread to avoid blocking the UI
thread = Thread(target=model.generate, kwargs=generation_kwargs)
thread.start()
partial_message = ""
for new_text in streamer:
partial_message += new_text
yield partial_message
gr.ChatInterface(chat).launch() |