iisadia's picture
Create app_groq.py
81b8d37 verified
raw
history blame
5.91 kB
import streamlit as st
import requests
from fpdf import FPDF
import os
import time
from datetime import datetime
# Groq API key (replace with your actual key)
groq_api_key = "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"
# Function to call Groq Llama API
def call_groq_api(prompt):
url = "https://api.groq.com/v1/chat/completions"
headers = {
"Authorization": f"Bearer {groq_api_key}",
"Content-Type": "application/json"
}
payload = {
"model": "llama-2-13b-chat",
"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:
return f"HTTP Error: {err}"
except Exception as err:
return f"Error: {err}"
# Function to analyze requirements
def analyze_requirement_groq(requirement):
type_prompt = f"Classify the following requirement as Functional or Non-Functional:\n\n{requirement}\n\nType:"
req_type = call_groq_api(type_prompt)
stakeholders_prompt = f"Identify the stakeholders for the following requirement:\n\n{requirement}\n\nStakeholders:"
stakeholders = call_groq_api(stakeholders_prompt)
domain_prompt = f"Classify the domain for the following requirement (e.g., Bank, Healthcare, etc.):\n\n{requirement}\n\nDomain:"
domain = call_groq_api(domain_prompt)
defects_prompt = f"""Analyze the following requirement and identify ONLY MAJOR defects (e.g., Ambiguity, Incompleteness, etc.).
If the requirement is clear and complete, respond with 'No defects.'
Requirement: {requirement}
Defects:"""
defects = call_groq_api(defects_prompt)
rewritten = rewrite_requirement_groq(requirement, defects)
return {
"Requirement": requirement,
"Type": req_type,
"Stakeholders": stakeholders,
"Domain": domain,
"Defects": defects,
"Rewritten": rewritten
}
# Function to rewrite requirement concisely
def rewrite_requirement_groq(requirement, defects):
if "no defects" in defects.lower():
return "No modification needed."
prompt = f"""Rewrite the following requirement to address the defects listed below. Ensure the rewritten requirement is clear, concise, and free of defects. It should be no more than 1-2 sentences.
Original Requirement: {requirement}
Defects: {defects}
Rewritten Requirement:"""
response = call_groq_api(prompt)
return response.strip()
# Function to generate a PDF report
def generate_pdf_report_groq(results):
pdf = FPDF()
pdf.add_page()
pdf.set_font("Arial", size=12)
pdf.set_font("Arial", 'B', 16)
pdf.cell(200, 10, txt="AI Powered Requirement Analysis - Groq Llama", ln=True, align='C')
pdf.cell(200, 10, txt=f"Report Generated on: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}", ln=True, align='C')
pdf.ln(10)
pdf.set_font("Arial", size=12)
for i, result in enumerate(results, start=1):
if pdf.get_y() > 250:
pdf.add_page()
pdf.set_font("Arial", 'B', 16)
pdf.cell(200, 10, txt="AI Powered Requirement Analysis - Groq Llama", ln=True, align='C')
pdf.set_font("Arial", size=12)
pdf.cell(200, 10, txt=f"Report Generated on: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}", ln=True, align='C')
pdf.ln(10)
pdf.set_font("Arial", 'B', 14)
pdf.multi_cell(200, 10, txt=f"Requirement R{i}: {result['Requirement']}", align='L')
pdf.set_font("Arial", size=12)
pdf.multi_cell(200, 10, txt=f"Type: {result['Type']}", align='L')
pdf.multi_cell(200, 10, txt=f"Stakeholders: {result['Stakeholders']}", align='L')
pdf.multi_cell(200, 10, txt=f"Domain: {result['Domain']}", align='L')
pdf.multi_cell(200, 10, txt=f"Defects: {result['Defects']}", align='L')
pdf.multi_cell(200, 10, txt=f"Rewritten: {result['Rewritten']}", align='L')
pdf.multi_cell(200, 10, txt="-" * 50, align='L')
pdf.ln(5)
pdf_output = "requirements_report_groq.pdf"
pdf.output(pdf_output)
return pdf_output
# Streamlit app
def main():
st.title("AI Requirement Analysis - Groq Llama")
st.markdown("**Team Name:** Sadia, Areeba, Rabbia, Tesmia")
st.markdown("**Model:** Groq Llama")
input_text = st.text_area("Enter your requirements (one per line or separated by periods):")
requirements = []
if input_text:
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_groq(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"**Stakeholders:** {result['Stakeholders']}")
st.write(f"**Domain:** {result['Domain']}")
st.write(f"**Defects:** {result['Defects']}")
st.write(f"**Rewritten:** {result['Rewritten']}")
st.write("---")
pdf_report = generate_pdf_report_groq(results)
with open(pdf_report, "rb") as f:
st.download_button(
label="Download PDF Report",
data=f,
file_name="requirements_report_groq.pdf",
mime="application/pdf"
)
if __name__ == "__main__":
main()