Spaces:
Sleeping
Sleeping
File size: 7,892 Bytes
28635a8 cdd288e c08346f cdd288e 401487d 28635a8 9eb3b80 28635a8 7918fa4 28635a8 401487d 28635a8 401487d 28635a8 401487d 28635a8 401487d 28635a8 401487d 28635a8 401487d 28635a8 7499f8e 76a0b76 7499f8e 28635a8 3a6ac6f 28635a8 d5106b6 28635a8 3a0fd58 28635a8 401487d 28635a8 f49a294 28635a8 7499f8e 28635a8 7499f8e f49a294 28635a8 401487d 28635a8 c084b2a 28635a8 c084b2a 28635a8 c084b2a 28635a8 d3a3637 9eb04af 28635a8 c084b2a 28635a8 9a25b62 0b3512b f7b0002 9a25b62 0b3512b 600aa2d 0b3512b 3229b37 827f2cd cdd288e df6b1bf 827f2cd 9a25b62 28635a8 440bd6b |
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 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 |
import gradio as gr
from sentence_transformers import SentenceTransformer, util
import openai
import os
HF_TOKEN = os.getenv('HF_TOKEN')
hf_writer =gr.HuggingFaceDatasetSaver(HF_TOKEN, "kellydoesstuff/RotBot_Flags")
os.environ["TOKENIZERS_PARALLELISM"] = "false"
# Initialize paths and model identifiers for easy configuration and maintenance
filename = "output_chess_details.txt" # Path to the file storing chess-specific details
retrieval_model_name = 'output/sentence-transformer-finetuned/'
openai.api_key = os.environ["OPENAI_API_KEY"]
# Attempt to load the necessary models and provide feedback on success or failure
try:
retrieval_model = SentenceTransformer(retrieval_model_name)
print("Models loaded successfully.")
except Exception as e:
print(f"Failed to load models: {e}")
def load_and_preprocess_text(filename):
"""
Load and preprocess text from a file, removing empty lines and stripping whitespace.
"""
try:
with open(filename, 'r', encoding='utf-8') as file:
segments = [line.strip() for line in file if line.strip()]
print("Text loaded and preprocessed successfully.")
return segments
except Exception as e:
print(f"Failed to load or preprocess text: {e}")
return []
segments = load_and_preprocess_text(filename)
def find_relevant_segment(user_query, segments):
"""
Find the most relevant text segment for a user's query using cosine similarity among sentence embeddings.
This version finds the best match based on the content of the query.
"""
try:
# Lowercase the query for better matching
lower_query = user_query.lower()
# Encode the query and the segments
query_embedding = retrieval_model.encode(lower_query)
segment_embeddings = retrieval_model.encode(segments)
# Compute cosine similarities between the query and the segments
similarities = util.pytorch_cos_sim(query_embedding, segment_embeddings)[0]
# Find the index of the most similar segment
best_idx = similarities.argmax()
# Return the most relevant segment
return segments[best_idx]
except Exception as e:
print(f"Error in finding relevant segment: {e}")
return ""
def generate_response(user_query, relevant_segment):
"""
Generate a response emphasizing the bot's capability in providing chess information.
"""
try:
# system_message = "You are a chess chatbot specialized in providing information on chess rules, strategies, and terminology."
system_message = "You are a chatbot that is specialized in translating Gen-Z/Gen-Alpha slang into standard English. In addition to translation, you are knowledgable on synonyms and origins of slang words. You not only act as a dictionary/thesaurus for slang words, you can translate sentences with slang words into standard Englsih."
# system_message = """ You are a chatbot that translates slang English, I'm talking sentences with words like rizz and gyatt, into professional standard English.
# We want a translation that sounds like a sentence from a LinkedIn post. You translate sentences with multiple slang words into sentences with comprehensible standard English.
# Not only that, you are also knowledgeable on definitions, synonyms, and origins of slang words if prompted.
# So,if someone asks you to translate a sentence into standard English like, 'What does the sentence She has the biggest gyatt on god! mean?', you would respond with 'This sentence translates to she has the biggest butt I swear to god!'
# Or, if someone asks you to translate the sentence 'What the sigma! She just ghosted me!', you would translate that to 'What the hell! She is ignoring me!'
# If the output is inappropriate warn the user. DO NOT RESPOND WITH THE SAME TEXT PASSED TO YOU. YOU ARE A TRANSLATOR NOT A CONVERSATIONALIST.
# """
user_message = f"Here's the question the user inputted: {relevant_segment}"
messages = [
{"role": "system", "content": system_message},
{"role": "user", "content": user_message}
]
response = openai.ChatCompletion.create(
model="gpt-4o",
messages=messages,
max_tokens=200,
temperature=0.2,
top_p=1,
frequency_penalty=0,
presence_penalty=0
)
return response['choices'][0]['message']['content'].strip()
except Exception as e:
print(f"Error in generating response: {e}")
return f"Error in generating response: {e}"
def query_model(question, history):
"""
Process a question, find relevant information, and generate a response.
"""
# global question_g
# question_g = question
if question == "":
return "What the sigma! You didn't ask a question. Feel free to ask me anything about the topics listed above."
relevant_segment = find_relevant_segment(question, segments)
if not relevant_segment:
return "Unfortunately I cannot answer your question..😔 Try refining your question so I can try again."
# global response_g
response = generate_response(question, relevant_segment)
return response
# Define the welcome message and specific topics the chatbot can provide information about
welcome_message = """
# 🗑️ Welcome to RotBot!
## Your AI assistant for translating slang into standard English!
"""
topics = """
### Feel Free to ask me anything from the topics below!
- Translating slang sentences into standard English
- Defining slang into standard English
- Providing standard English synonyms for slang
"""
# callback = gr.CSVLogger()
# Setup the Gradio Blocks interface with custom layout components
with gr.Blocks(theme='gradio/soft') as demo:
gr.Markdown(welcome_message) # Display the formatted welcome message
with gr.Row():
with gr.Column():
gr.Markdown(topics) # Show the topics on the left side
# with gr.Row():
# with gr.Column():
# question = gr.Textbox(label="Your question", placeholder="What do you want to ask about?")
# answer = gr.Textbox(label="RotBot Response", placeholder="RotBot will respond here...", interactive=False, lines=10)
# submit_button = gr.Button("Submit")
# submit_button.click(fn=query_model, inputs=question, outputs=answer)
# chatbot = gr.ChatInterface(
# fn=query_model,
# examples=["Help me translate this sentence into standard English: Stop glazing him! He isn't even that good. ", "What's a synonym for rizz?", "What is the definition of gyatt?"],
# multimodal=False,
# )
# with gr.Row():
# flag_btn = gr.Button("Flag")
# callback.setup([chatbot], "flagged_data_points")
# flag_btn.click(lambda *args: callback.flag(args), [chatbot], None, preprocess=False)
chatbot = gr.Interface(
fn=query_model,
inputs=gr.Textbox(label="Your question", placeholder="What do you want to ask about?"),
outputs=gr.Textbox(label="RotBot Response", placeholder="RotBot will respond here...", interactive=False, lines=10, show_copy_button = True
),
# outputs = gr.Markdown(label="RotBot Response"),
theme='gradio/soft',
examples=[
["Help me translate this sentence into standard English: Stop glazing him! He isn't even that good."],
["What's a synonym for rizz?"],
["What is the definition of gyatt?"]
],
allow_flagging="manual",
# flagging_dir = "flag",
flagging_options=["Ambiguous", "Wrong", "Other"],
flagging_callback=hf_writer
# show_copy_button = True
)
# Launch the Gradio app to allow user interaction
demo.launch(share=True)
|