arjunanand13 commited on
Commit
ea750e8
·
verified ·
1 Parent(s): cf2311e

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +151 -0
app.py ADDED
@@ -0,0 +1,151 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ from PIL import Image, ImageFilter
3
+ import os
4
+ from txt2sql import SQLPromptModel
5
+ from gradio import Button
6
+ import time
7
+ import google.generativeai as genai
8
+ from rag import TicketResolver
9
+
10
+ image = Image.open(os.path.join(os.path.abspath(''), "ticket_database.jpg"))
11
+
12
+ def image_display(steps=0):
13
+ return image
14
+
15
+ query = None
16
+ rows = None
17
+ columns = None
18
+ user_choices = None
19
+
20
+ def execute_sql_query(input_prompt):
21
+ global query, rows, columns, user_choices
22
+
23
+ model_dir = "multi_table_demo/checkpoint-2600"
24
+ database = r"ticket_dataset.db"
25
+ sql_model = SQLPromptModel(model_dir, database)
26
+
27
+ user_prompt = "Select all rows ,Ticket priority High , Ticket status Open tasks"
28
+ for _ in range(3): # Retry logic, try 3 times
29
+ try:
30
+ table_schema = sql_model.fetch_table_schema("ticket_dataset")
31
+ if table_schema:
32
+ description_index = [index for index, column_name, *_ in table_schema if column_name == 'Ticket_Description'][0]
33
+ type_index=[index for index, column_name, *_ in table_schema if column_name == 'Ticket_Type'][0]
34
+ print(type_index)
35
+ if input_prompt.strip():
36
+ # query = sql_model.text2sql(table_schema, user_prompt, input_prompt)
37
+ # query = sql_model.text2sql_chatgpt(table_schema, user_prompt, input_prompt)
38
+ query = sql_model.text2sql_gemini(table_schema, user_prompt, input_prompt)
39
+ else:
40
+ # query = sql_model.text2sql(table_schema, user_prompt, user_prompt)
41
+ # query = sql_model.text2sql_chatgpt(table_schema, user_prompt, user_prompt)
42
+ query = sql_model.text2sql_gemini(table_schema, user_prompt, user_prompt)
43
+ rows, columns = sql_model.execute_query(query)
44
+ print(rows)
45
+ user_choices = {}
46
+ for row in rows:
47
+ description = row[description_index]
48
+ ticket_type = row[type_index]
49
+ print(ticket_type)
50
+ user_choices[description] = ticket_type
51
+ return rows
52
+ else:
53
+ print("Table schema not found.")
54
+ return None
55
+ except Exception as e:
56
+ print(f"An error occurred: {e}")
57
+ print("Retrying...")
58
+ time.sleep(1)
59
+ return None
60
+
61
+ def ticket_resolver(input,ticket_type):
62
+ csv_path = "ticket_dataset.csv"
63
+ output_string = ""
64
+ if ticket_type is not None:
65
+ ticket_resolver = TicketResolver(csv_path)
66
+ if input is not None:
67
+ query=input
68
+ else:
69
+ query = "Server out of memory"
70
+ issue_resolution_pairs,resolutions = ticket_resolver.find_relevant_issues(query,ticket_type)
71
+ final_resolution = ticket_resolver.generate_resolution(resolutions)
72
+ print("Final resolution:", final_resolution)
73
+
74
+ output_string += f"Ticket Type :{ticket_type} \n"
75
+ for issue, resolution in issue_resolution_pairs:
76
+ output_string += f"Issue: {issue}\nResolution: {resolution}\n\n"
77
+ output_string += f"Final Resolution: {final_resolution}"
78
+
79
+ print(output_string)
80
+ return output_string
81
+
82
+ def update_choices(nothing):
83
+ print("callback called")
84
+ print("user_choices",user_choices)
85
+ if user_choices:
86
+ return gr.Dropdown(choices=list(user_choices.keys()), label="Ticket Choice", info="List of all tickets", interactive=True)
87
+ else:
88
+ return gr.Dropdown(choices=[], label="Ticket Choice",info="List of all tickets",interactive=True)
89
+
90
+ # def ticket_resolver_interface(description):
91
+ # ticket_type = user_choices[description]
92
+ # return ticket_resolver(description, ticket_type)
93
+
94
+ def ticket_resolver_interface(description):
95
+ print("description",description)
96
+ if not description:
97
+ print("description is None or falsy")
98
+ return ""
99
+ elif description in user_choices:
100
+ print("description available")
101
+ ticket_type = user_choices[description]
102
+ return ticket_resolver(description, ticket_type)
103
+ else:
104
+ print("description is not None but not in user_choices")
105
+ return "Please select a ticket description or reset the selection."
106
+
107
+ user_dropdown=gr.Dropdown(choices=[], label="Ticket Choice",info="List of all tickets")
108
+ 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'")
109
+ interface_1_output=gr.Json(label="json")
110
+ 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'",)
111
+ stage2_output=gr.Text(label="Resolution")
112
+
113
+ with gr.Blocks(title="Ticket Excel Query") as demo:
114
+
115
+ gr.Markdown("# Knowledge Model")
116
+ generated_image = image_display()
117
+ gr.Image(generated_image)
118
+ gr.Markdown("""### The database provided contains information about different Issues and Resolutions, including their fundamental details.
119
+ \n ### Once the properties are 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.""")
120
+
121
+ interface_1 = gr.Interface(
122
+ execute_sql_query,
123
+ inputs=properties_text,
124
+ # "textbox",
125
+ outputs=interface_1_output,
126
+ # live=True,
127
+ # cache_examples=["Give me all details of properties from India"],
128
+ examples=["Urgent priority Open tasks "," Technical Issue Open tasks","High priority Open tasks"],
129
+ )
130
+
131
+ interface_2 = gr.Interface(
132
+ ticket_resolver,
133
+ inputs=user_dropdown,
134
+ # 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")],
135
+ outputs=stage2_output,
136
+ live=True,
137
+ # examples=["Server out of memory","Wifi connection issues","OS boot failure","Procedure to apply leave requests"]
138
+
139
+ )
140
+
141
+ # 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)
142
+
143
+ properties_text.change(update_choices,inputs=[properties_text],outputs=[user_dropdown])
144
+ interface_1_output.change(update_choices,inputs=[interface_1_output],outputs=[user_dropdown])
145
+ user_dropdown.change(fn=ticket_resolver_interface, inputs=[user_dropdown], outputs=[stage2_output])
146
+
147
+ if __name__ == "__main__":
148
+ demo.launch(debug=True)#,share=True)
149
+
150
+
151
+