Load environment variables and initialize configuration.
()
| 212 | |
| 213 | |
| 214 | def load_configuration() -> bool: |
| 215 | """Load environment variables and initialize configuration.""" |
| 216 | logger.info("Loading configuration") |
| 217 | try: |
| 218 | env_path = os.path.expanduser("~/.config/fabric/.env") |
| 219 | logger.debug(f"Looking for .env file at: {env_path}") |
| 220 | |
| 221 | if not os.path.exists(env_path): |
| 222 | logger.error(f"Configuration file not found at {env_path}") |
| 223 | st.error(f"Configuration file not found at {env_path}") |
| 224 | return False |
| 225 | |
| 226 | load_dotenv(dotenv_path=env_path) |
| 227 | logger.debug("Environment variables loaded") |
| 228 | |
| 229 | with st.spinner("Loading providers and models..."): |
| 230 | providers = get_configured_providers() |
| 231 | |
| 232 | if not providers: |
| 233 | logger.error("No providers configured") |
| 234 | st.error("No providers configured. Please run 'fabric --setup' first.") |
| 235 | return False |
| 236 | |
| 237 | default_vendor = os.getenv("DEFAULT_VENDOR") |
| 238 | default_model = os.getenv("DEFAULT_MODEL") |
| 239 | context_length = os.getenv("DEFAULT_MODEL_CONTEXT_LENGTH", "2048") |
| 240 | |
| 241 | logger.debug( |
| 242 | f"Default configuration - Vendor: {default_vendor}, Model: {default_model}" |
| 243 | ) |
| 244 | |
| 245 | if not default_vendor or default_vendor not in providers: |
| 246 | default_vendor = next(iter(providers)) |
| 247 | default_model = ( |
| 248 | providers[default_vendor][0] if providers[default_vendor] else None |
| 249 | ) |
| 250 | logger.info( |
| 251 | f"Using fallback configuration - Vendor: {default_vendor}, Model: {default_model}" |
| 252 | ) |
| 253 | |
| 254 | st.session_state.config = { |
| 255 | "vendor": default_vendor, |
| 256 | "model": default_model, |
| 257 | "context_length": context_length, |
| 258 | } |
| 259 | st.session_state.vendors = providers |
| 260 | st.session_state.config_loaded = True |
| 261 | |
| 262 | logger.info("Configuration loaded successfully") |
| 263 | return True |
| 264 | |
| 265 | except Exception as e: |
| 266 | logger.error(f"Configuration error: {str(e)}", exc_info=True) |
| 267 | st.error(f"Configuration error: {str(e)}") |
| 268 | return False |
| 269 | |
| 270 | |
| 271 | def load_models_and_providers() -> None: |
no test coverage detected