Smart_Estimator / app.py
Syed200's picture
Update app.py
bef578a verified
import streamlit as st
import requests
import json
# ------------------- CONFIGURATION ------------------- #
API_URL = "https://api-inference.huggingface.co/models/HuggingFaceTB/SmolVLM-256M-Instruct"
API_TOKEN = "YOUR_HUGGINGFACE_API_TOKEN" # Replace with your actual Hugging Face API token
headers = {"Authorization": f"Bearer {API_TOKEN}"}
# ------------------- FUNCTION TO QUERY MODEL ------------------- #
def query_huggingface_api(prompt):
payload = {
"inputs": prompt,
"parameters": {
"max_new_tokens": 200,
"temperature": 0.7
}
}
response = requests.post(API_URL, headers=headers, json=payload)
if response.status_code != 200:
st.error(f"API Error {response.status_code}: {response.text}")
return None
return response.json()
# ------------------- STREAMLIT APP ------------------- #
st.set_page_config(page_title="Build Smart Estimator", page_icon="πŸ—οΈ")
# App title
st.title("πŸ—οΈ Build Smart Estimator")
st.markdown("""
Welcome to **Build Smart Estimator** β€” an intelligent tool to help you estimate construction materials based on your project details!
""")
# Input Fields
st.header("Enter Your Project Details")
col1, col2 = st.columns(2)
with col1:
total_area = st.number_input("🏠 Total Area (in square meters)", min_value=10.0, step=10.0)
num_floors = st.number_input("🏒 Number of Floors", min_value=1, step=1)
with col2:
structure_type = st.selectbox("πŸ—οΈ Structure Type", options=[
"Residential", "Commercial", "Industrial", "Warehouse"
])
material_pref = st.multiselect(
"🧱 Material Preference (Select one or more)",
options=["Cement", "Bricks", "Steel", "Concrete"]
)
# Submit button
if st.button("Estimate Materials πŸš€"):
if total_area <= 0 or num_floors <= 0:
st.warning("Please enter valid Total Area and Number of Floors.")
elif not material_pref:
st.warning("Please select at least one Material Preference.")
else:
# Prepare input prompt for the model
prompt = (
f"Estimate the required quantities of {', '.join(material_pref)} "
f"for a {structure_type.lower()} building with a total area of {total_area} square meters "
f"and {num_floors} floors. Provide the estimates in a clear and concise manner."
)
st.info("Sending your inputs to the smart estimator...")
# Call Hugging Face model
response = query_huggingface_api(prompt)
if response:
st.subheader("πŸ“Š Estimated Material Requirements")
# Assuming the model returns a list with a 'generated_text' field
if isinstance(response, list) and 'generated_text' in response[0]:
st.write(response[0]['generated_text'])
else:
st.write(response)
# Footer
st.markdown("---")
st.caption("Β© 2025 Build Smart Estimator | Powered by Streamlit & Hugging Face")
import math
st.title("Scientific Calculator")
# All operations
operations = [
"+", "-", "*", "/", "^ (power)", "% (modulus)", "// (floor division)",
"√ (square root)", "log10", "ln (natural log)", "n! (factorial)",
"sin", "cos", "tan", "exp (e^x)"
]
operation = st.selectbox("Select operation", operations)
# Input fields
num1 = st.number_input("Enter first number", format="%.4f")
# Only show num2 for operations that need two inputs
if operation in ["+", "-", "*", "/", "^ (power)", "% (modulus)", "// (floor division)"]:
num2 = st.number_input("Enter second number", format="%.4f")
else:
num2 = None
result = None
error = None
if st.button("Calculate"):
try:
if operation == "+":
result = num1 + num2
elif operation == "-":
result = num1 - num2
elif operation == "*":
result = num1 * num2
elif operation == "/":
if num2 != 0:
result = num1 / num2
else:
error = "Cannot divide by zero"
elif operation == "^ (power)":
result = num1 ** num2
elif operation == "% (modulus)":
if num2 != 0:
result = num1 % num2
else:
error = "Cannot perform modulus by zero"
elif operation == "// (floor division)":
if num2 != 0:
result = num1 // num2
else:
error = "Cannot perform floor division by zero"
elif operation == "√ (square root)":
if num1 >= 0:
result = math.sqrt(num1)
else:
error = "Cannot take square root of a negative number"
elif operation == "log10":
if num1 > 0:
result = math.log10(num1)
else:
error = "Log10 undefined for non-positive numbers"
elif operation == "ln (natural log)":
if num1 > 0:
result = math.log(num1)
else:
error = "Natural log undefined for non-positive numbers"
elif operation == "n! (factorial)":
if num1 >= 0 and num1 == int(num1):
result = math.factorial(int(num1))
else:
error = "Factorial only defined for non-negative integers"
elif operation == "sin":
result = math.sin(math.radians(num1))
elif operation == "cos":
result = math.cos(math.radians(num1))
elif operation == "tan":
result = math.tan(math.radians(num1))
elif operation == "exp (e^x)":
result = math.exp(num1)
except Exception as e:
error = str(e)
if error:
st.error(error)
else:
st.success(f"Result: {result:.6f}")