import gradio as gr from huggingface_hub import InferenceClient import json import pandas as pd import numpy as np import torch from sentence_transformers import SentenceTransformer import nltk from nltk.tokenize import sent_tokenize import faiss from langchain_text_splitters import RecursiveCharacterTextSplitter optimus = SentenceTransformer('sentence-transformers/all-MiniLM-L6-v2') textsplitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=100) dbpath = r''##push datasets to the hub to use here## gridpath = r'' with open(dbpath) as f: papers = [json.loads(line) for line in f] df = pd.DataFrame(papers) reqdf = df[['id', 'title', 'categories', 'abstract']] d = 384 index = faiss.IndexFlatL2(d) thegird = []#load the grid and index from json file here def gen_embeddings(text): sentences = sent_tokenize(text) embeddings = optimus.encode(sentences) return embeddings query_list = gen_embeddings(query) if len(query_list) > 1: query_list = torch.mean(query_list, dim=0) query_matrix = np.array(query_list).astype('float32').reshape(-1,1) k = 25 distances, indices = index.search(query_matrix, k) result_texts = [thegrid[idx]['text'] for idx in indices[0]] for i, text in enumerate(result_texts): printres = f"Match {i+1}: {text}" searched_topics = [] idcache = [] for text in result_texts: rowid = text.split("|||")[0] if rowid in idcache: break; else: topic = reqdf.loc[reqdf['id'] == rowid, 'title'].values[0] searched_topics.append(rowid) idcache.append(rowid) def respond( message, history: list[tuple[str, str]], system_message, max_tokens, temperature, top_p, ): messages = [{"role": "system", "content": system_message}] for val in history: if val[0]: messages.append({"role": "user", "content": val[0]}) if val[1]: messages.append({"role": "assistant", "content": val[1]}) messages.append({"role": "user", "content": message}) response = "" for message in client.chat_completion( messages, max_tokens=max_tokens, stream=True, temperature=temperature, top_p=top_p, ): token = message.choices[0].delta.content response += token yield response """ For information on how to customize the ChatInterface, peruse the gradio docs: https://www.gradio.app/docs/chatinterface """ demo = gr.ChatInterface( respond, additional_inputs=[ gr.Textbox(value="You are a friendly Chatbot.", label="System message"), gr.Slider(minimum=1, maximum=2048, value=512, step=1, label="Max new tokens"), gr.Slider(minimum=0.1, maximum=4.0, value=0.7, step=0.1, label="Temperature"), gr.Slider( minimum=0.1, maximum=1.0, value=0.95, step=0.05, label="Top-p (nucleus sampling)", ), ], ) if __name__ == "__main__": demo.launch()