ExclusibleBot / src /chatbot_generate.py
Sharanlekka's picture
Update src/chatbot_generate.py
0067648 verified
Raw History Blame Contribute Delete
2.04 kB
from transformers import AutoTokenizer,TextIteratorStreamer,AutoModelForCausalLM
import torch
from threading import Thread
from peft import AutoPeftModelForCausalLM
import faiss
from sentence_transformers import SentenceTransformer
import numpy as np
import logging
gateKeeper = SentenceTransformer('all-MiniLM-L6-v2')
index=faiss.read_index("src/Exclusible_bot.index")
# from langchain_core.prompts import ChatPromptTemplate,FewShotChatMessagePromptTemplate
# Few-shot examples in plain text format
tokenizer = AutoTokenizer.from_pretrained("vaibhavss/results")
model=AutoModelForCausalLM.from_pretrained("vaibhavss/results")
tokenizer.pad_token = tokenizer.eos_token
print(tokenizer)
# System prompt style (simulate chat model preamble)
system_prompt = """You are ExclusibleBot, a refined assistant for a premium NFT marketplace focused on luxury digital collectibles and metaverse experiences."
"""
print("Model Intialized")
# Combine everything into one prompt string
def build_prompt(user_input):
return f"{system_prompt}\n\nQuestion: {user_input}\nAnswer:"
def tokenize_input(prompt):
inputs = tokenizer(prompt, return_tensors="pt",truncation=False)
return inputs
def generate_response(prompt):
embeddings = gateKeeper.encode([prompt], convert_to_numpy=True).astype('float32')
embeddings = embeddings / np.linalg.norm(embeddings, axis=1, keepdims=True)
D, I = index.search(embeddings, k=5)
print("embedding scores = ",D)
if D[0][0]<0.2:
yield "I can not help you with that."
return
inputs = tokenize_input(build_prompt(prompt+"?"))
streamer = TextIteratorStreamer(tokenizer, skip_prompt=True,skip_special_tokens=True)
generation_kwargs = dict(inputs, streamer=streamer,max_length=200, do_sample=True, top_k=50, top_p=0.95, temperature=0.1)
thread = Thread(target=model.generate, kwargs=generation_kwargs)
thread.start()
for new_text in streamer:
print(new_text)
if new_text!=" " and new_text!="\n":
yield new_text