Made changes to Getting started with ALwrity and added lot of details on API keys
This commit is contained in:
105
lib/gpt_providers/config.py
Normal file
105
lib/gpt_providers/config.py
Normal file
@@ -0,0 +1,105 @@
|
||||
"""Configuration management for GPT providers."""
|
||||
|
||||
import os
|
||||
import json
|
||||
from loguru import logger
|
||||
import sys
|
||||
|
||||
# Configure logger to output to both file and stdout
|
||||
logger.remove() # Remove default handler
|
||||
logger.add(
|
||||
"logs/config.log",
|
||||
rotation="500 MB",
|
||||
retention="10 days",
|
||||
level="DEBUG",
|
||||
format="{time:YYYY-MM-DD HH:mm:ss} | {level} | {message}"
|
||||
)
|
||||
logger.add(
|
||||
sys.stdout,
|
||||
level="INFO",
|
||||
format="<green>{time:YYYY-MM-DD HH:mm:ss}</green> | <level>{level: <8}</level> | <cyan>{message}</cyan>"
|
||||
)
|
||||
|
||||
def load_config() -> Optional[Dict]:
|
||||
"""
|
||||
Load configuration from environment or config file.
|
||||
|
||||
Returns:
|
||||
Optional[Dict]: Configuration dictionary or None if loading fails
|
||||
"""
|
||||
try:
|
||||
logger.info("[load_config] Starting configuration load")
|
||||
|
||||
# First try to load from environment variable
|
||||
config_str = os.getenv('ALWRITY_CONFIG')
|
||||
if config_str:
|
||||
logger.debug("[load_config] Found configuration in environment variable")
|
||||
try:
|
||||
config = json.loads(config_str)
|
||||
logger.info("[load_config] Successfully loaded configuration from environment")
|
||||
return config
|
||||
except json.JSONDecodeError as e:
|
||||
logger.error(f"[load_config] Failed to parse environment config: {str(e)}")
|
||||
|
||||
# If no environment variable, try to load from file
|
||||
config_path = os.getenv('ALWRITY_CONFIG', 'config.json')
|
||||
logger.debug(f"[load_config] Attempting to load config from file: {config_path}")
|
||||
|
||||
if os.path.exists(config_path):
|
||||
try:
|
||||
with open(config_path, 'r') as f:
|
||||
config = json.load(f)
|
||||
logger.info("[load_config] Successfully loaded configuration from file")
|
||||
return config
|
||||
except json.JSONDecodeError as e:
|
||||
logger.error(f"[load_config] Failed to parse config file: {str(e)}")
|
||||
except Exception as e:
|
||||
logger.error(f"[load_config] Error reading config file: {str(e)}")
|
||||
else:
|
||||
logger.error(f"[load_config] Config file not found: {config_path}")
|
||||
|
||||
return None
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"[load_config] Unexpected error loading configuration: {str(e)}")
|
||||
return None
|
||||
|
||||
def read_return_config_section(section: str) -> tuple:
|
||||
"""
|
||||
Read a specific section from the configuration.
|
||||
|
||||
Args:
|
||||
section (str): The section to read
|
||||
|
||||
Returns:
|
||||
tuple: Configuration values
|
||||
"""
|
||||
try:
|
||||
logger.info(f"[read_return_config_section] Reading section: {section}")
|
||||
|
||||
config = load_config()
|
||||
if not config:
|
||||
logger.error("[read_return_config_section] No configuration available")
|
||||
return None, None, None, None, None, None, None
|
||||
|
||||
section_config = config.get(section, {})
|
||||
logger.debug(f"[read_return_config_section] Section config: {section_config}")
|
||||
|
||||
# Extract values with defaults
|
||||
gpt_provider = section_config.get('gpt_provider', 'openai')
|
||||
model = section_config.get('model', 'gpt-3.5-turbo')
|
||||
temperature = float(section_config.get('temperature', 0.7))
|
||||
max_tokens = int(section_config.get('max_tokens', 2000))
|
||||
top_p = float(section_config.get('top_p', 1.0))
|
||||
n = int(section_config.get('n', 1))
|
||||
fp = section_config.get('fp', 'json')
|
||||
|
||||
logger.info(f"[read_return_config_section] Successfully read configuration for {section}")
|
||||
logger.debug(f"[read_return_config_section] Values: provider={gpt_provider}, model={model}, "
|
||||
f"temperature={temperature}, max_tokens={max_tokens}")
|
||||
|
||||
return gpt_provider, model, temperature, max_tokens, top_p, n, fp
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"[read_return_config_section] Error reading configuration section: {str(e)}")
|
||||
return None, None, None, None, None, None, None
|
||||
Reference in New Issue
Block a user