File size: 2,918 Bytes
6600546
 
 
 
 
 
 
 
 
2334625
 
6600546
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2334625
6600546
 
2334625
6600546
2334625
 
6600546
 
 
 
 
 
 
 
2334625
 
6600546
 
 
 
 
 
2334625
6600546
2334625
6600546
 
2334625
 
 
 
6600546
 
 
 
 
 
2334625
6600546
2334625
6600546
 
 
 
 
 
 
 
 
 
63e71df
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
import streamlit as st
import requests
from fpdf import FPDF
import os
import time
from datetime import datetime
import groq

# API keys (replace with your keys or use environment variables)
mistral_api_key = os.getenv("MISTRAL_API_KEY", "your_mistral_api_key")
groq_api_key = os.getenv("GROQ_API_KEY", "your_groq_api_key")

# Initialize Groq client
groq_client = groq.Client(api_key=groq_api_key)

# Function to call Mistral API
def call_mistral_api(prompt):
    url = "https://api.mistral.ai/v1/chat/completions"
    headers = {
        "Authorization": f"Bearer {mistral_api_key}",
        "Content-Type": "application/json"
    }
    payload = {
        "model": "mistral-medium",
        "messages": [
            {"role": "user", "content": prompt}
        ]
    }
    try:
        response = requests.post(url, headers=headers, json=payload)
        response.raise_for_status()
        return response.json()['choices'][0]['message']['content']
    except requests.exceptions.HTTPError as err:
        if response.status_code == 429:
            st.warning("Rate limit exceeded. Please wait a few seconds and try again.")
            time.sleep(5)
            return call_mistral_api(prompt)
        return f"HTTP Error: {err}"
    except Exception as err:
        return f"Error: {err}"

# Function to call Groq API
def call_groq_api(prompt):
    try:
        response = groq_client.chat.completions.create(
            model="llama-3.3-70b-versatile",
            messages=[{"role": "user", "content": prompt}]
        )
        return response.choices[0].message.content
    except Exception as err:
        st.error(f"Error: {err}")
        return f"Error: {err}"

# Streamlit UI
def main():
    st.title("AI Powered Requirement Analysis")
    st.markdown("**Team Name:** Sadia, Areeba, Rabbia, Tesmia")
    st.markdown("**Models:** Mistral (Classification & Domain) + Groq (Defects & Rewriting)")
    
    input_text = st.text_area("Enter requirements (one per line or separated by periods):")
    requirements = [req.strip() for req in input_text.replace("\n", ".").split(".") if req.strip()]
    
    if st.button("Analyze Requirements"):
        if not requirements:
            st.warning("Please enter requirements.")
        else:
            results = []
            for req in requirements:
                if req.strip():
                    results.append(analyze_requirement(req.strip()))
            
            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']}")
                st.write(f"**Domain:** {result['Domain']}")
                st.write(f"**Defects:** {result['Defects']}")
                st.write(f"**Rewritten:** {result['Rewritten']}")
                st.write("---")

if __name__ == "__main__":
    main()