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()