File size: 9,641 Bytes
9f54a3b 71ec4a8 9f54a3b 0e00146 a645649 c50f71f a9c7401 a645649 71ec4a8 8092b5a 71ec4a8 a645649 7fcff87 a645649 7fcff87 c438b94 7fcff87 c438b94 0957448 7fcff87 c50f71f a645649 7fcff87 0957448 c50f71f a645649 c50f71f cae1d9a 0957448 7fcff87 a645649 bf0b824 a645649 c50f71f fa025b1 a645649 c50f71f a645649 c50f71f a645649 c50f71f 65eab1d c50f71f a645649 c50f71f a645649 fa025b1 c50f71f a645649 c50f71f a645649 bf0b824 c50f71f fa025b1 65eab1d c50f71f 65eab1d 71ec4a8 65eab1d |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 |
import streamlit as st
import requests
import os
import json
import pandas as pd
import plotly.graph_objects as go
# Function to call the Together AI model for the initial analysis
def call_ai_model_initial(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
# Function to call the Together AI model for analyzing the text and computing performance score
def call_ai_model_analysis(analysis_text):
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": analysis_text}],
"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("Climate Impact on Sports Performance and Infrastructure")
st.write("Analyze and visualize the impact of climate conditions on sports performance and infrastructure.")
# Inputs for climate conditions
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)
# Sports and athlete inputs
sports = st.multiselect("Select sports:", ["Football", "Tennis", "Athletics", "Swimming", "Basketball", "Golf"])
athlete_types = st.multiselect("Select athlete types:", ["Professional", "Amateur", "Youth", "Senior"])
# Infrastructure inputs
infrastructure_types = st.multiselect("Select infrastructure types:", ["Outdoor Stadium", "Indoor Arena", "Swimming Pool", "Tennis Court", "Golf Course"])
if st.button("Generate Prediction"):
all_message = (
f"Assess the impact on sports performance, athletes, and infrastructure based on climate conditions: "
f"Temperature {temperature}°C, Humidity {humidity}%, Wind Speed {wind_speed} km/h, UV Index {uv_index}, "
f"Air Quality Index {air_quality_index}, Precipitation {precipitation} mm, Atmospheric Pressure {atmospheric_pressure} hPa. "
f"Sports: {', '.join(sports)}. Athlete types: {', '.join(athlete_types)}. "
f"Infrastructure types: {', '.join(infrastructure_types)}. "
f"Provide a detailed analysis of how these conditions affect performance, health, and infrastructure. "
f"Include specific impacts for each sport, athlete type, and infrastructure type. "
f"Also, provide an overall performance score and an infrastructure impact score, both as percentages. Lastly i need you organize everything in tables, not random paragraphs and do your best to be accurate in your analysis"
)
try:
with st.spinner("Analyzing climate conditions..."):
initial_response = call_ai_model_initial(all_message)
initial_text = ""
for line in initial_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:
initial_text += delta["content"]
except json.JSONDecodeError:
continue
st.success("Initial analysis completed!")
with st.spinner("Generating predictions..."):
analysis_text = (
f"Based on the following analysis, provide a performance score and an infrastructure impact score, "
f"both as percentages. Include lines that say 'Performance Score: XX%' and 'Infrastructure Impact Score: YY%' "
f"in your response. Here's the text to analyze: {initial_text}"
)
analysis_response = call_ai_model_analysis(analysis_text)
analysis_result = ""
for line in analysis_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:
analysis_result += delta["content"]
except json.JSONDecodeError:
continue
st.success("Predictions generated!")
# Extract performance and infrastructure scores from the analysis result
performance_score = "N/A"
infrastructure_score = "N/A"
for line in analysis_result.split('\n'):
if "performance score:" in line.lower():
performance_score = line.split(":")[-1].strip()
elif "infrastructure impact score:" in line.lower():
infrastructure_score = line.split(":")[-1].strip()
# Prepare data for visualization
results_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]
}
results_df = pd.DataFrame(results_data)
# Display results in a table
st.subheader("Climate Conditions Summary")
st.table(results_df)
# Create a radar chart for climate conditions
fig = go.Figure(data=go.Scatterpolar(
r=[temperature/50*100, humidity, wind_speed/2, uv_index/11*100, air_quality_index/5, precipitation/5, (atmospheric_pressure-900)/2],
theta=results_df['Condition'],
fill='toself'
))
fig.update_layout(
polar=dict(
radialaxis=dict(visible=True, range=[0, 100])
),
showlegend=False
)
st.plotly_chart(fig)
# Display prediction
st.subheader("Predicted Impact on Performance and Infrastructure")
st.markdown(initial_text.strip())
# Display performance and infrastructure scores
col1, col2 = st.columns(2)
with col1:
st.metric("Performance Score", performance_score)
with col2:
st.metric("Infrastructure Impact Score", infrastructure_score)
# Display analyzed sports and infrastructure
st.subheader("Analyzed Components")
col1, col2, col3 = st.columns(3)
with col1:
st.write("**Sports:**")
for sport in sports:
st.write(f"- {sport}")
with col2:
st.write("**Athlete Types:**")
for athlete_type in athlete_types:
st.write(f"- {athlete_type}")
with col3:
st.write("**Infrastructure Types:**")
for infra_type in infrastructure_types:
st.write(f"- {infra_type}")
# Display raw analysis result for debugging
with st.expander("Show Raw Analysis"):
st.text(analysis_result)
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}") |