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, UV Index {conditions['uv_index']}, " f"Air Quality Index {conditions['air_quality_index']}, Precipitation {conditions['precipitation']} mm, " f"Atmospheric Pressure {conditions['atmospheric_pressure']} hPa." ) 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_scores = [75, 80, 70, 85, 78, 72, 82] # Replace with actual data from API return performance_scores # 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) 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) # Button to generate predictions if st.button("Generate Prediction"): conditions = { "temperature": temperature, "humidity": humidity, "wind_speed": wind_speed, "uv_index": uv_index, "air_quality_index": air_quality_index, "precipitation": precipitation, "atmospheric_pressure": atmospheric_pressure } 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, UV Index {uv_index}, " f"Air Quality Index {air_quality_index}, Precipitation {precipitation} mm, " f"Atmospheric Pressure {atmospheric_pressure} hPa." ) qualitative_result = call_ai_model(qualitative_analysis) # Get performance score for specified conditions performance_scores = 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 Scores: {performance_scores}") # 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, performance_scores, marker='o', linestyle='-', color='b') ax.set_xlabel('Climate Conditions') ax.set_ylabel('Performance Score') 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}")