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}")