Spaces:
Sleeping
Sleeping
import streamlit as st | |
import requests | |
import os | |
import json | |
import pandas as pd | |
import matplotlib.pyplot as plt | |
import numpy as np | |
# Function to call the Together API with the provided model | |
def call_ai_model(all_message): | |
url = "https://api.together.xyz/v1/chat/completions" | |
payload = { | |
"model": "NousResearch/Nous-Hermes-2-Yi-34B", | |
"temperature": 1.05, | |
"top_p": 0.9, | |
"top_k": 50, | |
"repetition_penalty": 1, | |
"n": 1, | |
"messages": [{"role": "user", "content": all_message}], | |
"stream_tokens": True, | |
} | |
TOGETHER_API_KEY = os.getenv('TOGETHER_API_KEY') | |
if TOGETHER_API_KEY is None: | |
raise ValueError("TOGETHER_API_KEY environment variable not set.") | |
headers = { | |
"accept": "application/json", | |
"content-type": "application/json", | |
"Authorization": f"Bearer {TOGETHER_API_KEY}", | |
} | |
response = requests.post(url, json=payload, headers=headers, stream=True) | |
response.raise_for_status() # Ensure HTTP request was successful | |
return response | |
# Streamlit app layout | |
st.title("Impact of Climate on Sports Using AI") | |
st.write("Predict and mitigate the impacts of climate change on sports performance and infrastructure.") | |
# Climate data inputs | |
temperature = st.number_input("Temperature (°C):", min_value=-50, max_value=50, value=25) | |
humidity = st.number_input("Humidity (%):", min_value=0, max_value=100, value=50) | |
wind_speed = st.number_input("Wind Speed (km/h):", min_value=0.0, max_value=200.0, value=15.0) | |
uv_index = st.number_input("UV Index:", min_value=0, max_value=11, value=5) | |
air_quality_index = st.number_input("Air Quality Index:", min_value=0, max_value=500, value=100) | |
precipitation = st.number_input("Precipitation (mm):", min_value=0.0, max_value=500.0, value=10.0) | |
atmospheric_pressure = st.number_input("Atmospheric Pressure (hPa):", min_value=900, max_value=1100, value=1013) | |
# Athlete-specific inputs | |
age = st.number_input("Athlete Age:", min_value=0, max_value=100, value=25) | |
sport = st.selectbox("Select Sport:", ["Running", "Cycling", "Swimming", "Football", "Basketball"]) | |
performance_history = st.text_area("Athlete Performance History:") | |
# Infrastructure characteristics | |
facility_type = st.selectbox("Facility Type:", ["Stadium", "Gymnasium", "Outdoor Field"]) | |
facility_age = st.number_input("Facility Age (years):", min_value=0, max_value=100, value=10) | |
materials_used = st.text_input("Materials Used in Construction:") | |
# Socio-economic data | |
community_size = st.number_input("Community Size:", min_value=0, value=1000) | |
economic_impact_estimate = st.text_area("Estimate Economic Impact (Event cancellations, Facility damage costs):") | |
if st.button("Generate Prediction"): | |
all_message = ( | |
f"Given the climate conditions: Temperature {temperature}°C, Humidity {humidity}%, Wind Speed {wind_speed} km/h, " | |
f"UV Index {uv_index}, Air Quality Index {air_quality_index}, Precipitation {precipitation} mm, " | |
f"Atmospheric Pressure {atmospheric_pressure} hPa. For athlete (Age: {age}, Sport: {sport}), " | |
f"Facility (Type: {facility_type}, Age: {facility_age}, Materials: {materials_used}). " | |
f"Assess the impact on sports performance, infrastructure, and socio-economic aspects." | |
) | |
try: | |
with st.spinner("Generating response..."): | |
response = call_ai_model(all_message) | |
generated_text = "" | |
for line in response.iter_lines(): | |
if line: | |
line_content = line.decode('utf-8') | |
if line_content.startswith("data: "): | |
line_content = line_content[6:] # Strip "data: " prefix | |
try: | |
json_data = json.loads(line_content) | |
if "choices" in json_data: | |
delta = json_data["choices"][0]["delta"] | |
if "content" in delta: | |
generated_text += delta["content"] | |
except json.JSONDecodeError: | |
continue | |
st.success("Response generated!") | |
# Display the impact summary and conclusions | |
st.markdown(f"**Impact Summary:** {generated_text.strip()}") | |
st.markdown("**Conclusion:** Tailoring strategies based on these climate conditions can significantly enhance performance and infrastructure resilience.") | |
# Data Visualization | |
st.subheader("Climate Condition Impacts Visualization") | |
# Example: Displaying data in a table | |
data = { | |
'Condition': ['Temperature', 'Humidity', 'Wind Speed', 'UV Index', 'Air Quality Index', 'Precipitation', 'Atmospheric Pressure'], | |
'Value': [temperature, humidity, wind_speed, uv_index, air_quality_index, precipitation, atmospheric_pressure] | |
} | |
df = pd.DataFrame(data) | |
st.table(df) | |
# Plotting a bar chart for climate variables | |
fig, ax = plt.subplots() | |
ax.bar(data['Condition'], data['Value'], color=['blue', 'green', 'orange', 'red', 'purple', 'gray', 'cyan']) | |
ax.set_ylabel('Value') | |
ax.set_title('Climate Condition Impacts') | |
st.pyplot(fig) | |
except ValueError as ve: | |
st.error(f"Configuration error: {ve}") | |
except requests.exceptions.RequestException as re: | |
st.error(f"Request error: {re}") | |
except Exception as e: | |
st.error(f"An unexpected error occurred: {e}") | |