Spaces:
Sleeping
Sleeping
| import pandas as pd | |
| from sklearn.metrics.pairwise import cosine_similarity | |
| from sentence_transformers import SentenceTransformer | |
| import google.generativeai as genai | |
| class TicketResolver: | |
| def __init__(self, csv_path): | |
| self.df = pd.read_csv(csv_path) | |
| self.model = SentenceTransformer('sentence-transformers/all-MiniLM-L6-v2') | |
| self.issue_embeddings = self.model.encode(self.df['Ticket_Description'].tolist()) | |
| genai.configure(api_key="AIzaSyAFG94rVbm9eWepO5uPGsMha8XJ-sHbMdA") | |
| self.genai_model = genai.GenerativeModel('gemini-pro') | |
| def find_relevant_issues(self, query, ticket_type=None): | |
| df_filtered = self.df[self.df['Ticket_Status'] == "Closed"] | |
| if ticket_type: | |
| df_filtered = df_filtered[df_filtered['Ticket_Type'] == ticket_type] | |
| query_embedding = self.model.encode([query]) | |
| issue_embeddings = self.model.encode(df_filtered['Ticket_Description'].tolist()) | |
| scores = cosine_similarity(query_embedding, issue_embeddings)[0] | |
| top_3_indices = scores.argsort()[-3:][::-1] | |
| resolutions = [] | |
| issue_resolution_pairs = [] | |
| for index in top_3_indices: | |
| # Ensure accessing the correct DataFrame | |
| if pd.notna(df_filtered.iloc[index]['Resolution']): | |
| issue = df_filtered.iloc[index]['Ticket_Description'] | |
| resolution = df_filtered.iloc[index]['Resolution'] | |
| print(f"Issue: {issue}") | |
| print(f"Resolution: {resolution}\n") | |
| issue_resolution_pairs.append((issue, resolution)) | |
| resolutions.append(df_filtered.iloc[index]['Resolution']) | |
| return issue_resolution_pairs, resolutions | |
| def generate_resolution(self,query, retrieved_resolutions): | |
| example_resolutions = " ".join([str(resolution) for resolution in retrieved_resolutions if pd.notna(resolution)]) | |
| # prompt = f"Based on these resolutions: {combined_resolutions}. Check if the query {query} has any related queries in combined_resolutions ,if found relatable queries Generate a generic resolution combining all matched ones : . If no matches or relatable issues are found in combing resolutions return a generic solution combining all :" | |
| # prompt = f"The query {query} might have resolution in combined_resolutions : {combined_resolutions}. Return final resolution if similar issue is present in combined_resolutions or return a generic one . The returned final resolution should be advice POV." | |
| prompt=f"Here is the current user query{query}, need a resolution for same. These are some example query and resolution {example_resolutions}, you may use them if relevant." | |
| completion = self.genai_model.generate_content(prompt) | |
| generated_answer = completion.text | |
| return generated_answer | |
| examples=["Server out of memory","Wifi connection issues","OS boot failure","Procedure to apply leave requests"] | |
| if __name__ == "__main__": | |
| csv_path = "ticket_dataset.csv" | |
| ticket_resolver = TicketResolver(csv_path) | |
| query = "Server out of memory" | |
| issue_resolution_pairs,resolutions = ticket_resolver.find_relevant_issues(query) | |
| final_resolution = ticket_resolver.generate_resolution(issue_resolution_pairs) | |
| print("Final resolution:", final_resolution) | |