# app.py - Módulo para src import streamlit as st from streamlit_option_menu import option_menu import streamlit_lottie as st_lottie import json import google.generativeai as genai from dotenv import load_dotenv import os import sys sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) # Importaciones locales from datos.upload import show_upload from datos.prepare import show_prepare from models.train import show_train from models.test import show_test from models.unsupervised import show_unsupervised # Configuración inicial st.set_page_config(initial_sidebar_state="collapsed", page_title="Machine Learning", page_icon="🤖", layout="wide") load_dotenv() # Función para cargar el archivo Lottie def load_lottie_file(filepath: str): try: # Construir ruta absoluta base_path = os.path.dirname(os.path.abspath(__file__)) full_path = os.path.join(base_path, 'assets', filepath) with open(full_path, 'r') as f: return json.load(f) except FileNotFoundError: st.error(f"Archivo Lottie no encontrado: {full_path}") return None # Configuración del sidebar with st.sidebar: # Cargar y mostrar el logo animado try: gemini_logo = load_lottie_file('gemini_logo.json') if gemini_logo: st_lottie.st_lottie( gemini_logo, key='logo', height=50, width=50, loop=True, quality="low" ) except Exception as e: st.error(f"Error al cargar el logo: {e}") # Sección de API Keys st.markdown("### Configuración de APIs") # Gemini API st.markdown(''' [Consigue tu API Key de Google AI Studio](https://aistudio.google.com/app/apikey) ''') genai_api_key = st.text_input( "Gemini API Key", type="password", placeholder="Ingresa tu API Key de Gemini", key='gemini_api_key' ) # Supabase API st.markdown(''' [Consigue tus credenciales de Supabase](https://supabase.com/dashboard/project/_/settings/api) ''') supabase_url = st.text_input( "Supabase URL", type="password", placeholder="Ingresa tu Supabase URL", key='supabase_url' ) supabase_key = st.text_input( "Supabase Key", type="password", placeholder="Ingresa tu Supabase Key", key='supabase_key' ) # Validación de credenciales if not all([genai_api_key, supabase_url, supabase_key]): st.warning("Por favor ingresa todas las credenciales necesarias.") else: genai.configure(api_key=genai_api_key) model = genai.GenerativeModel('gemini-1.5-flash') st.success("✅ Credenciales configuradas correctamente") st.sidebar.markdown( f'''
Analizar series temporales

Elaborado por LinkedIn Jerson Ruiz Alva
''', unsafe_allow_html=True ) # Configuración de estilos de navegación pages = ["Upload", "Prepare", "Training", "ModelTest", "Unsupervised"] selected_page = option_menu( None, options=pages, icons=['cloud-upload', 'gear', 'robot', 'folder-check', 'search'], default_index=0, orientation="horizontal", styles={ "container": {"padding": "0!important", "background-color": None}, "icon": {"color": None, "font-size": "20px"}, "nav-link": { "font-size": "15px", "text-align": "center", "margin": "0px", "--hover-color": "rgba(15, 21, 34, 0.25)", }, "nav-link-selected": {"background-color": "rgba(15, 21, 34, 1)"}, } ) # The rest of the page routing remains the same if selected_page == "Upload": show_upload() elif selected_page == "Prepare": show_prepare() elif selected_page == "Training": show_train() elif selected_page == "Test": show_test() elif selected_page == "Unsupervised": show_unsupervised()