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