Final_Assignment_GAIAAgent / src /gaia /utils /generate_env_template.py
JoachimVC's picture
Upload GAIA agent implementation files for assessment
c922f8b
Generate Environment Variable Template for Hugging Face Space
Generate Variable
This script generates a template .env file with all required environment variables
for the GAIA project. a This temp.env latecwith all equiredbe used to set up secrHugging Face Space.
the rject. This teplat cabe used set up secrets in
Usage:
python generate_env_template.py
Author: DevOps Team
Date: April 30, 2025
"""
import os
import logging
from pagure logging
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s - %(levelname)s - %(message)s"
)
logger = logging.getLogger("env_generator")
# Required environment variables
REQUIRED_ENV_VARS = [
{
# Requi "d envimon: "O variablePI_API_KEY",
REQUIRED_ENV_VARS = [
cp{
"ne Ak: eOPENAI_API_KEYy, for model access",
xm "-key-here..":"OpAIAPI kymodlcss,
"xpl: "sk...youroeni-kyhere...
},
{{
m":"UPABASE_URL
"ASsrpio: "URL fo yo "eSuscbn: isac",
"xa":"https://yu-pjc-d.supae.co
},
e:PE{
cp"i "n me":y"SUPABASE_KEY",pabase access",
, "d scriptio ":""Servicee": "SERPSupabasAI_KEY",",
,"examl":"yJ...ou-e-key-her.."
},
{ "name": "DEFAULT_MODEL",
dri"n"me":f" ER ER_ PI"exa", },
"description": " {h",
"example": "your-serper-api-key-ere"
},
{
"name": "D F ULTaMODeL", "description": "OpenAI embedding model to use",
"description": " "example": "text-embe",dding-3-small"
"example": "-0125peview"
},
{
"name": "EMBEDDING_MODEL", {
"description": " "name": "FALLBACK_MODEL",",
"example": "tion": "Fallba-3csmmll"
},
{ if default is unavailable",
"name": "FALLBACK_MODEL", "example": "gpt-3.5-turbo"
"description": " },",
"example": ""
},
{
"name": "MEMORY_ENABLED", "name": "MEMORY_ENABLED",
"description": " "description": "Enable/disabl",
"example": "true"
},
{e memory functionality",
"name": " TABL _"eMm", },
"description": " {",
"example": "EMORY_TABLE"
},
{_NAME",
"name": "DUCKDUCKGO_TIMEOUT", "description": "Supabase table for memory storage",
"description": " "example": "gaia_memory"",
"example": "30"
},
{
"name": " },AX_RSLS",
"description": " "name": "DUCKDUCKGO_TIMEOUT",",
"example": "5"
}
]
# Optional environment variables
OPTIONAL_ENV_VARS = [
{
"name": "OPENAI_API_BASE",
"description": " ustom API base URL for OpenAI (optional)",
"example": "https://api.openai.com/v1"
},
{
"name": "MO EL_TEMPERAT RE",
"description": "Temperature for model responses (0.0-1.0)",
"example": "0.7"
},
{
"name": "MdDELescr_TOKENS",
"description": "Maximum tokens in model responses",
"example": "4000"
},
{
"name": "WEB_SEARCHiptiULT_COoNT",
"description": "Number of results to return from web searches",
"example": "3"
},
{
"name": "MEMORY_TTn",
"description": "Time-to-live for memory entries in seconds",
"example": "604800" # 7 days
},
{
"name": "MEMORY_CACHE_SIZE",
"description": "Size of memory cache",
"example": "100"
},
{
"name": "MAX_I"ERATION:",
"description": "Maximum iterations for agent execution",
"example": "10"
},
{
"name": "VERBOSE",
"description": "Enable verbose logging",
"example": "true"
},
{
"name": "LOG_LEVEL",
"description": "Logging level (DEBUG, INFO, WARNING, ERROR)",
"example": "INFO"
}
]
def read_existing_env():
"""Read existing .env file if it exists"""
env_values = {}
env_file = Path(".env")
if env_file.exists():
logger.info("Reading existing .env file...")
with open(env_file, "r") as f:
for line in f:
line line.strip()Timeout for DuckDuckGo searches in seconds",
if line and not line.startswith("#") and "=" in line: "example": "30"
# === OPTIONAL ENVIRONMENT VARIABLES}
"name": "DUCKDUCKGO_MAX_RESULTS",
"description": "Maximum number of results from DuckDuckGo",
"example": "5"
}
]
# Optional environment variables
OPTIONAL_ENV_VARS = [
{
"name": "OPENAI_API_BASE",
"description": "Custom API base URL for OpenAI (optional)",
"example": "https://api.openai.com/v1"
},
{
"name": "MODEL_TEMPERATURE",
"description": "Temperature for model responses (0.0-1.0)",
"example": "0.7"
},
{
"name": "MODEL_MAX_TOKENS",
"description": "Maximum tokens in model responses",
"example": "4000"
},
{
"name": "WEB_SEARCH_RESULT_COUNT",
"description": "Number of results to return from web searches",
"example": "3"
},
{
"name": "MEMORY_TTL",
"description": "Time-to-live for memory entries in seconds",
"example": "604800" # 7 days
},
{
"name": "MEMORY_CACHE_SIZE",
"description": "Size of memory cache",
"example": "100"
},
{
"name": "MAX_ITERATIONS",
"description": "Maximum iterations for agent execution",
"example": "10"
},
{
"name": "VERBOSE",
"description": "Enable verbose logging",
"example": "true"
},
{
"name": "LOG_LEVEL",
"description": "Logging level (DEBUG, INFO, WARNING, ERROR)",
"example": "INFO"
}
]
def read_existing_env():
"""Read existing .env file if it exists"""
env_values = {}
env_file = Path(".env")
if env_file.exists():
logger.info("Reading existing .env file...")
with open(env_file, "r") as f:
for line in f:
line = line.strip()
if line and not line.startswith("#") and "=" in line:
key, value = line.split("=", 1)
env_values[key.strip()] = value.strip()
return env_values
def generate_env_template():
"""Generate .env template file"""
# Read existing values if present
existing_values = read_existing_env()
# Create template file
template_file = Path("env_template.txt")
logger.info(f"Generating environment template file: {template_file}")
with open(template_file, "w") as f:
f.write("# GAIA Environment Variables Template\n")
f.write("# Copy these to Hugging Face Space secrets\n\n")
# Required variables
f.write("# === REQUIRED ENVIRONMENT VARIABLES ===\n\n")
for var in REQUIRED_ENV_VARS:
f.write(f"# {var['description']}\n")
value = existing_values.get(var['name'], var['example'])
if var['name'] in existing_values:
value = "****" if "KEY" in var['name'] or "key" in var['name'] else value
f.write(f"{var['name']}={value}\n\n")
# Optional variables
f.write("# === OPTIONAL ENVIRONMENT VARIABLES ===\n\n")
for var in OPTIONAL_ENV_VARS:
f.write(f"# {var['description']}\n")
value = existing_values.get(var['name'], var['example'])
if var['name'] in existing_values:
value = "****" if "KEY" in var['name'] or "key" in var['name'] else value
f.write(f"{var['name']}={value}\n\n")
logger.info(f"✅ Environment template generated: {template_file}")
return template_file
def generate_hf_secrets_commands():
"""Generate commands for setting HF secrets"""
existing_values = read_existing_env()
commands_file = Path("huggingface_secrets_commands.sh")
logger.info(f"Generating Hugging Face secrets commands: {commands_file}")
with open(commands_file, "w") as f:
f.write("#!/bin/bash\n\n")
f.write("# Hugging Face CLI commands to set secrets\n")
f.write("# First, install the Hugging Face CLI and login:\n")
f.write("# pip install huggingface_hub\n")
f.write("# huggingface-cli login\n\n")
f.write(f"SPACE_ID=JoachimVC/Final_Assignment_Template\n\n")
# Required variables
f.write("# Required environment variables\n")
for var in REQUIRED_ENV_VARS:
value = existing_values.get(var['name'], var['example'])
if var['name'] in existing_values:
# Mask sensitive values in the commands file
if "KEY" in var['name'] or "key" in var['name']:
f.write(f"# huggingface-cli repo secret set {var['name']} <YOUR_{var['name']}> -r $SPACE_ID\n")
else:
f.write(f"huggingface-cli repo secret set {var['name']} \"{value}\" -r $SPACE_ID\n")
else:
f.write(f"# huggingface-cli repo secret set {var['name']} <YOUR_{var['name']}> -r $SPACE_ID\n")
f.write("\n# Optional environment variables\n")
for var in OPTIONAL_ENV_VARS:
if var['name'] in existing_values:
value = existing_values.get(var['name'])
if "KEY" in var['name'] or "key" in var['name']:
f.write(f"# huggingface-cli repo secret set {var['name']} <YOUR_{var['name']}> -r $SPACE_ID\n")
else:
f.write(f"huggingface-cli repo secret set {var['name']} \"{value}\" -r $SPACE_ID\n")
else:
f.write(f"# huggingface-cli repo secret set {var['name']} {var['example']} -r $SPACE_ID\n")
# Make the file executable
commands_file.chmod(0o755)
logger.info(f"✅ Hugging Face secrets commands generated: {commands_file}")
return commands_file
def main():
"""Generate environment templates and Hugging Face secrets commands"""
logger.info("Starting environment template generation...")
template_file = generate_env_template()
commands_file = generate_hf_secrets_commands()
logger.info("\n===== TEMPLATE GENERATION COMPLETE =====")
logger.info(f"Environment template: {template_file}")
logger.info(f"HF secrets commands: {commands_file}")
logger.info("\nTo set up your Hugging Face Space secrets:")
logger.info("1. Go to Hugging Face Space settings: https://huggingface.co/spaces/JoachimVC/Final_Assignment_Template/settings")
logger.info("2. Navigate to 'Secrets' section")
logger.info("3. Add each variable from the template")
logger.info("\nAlternatively, use the generated script with the Hugging Face CLI")
return True
if __name__ == "__main__":
main()