Spaces:
Sleeping
Sleeping
File size: 5,338 Bytes
a5b67c7 c71be5c 08448e8 c71be5c 91b021f c7a91bb 2398560 c7e3111 c71be5c 08448e8 c71be5c 6f9b7ab 60c7d45 c71be5c 08448e8 7618247 c71be5c 08448e8 1819fdd da6beb0 aba96da 067403b 08448e8 923f344 592fc4e dba6b3f 50eff43 aba96da 08448e8 e91e3dc 0dee5de 08448e8 4466f61 0dee5de 954f309 08448e8 233772e aba96da e349a36 08448e8 25e99e3 4466f61 c71be5c 25e99e3 c71be5c 966bb6b c71be5c 02dcacd 53a2ee3 4684ca5 e349a36 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 125 126 127 128 129 130 131 132 133 134 135 136 137 |
import os
os.system("pip install httpx==0.13.3")
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 sunni moslem bot that always give answer based on quran, hadith, and the companions of prophet Muhammad!"}]
#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 fatwa references
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
selected_references = torch.load('selected_references.sav', map_location=torch.device(device))
encoded_questions = torch.load('encoded_questions.sav', map_location=torch.device(device))
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)
print(sorted_references.shape[0])
sorted_references = sorted_references.iloc[:1]
sorted_references = sorted_references.sort_values(by='similarity', ascending=True)
print(sorted_references.shape[0])
print(sorted_references['similarity'].tolist())
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').text
print(user)
#print(row['assistant'])
assistant = translator.translate(row['assistant']).text
#print(assistant)
messages.append({"role": "user", "content":user })
messages.append({"role": "assistant", "content": assistant})
#adding more 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']})
#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
from googletrans import Translator
translator = Translator()
message_language = translator.detect(message).lang
print(message_language)
en_message = translator.translate(message).text
messages.append({"role": "user", "content": en_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
translated_response = translator.translate(response, src='en', dest=message_language).text
yield translated_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() |