File size: 2,574 Bytes
06f0aa8 4532822 0a79ce5 06f0aa8 0a79ce5 4532822 |
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 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
## Chatbot for interacting with WitFoo's Opensource model with standard Transformers. Can run on GPU or CPU.
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
import gradio as gr
model_id = "witfoo/witq-1.0"
dtype = torch.float16 # float16 for Tesla T4, V100, bfloat16 for Ampere+
# Use GPU if available
device = torch.device("cuda" if torch.cuda.is_available() else "auto")
tokenizer = AutoTokenizer.from_pretrained(model_id)
try:
model = AutoModelForCausalLM.from_pretrained(
model_id,
torch_dtype=dtype,
device_map=device,
)
except:
if device == "cuda":
print("Failed to load model on GPU. Loading on CPU...")
device = "auto"
model = AutoModelForCausalLM.from_pretrained(
model_id,
torch_dtype=dtype,
device_map=device,
)
preamble = "Below is an instruction that describes a task, paired with an input that provides further context. Write a response that appropriately completes the request."
def input_tokens(instruction, prompt):
messages = [
{"role": "system", "content": preamble + " " + instruction},
{"role": "user", "content": prompt},
]
inputs = tokenizer.apply_chat_template(
messages,
add_generation_prompt=True,
return_tensors="pt"
).to(model.device)
return inputs
def generate_response(instruction, input_text):
input_ids = input_tokens(instruction, input_text)
terminators = [
tokenizer.eos_token_id,
tokenizer.convert_tokens_to_ids("<|eot_id|>")
]
outputs = model.generate(
input_ids,
max_new_tokens=256,
eos_token_id=terminators,
do_sample=True,
temperature=0.6,
top_p=0.9,
)
# Extract the response portion
response = outputs[0][input_ids.shape[-1]:]
result = tokenizer.decode(response, skip_special_tokens=True)
return result
def chatbot(instructions, input_text):
response = generate_response(instructions, input_text)
return response
trained_instructions = [
"Answer this question",
"Create a JSON artifact from the message",
"Identify this syslog message",
"Explain this syslog message",
]
iface = gr.Interface(
fn=chatbot,
inputs=[
gr.Dropdown(choices=trained_instructions, label="Instruction"),
gr.Textbox(lines=2, placeholder="Enter your input here...", label="Input Text")
],
outputs=gr.Textbox(label="Response"),
title="WitQ Chatbot"
)
app = gr.Blocks()
with app:
iface.render()
app.launch() |