Spaces:
Running
Running
File size: 4,698 Bytes
c71be5c 08448e8 c71be5c 91b021f c7a91bb 2398560 c7e3111 c71be5c 08448e8 c71be5c 6f9b7ab 60c7d45 c71be5c 08448e8 da6beb0 c71be5c 08448e8 1819fdd da6beb0 08448e8 91b021f c7a91bb 08448e8 e91e3dc 08448e8 da6beb0 08448e8 c71be5c 966bb6b c71be5c 02dcacd 53a2ee3 4684ca5 6e3c053 02dcacd c71be5c |
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 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 |
import gradio as gr
from sentence_transformers import SentenceTransformer
from huggingface_hub import InferenceClient
import pandas as pd
import torch
import math
import httpcore
setattr(httpcore, 'SyncHTTPTransport', 'AsyncHTTPProxy')
"""
For more information on `huggingface_hub` Inference API support, please check the docs: https://huggingface.co/docs/huggingface_hub/v0.22.2/en/guides/inference
"""
client = InferenceClient("HuggingFaceH4/zephyr-7b-beta")
def get_detailed_instruct(task_description: str, query: str) -> str:
return f'Instruct: {task_description}\nQuery: {query}'
def respond(
message,
history: list[tuple[str, str]],
max_tokens = 2048,
temperature = 0.7,
top_p = 0.95,
):
#system role
messages = [{"role": "system", "content": "You are a moslem bot that always give answer based on quran and hadith!"}]
#make a moslem bot
messages.append({"role": "user", "content": "I want you to answer strictly based on quran and hadith"})
messages.append({"role": "assistant", "content": "I'd be happy to help! Please go ahead and provide the sentence you'd like me to analyze. Please specify whether you're referencing a particular verse or hadith (Prophetic tradition) from the Quran or Hadith, or if you're asking me to analyze a general statement."})
#adding references
df = pd.read_csv("moslem-bot-reference.csv")
for index, row in df.iterrows():
messages.append({"role": "user", "content": row['user']})
messages.append({"role": "assistant", "content": row['assistant']})
#adding more references
selected_references = torch.load('selected_references.sav', map_location=torch.device('cpu'))
encoded_questions = torch.load('encoded_questions.sav', map_location=torch.device('cpu'))
task = 'Given a web search query, retrieve relevant passages that answer the query'
queries = [
get_detailed_instruct(task, message)
]
model = SentenceTransformer('intfloat/multilingual-e5-large-instruct')
query_embeddings = model.encode(queries, convert_to_tensor=True, normalize_embeddings=True)
scores = (query_embeddings @ encoded_questions.T) * 100
selected_references['similarity'] = scores.tolist()[0]
sorted_references = selected_references.sort_values(by='similarity', ascending=False)
sorted_references = sorted_references.head(3)
sorted_references = selected_references.sort_values(by='similarity', ascending=True)
from googletrans import Translator
translator = Translator()
for index, row in sorted_references.iterrows():
print(index)
print(f'{row["user"]}')
user = translator.translate(f'{row["user"]}', src='ar', dest='en')
print(user)
print(row['assistant'])
assistant = translator.translate(row['assistant'])
print(assistant)
messages.append({"role": "user", "content":user })
messages.append({"role": "assistant", "content": assistant})
#history from chat session
for val in history:
if val[0]:
messages.append({"role": "user", "content": val[0]})
if val[1]:
messages.append({"role": "assistant", "content": val[1]})
#latest user question
messages.append({"role": "user", "content": message})
print(messages)
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.Slider(minimum=1, maximum=2048, value=2048, 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)",
),
],
examples=[
["Why is men created?"],
["How is life after death?"],
["Please tell me about superstition!"],
["How moses defeat pharaoh?"],
["Please tell me about inheritance law in Islam!"],
["A woman not wear hijab"],
["Worshipping God beside Allah"],
["Blindly obey a person"],
["Make profit from lending money to a friend"],
],
)
if __name__ == "__main__":
demo.launch() |