import requests import streamlit as st import groq # Access API keys from Streamlit secrets openweather_api_key = st.secrets["weather_api_key"] groq_api_key = st.secrets["groq_api_key"] # Function to get weather data from OpenWeatherMap def get_weather_data(city): api_key = openweather_api_key # Use the secret API key url = f"http://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}&units=metric" try: response = requests.get(url) response.raise_for_status() # Raise an HTTPError if the HTTP request returned an unsuccessful status code return response.json() except requests.exceptions.HTTPError as err: st.error(f"HTTP error occurred: {err}") except Exception as err: st.error(f"An error occurred: {err}") return None # Function to parse weather data and categorize weather def parse_weather_data(weather_data): temperature = weather_data["main"]["temp"] weather_description = weather_data["weather"][0]["description"] return temperature, weather_description # Categorizing weather conditions def categorize_weather(description): description = description.lower() if "clear" in description or "sun" in description: return "Sunny", "☀️" elif "rain" in description or "drizzle" in description or "shower" in description: return "Rainy", "🌧️" elif "snow" in description or "sleet" in description: return "Cold", "❄️" elif "cloud" in description: return "Cloudy", "☁️" elif "wind" in description: return "Windy", "💨" elif "smoke" in description or "haze" in description: return "Smoky", "🌫️" else: return "Uncategorized", "🔍" # Function to get outfit suggestion using Groq's LLaMA model def get_outfit_suggestion(temperature, description, style, fabric, weather_category, weather_icon, time_of_day, activity): # Initialize Groq's API try: client = groq.Groq(api_key=groq_api_key) # Use the secret API key # Adjust the prompt based on the weather category prompt = f"The current weather is {description} with a temperature of {temperature}°C. The weather category is {weather_category}. The time of day is {time_of_day} and the user is planning to do {activity}. Suggest an outfit. The user prefers a {style} style and {fabric} fabric." # Use Groq's chat completion to get the text response response = client.chat.completions.create( messages=[{"role": "user", "content": prompt}], model="llama3-8b-8192", # Change to a valid Groq model if necessary ) return response.choices[0].message.content.strip(), weather_icon except Exception as e: st.error(f"Error using Groq API: {e}") return None, None # Streamlit UI for user input st.set_page_config(page_title="Weather-Based Outfit Suggestion", page_icon="🌤️", layout="wide") # Custom styles st.markdown("""""", unsafe_allow_html=True) # Title and layout for columns st.title("🌤️ Weather-Based Outfit Suggestion App") # Create two columns: one for the user input and one for displaying results col1, col2 = st.columns([1, 2]) # 1: left column (user input), 2: right column (outfit suggestions) # User input in the left column (col1) with col1: city = st.text_input("Enter your location:", placeholder="E.g. Peshawar") gender = st.selectbox("Select your gender", ["Male", "Female"]) personalized_style = st.text_input("Enter your personalized style (optional)", placeholder="E.g. Peshawari") fabric = st.selectbox("Select your preferred fabric", ["Cotton", "Linen", "Wool", "Polyester", "Silk", "Leather"]) time_of_day = st.selectbox("Select time of day", ["Morning", "Afternoon", "Evening"]) activity = st.selectbox("Select your activity", ["Work", "Outdoor", "Casual", "Exercise", "Other"]) # Result display in the right column (col2) with col2: if city: with st.spinner("Fetching weather data..."): weather_data = get_weather_data(city) if weather_data and weather_data["cod"] == 200: temperature, description = parse_weather_data(weather_data) # Categorize the weather weather_category, weather_icon = categorize_weather(description) # Display current weather info st.write(f"Current temperature in {city}: {temperature}°C") st.write(f"Weather: {description} {weather_icon}") st.write(f"Weather Category: {weather_category} {weather_icon}") # Get outfit suggestion based on user preferences outfit_suggestion, weather_icon = get_outfit_suggestion(temperature, description, personalized_style, fabric, weather_category, weather_icon, time_of_day, activity) if outfit_suggestion: # Display outfit suggestion st.markdown(f"### 🌟 Outfit Suggestion 🌟") st.write(outfit_suggestion) # Additional section for Health and Comfort Tips st.markdown(f"### 🌿 Health & Comfort Tips 🌿") st.write(f"Given the {weather_category} weather, it's important to take care of your health:") st.write("- **Breathing**: A face mask or scarf covering your nose and mouth can help protect you from smoke inhalation.") st.write("- **Hydration**: Keep a water bottle with you, as smoke can dehydrate your body.") st.write("- **Rest**: Try to avoid strenuous activity outdoors and take breaks if you're feeling fatigued.") st.write("- **Eyes**: If you're feeling irritated, use eye drops to soothe any discomfort caused by smoke.") # Display weather icon icon_code = weather_data["weather"][0]["icon"] icon_url = f"http://openweathermap.org/img/wn/{icon_code}.png" st.image(icon_url) else: st.write("Could not retrieve weather data. Please check the location.") # import requests # import streamlit as st # import groq # # Access API keys from Streamlit secrets # openweather_api_key = st.secrets["weather_api_key"] # groq_api_key = st.secrets["groq_api_key"] # # Function to get weather data from OpenWeatherMap # def get_weather_data(city): # api_key = openweather_api_key # Use the secret API key # url = f"http://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}&units=metric" # try: # response = requests.get(url) # response.raise_for_status() # Raise an HTTPError if the HTTP request returned an unsuccessful status code # return response.json() # except requests.exceptions.HTTPError as err: # st.error(f"HTTP error occurred: {err}") # except Exception as err: # st.error(f"An error occurred: {err}") # return None # # Function to parse weather data and categorize weather # def parse_weather_data(weather_data): # temperature = weather_data["main"]["temp"] # weather_description = weather_data["weather"][0]["description"] # return temperature, weather_description # # Categorizing weather conditions # def categorize_weather(description): # description = description.lower() # if "clear" in description or "sun" in description: # return "Sunny", "☀️" # elif "rain" in description or "drizzle" in description or "shower" in description: # return "Rainy", "🌧️" # elif "snow" in description or "sleet" in description: # return "Cold", "❄️" # elif "cloud" in description: # return "Cloudy", "☁️" # elif "wind" in description: # return "Windy", "💨" # elif "smoke" in description or "haze" in description: # return "Smoky", "🌫️" # else: # return "Uncategorized", "🔍" # # Function to get outfit suggestion using Groq's LLaMA model # def get_outfit_suggestion(temperature, description, style, fabric, weather_category, weather_icon): # # Initialize Groq's API # try: # client = groq.Groq(api_key=groq_api_key) # Use the secret API key # # Adjust the prompt based on the weather category # prompt = f"The current weather is {description} with a temperature of {temperature}°C. The weather category is {weather_category}. Suggest an outfit. The user prefers a {style} style and {fabric} fabric." # # Use Groq's chat completion to get the text response # response = client.chat.completions.create( # messages=[{"role": "user", "content": prompt}], # model="llama3-8b-8192", # Change to a valid Groq model if necessary # ) # return response.choices[0].message.content.strip(), weather_icon # except Exception as e: # st.error(f"Error using Groq API: {e}") # return None, None # # Streamlit UI for user input # st.set_page_config(page_title="Weather-Based Outfit Suggestion", page_icon="🌤️", layout="wide") # # Custom styles # st.markdown("""""", unsafe_allow_html=True) # # Title and layout for columns # st.title("🌤️ Weather-Based Outfit Suggestion App") # # Create two columns: one for the user input and one for displaying results # col1, col2 = st.columns([1, 2]) # 1: left column (user input), 2: right column (outfit suggestions) # # User input in the left column (col1) # with col1: # city = st.text_input("Enter your location:", placeholder="E.g. Peshawar") # gender = st.selectbox("Select your gender", ["Male", "Female"]) # personalized_style = st.text_input("Enter your personalized style (optional)", placeholder="E.g. Peshawari") # fabric = st.selectbox("Select your preferred fabric", ["Cotton", "Linen", "Wool", "Polyester", "Silk", "Leather"]) # # Result display in the right column (col2) # with col2: # if city: # weather_data = get_weather_data(city) # if weather_data and weather_data["cod"] == 200: # temperature, description = parse_weather_data(weather_data) # # Categorize the weather # weather_category, weather_icon = categorize_weather(description) # # Display current weather info # st.write(f"Current temperature in {city}: {temperature}°C") # st.write(f"Weather: {description} {weather_icon}") # st.write(f"Weather Category: {weather_category} {weather_icon}") # # Get outfit suggestion based on user preferences # outfit_suggestion, weather_icon = get_outfit_suggestion(temperature, description, personalized_style, fabric, weather_category, weather_icon) # if outfit_suggestion: # # Display outfit suggestion # st.markdown(f"### 🌟 Outfit Suggestion 🌟") # st.write(outfit_suggestion) # # Additional section for Health and Comfort Tips # st.markdown(f"### 🌿 Health & Comfort Tips 🌿") # st.write(f"Given the {weather_category} weather, it's important to take care of your health:") # st.write("- **Breathing**: A face mask or scarf covering your nose and mouth can help protect you from smoke inhalation.") # st.write("- **Hydration**: Keep a water bottle with you, as smoke can dehydrate your body.") # st.write("- **Rest**: Try to avoid strenuous activity outdoors and take breaks if you're feeling fatigued.") # st.write("- **Eyes**: If you're feeling irritated, use eye drops to soothe any discomfort caused by smoke.") # # Display weather icon # icon_code = weather_data["weather"][0]["icon"] # icon_url = f"http://openweathermap.org/img/wn/{icon_code}.png" # st.image(icon_url) # else: # st.write("Could not retrieve weather data. Please check the location.") # -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- # import requests # import streamlit as st # import groq # import os # # Function to get weather data from OpenWeatherMap # import os # # Replace with environment variables # openweather_api_key = os.getenv("weather_api_key") # groq_api_key = os.getenv("groq_api_key") # def get_weather_data(city): # api_key = openweather_api_key # Replace with your OpenWeatherMap API key # url = f"http://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}&units=metric" # try: # response = requests.get(url) # response.raise_for_status() # Raise an HTTPError if the HTTP request returned an unsuccessful status code # return response.json() # except requests.exceptions.HTTPError as err: # st.error(f"HTTP error occurred: {err}") # except Exception as err: # st.error(f"An error occurred: {err}") # return None # # Function to parse weather data # def parse_weather_data(weather_data): # temperature = weather_data["main"]["temp"] # weather_description = weather_data["weather"][0]["description"] # return temperature, weather_description # # Function to get outfit suggestion using Groq's LLaMA model # def get_outfit_suggestion(temperature, description, style, fabric): # # Initialize Groq's API # try: # client = groq.Groq(api_key=groq_api_key) # Replace with your Groq API key # prompt = f"The current weather is {description} with a temperature of {temperature}°C. Suggest an outfit. The user prefers a {style} style and {fabric} fabric." # # Use Groq's chat completion to get the text response # response = client.chat.completions.create( # messages=[{"role": "user", "content": prompt}], # model="llama3-8b-8192", # Change to a valid Groq model if necessary # ) # return response.choices[0].message.content.strip() # except Exception as e: # st.error(f"Error using Groq API: {e}") # return None # # Streamlit UI for user input # st.title("Weather-Based Outfit Suggestion App") # city = st.text_input("Enter your location:") # # Add style and fabric input options # style = st.selectbox("Select your preferred style", ["Casual", "Formal", "Sporty", "Business", "Chic"]) # fabric = st.selectbox("Select your preferred fabric", ["Cotton", "Linen", "Wool", "Polyester", "Silk", "Leather"]) # if city: # weather_data = get_weather_data(city) # if weather_data and weather_data["cod"] == 200: # temperature, description = parse_weather_data(weather_data) # # Display current weather info # st.write(f"Current temperature in {city}: {temperature}°C") # st.write(f"Weather: {description}") # # Get outfit suggestion based on user preferences # outfit_suggestion = get_outfit_suggestion(temperature, description, style, fabric) # if outfit_suggestion: # # Display outfit suggestion # st.write("Outfit Suggestion:") # st.write(outfit_suggestion) # # Display weather icon # icon_code = weather_data["weather"][0]["icon"] # icon_url = f"http://openweathermap.org/img/wn/{icon_code}.png" # st.image(icon_url) # else: # st.write("Could not retrieve weather data. Please check the location.") # # Optional: Add CSS for styling # st.markdown( # """ # # """, # unsafe_allow_html=True # )