Spaces:
Sleeping
Sleeping
antonkulaga
commited on
Commit
·
73cfaa5
1
Parent(s):
ff0c43b
update space
Browse files- .gitignore +3 -1
- app.py +43 -15
- data_formatter/__pycache__/__init__.cpython-311.pyc +0 -0
- data_formatter/__pycache__/types.cpython-311.pyc +0 -0
- data_formatter/__pycache__/utils.cpython-311.pyc +0 -0
- gluformer/__pycache__/__init__.cpython-311.pyc +0 -0
- gluformer/__pycache__/attention.cpython-311.pyc +0 -0
- gluformer/__pycache__/decoder.cpython-311.pyc +0 -0
- gluformer/__pycache__/embed.cpython-311.pyc +0 -0
- gluformer/__pycache__/encoder.cpython-311.pyc +0 -0
- gluformer/__pycache__/variance.cpython-311.pyc +0 -0
- gluformer/utils/__pycache__/__init__.cpython-311.pyc +0 -0
- gluformer/utils/__pycache__/collate.cpython-311.pyc +0 -0
- gluformer/utils/__pycache__/training.cpython-311.pyc +0 -0
- requirements.txt +2 -1
- test_environment.yaml +23 -0
- tools.py +14 -7
- utils/__pycache__/__init__.cpython-311.pyc +0 -0
- utils/__pycache__/darts_dataset.cpython-311.pyc +0 -0
.gitignore
CHANGED
@@ -7,4 +7,6 @@ files/
|
|
7 |
.mamba-env/
|
8 |
.mamba-env-cache/
|
9 |
.DS_Store
|
10 |
-
.vscode/
|
|
|
|
|
|
7 |
.mamba-env/
|
8 |
.mamba-env-cache/
|
9 |
.DS_Store
|
10 |
+
.vscode/
|
11 |
+
.gradio/
|
12 |
+
__pycache__
|
app.py
CHANGED
@@ -3,26 +3,61 @@ from tools import *
|
|
3 |
from format_dexcom import process_csv
|
4 |
import tempfile
|
5 |
import os
|
|
|
|
|
|
|
|
|
|
|
6 |
|
7 |
-
def
|
8 |
-
"""
|
9 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
10 |
with tempfile.NamedTemporaryFile(delete=False, suffix='.csv') as tmp_file:
|
11 |
processed_path = tmp_file.name
|
12 |
|
13 |
-
# Process the CSV file
|
14 |
process_csv(
|
15 |
input_dir=file.name,
|
16 |
output_file=processed_path
|
17 |
)
|
18 |
|
19 |
-
|
20 |
-
|
21 |
|
22 |
with gr.Blocks() as demo:
|
23 |
gr.Markdown("# Glucose Prediction Tool")
|
24 |
gr.Markdown("Upload a Dexcom CSV file to get predictions")
|
25 |
|
|
|
|
|
|
|
|
|
|
|
|
|
26 |
file_input = gr.File(label="Upload Raw Dexcom CSV File")
|
27 |
with gr.Row():
|
28 |
index_slider = gr.Slider(
|
@@ -39,18 +74,11 @@ with gr.Blocks() as demo:
|
|
39 |
# Update slider and show total samples when file is uploaded
|
40 |
file_input.change(
|
41 |
fn=process_and_prepare,
|
42 |
-
inputs=[file_input],
|
43 |
outputs=[index_slider, sample_count],
|
44 |
queue=True
|
45 |
)
|
46 |
|
47 |
-
# Update visibility after processing
|
48 |
-
file_input.change(
|
49 |
-
fn=lambda: (gr.Slider(visible=True), gr.Markdown(visible=True)),
|
50 |
-
outputs=[index_slider, sample_count],
|
51 |
-
queue=True
|
52 |
-
)
|
53 |
-
|
54 |
# Only update plot after processing is complete
|
55 |
index_slider.change(
|
56 |
fn=predict_glucose_tool,
|
@@ -59,4 +87,4 @@ with gr.Blocks() as demo:
|
|
59 |
queue=True
|
60 |
)
|
61 |
|
62 |
-
demo.launch()
|
|
|
3 |
from format_dexcom import process_csv
|
4 |
import tempfile
|
5 |
import os
|
6 |
+
from huggingface_hub import list_models
|
7 |
+
from typing import List, Tuple
|
8 |
+
from pathlib import Path
|
9 |
+
import plotly.graph_objects as go
|
10 |
+
from huggingface_hub import HfApi
|
11 |
|
12 |
+
def get_available_models() -> List[str]:
|
13 |
+
"""Get list of available gluformer models from HuggingFace."""
|
14 |
+
api = HfApi()
|
15 |
+
files = api.list_repo_files("Livia-Zaharia/gluformer_models")
|
16 |
+
|
17 |
+
# Filter for .pth files
|
18 |
+
gluformer_models = [
|
19 |
+
file for file in files
|
20 |
+
if file.endswith('.pth') and "weights" in file.lower() and 'gluformer' in file.lower()
|
21 |
+
]
|
22 |
+
|
23 |
+
return gluformer_models
|
24 |
+
|
25 |
+
AVAILABLE_MODELS = get_available_models()
|
26 |
+
print(AVAILABLE_MODELS)
|
27 |
+
|
28 |
+
def process_and_prepare(file: tempfile._TemporaryFileWrapper, model_name: str) -> Tuple[gr.Slider, gr.Markdown]:
|
29 |
+
"""Process the raw CSV and prepare it for prediction.
|
30 |
+
|
31 |
+
Args:
|
32 |
+
file: Uploaded temporary file object
|
33 |
+
model_name: Name of the selected model
|
34 |
+
|
35 |
+
Returns:
|
36 |
+
Tuple containing:
|
37 |
+
- Updated slider component
|
38 |
+
- Sample count markdown component
|
39 |
+
"""
|
40 |
with tempfile.NamedTemporaryFile(delete=False, suffix='.csv') as tmp_file:
|
41 |
processed_path = tmp_file.name
|
42 |
|
|
|
43 |
process_csv(
|
44 |
input_dir=file.name,
|
45 |
output_file=processed_path
|
46 |
)
|
47 |
|
48 |
+
return prep_predict_glucose_tool(processed_path, model_name)
|
49 |
+
|
50 |
|
51 |
with gr.Blocks() as demo:
|
52 |
gr.Markdown("# Glucose Prediction Tool")
|
53 |
gr.Markdown("Upload a Dexcom CSV file to get predictions")
|
54 |
|
55 |
+
model_selector = gr.Dropdown(
|
56 |
+
choices=AVAILABLE_MODELS,
|
57 |
+
value="gluformer_1samples_500epochs_10heads_32batch_geluactivation_livia_large_weights.pth",
|
58 |
+
label="Select Model",
|
59 |
+
interactive=True
|
60 |
+
)
|
61 |
file_input = gr.File(label="Upload Raw Dexcom CSV File")
|
62 |
with gr.Row():
|
63 |
index_slider = gr.Slider(
|
|
|
74 |
# Update slider and show total samples when file is uploaded
|
75 |
file_input.change(
|
76 |
fn=process_and_prepare,
|
77 |
+
inputs=[file_input, model_selector],
|
78 |
outputs=[index_slider, sample_count],
|
79 |
queue=True
|
80 |
)
|
81 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
82 |
# Only update plot after processing is complete
|
83 |
index_slider.change(
|
84 |
fn=predict_glucose_tool,
|
|
|
87 |
queue=True
|
88 |
)
|
89 |
|
90 |
+
demo.launch(share=True)
|
data_formatter/__pycache__/__init__.cpython-311.pyc
DELETED
Binary file (182 Bytes)
|
|
data_formatter/__pycache__/types.cpython-311.pyc
DELETED
Binary file (1.09 kB)
|
|
data_formatter/__pycache__/utils.cpython-311.pyc
DELETED
Binary file (19.8 kB)
|
|
gluformer/__pycache__/__init__.cpython-311.pyc
DELETED
Binary file (177 Bytes)
|
|
gluformer/__pycache__/attention.cpython-311.pyc
DELETED
Binary file (5.85 kB)
|
|
gluformer/__pycache__/decoder.cpython-311.pyc
DELETED
Binary file (3.65 kB)
|
|
gluformer/__pycache__/embed.cpython-311.pyc
DELETED
Binary file (6.37 kB)
|
|
gluformer/__pycache__/encoder.cpython-311.pyc
DELETED
Binary file (5.28 kB)
|
|
gluformer/__pycache__/variance.cpython-311.pyc
DELETED
Binary file (1.89 kB)
|
|
gluformer/utils/__pycache__/__init__.cpython-311.pyc
CHANGED
Binary files a/gluformer/utils/__pycache__/__init__.cpython-311.pyc and b/gluformer/utils/__pycache__/__init__.cpython-311.pyc differ
|
|
gluformer/utils/__pycache__/collate.cpython-311.pyc
CHANGED
Binary files a/gluformer/utils/__pycache__/collate.cpython-311.pyc and b/gluformer/utils/__pycache__/collate.cpython-311.pyc differ
|
|
gluformer/utils/__pycache__/training.cpython-311.pyc
CHANGED
Binary files a/gluformer/utils/__pycache__/training.cpython-311.pyc and b/gluformer/utils/__pycache__/training.cpython-311.pyc differ
|
|
requirements.txt
CHANGED
@@ -13,4 +13,5 @@ transformers
|
|
13 |
datasets
|
14 |
python-multipart
|
15 |
plotly
|
16 |
-
kaleido
|
|
|
|
13 |
datasets
|
14 |
python-multipart
|
15 |
plotly
|
16 |
+
kaleido
|
17 |
+
huggingface-hub
|
test_environment.yaml
ADDED
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
name: glucose
|
2 |
+
channels:
|
3 |
+
- conda-forge
|
4 |
+
- defaults
|
5 |
+
dependencies:
|
6 |
+
- python=3.11
|
7 |
+
- pip:
|
8 |
+
- torch
|
9 |
+
- optuna
|
10 |
+
- numpy==1.26.4
|
11 |
+
- tensorboard
|
12 |
+
- pandas
|
13 |
+
- psutil
|
14 |
+
- typer
|
15 |
+
- darts==0.29.0
|
16 |
+
- pmdarima==2.0.4
|
17 |
+
- peft
|
18 |
+
- transformers
|
19 |
+
- datasets
|
20 |
+
- python-multipart
|
21 |
+
- plotly
|
22 |
+
- kaleido
|
23 |
+
- huggingface-hub
|
tools.py
CHANGED
@@ -15,12 +15,16 @@ from huggingface_hub import hf_hub_download
|
|
15 |
import plotly.graph_objects as go
|
16 |
import gradio as gr
|
17 |
from format_dexcom import *
|
|
|
|
|
|
|
|
|
18 |
|
19 |
|
20 |
glucose = Path(os.path.abspath(__file__)).parent.resolve()
|
21 |
file_directory = glucose / "files"
|
22 |
|
23 |
-
def plot_forecast(forecasts: np.ndarray, filename: str,ind:int=10):
|
24 |
|
25 |
forecasts = (forecasts - scalers['target'].min_) / scalers['target'].scale_
|
26 |
|
@@ -134,14 +138,14 @@ scalers = None
|
|
134 |
dataset_test_glufo = None
|
135 |
filename = None
|
136 |
|
137 |
-
def prep_predict_glucose_tool(file):
|
138 |
"""
|
139 |
Function to predict future glucose of user.
|
140 |
"""
|
141 |
global formatter, series, scalers, glufo, dataset_test_glufo, filename
|
142 |
|
143 |
model = "Livia-Zaharia/gluformer_models"
|
144 |
-
model_path = hf_hub_download(repo_id=model, filename=
|
145 |
|
146 |
formatter, series, scalers = load_data(
|
147 |
url=str(file),
|
@@ -198,20 +202,23 @@ def prep_predict_glucose_tool(file):
|
|
198 |
filename = generate_filename_from_url(file)
|
199 |
|
200 |
max_index = len(dataset_test_glufo) - 1
|
|
|
|
|
201 |
|
202 |
return (
|
203 |
gr.Slider(
|
204 |
minimum=0,
|
205 |
-
maximum=max_index,
|
206 |
-
value=
|
207 |
step=1,
|
208 |
label="Select Sample Index",
|
|
|
209 |
),
|
210 |
-
gr.Markdown(f"Total number of test samples: {max_index + 1}")
|
211 |
)
|
212 |
|
213 |
|
214 |
-
def predict_glucose_tool(ind) ->
|
215 |
|
216 |
|
217 |
device = "cuda" if torch.cuda.is_available() else "cpu"
|
|
|
15 |
import plotly.graph_objects as go
|
16 |
import gradio as gr
|
17 |
from format_dexcom import *
|
18 |
+
from typing import Tuple, Union, List
|
19 |
+
from plotly.graph_objs._figure import Figure
|
20 |
+
from gradio.components import Slider
|
21 |
+
from gradio.components import Markdown
|
22 |
|
23 |
|
24 |
glucose = Path(os.path.abspath(__file__)).parent.resolve()
|
25 |
file_directory = glucose / "files"
|
26 |
|
27 |
+
def plot_forecast(forecasts: np.ndarray, filename: str,ind:int=10) -> Tuple[Path, Figure]:
|
28 |
|
29 |
forecasts = (forecasts - scalers['target'].min_) / scalers['target'].scale_
|
30 |
|
|
|
138 |
dataset_test_glufo = None
|
139 |
filename = None
|
140 |
|
141 |
+
def prep_predict_glucose_tool(file: Union[str, Path], model_name: str = "gluformer_1samples_10000epochs_10heads_32batch_geluactivation_livia_mini_weights.pth") -> Tuple[Slider, Markdown]:
|
142 |
"""
|
143 |
Function to predict future glucose of user.
|
144 |
"""
|
145 |
global formatter, series, scalers, glufo, dataset_test_glufo, filename
|
146 |
|
147 |
model = "Livia-Zaharia/gluformer_models"
|
148 |
+
model_path = hf_hub_download(repo_id=model, filename=model_name)
|
149 |
|
150 |
formatter, series, scalers = load_data(
|
151 |
url=str(file),
|
|
|
202 |
filename = generate_filename_from_url(file)
|
203 |
|
204 |
max_index = len(dataset_test_glufo) - 1
|
205 |
+
|
206 |
+
print(f"Total number of test samples: {max_index + 1}")
|
207 |
|
208 |
return (
|
209 |
gr.Slider(
|
210 |
minimum=0,
|
211 |
+
maximum=max_index-1,
|
212 |
+
value=max_index,
|
213 |
step=1,
|
214 |
label="Select Sample Index",
|
215 |
+
visible=True
|
216 |
),
|
217 |
+
gr.Markdown(f"Total number of test samples: {max_index + 1}", visible=True)
|
218 |
)
|
219 |
|
220 |
|
221 |
+
def predict_glucose_tool(ind: int) -> Figure:
|
222 |
|
223 |
|
224 |
device = "cuda" if torch.cuda.is_available() else "cpu"
|
utils/__pycache__/__init__.cpython-311.pyc
CHANGED
Binary files a/utils/__pycache__/__init__.cpython-311.pyc and b/utils/__pycache__/__init__.cpython-311.pyc differ
|
|
utils/__pycache__/darts_dataset.cpython-311.pyc
CHANGED
Binary files a/utils/__pycache__/darts_dataset.cpython-311.pyc and b/utils/__pycache__/darts_dataset.cpython-311.pyc differ
|
|