Osana-WEB-GPT / app.py
Navanjana
Update app.py
81d46e4
raw
history blame
6.19 kB
import openai
import requests
import json
import wikipedia
from bs4 import BeautifulSoup
import gradio as gr
from googletrans import Translator
import langid
# Set up the OpenAI API client
openai.api_key = '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' # Replace with your actual API key
# Set up Google SERP API credentials
serp_api_key = '03c74289238ba82d2889379e7a958a07b56c45de' # Replace with your actual Google SERP API key
# Set up Google Translate client
translator = Translator(service_urls=['translate.google.com'])
# Function to send a message and receive a response from the chatbot
def chat(message, target_lang):
try:
response = openai.Completion.create(
engine='text-davinci-003', # Choose the language model/engine you want to use
prompt=message,
max_tokens=50, # Adjust the response length as needed
n=1, # Number of responses to generate
stop=None, # Specify a stop token to end the response
)
response_text = response.choices[0].text.strip()
translated_text = translator.translate(response_text, dest=target_lang).text
return translated_text
except Exception as e:
print("An error occurred:", e)
return ""
# Function to get the latest answers from Google SERP API
def get_latest_answers(query):
url = "https://google.serper.dev/search"
payload = json.dumps({
"q": query
})
headers = {
'X-API-KEY': serp_api_key,
'Content-Type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
try:
# Parse the response JSON
data = json.loads(response.text)
# Extract details from the response
output = ""
if 'knowledgeGraph' in data:
knowledge_graph = data['knowledgeGraph']
output += "Website: {}\n".format(knowledge_graph.get('website'))
output += "Description: {}\n".format(knowledge_graph.get('description'))
if 'organic' in data:
organic_results = data['organic']
for result in organic_results:
output += "Snippet: {}\n".format(result.get('snippet'))
if 'peopleAlsoAsk' in data:
people_also_ask = data['peopleAlsoAsk']
for question in people_also_ask:
output += "Snippet: {}\n".format(question.get('snippet'))
return output
except json.JSONDecodeError:
print(".")
return ""
except Exception as e:
print(".")
return ""
# Function to search Wikipedia for an answer and summarize it
def search_wikipedia(query):
try:
search_results = wikipedia.search(query)
# Get the page summary of the first search result
if search_results:
page_title = search_results[0]
page_summary = wikipedia.summary(page_title)
# Translate the summary to English
page_summary_en = translator.translate(page_summary, dest='en').text
return page_summary_en
else:
print(".")
return None
except wikipedia.exceptions.DisambiguationError as e:
# Handle disambiguation error
print(".")
return None
except wikipedia.exceptions.PageError as e:
# Handle page not found error
print(".")
return None
except Exception as e:
# Handle other exceptions
print(".")
return None
# Function to generate summarized paragraph using OpenAI API
def generate_summary(user_input):
output = get_latest_answers(user_input)
page_summary = search_wikipedia(user_input)
# Translate the user input to English
user_input_en = translator.translate(user_input, dest='en').text
chat_answer_en = chat(user_input_en, 'en')
# Translate the chatbot's response back to the detected input language
detected_lang = langid.classify(user_input)[0]
chat_answer = translator.translate(chat_answer_en, dest=detected_lang).text
# Generate summarized paragraph using OpenAI API
response = openai.Completion.create(
engine='text-davinci-003',
prompt=f"Data from Google SERP API:\n{output}\nWikipedia summary:\n{page_summary}\n\nOpenAI chat response:\n{chat_answer}\n\nSummarize the above data into a paragraph.",
max_tokens=200
)
summarized_paragraph = response.choices[0].text.strip()
return summarized_paragraph
# Function to detect the input language
def detect_language(text):
detected_lang = langid.classify(text)[0]
return detected_lang
# Function to translate text to English
def translate_to_english(text):
translated_text = translator.translate(text, dest='en').text
return translated_text
# Function to translate text to the detected input language
def translate_to_input_language(text, input_lang):
translated_text = translator.translate(text, dest=input_lang).text
return translated_text
# Define the Gradio interface
def summarizer_interface(user_input):
input_lang = detect_language(user_input)
user_input_english = translate_to_english(user_input)
summarized_text_english = generate_summary(user_input_english)
summarized_text = translate_to_input_language(summarized_text_english, input_lang)
return summarized_text
iface = gr.Interface(
fn=summarizer_interface,
inputs="text",
outputs="text",
title="Osana Web-GPT",
description="Enter your query and get the latest and better answer.",
theme="black",
layout="horizontal",
examples=[
["What is the capital of France?"],
["How does photosynthesis work?"],
["Who is the president of the United States?"],
["What is the capital of Japan?"],
["How do I bake a chocolate cake?"],
["What is the meaning of life?"],
["Who painted the Mona Lisa?"],
["What is the population of New York City?"],
["How does the internet work?"],
["What is the largest planet in our solar system?"],
["What are the benefits of regular exercise?"],
]
)
# Launch the interface
iface.launch()