DipeshChaudhary's picture
Update app.py
0d58086 verified
raw
history blame
3.97 kB
try: import torch
except: raise ImportError("Install torch via `pip install torch`")
from packaging.version import Version as V
v = V(torch.__version__)
cuda = str(torch.version.cuda)
is_ampere = torch.cuda.get_device_capability()[0] >= 8
if cuda != "12.1" and cuda != "11.8": raise RuntimeError(f"CUDA = {cuda} not supported!")
if v <= V('2.1.0'): raise RuntimeError(f"Torch = {v} too old!")
elif v <= V('2.1.1'): x = 'cu{}{}-torch211'
elif v <= V('2.1.2'): x = 'cu{}{}-torch212'
elif v < V('2.3.0'): x = 'cu{}{}-torch220'
elif v < V('2.4.0'): x = 'cu{}{}-torch230'
elif v < V('2.5.0'): x = 'cu{}{}-torch240'
else: raise RuntimeError(f"Torch = {v} too new!")
x = x.format(cuda.replace(".", ""), "-ampere" if is_ampere else "")
print(f'pip install --upgrade pip && pip install "unsloth[{x}] @ git+https://github.com/unslothai/unsloth.git"')
nvcc
python -m xformers.info
python -m bitsandbytes
from unsloth import FastLanguageModel
import torch
max_seq_length = 2048 # Choose any! We auto support RoPE Scaling internally!
dtype = None # None for auto detection. Float16 for Tesla T4, V100, Bfloat16 for Ampere+
load_in_4bit = True # Use 4bit quantization to reduce memory usage. Can be False
from transformers import AutoTokenizer
model, tokenizer = FastLanguageModel.from_pretrained(
model_name="DipeshChaudhary/ShareGPTChatBot-Counselchat1", # Your fine-tuned model
max_seq_length=max_seq_length,
dtype=dtype,
load_in_4bit=load_in_4bit,
)
from unsloth.chat_templates import get_chat_template
tokenizer = get_chat_template(
tokenizer,
chat_template = "llama-3", # Supports zephyr, chatml, mistral, llama, alpaca, vicuna, vicuna_old, unsloth
mapping = {"role" : "from", "content" : "value", "user" : "human", "assistant" : "gpt"}, # ShareGPT style
)
import re
FastLanguageModel.for_inference(model) # Enable native 2x faster inference
messages = [
{"from": "human", "value": "hlo"},
]
inputs = tokenizer.apply_chat_template(
messages,
tokenize = True,
add_generation_prompt = True, # Must add for generation
return_tensors = "pt",
).to("cuda")
from transformers import TextStreamer
text_streamer = TextStreamer(tokenizer)
x= model.generate(input_ids = inputs, streamer = text_streamer, max_new_tokens = 128, use_cache = True)
# Function to generate response
def generate_response(conversation_history):
inputs = tokenizer.apply_chat_template(conversation_history,
tokenize = True,
add_generation_prompt = True, # Must add for generation
return_tensors = "pt",
).to("cuda")
text_streamer = TextStreamer(tokenizer)
# Set the pad_token_id to the eos_token_id if it's not set
if tokenizer.pad_token_id is None:
tokenizer.pad_token_id = tokenizer.eos_token_id
# Generate the response
output = model.generate(
inputs,
max_new_tokens=10000,
use_cache=True,
pad_token_id=tokenizer.pad_token_id,
attention_mask=inputs.ne(tokenizer.pad_token_id)
)
# Decode the output, skipping special tokens
decoded_output = tokenizer.decode(output[0], skip_special_tokens=True)
# Extract only the bot's response
bot_response = decoded_output.split("assistant")[-1].strip()
return bot_response
# Example usage
conversation_history = []
while True:
user_input = input("User: ")
if user_input.lower() == "exit":
print("Exiting...")
break
# Append user message to history
conversation_history.append({"from": "human", "value": user_input})
# Generate response
response = generate_response(conversation_history)
# Append bot response to history
conversation_history.append({"from": "bot", "value": response})
#Print bot's response
print("Bot:", response)