knowledge_model / app.py
arjunanand13's picture
Upload 10 files
1d35b34 verified
raw
history blame contribute delete
No virus
6.83 kB
import gradio as gr
from PIL import Image, ImageFilter
import os
from txt2sql import SQLPromptModel
from gradio import Button
import time
import google.generativeai as genai
from rag import TicketResolver
image = Image.open(os.path.join(os.path.abspath(''), "ticket_database.jpg"))
def image_display(steps=0):
return image
query = None
rows = None
columns = None
user_choices = None
def execute_sql_query(input_prompt):
global query, rows, columns, user_choices
model_dir = "multi_table_demo/checkpoint-2600"
database = r"ticket_dataset.db"
sql_model = SQLPromptModel(model_dir, database)
user_prompt = "Select all rows ,Ticket priority High , Ticket status Open tasks"
for _ in range(3): # Retry logic, try 3 times
try:
table_schema = sql_model.fetch_table_schema("ticket_dataset")
if table_schema:
description_index = [index for index, column_name, *_ in table_schema if column_name == 'Ticket_Description'][0]
type_index=[index for index, column_name, *_ in table_schema if column_name == 'Ticket_Type'][0]
print(type_index)
if input_prompt.strip():
# query = sql_model.text2sql(table_schema, user_prompt, input_prompt)
# query = sql_model.text2sql_chatgpt(table_schema, user_prompt, input_prompt)
query = sql_model.text2sql_gemini(table_schema, user_prompt, input_prompt)
else:
# query = sql_model.text2sql(table_schema, user_prompt, user_prompt)
# query = sql_model.text2sql_chatgpt(table_schema, user_prompt, user_prompt)
query = sql_model.text2sql_gemini(table_schema, user_prompt, user_prompt)
rows, columns = sql_model.execute_query(query)
print(rows)
user_choices = {}
for row in rows:
description = row[description_index]
ticket_type = row[type_index]
print(ticket_type)
user_choices[description] = ticket_type
return rows
else:
print("Table schema not found.")
return None
except Exception as e:
print(f"An error occurred: {e}")
print("Retrying...")
time.sleep(1)
return None
def ticket_resolver(input,ticket_type):
csv_path = "ticket_dataset.csv"
output_string = ""
if ticket_type is not None:
ticket_resolver = TicketResolver(csv_path)
if input is not None:
query=input
else:
query = "Server out of memory"
issue_resolution_pairs,resolutions = ticket_resolver.find_relevant_issues(query,ticket_type)
final_resolution = ticket_resolver.generate_resolution(query,resolutions)
print("Final resolution:", final_resolution)
output_string += f"Ticket Type :{ticket_type} \n"
for issue, resolution in issue_resolution_pairs:
output_string += f"Issue: {issue}\nResolution: {resolution}\n\n"
output_string += f"Final Resolution: {final_resolution}"
print(output_string)
return output_string
def update_choices(nothing):
print("callback called")
print("user_choices",user_choices)
if user_choices:
return gr.Dropdown(choices=list(user_choices.keys()), label="Ticket Choice", info="List of all tickets", interactive=True)
else:
return gr.Dropdown(choices=[], label="Ticket Choice",info="List of all tickets",interactive=True)
# def ticket_resolver_interface(description):
# ticket_type = user_choices[description]
# return ticket_resolver(description, ticket_type)
def ticket_resolver_interface(description):
print("description",description)
if not description:
print("description is None or falsy")
return ""
elif description in user_choices:
print("description available")
ticket_type = user_choices[description]
return ticket_resolver(description, ticket_type)
else:
print("description is not None but not in user_choices")
return "Please select a ticket description or reset the selection."
user_dropdown=gr.Dropdown(choices=[], label="Ticket Choice",info="List of all tickets")
properties_text=gr.components.Textbox(lines=2,label="User Database Query",placeholder="Click on an query from 'examples' below or write your own query based on the database above. Default : 'High priority Open tasks'")
interface_1_output=gr.Json(label="json")
stage2_text=gr.components.Textbox(lines=2,label="Question on database",placeholder="Enter a question to know more about related resolved queries , you can write a own question Default: 'Server OOM'",)
stage2_output=gr.Text(label="Resolution",lines=25)
with gr.Blocks(title="Ticket Excel Query") as demo:
gr.Markdown("# Knowledge Model")
generated_image = image_display()
gr.Image(generated_image)
gr.Markdown("""### The database provided contains information about different Issues and Resolutions, including their fundamental details.
\n ### Once the data (extracted rows) is retrieved based on the query, you can utilize the user interface (UI) below to retrieve similarly resolved issues. You will receive an generic answer based on the available information.""")
interface_1 = gr.Interface(
execute_sql_query,
inputs=properties_text,
# "textbox",
outputs=interface_1_output,
# live=True,
# cache_examples=["Give me all details of properties from India"],
examples=["Urgent priority Open tasks "," Technical Issue Open tasks","High priority Open tasks"],
)
interface_2 = gr.Interface(
ticket_resolver,
inputs=user_dropdown,
# inputs=[gr.Dropdown.change(fn=update_choices),gr.components.Textbox(lines=2,label="Question on property",placeholder="Enter a question to know more about the properties")],
outputs=stage2_output,
live=True,
# examples=["Server out of memory","Wifi connection issues","OS boot failure","Procedure to apply leave requests"]
)
# gr.Examples(["How many floors does the property have "," Total square feet of the property " ," Total area of the property"],inputs=stage2_text,outputs=stage2_output,fn=qa_infer_interface)
properties_text.change(update_choices,inputs=[properties_text],outputs=[user_dropdown])
interface_1_output.change(update_choices,inputs=[interface_1_output],outputs=[user_dropdown])
user_dropdown.change(fn=ticket_resolver_interface, inputs=[user_dropdown], outputs=[stage2_output])
if __name__ == "__main__":
demo.launch(debug=True)#,share=True)