terry / app.py
ogegadavis254's picture
Update app.py
c438b94 verified
raw
history blame
4.55 kB
import streamlit as st
import requests
import os
import json
import pandas as pd
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 get performance data from AI
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:] # 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
# Example: Replace with actual data from API
performance_score = 80 # Replace with actual data from API
return performance_score
# Streamlit app layout
st.title("Climate Impact on Sports Performance")
st.write("Analyze and visualize the impact of climate conditions on sports performance.")
# 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)
# Button to generate predictions
if st.button("Generate Prediction"):
conditions = {
"temperature": temperature,
"humidity": humidity,
"wind_speed": wind_speed
}
try:
with st.spinner("Generating predictions..."):
# Call AI model to get qualitative analysis
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)
# Get performance score for specified conditions
performance_score = get_performance_data(conditions)
st.success("Predictions generated.")
# Display qualitative analysis
st.subheader("Qualitative Analysis")
st.write(qualitative_result)
# Display performance score
st.subheader("Performance Score")
st.write(f"Predicted Performance Score: {performance_score}")
# Plotting the data
st.subheader("Performance Score vs Climate Conditions")
# Define climate conditions for plotting
climate_conditions = list(conditions.keys())
climate_values = list(conditions.values())
# Plotting performance score against climate conditions
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}")