File size: 1,487 Bytes
39e6869
5c23264
 
 
 
 
 
39e6869
 
5c23264
39e6869
5c23264
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
39e6869
 
5c23264
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
39e6869
5c23264
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
import gradio as gr
import csv
import os
from datetime import datetime
import pandas as pd
from sklearn.linear_model import LinearRegression
import time

active_count = 0
model = None


def log_data(count):
    file_exists = os.path.isfile("usage.csv")
    
    with open("usage.csv", "a", newline="") as f:
        writer = csv.writer(f)
        
        if not file_exists:
            writer.writerow(["time", "active_users"])
        
        writer.writerow([datetime.now(), count])


def train_model():
    global model
    
    if not os.path.exists("usage.csv"):
        return None
    
    data = pd.read_csv("usage.csv")
    
    if len(data) < 2:
        return None
    
    data['time'] = pd.to_datetime(data['time'])
    data['time'] = data['time'].astype(int) // 10**9
    
    X = data[['time']]
    y = data['active_users']
    
    model = LinearRegression()
    model.fit(X, y)

def predict(input_text):
    global active_count, model
    
    # increase count
    active_count += 1
    
    # log data
    log_data(active_count)
    
    # train model
    train_model()
    
    # prediction
    if model:
        current_time = int(time.time())
        pred = model.predict([[current_time]])[0]
        return f"Estimated Active Users: {int(pred)}"
    else:
        return f"Current Active Users (approx): {active_count}"

iface = gr.Interface(
    fn=predict,
    inputs="text",
    outputs="text",
    title="Active Users Predictor"
)

iface.launch(share = True)