File size: 5,528 Bytes
9f54a3b
71ec4a8
9f54a3b
0e00146
b4026e6
bb763aa
 
a9c7401
f689a87
71ec4a8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8092b5a
71ec4a8
 
f689a87
 
71ec4a8
f689a87
b4026e6
 
 
 
8f7d62b
 
 
 
e897423
 
 
 
f689a87
8f7d62b
 
 
 
 
 
 
 
 
71ec4a8
b4026e6
f689a87
 
 
 
 
b4026e6
8f7d62b
71ec4a8
 
8092b5a
8f7d62b
8092b5a
 
 
 
 
 
 
 
 
 
 
 
 
 
e13723a
8f7d62b
b4026e6
f689a87
 
 
 
b4026e6
f689a87
 
 
 
 
 
 
 
 
b4026e6
bb763aa
e897423
 
bb763aa
f689a87
bb763aa
8f7d62b
71ec4a8
 
 
 
 
 
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
import streamlit as st
import requests
import os
import json
import pandas as pd
import folium  # For map visualizations, though we'll generate a static map
from streamlit_folium import folium_static

# Function to call the Together AI 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("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)

# Geographic location
latitude = st.number_input("Latitude:", min_value=-90.0, max_value=90.0, value=0.0)
longitude = st.number_input("Longitude:", min_value=-180.0, max_value=180.0, value=0.0)

# Athlete-specific data
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:")

if st.button("Generate Prediction"):
    all_message = (
        f"Assess the impact on sports performance 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"Location: Latitude {latitude}, Longitude {longitude}. "
        f"Athlete (Age: {age}, Sport: {sport}), Facility (Type: {facility_type}, Age: {facility_age}, Materials: {materials_used})."
    )

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

            # 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("Results Summary")
            st.table(results_df)

            # Display prediction
            st.markdown("**Predicted Impact on Performance and Infrastructure:**")
            st.markdown(generated_text.strip())

            # Generate static map using Folium
            map_center = [latitude, longitude]
            sport_map = folium.Map(location=map_center, zoom_start=12)
            folium.Marker(location=map_center, popup="User Location").add_to(sport_map)
            st.subheader("Geographical Visualization")
            folium_static(sport_map)

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