|
import streamlit as st |
|
import requests |
|
import os |
|
import json |
|
import pandas as pd |
|
import matplotlib.pyplot as plt |
|
|
|
|
|
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() |
|
|
|
return response |
|
|
|
|
|
def get_performance_data(conditions): |
|
all_message = ( |
|
f"Provide the expected sports performance score at conditions: " |
|
f"Temperature {conditions['temperature']}°C, Humidity {conditions['humidity']}%, " |
|
f"Wind Speed {conditions['wind_speed']} km/h." |
|
) |
|
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:] |
|
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 |
|
|
|
|
|
performance_score = 80 |
|
return performance_score |
|
|
|
|
|
st.title("Climate Impact on Sports Performance") |
|
st.write("Analyze and visualize the impact of climate conditions on sports performance.") |
|
|
|
|
|
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) |
|
|
|
|
|
if st.button("Generate Prediction"): |
|
conditions = { |
|
"temperature": temperature, |
|
"humidity": humidity, |
|
"wind_speed": wind_speed |
|
} |
|
|
|
try: |
|
with st.spinner("Generating predictions..."): |
|
|
|
qualitative_analysis = ( |
|
f"Assess the impact on sports performance at conditions: " |
|
f"Temperature {temperature}°C, Humidity {humidity}%, " |
|
f"Wind Speed {wind_speed} km/h." |
|
) |
|
qualitative_result = call_ai_model(qualitative_analysis) |
|
|
|
|
|
performance_score = get_performance_data(conditions) |
|
|
|
st.success("Predictions generated.") |
|
|
|
|
|
st.subheader("Qualitative Analysis") |
|
st.write(qualitative_result) |
|
|
|
|
|
st.subheader("Performance Score") |
|
st.write(f"Predicted Performance Score: {performance_score}") |
|
|
|
|
|
st.subheader("Performance Score vs Climate Conditions") |
|
|
|
|
|
climate_conditions = list(conditions.keys()) |
|
climate_values = list(conditions.values()) |
|
|
|
|
|
fig, ax = plt.subplots() |
|
ax.plot(climate_conditions, climate_values, marker='o', linestyle='-', color='b') |
|
ax.set_xlabel('Climate Conditions') |
|
ax.set_ylabel('Value') |
|
ax.set_title('Performance Score vs Climate Conditions') |
|
ax.grid(True) |
|
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}") |
|
|