knowledge_model / rag.py
arjunanand13's picture
Upload 10 files
1d35b34 verified
raw
history blame contribute delete
No virus
3.32 kB
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)