Spaces:
Running
Running
import streamlit as st | |
import requests | |
from requests.auth import HTTPBasicAuth | |
from transformers import pipeline | |
import json | |
from sentence_transformers import SentenceTransformer, util | |
from langchain.chains.question_answering import load_qa_chain | |
from langchain_community.embeddings import SentenceTransformerEmbeddings | |
from langchain_community.vectorstores import FAISS | |
from langchain.vectorstores import FAISS | |
from langchain.llms import HuggingFaceEndpoint | |
import numpy as np | |
# Jira instance details | |
jira_url = 'https://gen-ai-demo.atlassian.net/' | |
api_endpoint = '/rest/api/3/search' | |
username = '[email protected]' | |
api_token = 'ATATT3xFfGF09uFJnHFeDFU0_AKBZXP98fd2ZFLxzbZfTQ4Tr17IZxD6qoPbniEvLRWsxiO207EAYX77LBfa5NEXiK1J9_Crq7fF1lWPdH8MwY6Vp9GSLr-_0etnMcgqDPRn9cuLD9Lk1IxoxDY_Yh5nm36yp_Xg50RP5AN8mwJmMhC_uoad_A4=CBFBB200' | |
# Function to get user input for Jira query using Streamlit | |
def get_user_input(): | |
summary_keyword = st.text_input("You:") | |
return summary_keyword | |
# Function to fetch Jira issues based on the keyword | |
def fetch_jira_issues(summary_keyword): | |
# Construct the JQL query based on the user input | |
jql_query = f'summary ~ "{summary_keyword}"' | |
url = jira_url + api_endpoint | |
headers = {'Accept': 'application/json', 'Content-Type': 'application/json'} | |
auth = HTTPBasicAuth(username, api_token) | |
params = {'jql': jql_query, 'maxResults': 5} | |
response = requests.get(url, headers=headers, auth=auth, params=params) | |
return response | |
# Function to load dynamic answer using embeddings-based search | |
def load_answer(question): | |
embeddings = SentenceTransformerEmbeddings(model_name="nomic-ai/nomic-embed-text-v1", model_kwargs={"trust_remote_code":True}) | |
# Assuming 'finalData' is a list of documents or text snippets | |
finalData = [ | |
"Authentication failure due to invalid credentials.", | |
"Bug in login page causing a crash when incorrect input is provided.", | |
"Database timeout issues during large data queries.", | |
"Server error due to high request load.", | |
"Page rendering issues when javascript fails to load.", | |
"Error occurred while fetching data from the API.", | |
"Network error caused by unstable connection to the server." | |
] | |
documentSearch = FAISS.from_texts(finalData, embeddings) | |
chain = load_qa_chain(HuggingFaceEndpoint(repo_id="mistralai/Mistral-7B-Instruct-v0.3"), chain_type="stuff") | |
docs = documentSearch.similarity_search(question) | |
answer = chain.invoke({"input_documents": docs, "question": question}, return_only_outputs=True) | |
return answer | |
# Streamlit app layout | |
st.title("Trouble_Ticket_Finder") | |
# Get user input through Streamlit widgets | |
summary_keyword = get_user_input() | |
# If summary keyword is provided, make the Jira API request | |
if summary_keyword: | |
response = fetch_jira_issues(summary_keyword) | |
# Check for successful request | |
if response.status_code == 200: | |
data = response.json() | |
issues = data.get('issues', []) | |
if issues: | |
# If issues are found, display them | |
st.write("Found Jira issues matching your query:") | |
for issue in issues: | |
st.write(f"**Key:** {issue['key']} - **Summary:** {issue['fields']['summary']}") | |
st.write(f"**Description:** {issue['fields'].get('description', 'No description available')}") | |
else: | |
st.write("No issues found matching your summary keyword.") | |
# If no issues are found, provide dynamic explanation using embeddings | |
st.write("Searching for a dynamic explanation using embeddings...") | |
answer = load_answer(summary_keyword) | |
st.write(f"**Dynamic Explanation:** {answer['output']}") | |
else: | |
# If the request failed, show the error details | |
error_data = response.json() | |
error_message = error_data.get("errorMessages", []) | |
if error_message: | |
st.write(f"Error: {', '.join(error_message)}") | |
else: | |
st.write(f"Failed to fetch issues: {response.status_code} - {response.text}") | |
else: | |
st.write("Please enter a summary keyword to search for Jira issues.") |