|
import gradio as gr |
|
from sentence_transformers import SentenceTransformer, util |
|
import openai |
|
import os |
|
import random |
|
|
|
|
|
|
|
os.environ["TOKENIZERS_PARALLELISM"] = "false" |
|
|
|
|
|
filename = "output_topic_details.txt" |
|
retrieval_model_name = 'output/sentence-transformer-finetuned/' |
|
|
|
openai.api_key = os.environ["OPENAI_API_KEY"] |
|
|
|
system_message = "You are a friendly AI chatbot specialized in providing information on AI usage, helpful tools, and teaching users about AI." |
|
|
|
messages = [{"role": "system", "content": system_message}] |
|
|
|
|
|
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: |
|
|
|
lower_query = user_query.lower() |
|
|
|
|
|
query_embedding = retrieval_model.encode(lower_query) |
|
segment_embeddings = retrieval_model.encode(segments) |
|
|
|
|
|
similarities = util.pytorch_cos_sim(query_embedding, segment_embeddings)[0] |
|
|
|
|
|
best_idx = similarities.argmax() |
|
|
|
|
|
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 AI information. |
|
""" |
|
try: |
|
user_message = f"Here's the information on AI: {relevant_segment}" |
|
|
|
|
|
messages.append({"role": "user", "content": user_message}) |
|
|
|
response = openai.ChatCompletion.create( |
|
model="gpt-3.5-turbo", |
|
messages=messages, |
|
max_tokens=350, |
|
temperature=0.2, |
|
top_p=1, |
|
frequency_penalty=0, |
|
presence_penalty=0 |
|
) |
|
|
|
|
|
output_text = response['choices'][0]['message']['content'].strip() |
|
|
|
|
|
messages.append({"role": "assistant", "content": output_text}) |
|
fun_int=random.randint(0,11) |
|
fun_facts=["Young Einstein didn't talk until much later in his childhood.","Einstein had larger-than-average perietal lobes.","Einstein was a talented violinist","Einstein's brain was preserved after his death!","Einstein started as a teacher, but couldn't find a job.","Einstein's famous equation E=mc² was announced in 1905.","Einstein won The Nobel Prize in Physics in 1921","Einstien did not wear socks!","Einstein loved sailing.",'Einstein once said -"If you can not explain it simply, you don not understand it well enough."','Einstein once said- "Logic will get you from A to B. Imagination will get you anywhere."'] |
|
output_text=output_text+"\n\n Here is a fun fact about Albert Einstein!: " + fun_facts[fun_int-1] |
|
ai_int=random.randint(0,10) |
|
ai_helpers=["https://chatgpt.com/ - An AI chatbot","https://www.grammarly.com/ - Help with grammar and writing!","https://www.any.do/ - Creates a to do list to help you get your tasks completed!","https://scheduler.ai/- AI optimizes your schedule and works around pre-scheduled deadlines","ChatGPT Data Analyst - Helps you visualize and analize your data","ChatGPT Logo creator - Helps to create professional logos for companies or brands","ScholarGPT - Enhances your reaserch capabilities","ChatGPT's Math solver","Tutor Me by Khan Academy","Travel Guide by capchair - helps find destinations, plan trips, and manage budgets"] |
|
output_text=output_text+"\n\n Here is a helpful chatbot tool for you!: "+ ai_helpers[ai_int-1] |
|
return output_text |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
except Exception as e: |
|
print(f"Error in generating response: {e}") |
|
return f"Error in generating response: {e}" |
|
|
|
def query_model(question): |
|
""" |
|
Process a question, find relevant information, and generate a response. |
|
""" |
|
if question == "": |
|
return "Welcome to AI-nstein! Ask me anything about AI ML, and helpful tools you may want to use!" |
|
relevant_segment = find_relevant_segment(question, segments) |
|
if not relevant_segment: |
|
return "Could not find specific information. Please refine your question." |
|
response = generate_response(question, relevant_segment) |
|
return response |
|
|
|
link = "https://chatgpt.com/" |
|
links=["https://chatgpt.com/","https://www.grammarly.com/","https://www.any.do/","https://scheduler.ai/","https://huggingface.co/spaces/MukBot/MukBot","https://huggingface.co/spaces/CalmConnect/calm-connect","https://chatgpt.com/g/g-3DGi2iLag-scholargpt","https://chatgpt.com/g/g-E7eSRUHy6-travel-guide"] |
|
link = random.choice(links) |
|
|
|
link_gen =f''' |
|
{link} |
|
''' |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
welcome_message = """ |
|
## Albot AI-nstein is your AI-driven assistant, for all things AI. |
|
""" |
|
topicList = """ |
|
### _Ask me anything from the topics below!_ |
|
### I give you a fun chatbot and an Einstein fact with every answer. |
|
""" |
|
|
|
topics1 = """ |
|
\n- AI Usage |
|
\n- AI Safety |
|
\n- How AI Works |
|
|
|
""" |
|
topics2 = """ |
|
\n- Basics of AI |
|
\n- Fun Facts about AI |
|
\n- Examples of AI |
|
|
|
""" |
|
headline=""" |
|
# **_Welcome to AI-nstein!_** |
|
""" |
|
|
|
summary=""" |
|
### AI-nstein strives to endow the young (and the less young) with basic knowledge on artificial intelligence! \nWe want youngsters to be comfortable with and knowledgable about AI, because it is an essential part of our future, and not to fear the unknown. |
|
### Einstein's Theory of Relativity states that what is observed depends on the observer's position. \nAI-nstein will provide users with various viewpoints to further their understanding of AI, and bring more light to this new technology. |
|
|
|
""" |
|
|
|
|
|
|
|
|
|
theme = gr.themes.Monochrome( |
|
).set( |
|
body_text_color='#054A91', |
|
body_text_color_dark='#000000', |
|
background_fill_primary='#FBCF95', |
|
background_fill_primary_dark='#81A4CD', |
|
background_fill_secondary='#884e4c', |
|
background_fill_secondary_dark='#EDDEC0', |
|
border_color_accent='#EDDEC0', |
|
border_color_accent_dark='#EDDEC0', |
|
border_color_accent_subdued='#EDDEC0', |
|
border_color_primary='#F17300', |
|
block_border_color='#F17300', |
|
button_primary_background_fill='#054A91', |
|
button_primary_background_fill_dark='#884e4c' |
|
|
|
) |
|
|
|
|
|
with gr.Blocks(theme=theme) as demo: |
|
with gr.Row(equal_height=True): |
|
with gr.Column(): |
|
gr.Image("ally.png", container = False, show_share_button = False, show_download_button = False, label="output", show_label=True, elem_id="output_image", scale=0, width=500) |
|
gr.Markdown(welcome_message) |
|
with gr.Row(): |
|
with gr.Column(): |
|
gr.Markdown(topicList) |
|
with gr.Row(equal_height=True): |
|
gr.Markdown(topics1) |
|
gr.Markdown(topics2) |
|
gr.Markdown(summary) |
|
with gr.Row(): |
|
with gr.Column(): |
|
gr.Markdown(" ") |
|
gr.Markdown(" ") |
|
gr.Markdown(headline) |
|
question = gr.Textbox(label="Your question:", placeholder="What do you want to ask about?") |
|
submit_button = gr.Button("Submit!") |
|
answer = gr.Textbox(label="AI-nswer:", placeholder="Hello, World! \nAsk me anything about AI ML, and helpful tools you may want to use!", interactive=False, lines=10) |
|
submit_button.click(fn=query_model, inputs=question, outputs=answer) |
|
gr.Image("einy.png", container = False, show_share_button = False, show_download_button = False, label="output", show_label=True, elem_id="output_image", scale=0, width=500) |
|
gr.Markdown("### Look what Albot found:") |
|
gr.Markdown(link_gen) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
demo.launch(share=True) |