Gil Stetler
finetune chronos-bolt-small
09f6668
raw
history blame
2.87 kB
import gradio as gr
import matplotlib.pyplot as plt
import pandas as pd
from utils_vol import fetch_close_series, realized_vol
from autogluon.timeseries import TimeSeriesPredictor
from train_autogluon import train_bolt_small
import os
MODEL_DIR = "/mnt/data/AutogluonChronosBoltSmall"
# ---------- Handlers ----------
def predict_vol(ticker, start, interval):
if not os.path.isdir(MODEL_DIR):
raise gr.Error("Kein trainiertes Modell gefunden. Bitte zuerst trainieren.")
predictor = TimeSeriesPredictor.load(MODEL_DIR)
close = fetch_close_series(ticker, start=start, interval=interval)
rv = realized_vol(close)
df = pd.DataFrame({"timestamp": rv.index, "target": rv.values, "item_id": "series_1"})
forecast = predictor.predict(df)
f = forecast.to_pandas()
plt.figure(figsize=(8,4))
plt.plot(rv.index, rv.values, label="Historie")
plt.plot(f.index, f["0.5"], "--", label="Forecast (Median)")
plt.legend()
plt.title(f"{ticker} – Volatilitätsprognose (Chronos-Bolt-Small)")
return plt
def train_model(ticker, start, interval):
train_bolt_small(ticker=ticker, start=start, interval=interval)
return f"Training abgeschlossen und unter {MODEL_DIR} gespeichert."
def clear_model():
import shutil
if os.path.isdir(MODEL_DIR):
shutil.rmtree(MODEL_DIR)
return "Modell gelöscht."
return "Kein Modell zum Löschen gefunden."
# ---------- UI ----------
with gr.Blocks(title="Chronos-Bolt-Small (CPU) Fine-Tuning App") as demo:
gr.Markdown("## Chronos-Bolt-Small – Volatilitäts-Vorhersage\n"
"Trainiert auf CPU innerhalb von ~10 Minuten über AutoGluon.\n"
"• Tab **Train**: neues Modell fine-tunen\n"
"• Tab **Predict**: Vorhersage anzeigen\n"
"• Tab **Manage**: Modell löschen")
with gr.Tab("Predict"):
t1 = gr.Textbox(label="Ticker", value="AAPL")
s1 = gr.Textbox(label="Startdatum", value="2015-01-01")
i1 = gr.Dropdown(["1d","1wk","1mo"], value="1d", label="Intervall")
btn_p = gr.Button("Vorhersagen")
out_p = gr.Plot()
btn_p.click(predict_vol, inputs=[t1, s1, i1], outputs=[out_p])
with gr.Tab("Train"):
t2 = gr.Textbox(label="Ticker", value="AAPL")
s2 = gr.Textbox(label="Startdatum", value="2015-01-01")
i2 = gr.Dropdown(["1d","1wk","1mo"], value="1d", label="Intervall")
btn_t = gr.Button("Train (AutoGluon Chronos-Bolt-Small)")
out_t = gr.Textbox(label="Train-Log", lines=8)
btn_t.click(train_model, inputs=[t2, s2, i2], outputs=[out_t])
with gr.Tab("Manage"):
btn_c = gr.Button("Modell löschen")
out_c = gr.Textbox(label="Status")
btn_c.click(clear_model, outputs=[out_c])
demo.launch()