File size: 3,316 Bytes
1d35b34
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
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)