Configuration
This document describes how to configure Cadence for different use cases and environments.
Configuration Hierarchy
Cadence uses a layered configuration approach:
- Default Values: Built-in defaults in source code
- Configuration Files: JSON/YAML files for structured settings
- Environment Variables: Runtime configuration and secrets
- Command Line Arguments: Override specific parameters
Configuration Files
Basic Configuration
Create config.json in the project root:
{
"evolution": {
"population_size": 20,
"generations": 100,
"elite_size": 2,
"tournament_size": 3,
"mutation_rate": 0.8,
"stagnation_threshold": 10
},
"llm": {
"provider": "google",
"model": "gemini-pro",
"temperature": 0.7,
"max_tokens": 2048,
"timeout": 30
},
"evaluation": {
"num_seeds": 10,
"timeout": 30,
"parallel": true,
"max_workers": 4
},
"database": {
"path": "cadence_db.sqlite",
"backup_interval": 100
},
"logging": {
"level": "INFO",
"format": "%(asctime)s - %(name)s - %(levelname)s - %(message)s",
"file": "cadence.log"
}
}
Task-Specific Configuration
{
"tasks": {
"tsp": {
"n_cities": 20,
"distance_metric": "euclidean",
"constraint_type": "standard"
},
"knapsack": {
"n_items": 50,
"capacity": 100,
"item_generation": "uniform"
}
}
}
Experiment Configuration
{
"experiment": {
"name": "tsp_comparison_study",
"description": "Compare different prompt strategies",
"runs": 10,
"save_intermediate": true,
"metrics": ["cost", "diversity", "convergence_time"],
"conditions": [
{
"name": "baseline",
"instructions": "Improve the TSP solution",
"temperature": 0.7
},
{
"name": "detailed",
"instructions": "Focus on algorithmic improvements and edge cases",
"temperature": 0.5
}
]
}
}
Environment Variables
Required Variables
# LLM API credentials
export GOOGLE_API_KEY="your-gemini-api-key"
# Optional: Alternative providers
export OPENAI_API_KEY="your-openai-api-key"
Optional Variables
# Database configuration
export CADENCE_DB_PATH="/path/to/database.sqlite"
export CADENCE_DB_BACKUP=true
# Logging configuration
export CADENCE_LOG_LEVEL="DEBUG"
export CADENCE_LOG_FILE="/path/to/cadence.log"
# Performance tuning
export CADENCE_TIMEOUT=60
export CADENCE_MAX_WORKERS=8
export CADENCE_MEMORY_LIMIT="4GB"
# Development settings
export CADENCE_DEBUG=true
export CADENCE_PROFILE=true
Using .env Files
Create .env in project root:
# .env
GOOGLE_API_KEY=your-api-key-here
CADENCE_LOG_LEVEL=DEBUG
CADENCE_DB_PATH=./data/cadence.sqlite
CADENCE_MAX_WORKERS=4
Load automatically:
from dotenv import load_dotenv
load_dotenv()
Command Line Configuration
Basic Usage
# Override specific parameters
python main.py --generations 200 --population-size 30
# Use custom config file
python main.py --config experiments/config.json
# Set logging level
python main.py --log-level DEBUG
# Specify output directory
python main.py --output-dir ./results/experiment_1
Available Arguments
python main.py --help
Options:
--config PATH Configuration file path
--generations INTEGER Number of generations to run
--population-size INTEGER Population size
--task TEXT Task type (tsp, knapsack)
--cities INTEGER Number of cities for TSP
--output-dir PATH Output directory for results
--log-level TEXT Logging level (DEBUG, INFO, WARN, ERROR)
--parallel / --no-parallel Enable/disable parallel evaluation
--save-intermediate Save intermediate results
--resume PATH Resume from checkpoint
Configuration Loading
Programmatic Configuration
from src.config import Config
# Load from file
config = Config.from_file("config.json")
# Load from environment
config = Config.from_env()
# Combine sources
config = Config()
config.load_file("config.json")
config.load_env()
config.update_from_args(args)
# Access configuration
print(config.evolution.population_size)
print(config.llm.temperature)
Dynamic Configuration
# Update during runtime
config.evolution.population_size = 50
config.llm.temperature = 0.5
# Conditional configuration
if config.debug:
config.logging.level = "DEBUG"
config.evaluation.parallel = False
Advanced Configuration
Profile-Based Configuration
Create different profiles for different environments:
{
"profiles": {
"development": {
"evolution": {"generations": 10, "population_size": 5},
"logging": {"level": "DEBUG"},
"evaluation": {"parallel": false}
},
"production": {
"evolution": {"generations": 200, "population_size": 50},
"logging": {"level": "INFO"},
"evaluation": {"parallel": true, "max_workers": 16}
},
"research": {
"evolution": {"generations": 1000, "population_size": 100},
"logging": {"level": "INFO"},
"evaluation": {"num_seeds": 50}
}
}
}
Usage:
python main.py --profile production
Conditional Configuration
{
"evolution": {
"population_size": "${CADENCE_POPULATION_SIZE:20}",
"generations": "${CADENCE_GENERATIONS:100}"
},
"database": {
"path": "${CADENCE_DB_PATH:./cadence_db.sqlite}"
}
}
Configuration Validation
from src.config import ConfigValidator
validator = ConfigValidator()
# Validate configuration
errors = validator.validate(config)
if errors:
for error in errors:
print(f"Configuration error: {error}")
exit(1)
# Validate specific sections
validator.validate_evolution_config(config.evolution)
validator.validate_llm_config(config.llm)
Performance Tuning
CPU-Intensive Tasks
{
"evaluation": {
"parallel": true,
"max_workers": null, // Use all available cores
"chunk_size": 10,
"timeout": 60
}
}
Memory-Constrained Environments
{
"evolution": {
"population_size": 10, // Smaller population
"batch_size": 5 // Process in batches
},
"database": {
"lazy_loading": true, // Load data on demand
"compression": true // Compress stored data
}
}
High-Throughput Settings
{
"llm": {
"batch_requests": true,
"request_pooling": 10,
"cache_responses": true
},
"evaluation": {
"parallel": true,
"max_workers": 20,
"async_evaluation": true
}
}
Deployment Configuration
Docker Configuration
# Environment variables in Dockerfile
ENV GOOGLE_API_KEY=""
ENV CADENCE_LOG_LEVEL="INFO"
ENV CADENCE_DB_PATH="/data/cadence.sqlite"
ENV CADENCE_MAX_WORKERS="4"
# Copy configuration
COPY config/production.json /app/config.json
Kubernetes Configuration
apiVersion: v1
kind: ConfigMap
metadata:
name: cadence-config
data:
config.json: |
{
"evolution": {
"population_size": 20,
"generations": 100
},
"database": {
"path": "/data/cadence.sqlite"
}
}
---
apiVersion: v1
kind: Secret
metadata:
name: cadence-secrets
type: Opaque
stringData:
google-api-key: "your-api-key-here"
Cloud Configuration
{
"cloud": {
"provider": "aws",
"storage": {
"bucket": "cadence-results",
"region": "us-west-2"
},
"compute": {
"instance_type": "c5.2xlarge",
"auto_scaling": true
}
},
"monitoring": {
"cloudwatch": true,
"metrics_interval": 60
}
}
Configuration Best Practices
Security
# Never commit API keys
echo "*.env" >> .gitignore
echo "config/secrets.json" >> .gitignore
# Use environment variables for secrets
export GOOGLE_API_KEY=$(cat /path/to/secure/api-key)
# Rotate keys regularly
export GOOGLE_API_KEY_BACKUP="old-key-for-transition"
Organization
config/
├── base.json # Common settings
├── development.json # Dev overrides
├── production.json # Prod settings
├── testing.json # Test configuration
└── experiments/
├── tsp_study.json
└── algorithm_comparison.json
Documentation
{
"_comments": {
"population_size": "Number of programs in each generation",
"generations": "Total generations to run",
"temperature": "LLM creativity parameter (0.0-1.0)"
},
"evolution": {
"population_size": 20,
"generations": 100
}
}
Validation
# config_schema.json
{
"type": "object",
"properties": {
"evolution": {
"type": "object",
"properties": {
"population_size": {"type": "integer", "minimum": 1},
"generations": {"type": "integer", "minimum": 1}
},
"required": ["population_size", "generations"]
}
},
"required": ["evolution"]
}
Troubleshooting
Common Issues
Configuration not loading:
# Check file path
ls -la config.json
# Validate JSON syntax
python -m json.tool config.json
Environment variables not found:
# Check variables are set
env | grep CADENCE
# Load from .env file
python -c "import os; from dotenv import load_dotenv; load_dotenv(); print(os.getenv('GOOGLE_API_KEY'))"
Permission errors:
# Check file permissions
ls -la cadence_db.sqlite
# Fix permissions
chmod 664 cadence_db.sqlite
Debug Configuration
# Print effective configuration
from src.config import Config
config = Config.load()
print(config.to_dict())
# Trace configuration sources
print(config.get_source("evolution.population_size"))
# Output: "environment variable CADENCE_POPULATION_SIZE"
Hydra Configuration
Cadence scripts use Hydra instead of JSON by default. See conf/h1_config.yaml and conf/h2_config.yaml for examples.
# conf/h1_config.yaml
SEEDS: 10
GENERATIONS: 20
LESSON_INTERVAL: 4
API_MAX_RETRIES: 2
API_TIMEOUT: 60
hydra:
run:
dir: .
output:
subdir: null
Override YAML values at runtime:
python run_h1_experiment.py SEEDS=5 GENERATIONS=50
To create new Hydra configs, copy an existing file under conf/ and adjust parameters as needed.
Legacy JSON/ENV Configuration
Basic Configuration
Create config.json in the project root:
{
"evolution": {
"population_size": 20,
"generations": 100,
"elite_size": 2,
"tournament_size": 3,
"mutation_rate": 0.8,
"stagnation_threshold": 10
},
"llm": {
"provider": "google",
"model": "gemini-pro",
"temperature": 0.7,
"max_tokens": 2048,
"timeout": 30
},
"evaluation": {
"num_seeds": 10,
"timeout": 30,
"parallel": true,
"max_workers": 4
},
"database": {
"path": "cadence_db.sqlite",
"backup_interval": 100
},
"logging": {
"level": "INFO",
"format": "%(asctime)s - %(name)s - %(levelname)s - %(message)s",
"file": "cadence.log"
}
}
Task-Specific Configuration
{
"tasks": {
"tsp": {
"n_cities": 20,
"distance_metric": "euclidean",
"constraint_type": "standard"
},
"knapsack": {
"n_items": 50,
"capacity": 100,
"item_generation": "uniform"
}
}
}
Experiment Configuration
{
"experiment": {
"name": "tsp_comparison_study",
"description": "Compare different prompt strategies",
"runs": 10,
"save_intermediate": true,
"metrics": ["cost", "diversity", "convergence_time"],
"conditions": [
{
"name": "baseline",
"instructions": "Improve the TSP solution",
"temperature": 0.7
},
{
"name": "detailed",
"instructions": "Focus on algorithmic improvements and edge cases",
"temperature": 0.5
}
]
}
}
Required Variables
# LLM API credentials
export GOOGLE_API_KEY="your-gemini-api-key"
# Optional: Alternative providers
export OPENAI_API_KEY="your-openai-api-key"
Optional Variables
# Database configuration
export CADENCE_DB_PATH="/path/to/database.sqlite"
export CADENCE_DB_BACKUP=true
# Logging configuration
export CADENCE_LOG_LEVEL="DEBUG"
export CADENCE_LOG_FILE="/path/to/cadence.log"
# Performance tuning
export CADENCE_TIMEOUT=60
export CADENCE_MAX_WORKERS=8
export CADENCE_MEMORY_LIMIT="4GB"
# Development settings
export CADENCE_DEBUG=true
export CADENCE_PROFILE=true
Using .env Files
Create .env in project root:
# .env
GOOGLE_API_KEY=your-api-key-here
CADENCE_LOG_LEVEL=DEBUG
CADENCE_DB_PATH=./data/cadence.sqlite
CADENCE_MAX_WORKERS=4
Load automatically:
from dotenv import load_dotenv
load_dotenv()
Command Line Configuration
Basic Usage
# Override specific parameters
python main.py --generations 200 --population-size 30
# Use custom config file
python main.py --config experiments/config.json
# Set logging level
python main.py --log-level DEBUG
# Specify output directory
python main.py --output-dir ./results/experiment_1
Available Arguments
python main.py --help
Options:
--config PATH Configuration file path
--generations INTEGER Number of generations to run
--population-size INTEGER Population size
--task TEXT Task type (tsp, knapsack)
--cities INTEGER Number of cities for TSP
--output-dir PATH Output directory for results
--log-level TEXT Logging level (DEBUG, INFO, WARN, ERROR)
--parallel / --no-parallel Enable/disable parallel evaluation
--save-intermediate Save intermediate results
--resume PATH Resume from checkpoint
Configuration Loading
Programmatic Configuration
from src.config import Config
# Load from file
config = Config.from_file("config.json")
# Load from environment
config = Config.from_env()
# Combine sources
config = Config()
config.load_file("config.json")
config.load_env()
config.update_from_args(args)
# Access configuration
print(config.evolution.population_size)
print(config.llm.temperature)
Dynamic Configuration
# Update during runtime
config.evolution.population_size = 50
config.llm.temperature = 0.5
# Conditional configuration
if config.debug:
config.logging.level = "DEBUG"
config.evaluation.parallel = False
Advanced Configuration
Profile-Based Configuration
Create different profiles for different environments:
{
"profiles": {
"development": {
"evolution": {"generations": 10, "population_size": 5},
"logging": {"level": "DEBUG"},
"evaluation": {"parallel": false}
},
"production": {
"evolution": {"generations": 200, "population_size": 50},
"logging": {"level": "INFO"},
"evaluation": {"parallel": true, "max_workers": 16}
},
"research": {
"evolution": {"generations": 1000, "population_size": 100},
"logging": {"level": "INFO"},
"evaluation": {"num_seeds": 50}
}
}
}
Usage:
python main.py --profile production
Conditional Configuration
{
"evolution": {
"population_size": "${CADENCE_POPULATION_SIZE:20}",
"generations": "${CADENCE_GENERATIONS:100}"
},
"database": {
"path": "${CADENCE_DB_PATH:./cadence_db.sqlite}"
}
}
Configuration Validation
from src.config import ConfigValidator
validator = ConfigValidator()
# Validate configuration
errors = validator.validate(config)
if errors:
for error in errors:
print(f"Configuration error: {error}")
exit(1)
# Validate specific sections
validator.validate_evolution_config(config.evolution)
validator.validate_llm_config(config.llm)
Performance Tuning
CPU-Intensive Tasks
{
"evaluation": {
"parallel": true,
"max_workers": null, // Use all available cores
"chunk_size": 10,
"timeout": 60
}
}
Memory-Constrained Environments
{
"evolution": {
"population_size": 10, // Smaller population
"batch_size": 5 // Process in batches
},
"database": {
"lazy_loading": true, // Load data on demand
"compression": true // Compress stored data
}
}
High-Throughput Settings
{
"llm": {
"batch_requests": true,
"request_pooling": 10,
"cache_responses": true
},
"evaluation": {
"parallel": true,
"max_workers": 20,
"async_evaluation": true
}
}
Deployment Configuration
Docker Configuration
# Environment variables in Dockerfile
ENV GOOGLE_API_KEY=""
ENV CADENCE_LOG_LEVEL="INFO"
ENV CADENCE_DB_PATH="/data/cadence.sqlite"
ENV CADENCE_MAX_WORKERS="4"
# Copy configuration
COPY config/production.json /app/config.json
Kubernetes Configuration
apiVersion: v1
kind: ConfigMap
metadata:
name: cadence-config
data:
config.json: |
{
"evolution": {
"population_size": 20,
"generations": 100
},
"database": {
"path": "/data/cadence.sqlite"
}
}
---
apiVersion: v1
kind: Secret
metadata:
name: cadence-secrets
type: Opaque
stringData:
google-api-key: "your-api-key-here"
Cloud Configuration
{
"cloud": {
"provider": "aws",
"storage": {
"bucket": "cadence-results",
"region": "us-west-2"
},
"compute": {
"instance_type": "c5.2xlarge",
"auto_scaling": true
}
},
"monitoring": {
"cloudwatch": true,
"metrics_interval": 60
}
}
Configuration Best Practices
Security
# Never commit API keys
echo "*.env" >> .gitignore
echo "config/secrets.json" >> .gitignore
# Use environment variables for secrets
export GOOGLE_API_KEY=$(cat /path/to/secure/api-key)
# Rotate keys regularly
export GOOGLE_API_KEY_BACKUP="old-key-for-transition"
Organization
config/
├── base.json # Common settings
├── development.json # Dev overrides
├── production.json # Prod settings
├── testing.json # Test configuration
└── experiments/
├── tsp_study.json
└── algorithm_comparison.json
Documentation
{
"_comments": {
"population_size": "Number of programs in each generation",
"generations": "Total generations to run",
"temperature": "LLM creativity parameter (0.0-1.0)"
},
"evolution": {
"population_size": 20,
"generations": 100
}
}
Validation
# config_schema.json
{
"type": "object",
"properties": {
"evolution": {
"type": "object",
"properties": {
"population_size": {"type": "integer", "minimum": 1},
"generations": {"type": "integer", "minimum": 1}
},
"required": ["population_size", "generations"]
}
},
"required": ["evolution"]
}
Troubleshooting
Common Issues
Configuration not loading:
# Check file path
ls -la config.json
# Validate JSON syntax
python -m json.tool config.json
Environment variables not found:
# Check variables are set
env | grep CADENCE
# Load from .env file
python -c "import os; from dotenv import load_dotenv; load_dotenv(); print(os.getenv('GOOGLE_API_KEY'))"
Permission errors:
# Check file permissions
ls -la cadence_db.sqlite
# Fix permissions
chmod 664 cadence_db.sqlite
Debug Configuration
# Print effective configuration
from src.config import Config
config = Config.load()
print(config.to_dict())
# Trace configuration sources
print(config.get_source("evolution.population_size"))
# Output: "environment variable CADENCE_POPULATION_SIZE"
Hydra Configuration
Cadence scripts use Hydra instead of JSON by default. See conf/h1_config.yaml and conf/h2_config.yaml for examples.
# conf/h1_config.yaml
SEEDS: 10
GENERATIONS: 20
LESSON_INTERVAL: 4
API_MAX_RETRIES: 2
API_TIMEOUT: 60
hydra:
run:
dir: .
output:
subdir: null
Override YAML values at runtime:
python run_h1_experiment.py SEEDS=5 GENERATIONS=50
To create new Hydra configs, copy an existing file under conf/ and adjust parameters as needed.
Legacy JSON/ENV Configuration
Basic Configuration
Create config.json in the project root:
{
"evolution": {
"population_size": 20,
"generations": 100,
"elite_size": 2,
"tournament_size": 3,
"mutation_rate": 0.8,
"stagnation_threshold": 10
},
"llm": {
"provider": "google",
"model": "gemini-pro",
"temperature": 0.7,
"max_tokens": 2048,
"timeout": 30
},
"evaluation": {
"num_seeds": 10,
"timeout": 30,
"parallel": true,
"max_workers": 4
},
"database": {
"path": "cadence_db.sqlite",
"backup_interval": 100
},
"logging": {
"level": "INFO",
"format": "%(asctime)s - %(name)s - %(levelname)s - %(message)s",
"file": "cadence.log"
}
}
Task-Specific Configuration
{
"tasks": {
"tsp": {
"n_cities": 20,
"distance_metric": "euclidean",
"constraint_type": "standard"
},
"knapsack": {
"n_items": 50,
"capacity": 100,
"item_generation": "uniform"
}
}
}
Experiment Configuration
{
"experiment": {
"name": "tsp_comparison_study",
"description": "Compare different prompt strategies",
"runs": 10,
"save_intermediate": true,
"metrics": ["cost", "diversity", "convergence_time"],
"conditions": [
{
"name": "baseline",
"instructions": "Improve the TSP solution",
"temperature": 0.7
},
{
"name": "detailed",
"instructions": "Focus on algorithmic improvements and edge cases",
"temperature": 0.5
}
]
}
}
Required Variables
# LLM API credentials
export GOOGLE_API_KEY="your-gemini-api-key"
# Optional: Alternative providers
export OPENAI_API_KEY="your-openai-api-key"
Optional Variables
# Database configuration
export CADENCE_DB_PATH="/path/to/database.sqlite"
export CADENCE_DB_BACKUP=true
# Logging configuration
export CADENCE_LOG_LEVEL="DEBUG"
export CADENCE_LOG_FILE="/path/to/cadence.log"
# Performance tuning
export CADENCE_TIMEOUT=60
export CADENCE_MAX_WORKERS=8
export CADENCE_MEMORY_LIMIT="4GB"
# Development settings
export CADENCE_DEBUG=true
export CADENCE_PROFILE=true
Using .env Files
Create .env in project root:
# .env
GOOGLE_API_KEY=your-api-key-here
CADENCE_LOG_LEVEL=DEBUG
CADENCE_DB_PATH=./data/cadence.sqlite
CADENCE_MAX_WORKERS=4
Load automatically:
from dotenv import load_dotenv
load_dotenv()
Command Line Configuration
Basic Usage
# Override specific parameters
python main.py --generations 200 --population-size 30
# Use custom config file
python main.py --config experiments/config.json
# Set logging level
python main.py --log-level DEBUG
# Specify output directory
python main.py --output-dir ./results/experiment_1
Available Arguments
python main.py --help
Options:
--config PATH Configuration file path
--generations INTEGER Number of generations to run
--population-size INTEGER Population size
--task TEXT Task type (tsp, knapsack)
--cities INTEGER Number of cities for TSP
--output-dir PATH Output directory for results
--log-level TEXT Logging level (DEBUG, INFO, WARN, ERROR)
--parallel / --no-parallel Enable/disable parallel evaluation
--save-intermediate Save intermediate results
--resume PATH Resume from checkpoint
Configuration Loading
Programmatic Configuration
from src.config import Config
# Load from file
config = Config.from_file("config.json")
# Load from environment
config = Config.from_env()
# Combine sources
config = Config()
config.load_file("config.json")
config.load_env()
config.update_from_args(args)
# Access configuration
print(config.evolution.population_size)
print(config.llm.temperature)
Dynamic Configuration
# Update during runtime
config.evolution.population_size = 50
config.llm.temperature = 0.5
# Conditional configuration
if config.debug:
config.logging.level = "DEBUG"
config.evaluation.parallel = False
Advanced Configuration
Profile-Based Configuration
Create different profiles for different environments:
{
"profiles": {
"development": {
"evolution": {"generations": 10, "population_size": 5},
"logging": {"level": "DEBUG"},
"evaluation": {"parallel": false}
},
"production": {
"evolution": {"generations": 200, "population_size": 50},
"logging": {"level": "INFO"},
"evaluation": {"parallel": true, "max_workers": 16}
},
"research": {
"evolution": {"generations": 1000, "population_size": 100},
"logging": {"level": "INFO"},
"evaluation": {"num_seeds": 50}
}
}
}
Usage:
python main.py --profile production
Conditional Configuration
{
"evolution": {
"population_size": "${CADENCE_POPULATION_SIZE:20}",
"generations": "${CADENCE_GENERATIONS:100}"
},
"database": {
"path": "${CADENCE_DB_PATH:./cadence_db.sqlite}"
}
}
Configuration Validation
from src.config import ConfigValidator
validator = ConfigValidator()
# Validate configuration
errors = validator.validate(config)
if errors:
for error in errors:
print(f"Configuration error: {error}")
exit(1)
# Validate specific sections
validator.validate_evolution_config(config.evolution)
validator.validate_llm_config(config.llm)
Performance Tuning
CPU-Intensive Tasks
{
"evaluation": {
"parallel": true,
"max_workers": null, // Use all available cores
"chunk_size": 10,
"timeout": 60
}
}
Memory-Constrained Environments
{
"evolution": {
"population_size": 10, // Smaller population
"batch_size": 5 // Process in batches
},
"database": {
"lazy_loading": true, // Load data on demand
"compression": true // Compress stored data
}
}
High-Throughput Settings
{
"llm": {
"batch_requests": true,
"request_pooling": 10,
"cache_responses": true
},
"evaluation": {
"parallel": true,
"max_workers": 20,
"async_evaluation": true
}
}
Deployment Configuration
Docker Configuration
# Environment variables in Dockerfile
ENV GOOGLE_API_KEY=""
ENV CADENCE_LOG_LEVEL="INFO"
ENV CADENCE_DB_PATH="/data/cadence.sqlite"
ENV CADENCE_MAX_WORKERS="4"
# Copy configuration
COPY config/production.json /app/config.json
Kubernetes Configuration
apiVersion: v1
kind: ConfigMap
metadata:
name: cadence-config
data:
config.json: |
{
"evolution": {
"population_size": 20,
"generations": 100
},
"database": {
"path": "/data/cadence.sqlite"
}
}
---
apiVersion: v1
kind: Secret
metadata:
name: cadence-secrets
type: Opaque
stringData:
google-api-key: "your-api-key-here"
Cloud Configuration
{
"cloud": {
"provider": "aws",
"storage": {
"bucket": "cadence-results",
"region": "us-west-2"
},
"compute": {
"instance_type": "c5.2xlarge",
"auto_scaling": true
}
},
"monitoring": {
"cloudwatch": true,
"metrics_interval": 60
}
}
Configuration Best Practices
Security
# Never commit API keys
echo "*.env" >> .gitignore
echo "config/secrets.json" >> .gitignore
# Use environment variables for secrets
export GOOGLE_API_KEY=$(cat /path/to/secure/api-key)
# Rotate keys regularly
export GOOGLE_API_KEY_BACKUP="old-key-for-transition"
Organization
config/
├── base.json # Common settings
├── development.json # Dev overrides
├── production.json # Prod settings
├── testing.json # Test configuration
└── experiments/
├── tsp_study.json
└── algorithm_comparison.json
Documentation
{
"_comments": {
"population_size": "Number of programs in each generation",
"generations": "Total generations to run",
"temperature": "LLM creativity parameter (0.0-1.0)"
},
"evolution": {
"population_size": 20,
"generations": 100
}
}
Validation
# config_schema.json
{
"type": "object",
"properties": {
"evolution": {
"type": "object",
"properties": {
"population_size": {"type": "integer", "minimum": 1},
"generations": {"type": "integer", "minimum": 1}
},
"required": ["population_size", "generations"]
}
},
"required": ["evolution"]
}
Troubleshooting
Common Issues
Configuration not loading:
# Check file path
ls -la config.json
# Validate JSON syntax
python -m json.tool config.json
Environment variables not found:
# Check variables are set
env | grep CADENCE
# Load from .env file
python -c "import os; from dotenv import load_dotenv; load_dotenv(); print(os.getenv('GOOGLE_API_KEY'))"
Permission errors:
# Check file permissions
ls -la cadence_db.sqlite
# Fix permissions
chmod 664 cadence_db.sqlite
Debug Configuration
# Print effective configuration
from src.config import Config
config = Config.load()
print(config.to_dict())
# Trace configuration sources
print(config.get_source("evolution.population_size"))
# Output: "environment variable CADENCE_POPULATION_SIZE"