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()