Files
ALwrity/lib/utils/api_key_manager/wizard_state.py

93 lines
3.1 KiB
Python

"""Wizard state management for the API key manager."""
import streamlit as st
from loguru import logger
def initialize_wizard_state():
"""Initialize or get the wizard state from session."""
if 'wizard_state' not in st.session_state:
st.session_state.wizard_state = {
'current_step': 0,
'total_steps': 0,
'completed_steps': set(),
'api_keys_status': {},
'setup_progress': 0
}
logger.info("Initialized wizard state")
def get_current_step():
"""Get the current step from the wizard state."""
return st.session_state.wizard_state.get('current_step', 0)
def next_step():
"""Move to the next step in the wizard."""
current_step = get_current_step()
st.session_state.wizard_state['current_step'] = current_step + 1
st.session_state.wizard_state['completed_steps'].add(current_step)
logger.info(f"Moving to next step: {current_step + 1}")
def previous_step():
"""Move to the previous step in the wizard."""
current_step = get_current_step()
if current_step > 0:
st.session_state.wizard_state['current_step'] = current_step - 1
st.session_state.wizard_state['completed_steps'].discard(current_step - 1)
logger.info(f"Moving to previous step: {current_step - 1}")
def update_progress():
"""Update the overall setup progress."""
total_steps = st.session_state.wizard_state.get('total_steps', 0)
completed_steps = len(st.session_state.wizard_state.get('completed_steps', set()))
if total_steps > 0:
progress = (completed_steps / total_steps) * 100
st.session_state.wizard_state['setup_progress'] = progress
logger.info(f"Updated progress: {progress:.1f}%")
def is_step_completed(step):
"""Check if a specific step is completed."""
return step in st.session_state.wizard_state.get('completed_steps', set())
def get_step_status(step):
"""Get the status of a specific step."""
current_step = get_current_step()
if step < current_step:
return "completed"
elif step == current_step:
return "current"
else:
return "pending"
def can_proceed_to_next_step():
"""Check if the user can proceed to the next step."""
current_step = get_current_step()
if current_step == 1:
# Get selected providers
selected_providers = get_selected_providers()
# If no providers are selected, cannot proceed
if not selected_providers:
return False
# Check if at least one selected provider has a valid API key
for provider in selected_providers:
validation_status = get_validation_status(provider)
if validation_status and validation_status.get('is_valid', False):
return True
return False
elif current_step == 2:
# Website URL is now optional
return True
elif current_step == 3:
# AI Research setup - both Tavily and Metaphor are optional
return True
elif current_step == 4:
# Final setup - always allow proceeding
return True
return False