File size: 3,636 Bytes
9f54a3b
71ec4a8
9f54a3b
0e00146
b4026e6
0c48822
251086d
a9c7401
f689a87
71ec4a8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8092b5a
71ec4a8
df306bb
 
 
 
 
9e23ab4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5531c71
71ec4a8
f689a87
 
71ec4a8
f689a87
b4026e6
df306bb
71ec4a8
 
9e23ab4
 
df306bb
9e23ab4
 
 
 
bd2a651
9e23ab4
bd2a651
8f7d62b
df306bb
251086d
9e23ab4
5531c71
df306bb
 
251086d
 
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
import streamlit as st
import requests
import os
import json
import pandas as pd
import time
import matplotlib.pyplot as plt

# 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

# Function to request numerical performance data from AI
def get_performance_data(temperature):
    all_message = (
        f"Provide the expected sports performance value (as a numerical score) at a temperature of {temperature}°C."
    )
    while True:
        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
        try:
            performance_value = float(generated_text.strip())
            return performance_value
        except ValueError:
            continue

# 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)

if st.button("Generate Prediction"):
    try:
        with st.spinner("Generating predictions..."):
            st.success("Predictions generated. Generating performance data...")

            # Generate performance data for different temperatures
            temperatures = range(-10, 41, 5)  # Temperatures from -10°C to 40°C in 5°C increments
            performance_values = []
            for temp in temperatures:
                performance_value = get_performance_data(temp)
                performance_values.append(performance_value)
                time.sleep(1)

            # Generate line graph
            fig, ax = plt.subplots()
            ax.plot(temperatures, performance_values, marker='o')
            ax.set_xlabel('Temperature (°C)')
            ax.set_ylabel('Performance Score')
            ax.set_title('Temperature vs. Sports Performance')
            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}")