Spaces:
Running
Running
auto load api key from .env if set for the selected model
Browse files
app.py
CHANGED
@@ -6,6 +6,7 @@ import logging
|
|
6 |
import os
|
7 |
import pathlib
|
8 |
import random
|
|
|
9 |
import tempfile
|
10 |
from typing import List, Union
|
11 |
|
@@ -32,6 +33,18 @@ load_dotenv()
|
|
32 |
RUN_IN_OFFLINE_MODE = os.getenv('RUN_IN_OFFLINE_MODE', 'False').lower() == 'true'
|
33 |
|
34 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
35 |
@st.cache_data
|
36 |
def _load_strings() -> dict:
|
37 |
"""
|
@@ -182,14 +195,29 @@ with st.sidebar:
|
|
182 |
on_change=reset_api_key
|
183 |
).split(' ')[0]
|
184 |
|
185 |
-
#
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
186 |
api_key_token = st.text_input(
|
187 |
label=(
|
188 |
'3: Paste your API key/access token:\n\n'
|
189 |
'*Mandatory* for all providers.'
|
190 |
),
|
|
|
191 |
type='password',
|
192 |
-
key='api_key_input'
|
|
|
193 |
)
|
194 |
|
195 |
# Additional configs for Azure OpenAI
|
|
|
6 |
import os
|
7 |
import pathlib
|
8 |
import random
|
9 |
+
import re
|
10 |
import tempfile
|
11 |
from typing import List, Union
|
12 |
|
|
|
33 |
RUN_IN_OFFLINE_MODE = os.getenv('RUN_IN_OFFLINE_MODE', 'False').lower() == 'true'
|
34 |
|
35 |
|
36 |
+
# --- API Key Environment Variable Mapping ---
|
37 |
+
PROVIDER_ENV_KEYS = {
|
38 |
+
GlobalConfig.PROVIDER_OPENROUTER: "OPENROUTER_API_KEY",
|
39 |
+
GlobalConfig.PROVIDER_COHERE: "COHERE_API_KEY",
|
40 |
+
GlobalConfig.PROVIDER_HUGGING_FACE: "HUGGINGFACEHUB_API_TOKEN",
|
41 |
+
GlobalConfig.PROVIDER_GOOGLE_GEMINI: "GOOGLE_API_KEY",
|
42 |
+
GlobalConfig.PROVIDER_TOGETHER_AI: "TOGETHER_API_KEY",
|
43 |
+
GlobalConfig.PROVIDER_AZURE_OPENAI: "AZURE_OPENAI_API_KEY",
|
44 |
+
# Add more as needed
|
45 |
+
}
|
46 |
+
|
47 |
+
|
48 |
@st.cache_data
|
49 |
def _load_strings() -> dict:
|
50 |
"""
|
|
|
195 |
on_change=reset_api_key
|
196 |
).split(' ')[0]
|
197 |
|
198 |
+
# --- Automatically fetch API key from .env if available ---
|
199 |
+
# Extract provider code from model string, e.g. '[or]...' -> 'or'
|
200 |
+
provider_match = re.match(r'\[(.*?)\]', llm_provider_to_use)
|
201 |
+
selected_provider = provider_match.group(1) if provider_match else llm_provider_to_use
|
202 |
+
env_key_name = PROVIDER_ENV_KEYS.get(selected_provider)
|
203 |
+
default_api_key = os.getenv(env_key_name, "") if env_key_name else ""
|
204 |
+
|
205 |
+
# --- Session state sync workaround for Streamlit widget key issues ---
|
206 |
+
# Only set st.session_state['api_key_input'] if not already set by user
|
207 |
+
if default_api_key and (
|
208 |
+
'api_key_input' not in st.session_state or not st.session_state['api_key_input']
|
209 |
+
):
|
210 |
+
st.session_state['api_key_input'] = default_api_key
|
211 |
+
|
212 |
api_key_token = st.text_input(
|
213 |
label=(
|
214 |
'3: Paste your API key/access token:\n\n'
|
215 |
'*Mandatory* for all providers.'
|
216 |
),
|
217 |
+
value=default_api_key,
|
218 |
type='password',
|
219 |
+
key='api_key_input',
|
220 |
+
disabled=bool(default_api_key), # disable input if key is present
|
221 |
)
|
222 |
|
223 |
# Additional configs for Azure OpenAI
|