Spaces:
Sleeping
Sleeping
| 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() | |