feat: Collect all missing API keys using a Streamlit form.

This commit is contained in:
ajaysi (aider)
2024-10-06 13:56:06 +05:30
parent 54aceb28a8
commit 53dfaaa5da
2 changed files with 19 additions and 27 deletions

View File

@@ -218,21 +218,12 @@ def main():
setup_environment_paths() setup_environment_paths()
sidebar_configuration() sidebar_configuration()
missing_keys = check_api_keys() if not check_api_keys():
if missing_keys: st.stop()
st.warning(f"API keys not found: {', '.join(missing_keys)}. Please provide them below. Restart the app after saving the keys.") if not check_llm_environs():
with st.form(key='api_keys_form'): st.stop()
for key in missing_keys: setup_tabs()
st.text_input(f"{key}:", type="password", key=key) modify_prompts_sidebar()
if st.form_submit_button("Save Keys"):
with open(".env", "a") as env_file:
for key in missing_keys:
key_value = st.session_state[key]
env_file.write(f"{key}={key_value}\n")
st.success("API keys saved successfully! Please restart the application.")
else:
setup_tabs()
modify_prompts_sidebar()
def setup_environment_paths(): def setup_environment_paths():

View File

@@ -20,19 +20,20 @@ def check_api_keys():
key: url for key, url in api_keys.items() if os.getenv(key) is None key: url for key, url in api_keys.items() if os.getenv(key) is None
} }
if missing_keys: if missing_keys:
st.error("🚨 Some API keys are missing! Please provide them below:") st.warning(f"API keys not found: {', '.join(missing_keys)}. Please provide them below. Restart the app after saving the keys.")
for key, url in missing_keys.items(): with st.form(key='api_keys_form'):
api_key = st.text_input(f"Enter 🔏 {key}: 👉[Get it here]({url})👈") for key, url in missing_keys.items():
if api_key: st.text_input(f"{key}: 👉[Get it here]({url})👈", type="password", key=key)
os.environ[key] = api_key if st.form_submit_button("Save Keys"):
try: with open(".env", "a") as env_file:
with open(".env", "a") as env_file: for key in missing_keys:
env_file.write(f"{key}={api_key}\n") key_value = st.session_state[key]
except IOError as e: env_file.write(f"{key}={key_value}\n")
st.error(f"Failed to write {key} to .env file: {e}") st.success("API keys saved successfully! Please restart the application.")
st.success(f"{key} added successfully!") st.stop()
return False return False
return True return True
@st.cache_data @st.cache_data
def check_llm_environs(): def check_llm_environs():
""" """
@@ -43,7 +44,7 @@ def check_llm_environs():
supported_providers = { supported_providers = {
'google': "GEMINI_API_KEY", 'google': "GEMINI_API_KEY",
'openai': "OPENAI_API_KEY", 'openai': "OPENAI_API_KEY",
'mistralai': "MISTRAL_API_KEY" 'mistral': "MISTRAL_API_KEY"
} }
if not gpt_provider or gpt_provider.lower() not in supported_providers: if not gpt_provider or gpt_provider.lower() not in supported_providers:
gpt_provider = st.selectbox( gpt_provider = st.selectbox(