|
import streamlit as st |
|
import requests |
|
from fpdf import FPDF |
|
import os |
|
import time |
|
from datetime import datetime |
|
import groq |
|
import time |
|
|
|
|
|
mistral_api_key = os.getenv("MISTRAL_API_KEY", "gz6lDXokxgR6cLY72oomALWcm7vhjRzQ") |
|
groq_api_key = os.getenv("GROQ_API_KEY", "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") |
|
|
|
|
|
groq_client = groq.Client(api_key=groq_api_key) |
|
|
|
|
|
def measure_response_time(api_call, *args): |
|
start_time = time.time() |
|
result = api_call(*args) |
|
end_time = time.time() |
|
response_time = end_time - start_time |
|
return result, response_time |
|
|
|
|
|
def estimate_confidence(response): |
|
if "high" in response.lower(): |
|
return "High" |
|
elif "medium" in response.lower(): |
|
return "Medium" |
|
else: |
|
return "Low" |
|
|
|
|
|
def analyze_requirement(requirement): |
|
|
|
req_type, time_type = measure_response_time(call_mistral_api, f"Classify as Functional or Non-Functional:\n{requirement}") |
|
domain, time_domain = measure_response_time(call_mistral_api, f"Classify domain:\n{requirement}") |
|
defects, time_defects = measure_response_time(call_groq_api, f"List major defects:\n{requirement}") |
|
rewritten, time_rewritten = measure_response_time(call_groq_api, f"Rewrite requirement:\n{requirement}") |
|
|
|
|
|
confidence_type = estimate_confidence(req_type) |
|
confidence_domain = estimate_confidence(domain) |
|
confidence_defects = estimate_confidence(defects) |
|
confidence_rewritten = estimate_confidence(rewritten) |
|
|
|
return { |
|
"Requirement": requirement, |
|
"Type": req_type, |
|
"Domain": domain, |
|
"Defects": defects, |
|
"Rewritten": rewritten, |
|
"Times": { |
|
"Type": time_type, |
|
"Domain": time_domain, |
|
"Defects": time_defects, |
|
"Rewritten": time_rewritten |
|
}, |
|
"Confidence": { |
|
"Type": confidence_type, |
|
"Domain": confidence_domain, |
|
"Defects": confidence_defects, |
|
"Rewritten": confidence_rewritten |
|
} |
|
} |
|
|
|
|
|
def main(): |
|
st.title("AI Powered Requirement Analysis and Defect Detection") |
|
st.markdown("**Team Name:** Sadia, Areeba, Rabbia, Tesmia") |
|
|
|
input_text = st.text_area("Enter requirements (one per line):") |
|
requirements = [req.strip() for req in input_text.split("\n") if req.strip()] |
|
|
|
if st.button("Analyze Requirements"): |
|
if not requirements: |
|
st.warning("Please enter requirements.") |
|
else: |
|
results = [analyze_requirement(req) for req in requirements] |
|
st.subheader("Analysis Results") |
|
|
|
for i, result in enumerate(results, start=1): |
|
st.write(f"### Requirement R{i}: {result['Requirement']}") |
|
st.write(f"**Type:** {result['Type']} ({result['Confidence']['Type']} Confidence, {result['Times']['Type']:.2f}s)") |
|
st.write(f"**Domain:** {result['Domain']} ({result['Confidence']['Domain']} Confidence, {result['Times']['Domain']:.2f}s)") |
|
st.write(f"**Defects:** {result['Defects']} ({result['Confidence']['Defects']} Confidence, {result['Times']['Defects']:.2f}s)") |
|
st.write(f"**Rewritten:** {result['Rewritten']} ({result['Confidence']['Rewritten']} Confidence, {result['Times']['Rewritten']:.2f}s)") |
|
st.write("---") |
|
|
|
if __name__ == "__main__": |
|
main() |
|
|