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)