Spaces:
Build error
Build error
| import gradio as gr | |
| from transformers import pipeline | |
| import numpy as np | |
| import pandas as pd | |
| from sentence_transformers import SentenceTransformer, util | |
| import nltk | |
| from nltk import sent_tokenize | |
| nltk.download("punkt") | |
| # Loading in dataframes | |
| krishnamurti_df = pd.read_json("krishnamurti_df.json") | |
| stoic_df = pd.read_json("stoic_df.json") | |
| alan_df = pd.read_json("alan-watts_df.json") | |
| # Loading in sentence_similarity model | |
| sentence_similarity_model = "all-mpnet-base-v2" | |
| model = SentenceTransformer(sentence_similarity_model) | |
| # Loading in text-generation models | |
| stoic_generator = pipeline("text-generation", model="eliwill/stoic-generator-10e") | |
| krishnamurti_generator = pipeline("text-generation", model="eliwill/distilgpt2-finetuned-final-project") | |
| alan_generator = pipeline("text-generation", model="eliwill/alan-watts-8e") | |
| # Creating philosopher dictionary | |
| philosopher_dictionary = { | |
| "Marcus Aurelius": { | |
| "generator": stoic_generator, | |
| "dataframe": stoic_df, | |
| "image": "marcus-aurelius.jpg" | |
| }, | |
| "Krishnamurti": { | |
| "generator": krishnamurti_generator, | |
| "dataframe": krishnamurti_df, | |
| "image": "krishnamurti.jpg" | |
| }, | |
| "Alan Watts": { | |
| "generator": alan_generator , | |
| "dataframe": alan_df , | |
| "image": "rsz_1alan_watts.jpg" | |
| } | |
| } | |
| ############### DEFINING FUNCTIONS ########################### | |
| def ask_philosopher(philosopher, question): | |
| """ Return first 5 sentences generated by question for the given philosopher model """ | |
| generator = philosopher_dictionary[philosopher]['generator'] | |
| answer = generator(question, min_length=100, max_length=120)[0]['generated_text'] # generate about 50 word tokens | |
| answer = " ".join(sent_tokenize(answer)[:6]) # Get the first five sentences | |
| return answer | |
| def get_similar_quotes(philosopher, question): | |
| """ Return top 5 most similar quotes to the question from a philosopher's dataframe """ | |
| df = philosopher_dictionary[philosopher]['dataframe'] | |
| question_embedding = model.encode(question) | |
| sims = [util.dot_score(question_embedding, quote_embedding) for quote_embedding in df['Embedding']] | |
| ind = np.argpartition(sims, -5)[-5:] | |
| similar_sentences = [df['quote'][i] for i in ind] | |
| top5quotes = pd.DataFrame(data = similar_sentences, columns=["Quotes"], index=range(1,6)) | |
| top5quotes['Quotes'] = top5quotes['Quotes'].str[:-1].str[:250] + "..." | |
| return top5quotes | |
| def main(question, philosopher): | |
| out_image = philosopher_dictionary[philosopher]['image'] | |
| return ask_philosopher(philosopher, question), get_similar_quotes(philosopher, question), out_image | |
| with gr.Blocks(css=".gradio-container {background-image: url('file=blue_mountains.jpg')} # title {color: #F0FFFF}") as demo: | |
| gr.Markdown(""" | |
| # Ask a Philsopher | |
| """, | |
| elem_id="title" | |
| ) | |
| with gr.Row(): | |
| with gr.Column(): | |
| inp1 = gr.Textbox(placeholder="Place your question here...", label="Ask a question", elem_id="title") | |
| inp2 = gr.Dropdown(choices=["Alan Watts", "Marcus Aurelius", "Krishnamurti"], value="Marcus Aurelius", label="Choose a philosopher") | |
| out1 = gr.Textbox( | |
| lines=3, | |
| max_lines=10, | |
| label="Answer" | |
| ) | |
| with gr.Row(): | |
| out_image = gr.Image(label="Picture", image_mode="L") | |
| out2 = gr.DataFrame( | |
| headers=["Quotes"], | |
| max_rows=5, | |
| interactive=False, | |
| wrap=True, | |
| value=[["When you arise in the morning, think of what a precious privilege it is to be alive – to breathe, to think, to enjoy, to love."], | |
| ["Each day provides its own gifts."], | |
| ["Only time can heal what reason cannot."], | |
| ["He who is brave is free."], | |
| ["First learn the meaning of what you say, and then speak."]] | |
| ) | |
| btn = gr.Button("Run") | |
| btn.click(fn=main, inputs=[inp1,inp2], outputs=[out1,out2,out_image]) | |
| demo.launch() |