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) | |