Illia56's picture
Update app.py
da5515b
import gradio as gr
import json
import markdown
from telegraph import Telegraph
from gradio_client import Client
import time
# Set up the Telegraph client
telegraph = Telegraph()
telegraph.create_account(short_name='BookMindAI')
with open('detail_queries.json', 'r') as file:
detail_queries = json.load(file)
with open('lang.json', 'r') as file:
languages = [str(x) for x in json.load(file).keys()]
def markdown_to_html(md_content):
return markdown.markdown(md_content)
def predict(input, images = []):
client = Client("https://roboflow-gemini.hf.space/--replicas/bkd57/")
result = client.predict(
None,
images,
0.4,
2048,
"",
32,
1,
[[input,None]],
api_name="/bot"
)
return result[0][1]
def fetch_summary(book_name, author, language):
question = f"Provide a short summary of the book '{book_name}' by {author} in {language} language."
answer = predict(question)
return answer
def post_to_telegraph(title, content):
html_content = markdown_to_html(content)
response = telegraph.create_page(
title=title,
html_content=html_content
)
return 'https://telegra.ph/{}'.format(response['path'])
def generate_predictions(book_name, author, language_choice, detail_options=[]):
details = ""
for option in detail_options:
query_template = detail_queries.get(option).format(book_name=book_name, author=author) + '. Answer in ' + language_choice[3:]
try:
response = predict(query_template)
details += f"\n\n**{option}**:\n{response}"
except:
time.sleep(2)
try:
response = predict(query_template)
details += f"\n\n**{option}**:\n{response}"
except:
pass
summary = fetch_summary(book_name, author, language_choice[3:])
combined_summary = summary + details
try:
telegraph_url = post_to_telegraph(f"Summary of {book_name} by {author}", combined_summary)
except requests.exceptions.ConnectionError:
telegraph_url = "Error connecting to Telegraph API"
return combined_summary, telegraph_url
with gr.Blocks(title="πŸ“š BookMindAI", theme=gr.themes.Base()).queue() as demo:
gr.DuplicateButton()
with gr.Tab("Summarize book🎯"):
with gr.Row():
with gr.Column():
book_name_input = gr.Textbox(placeholder="Enter Book Name", label="Book Name")
author_name_input = gr.Textbox(placeholder="Enter Author Name", label="Author Name")
language_input = gr.Dropdown(choices=languages, label="Language")
detail_options_input = gr.CheckboxGroup(choices=list(detail_queries.keys()), label="Details to Include", visible=True)
run_button_summarize = gr.Button("Run", visible=True)
with gr.Column():
telegraph_link_output = gr.Markdown(label="View on Telegraph", visible=True)
with gr.Row():
summary_output = gr.Markdown(label="Parsed Content", visible=True)
run_button_summarize.click(fn=generate_predictions,
inputs=[book_name_input, author_name_input, language_input, detail_options_input],
outputs=[summary_output, telegraph_link_output],
show_progress=True, queue=True)
examples_summarize = [
["Harry Potter and the Philosopher's Stone", "J.K. Rowling", "πŸ‡¬πŸ‡§ english"],
["Pride and Prejudice", "Jane Austen", "πŸ‡ΊπŸ‡¦ ukrainian"],
["The Great Gatsby", "F. Scott Fitzgerald", "πŸ‡«πŸ‡· french"]
]
gr.Examples(examples=examples_summarize, inputs=[book_name_input, author_name_input, language_input, detail_options_input])
with gr.Tab("Talk about bookπŸŽ“"):
chat_examples = [
"How do the underlying themes of a book reflect the societal values and beliefs of its time?",
"In what ways do the characters' personal journeys mirror the broader human experience?"
]
def chat_response(message, history):
for i in range(len(message)):
response = predict(message)
yield response
chat_interface = gr.ChatInterface(chat_response, examples=chat_examples, title='Talk with Gemini PRO about any book.')
demo.launch()