Spaces:
Sleeping
Sleeping
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}") | |