import os import json import threading import gradio as gr import statistics from scipy import stats DATA_DIR = './storage' DATA_FILE = os.path.join(DATA_DIR, 'guesses.json') lock = threading.Lock() def ensure_data_directory(): os.makedirs(DATA_DIR, exist_ok=True) def load_guesses(): ensure_data_directory() if not os.path.exists(DATA_FILE): with open(DATA_FILE, 'w') as f: json.dump([], f) with open(DATA_FILE, 'r') as f: return json.load(f) def save_guesses(guesses): with open(DATA_FILE, 'w') as f: json.dump(guesses, f) def add_guess(guess): with lock: guesses = load_guesses() guesses.append(guess) save_guesses(guesses) n = len(guesses) average = sum(guesses) / n if n >= 2: # Calculate sample standard deviation s = statistics.stdev(guesses) # Calculate standard error SE = s / (n ** 0.5) # Degrees of freedom df = n - 1 # Confidence level (e.g., 95%) confidence_level = 0.95 alpha = 1 - confidence_level # Calculate critical t-value t_value = stats.t.ppf(1 - alpha/2, df) # Calculate margin of error ME = t_value * SE # Calculate confidence interval ci_lower = average - ME ci_upper = average + ME # Prepare output message return ( f"Your guess has been recorded.\n" f"Current average of all guesses: {average:.2f}\n" f"95% confidence interval: ({ci_lower:.2f}, {ci_upper:.2f})" ) else: # Not enough data to compute confidence interval return ( f"Your guess has been recorded.\n" f"Current average of all guesses: {average:.2f}\n" f"Not enough data to compute confidence interval." ) demo = gr.Interface( fn=add_guess, inputs=gr.Number(label="Enter your guess"), outputs="text", title="Collective Guessing Game", description="Submit your guess and contribute to the global average!" ) demo.launch()