Files
SIA/sia/config.py

127 lines
4.0 KiB
Python

from dataclasses import dataclass
from dotenv import load_dotenv
from pathlib import Path
from typing import Dict
import argparse
import os
import tomli as tomllib
@dataclass
class Config:
def __init__(self):
load_dotenv()
parser = argparse.ArgumentParser(description='SIA - Self Improving Agent')
# Core configuration
parser.add_argument(
'--system-prompt',
type=Path,
default=os.getenv('SIA_SYSTEM_PROMPT', '/root/sia/system_prompt.md'),
help='Path to the system prompt file (default: /root/sia/system_prompt.md, env: SIA_SYSTEM_PROMPT)'
)
parser.add_argument(
'--action-schema',
type=Path,
default=os.getenv('SIA_ACTION_SCHEMA', '/root/sia/action_schema.xsd'),
help='Path to the action schema file (default: /root/sia/action_schema.xsd, env: SIA_ACTION_SCHEMA)'
)
parser.add_argument(
'--iterations-dir',
type=Path,
default=os.getenv('SIA_ITERATIONS_DIR', '/root/data/iterations'),
help='Path to the directory for storing iterations (default: /root/data/iterations, env: SIA_ITERATIONS_DIR)'
)
parser.add_argument(
'--work-dir',
type=Path,
default=os.getenv('SIA_WORK_DIR', '/root/desktop'),
help='Path to the working directory (default: /root/desktop, env: SIA_WORK_DIR)'
)
# Web server configuration
parser.add_argument(
'--server',
action='store_true',
default=self._parse_bool_env('SIA_SERVER_ENABLED', False),
help='Enable web server for debugging and human feedback (env: SIA_SERVER_ENABLED)'
)
parser.add_argument(
'--host',
type=str,
default=os.getenv('SIA_SERVER_HOST', '0.0.0.0'),
help='Web server host (default: 0.0.0.0, env: SIA_SERVER_HOST)'
)
parser.add_argument(
'--port',
type=int,
default=int(os.getenv('SIA_SERVER_PORT', '8080')),
help='Web server port (default: 8080, env: SIA_SERVER_PORT)'
)
parser.add_argument(
'--static-files',
type=Path,
default=os.getenv('SIA_STATIC_FILES', '/root/static/'),
help='Path to static web files (default: /root/static/, env: SIA_STATIC_FILES)'
)
# LLM configuration
parser.add_argument(
'--llm-config',
type=Path,
default=os.getenv('SIA_LLM_CONFIG', '/root/sia/llm_config.toml'),
help='Path to TOML configuration file for LLMs (default: /root/sia/llm_config.toml, env: SIA_LLM_CONFIG)'
)
self.args = parser.parse_args()
with open(self.llm_config, "rb") as f:
self._llm_configs = tomllib.load(f)
def _parse_bool_env(self, env_var: str, default: bool) -> bool:
val = os.getenv(env_var)
if val is None:
return default
return val.lower() in ('true', '1', 'yes', 'on')
# Core properties
@property
def system_prompt(self) -> Path:
return self.args.system_prompt
@property
def action_schema(self) -> Path:
return self.args.action_schema
@property
def iterations_dir(self) -> Path:
return self.args.iterations_dir
@property
def work_dir(self) -> Path:
return self.args.work_dir
# Server properties
@property
def server(self) -> bool:
return self.args.server
@property
def host(self) -> str:
return self.args.host
@property
def port(self) -> int:
return self.args.port
@property
def static_files(self) -> Path:
return self.args.static_files
# LLM properties
@property
def llm_config(self) -> Path:
return self.args.llm_config
@property
def llms(self) -> Dict[str, str]:
"""Get only the enabled LLM configurations."""
return self._llm_configs