Spaces:
Sleeping
Sleeping
| import json | |
| import os | |
| from pathlib import Path | |
| from dotenv import load_dotenv | |
| BASE_DIR = Path(__file__).resolve().parent | |
| ROOT_DIR = BASE_DIR.parent | |
| # Load environment variables, checking both backend/ and project root | |
| if (BASE_DIR / ".env").exists(): | |
| load_dotenv(BASE_DIR / ".env") | |
| elif (ROOT_DIR / ".env").exists(): | |
| load_dotenv(ROOT_DIR / ".env") | |
| elif (ROOT_DIR / "default.env").exists(): | |
| load_dotenv(ROOT_DIR / "default.env") | |
| else: | |
| load_dotenv() # Fallback to standard search | |
| # Helper data for agent configuration | |
| _BUILT_IN_ROLES = ["INVESTIGATOR", "VALIDATOR", "FORENSIC_ANALYST", "NETWORK_ENGINEER", "SYSTEM_ADMIN", "SECURITY_ARCHITECT", "COMPLIANCE_OFFICER"] | |
| _DEFAULT_ROLES = ["INVESTIGATOR", "VALIDATOR", "FORENSIC_ANALYST", "NETWORK_ENGINEER"] | |
| def _build_agents_from_env(): | |
| import json | |
| agents = [] | |
| suffix_map = {'a': 0, 'b': 1, 'c': 2, 'd': 3, 'e': 4, 'f': 5, 'g': 6, 'h': 7, 'i': 8, 'j': 9} | |
| for suffix, idx in suffix_map.items(): | |
| model_key = f"AGENT_{suffix.upper()}_MODEL" | |
| provider_key = f"AGENT_{suffix.upper()}_PROVIDER" | |
| role_key = f"AGENT_{suffix.upper()}_ROLE" | |
| prompt_key = f"AGENT_{suffix.upper()}_SYSTEM_PROMPT" | |
| temp_key = f"AGENT_{suffix.upper()}_TEMPERATURE" | |
| model = os.getenv(model_key, "") | |
| if model: | |
| role_idx = idx % len(_DEFAULT_ROLES) | |
| agents.append({ | |
| "id": f"agent_{suffix}", | |
| "model": model, | |
| "provider": os.getenv(provider_key, "ollama"), | |
| "role": os.getenv(role_key, _DEFAULT_ROLES[role_idx]), | |
| "system_prompt": os.getenv(prompt_key, ""), | |
| "temperature": float(os.getenv(temp_key, str(0.7 - idx * 0.05))) | |
| }) | |
| if not agents: | |
| agents = [ | |
| { | |
| "id": "agent_a", | |
| "model": os.getenv("AGENT_A_MODEL", "meta-llama/Llama-3.1-8B-Instruct"), | |
| "provider": os.getenv("AGENT_A_PROVIDER", "hf"), | |
| "role": "INVESTIGATOR", | |
| "system_prompt": "", | |
| "temperature": 0.7 | |
| }, | |
| { | |
| "id": "agent_b", | |
| "model": os.getenv("AGENT_B_MODEL", "meta-llama/Llama-3.2-1B-Instruct"), | |
| "provider": os.getenv("AGENT_B_PROVIDER", "hf"), | |
| "role": "VALIDATOR", | |
| "system_prompt": "", | |
| "temperature": 0.6 | |
| } | |
| ] | |
| return agents | |
| class Settings: | |
| # OLLAMA | |
| OLLAMA_BASE_URL = os.getenv("OLLAMA_BASE_URL", "http://localhost:11434/v1") | |
| OLLAMA_API_KEY = os.getenv("OLLAMA_API_KEY", "ollama") | |
| # AGENTS (Dynamic N-Agent Support) | |
| try: | |
| AGENTS_JSON = os.getenv("AGENTS_JSON") | |
| AGENTS = json.loads(AGENTS_JSON) if AGENTS_JSON else _build_agents_from_env() | |
| except: | |
| AGENTS = _build_agents_from_env() | |
| # EXECUTION ENVIRONMENT | |
| EXECUTION_MODE = os.getenv("EXECUTION_MODE", "simulated") | |
| SSH_HOST = os.getenv("SSH_HOST", "") | |
| SSH_PORT = int(os.getenv("SSH_PORT", "22")) | |
| SSH_USER = os.getenv("SSH_USER", "") | |
| SSH_PASSWORD = os.getenv("SSH_PASSWORD", "") | |
| # HUGGINGFACE | |
| API_KEY = os.getenv("API_KEY", "ollama") | |
| OPENAI_API_KEY = os.getenv("OPENAI_API_KEY", "") | |
| HF_TOKEN = os.getenv("HF_TOKEN", "") | |
| HF_INFERENCE_URL = os.getenv("HF_INFERENCE_URL", "https://router.huggingface.co/v1") | |
| # OPENROUTER | |
| OPENROUTER_API_KEY = os.getenv("OPENROUTER_API_KEY", "") | |
| OPENROUTER_BASE_URL = os.getenv("OPENROUTER_BASE_URL", "https://openrouter.ai/api/v1") | |
| # SERVER | |
| HOST = os.getenv("HOST", "0.0.0.0") | |
| PORT = int(os.getenv("PORT", "7860")) | |
| DEBUG = os.getenv("DEBUG", "true").lower() in ("true", "1", "yes") | |
| ENVIRONMENT = os.getenv("ENVIRONMENT", "local") | |
| # EPISODE | |
| MAX_STEPS = int(os.getenv("MAX_STEPS", "1000")) | |
| MAX_EPISODE_TIME_SECONDS = int(os.getenv("MAX_EPISODE_TIME_SECONDS", "1200")) | |
| SUCCESS_SCORE_THRESHOLD = float(os.getenv("SUCCESS_SCORE_THRESHOLD", "0.5")) | |
| # MCP TOOL SERVER | |
| MCP_SERVER_PORT = int(os.getenv("MCP_SERVER_PORT", "8001")) | |
| MCP_SERVER_URL = os.getenv("MCP_SERVER_URL", "http://localhost:8001") | |
| # CUSTOM MODEL | |
| CUSTOM_MODEL_ENABLED = os.getenv("CUSTOM_MODEL_ENABLED", "false").lower() in ("true", "1", "yes") | |
| CUSTOM_MODEL_BASE_URL = os.getenv("CUSTOM_MODEL_BASE_URL", "") | |
| CUSTOM_MODEL_API_KEY = os.getenv("CUSTOM_MODEL_API_KEY", "") | |
| CUSTOM_MODEL_NAME = os.getenv("CUSTOM_MODEL_NAME", "") | |
| CUSTOM_MODEL_AGENT = os.getenv("CUSTOM_MODEL_AGENT", "") | |
| settings = Settings() | |