engrharis's picture
Update app.py
6078862 verified
import streamlit as st
import os
import tempfile
from io import BytesIO
from fpdf import FPDF
import requests
from stl import mesh
from pathlib import Path
# Directly assign the Groq API key (without using secrets)
GROQ_API_KEY = "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"
GROQ_API_URL = "https://api.groq.com/v1/query"
# Function to generate a technical report using the AI model (Groq API)
def generate_report(cad_data):
# Making the API request to Groq API
headers = {
"Authorization": f"Bearer {GROQ_API_KEY}",
"Content-Type": "application/json"
}
payload = {
"model": "llama-3.3-70b-versatile",
"input": cad_data,
"output_format": "text"
}
response = requests.post(GROQ_API_URL, headers=headers, json=payload)
if response.status_code == 200:
return response.json()['generated_text']
else:
st.error(f"Error in report generation: {response.text}")
return "Error generating report."
# Function to parse STL CAD files using pySTL
def parse_stl_file(file_path):
# Load the STL file and extract basic information
cad_mesh = mesh.Mesh.from_file(file_path)
# Example: Get the number of faces and volume
num_faces = cad_mesh.vectors.shape[0]
volume = cad_mesh.get_mass_properties()[0] # Get volume from mass properties
cad_data = f"Extracted information from {file_path.name}:\n - Number of Faces: {num_faces}\n - Volume: {volume} cubic units."
return cad_data
# Function to create a PDF report
def create_pdf_report(report_text):
pdf = FPDF()
pdf.set_auto_page_break(auto=True, margin=15)
pdf.add_page()
# Set title and content
pdf.set_font("Arial", style="B", size=16)
pdf.cell(200, 10, txt="Technical Report for CAD Analysis", ln=True, align="C")
pdf.ln(10) # Line break
pdf.set_font("Arial", size=12)
pdf.multi_cell(0, 10, report_text)
# Save PDF to a file
temp_file = tempfile.NamedTemporaryFile(delete=False, suffix=".pdf")
pdf.output(temp_file.name)
return temp_file.name
# Streamlit UI
st.title("CAD File Analysis and Technical Report Generation")
# File uploader
uploaded_file = st.file_uploader("Upload a CAD file", type=["stl"])
if uploaded_file is not None:
# Ensure the temporary directory exists
temp_dir = tempfile.mkdtemp()
# Save uploaded file temporarily
temp_file_path = Path(temp_dir) / uploaded_file.name # Use the temporary directory
with open(temp_file_path, "wb") as f:
f.write(uploaded_file.getbuffer())
# Parse the STL file and extract relevant data
cad_data = parse_stl_file(temp_file_path)
if cad_data:
# Display extracted data as a preview
st.write("Extracted Data from CAD File:")
st.text(cad_data)
# Generate report using Groq API
report_text = generate_report(cad_data)
st.write("Generated Report:")
st.text(report_text)
# Create a PDF report
pdf_file_path = create_pdf_report(report_text)
# Provide a download link for the PDF report
with open(pdf_file_path, "rb") as f:
pdf_bytes = f.read()
st.download_button(
label="Download Technical Report",
data=pdf_bytes,
file_name="technical_report.pdf",
mime="application/pdf"
)
else:
st.write("Please upload a CAD file to begin.")