File size: 3,670 Bytes
6600546 9cada50 6600546 312326d 6600546 9cada50 6600546 312326d 9cada50 312326d 9cada50 312326d 6600546 312326d 6600546 9cada50 312326d 6600546 9cada50 6600546 9cada50 6600546 9cada50 6600546 9cada50 |
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 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
import streamlit as st
import requests
from fpdf import FPDF
import os
import time
from datetime import datetime
import groq
import time
# API keys (replace with your keys or use environment variables)
mistral_api_key = os.getenv("MISTRAL_API_KEY", "gz6lDXokxgR6cLY72oomALWcm7vhjRzQ")
groq_api_key = os.getenv("GROQ_API_KEY", "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")
# Initialize Groq client
groq_client = groq.Client(api_key=groq_api_key)
# Function to measure API response time
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
# Function to check confidence level
def estimate_confidence(response):
if "high" in response.lower():
return "High"
elif "medium" in response.lower():
return "Medium"
else:
return "Low"
# Function to analyze a single requirement using both models
def analyze_requirement(requirement):
# Measure API response time and get responses
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}")
# Estimate confidence
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
}
}
# Streamlit app
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()
|