import gradio as gr import torch from chronos import ChronosPipeline import yfinance as yf import pandas as pd import numpy as np import matplotlib.pyplot as plt import matplotlib.dates as mdates from sklearn.metrics import mean_absolute_error, mean_squared_error import tempfile def get_popular_tickers(): return [ "AAPL", "MSFT", "GOOGL", "AMZN", "META", "TSLA", "NVDA", "JPM", "JNJ", "V", "PG", "WMT", "BAC", "DIS", "NFLX", "INTC" ] # Resto del código se mantiene igual hasta la sección de la interfaz Gradio with gr.Blocks() as demo: gr.Markdown("# Aplicación de Predicción de Precios de Acciones") with gr.Row(): with gr.Column(scale=1): ticker = gr.Dropdown( choices=get_popular_tickers(), value="AAPL", # Añadido valor por defecto label="Selecciona el Símbolo de la Acción" ) train_data_points = gr.Slider( minimum=50, maximum=5000, value=1000, step=1, label="Número de Datos para Entrenamiento" ) prediction_days = gr.Slider( minimum=1, maximum=60, value=5, step=1, label="Número de Días a Predecir" ) predict_btn = gr.Button("Predecir") with gr.Column(): plot_output = gr.Plot(label="Gráfico de Predicción") download_btn = gr.File(label="Descargar Predicciones") def update_train_data_points(ticker): try: stock = yf.Ticker(ticker) hist = stock.history(period="max") total_points = len(hist) return gr.Slider.update( maximum=total_points, value=min(1000, total_points), visible=True ) except Exception as e: print(f"Error updating slider: {str(e)}") return gr.Slider.update(visible=True) # Mantener slider visible en caso de error ticker.change( fn=update_train_data_points, inputs=[ticker], outputs=[train_data_points] ) predict_btn.click( fn=predict_stock, inputs=[ticker, train_data_points, prediction_days], outputs=[plot_output, download_btn] ) demo.launch()