KKMS-KSSW-HF / app.py
Chintan Donda
Fixing issue
ea0cccb
raw
history blame
9.92 kB
import gradio as gr
import os
import datetime
import kkms_kssw as kkms_kssw
import utils.constants as constants_utils
# Create and launch Gradio Web UI
class DomState:
def __init__(self):
self.relevant_paragraphs = ''
self.answer = ''
self.summary = ''
self.mandi_price = ''
self.mandi_from_date = (datetime.datetime.now() - datetime.timedelta(days=2)).strftime('%Y-%m-%d')
self.mandi_to_date = datetime.datetime.now().strftime('%Y-%m-%d')
self.weather_info = ''
self.weather_forecast = ''
self.weather_forecast_summary = ''
self.indic_lang_answer = ''
# Initialize index (vector store)
self.kkms_kssw_obj = kkms_kssw.KKMS_KSSW()
self.kkms_kssw_obj.initialize_index(constants_utils.INDEX_FILENAME, index_type='GPTSimpleVectorIndex')
def click_handler_for_get_relevant_paragraphs(self,
question,
mode='default',
response_mode='default',
similarity_top_k=2,
):
self.relevant_paragraphs = self.kkms_kssw_obj.query(question,
mode=mode,
response_mode=response_mode,
similarity_top_k=similarity_top_k,
# required_keywords=required_keywords_list,
# exclude_keywords=exclude_keywords_list,
)
return self.relevant_paragraphs
def click_handler_for_summary(self, answer):
self.sumamry = self.kkms_kssw_obj.langchain_utils_obj.get_textual_summary(answer)
return self.sumamry
def click_handler_for_get_answer(self,
relevant_paragraphs,
question
):
self.answer = self.kkms_kssw_obj.langchain_utils_obj.get_answer_from_para(relevant_paragraphs, question)
return self.answer
def click_handler_for_mandi_price(self,
state_name,
apmc_name,
commodity_name,
from_date,
to_date
):
if state_name and apmc_name and commodity_name and from_date and to_date:
self.mandi_price = self.kkms_kssw_obj.mandi_utils_obj.get_mandi_price(state_name, apmc_name, commodity_name, from_date, to_date)
return self.mandi_price
def click_handler_for_get_weather(self, city):
time, info, temperature = self.kkms_kssw_obj.weather_utils_obj.get_weather(city)
self.weather_info = f'Weather in {city.capitalize()} on {time} is {temperature} with {info}.'
return self.weather_info
def click_handler_for_get_weather_forecast(self, state, district):
self.weather_forecast = self.kkms_kssw_obj.weather_utils_obj.get_weather_forecast(state, district)
return self.weather_forecast
def click_handler_for_weather_forecast_summary(self, weather_forecast):
self.weather_forecast_summary = self.kkms_kssw_obj.langchain_utils_obj.get_weather_forecast_summary(weather_forecast)
return self.weather_forecast_summary
def click_handler_for_get_indic_answer(self, eng_ans, language='Hindi'):
self.indic_lang_answer = self.kkms_kssw_obj.translator_utils_obj.get_indic_google_translate(eng_ans, language)
return self.indic_lang_answer
def select_widget(self, choice):
if choice == "General":
return [
gr.update(visible=True),
gr.update(visible=False),
gr.update(visible=False)
]
elif choice == "Mandi Price":
return [
gr.update(visible=False),
gr.update(visible=True),
gr.update(visible=False)
]
elif choice == "Weather":
return [
gr.update(visible=False),
gr.update(visible=False),
gr.update(visible=True)
]
else:
return gr.update(visible=False)
with gr.Blocks(title='KKMS-KSSW Demo') as demo:
dom = DomState()
radio = gr.Radio(
["General", "Mandi Price", "Weather"], label="Query related to"
)
########################### Widget for Govt. Policy #################################################
with gr.Row(visible=True) as rowGeneral:
with gr.Column(scale=1, min_width=600):
with gr.Tab(label='Relevant paragraphs'):
question = gr.Textbox(label="Enter your question", placeholder='Type the question here')
# Get the Relevant paragraphs for the question asked
relevant_paragraphs = gr.Textbox(label="Relevant paragraphs are:", value=dom.relevant_paragraphs, interactive=False)
b_relevant_paragraphs = gr.Button("Get Relevant paragraphs").style(size='sm')
b_relevant_paragraphs.click(fn=dom.click_handler_for_get_relevant_paragraphs, inputs=question, outputs=[relevant_paragraphs])
with gr.Column(scale=1, min_width=600):
with gr.Tab(label='Extractive Summary'):
# Get the extractive text summary from the retrieved Relevant paragraphs
summary = gr.Textbox(label="Extractive Summary is:", value=dom.summary, interactive=False)
b_summary = gr.Button("Extract Summary").style(size='sm')
b_summary.click(fn=dom.click_handler_for_summary, inputs=relevant_paragraphs, outputs=[summary])
# Get the exact answer for the question asked from the retrieved Relevant paragraphs
with gr.Row():
with gr.Column(scale=1, min_width=600):
with gr.Tab(label='Answer'):
answer = gr.Textbox(label="Answer is:", value=dom.answer, interactive=False)
b_answer = gr.Button("Get Answer").style(size='sm')
b_answer.click(fn=dom.click_handler_for_get_answer, inputs=[relevant_paragraphs, question], outputs=[answer])
# Covert the answer to Indian language
with gr.Row():
with gr.Column(scale=1, min_width=600):
with gr.Tab(label='Answer in selected language'):
# Select the language
language = gr.Dropdown(
['English', 'Hindi', 'Gujarati', 'Marathi', 'Kannada', 'Bengali', 'Panjabi', 'Telugu', 'Tamil', 'Malayalam'],
label="Select language")
indic_lang_answer = gr.Textbox(label="Answer in the selected language is:", value=dom.indic_lang_answer, interactive=False)
b_indic_lang_answer = gr.Button("Get answer in selected language").style(size='sm')
b_indic_lang_answer.click(fn=dom.click_handler_for_get_indic_answer, inputs=[answer, language], outputs=[indic_lang_answer])
########################## Widget for Mandi Price ###################################################
with gr.Row(visible=False) as rowMandiPrice:
with gr.Column(scale=1, min_width=600):
# Select State
state_name = gr.Dropdown(['ANDAMAN AND NICOBAR ISLANDS', 'ANDHRA PRADESH', 'ASSAM', 'BIHAR', 'CHANDIGARH', 'CHHATTISGARH', 'GOA', 'GUJARAT', 'HARYANA', 'HIMACHAL PRADESH', 'JAMMU AND KASHMIR', 'JHARKHAND', 'KARNATAKA', 'KERALA', 'MADHYA PRADESH', 'MAHARASHTRA', 'NAGALAND', 'ODISHA', 'PUDUCHERRY', 'PUNJAB', 'RAJASTHAN', 'TAMIL NADU', 'TELANGANA', 'TRIPURA', 'UTTAR PRADESH', 'UTTARAKHAND', 'WEST BENGAL'], label="Select state")
# APMC name
apmc_name = gr.Textbox(label="Enter APMC name", placeholder='Type the APMC name here')
# APMC name
commodity_name = gr.Textbox(label="Enter Commodity name", placeholder='Type the Commodity name here')
# From/To date in yyyy-mm-dd format
from_date = gr.Textbox(label="From date?", value=dom.mandi_from_date, placeholder='Please enter the From date here in yyyy-mm-dd format')
to_date = gr.Textbox(label="To date?", value=dom.mandi_to_date, placeholder='Please enter the To date here in yyyy-mm-dd format')
with gr.Column(scale=1, min_width=600):
mandi_price = gr.Textbox(label=f"Mandi Price is:", value=dom.mandi_price, interactive=False)
b_summary = gr.Button("Get Mandi Price").style(size='sm')
b_summary.click(fn=dom.click_handler_for_mandi_price, inputs=[state_name, apmc_name, commodity_name, from_date, to_date], outputs=[mandi_price])
########################## Widget for Weather Info ###################################################
with gr.Row(visible=False) as rowWeather:
with gr.Column(scale=1, min_width=600):
with gr.Tab(label='Weather Info'):
city = gr.Textbox(label="Enter city name", placeholder='Type the city name here')
weather = gr.Textbox(label=f"Current weather is:", value=dom.weather_info, interactive=False)
b_weather = gr.Button("Get weather info").style(size='sm')
b_weather.click(fn=dom.click_handler_for_get_weather, inputs=city, outputs=[weather])
########### Weather Forecast ###########
with gr.Column(scale=1, min_width=600):
with gr.Tab(label='Weather Forecast for next 5 days'):
# Select the State
state = gr.Dropdown(
['Andaman-Nicobar', 'Andhra-Pradesh', 'Arunachal-Pradesh', 'Assam', 'Bihar', 'Chandigarh', 'Chhattisgarh', 'Dadra-and-Nagar-Haveli', 'Daman-and-Diu', 'Delhi', 'Goa', 'Gujarat', 'Haryana', 'Himachal-Pradesh', 'Jammu-Kashmir', 'Jharkhand', 'Karnataka', 'Kerala', 'Lakshadweep', 'Madhya-Pradesh', 'Maharashtra', 'Manipur', 'Meghalaya', 'Mizoram', 'Nagaland', 'Odisha', 'Pondicherry', 'Punjab', 'Rajasthan', 'Sikkim', 'Tamilnadu', 'Telangana', 'Tripura', 'Uttar-Pradesh', 'Uttarakhand', 'West-Bengal'],
label="Select state"
)
# # Select district
# district = gr.Dropdown(
# weather_utils.STATES.get(state, {}),
# label="Select district"
# )
district = gr.Textbox(label="Enter district name", placeholder='Type the district name here')
district_weather = gr.Textbox(label=f"Weather forecast is:", value=dom.weather_forecast, interactive=False)
bd_weather = gr.Button("Get weather forecast").style(size='sm')
bd_weather.click(fn=dom.click_handler_for_get_weather_forecast, inputs=[state, district], outputs=[district_weather])
with gr.Column(scale=1, min_width=600):
with gr.Tab(label='Weather Forecast Summary'):
# Get the summary of the weather forecast
weather_forecast_summary = gr.Textbox(label="Weather Forecast Summary is:", value=dom.weather_forecast_summary, interactive=False)
b_weather_forecast_summary = gr.Button("Get Weather Forecast Summary").style(size='sm')
b_weather_forecast_summary.click(fn=dom.click_handler_for_weather_forecast_summary, inputs=district_weather, outputs=[weather_forecast_summary])
radio.change(fn=dom.select_widget, inputs=radio, outputs=[rowGeneral, rowMandiPrice, rowWeather])
demo.launch(share=False)