ensemble / app.py
ddooling's picture
updated app.py to hide results behind an accordian
fd0fa88
raw
history blame
2.69 kB
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!"
#)
with gr.Blocks() as demo:
gr.Markdown("# Collective Guessing Game")
gr.Markdown("Submit your guess and contribute to the global average!")
guess_input = gr.Number(label="Enter your guess")
submit_button = gr.Button("Submit Guess")
with gr.Accordion("View Current Results!", open=False):
output_text = gr.Textbox(label="Results", lines=10)
submit_button.click(fn=add_guess, inputs=guess_input, outputs=output_text)
demo.launch()