import os import json from dotenv import load_dotenv # Load environment variables load_dotenv() # Try Loading Keys (Colab support) try: from google.colab import userdata COLAB_HF_TOKEN = userdata.get('HF_TOKEN') COLAB_GOOGLE_KEY = userdata.get('GOOGLE_API_KEY') COLAB_PINATA = userdata.get('PINATA_JWT') except (ImportError, Exception): COLAB_HF_TOKEN, COLAB_GOOGLE_KEY, COLAB_PINATA = None, None, None class AppConfig: # ========================================== # ⛓️ BLOCKCHAIN & WEB3 SECRETS # ========================================== PRIVATE_KEY = os.environ.get("PRIVATE_KEY") PURECHAIN_RPC_URL = os.environ.get("PURECHAIN_RPC_URL", "http://3.34.161.207:8548") PURECHAIN_CONTRACT_ADDRESS = os.environ.get("PURECHAIN_CONTRACT_ADDRESS") # Legacy Contract Addresses for History Recovery PURECHAIN_CONTRACT_ADDRESS_PUREVERSATION = os.environ.get("PURECHAIN_CONTRACT_ADDRESS_PUREVERSATION") or os.environ.get("PURECHAIN_CONTRACT_ADDRESS_PureVersation") PURECHAIN_CONTRACT_ADDRESS_PURECONVO = os.environ.get("PURECHAIN_CONTRACT_ADDRESS_PURECONVO") or os.environ.get("PURECHAIN_CONTRACT_ADDRESS_PureConvo") PURECHAIN_CONTRACT_ADDRESS_PUREIUUY = os.environ.get("PURECHAIN_CONTRACT_ADDRESS_PUREIUUY") or os.environ.get("PURECHAIN_CONTRACT_ADDRESS_PureIUUY", "0x0a735C97EBd5c645D6B641cBE976FDB26710bAdf") CHAIN_ID = int(os.environ.get("PURECHAIN_CHAIN_ID", 900520900520)) # ========================================== # 🧠 AI & CLOUD STORAGE SECRETS # ========================================== GOOGLE_API_KEY = os.environ.get("GOOGLE_API_KEY") PINATA_JWT = os.environ.get("PINATA_JWT") HF_TOKEN = os.environ.get("HF_TOKEN") GROQ_API_KEY = os.environ.get("GROQ_API_KEY") # ========================================== # 📂 DIRECTORY CONFIGURATION # ========================================== BASE_DIR = os.path.dirname(os.path.abspath(__file__)) DATASET_DIR = os.environ.get("DATASET_DIR", os.path.join(BASE_DIR, "IEDID")) PROFILES_DIR = os.environ.get("PROFILES_DIR", os.path.join(BASE_DIR, "lab_profiles")) # --- REPO SETTINGS --- HF_REPO_ID = "toecm/IEDID" @classmethod def setup_directories(cls): os.makedirs(cls.DATASET_DIR, exist_ok=True) os.makedirs(cls.PROFILES_DIR, exist_ok=True) print("📂 Directories Ready:") print(f" - {cls.DATASET_DIR}") print(f" - {cls.PROFILES_DIR}") # --- DYNAMIC ABI LOAD --- @property def CONTRACT_ABI(self): return AppConfig.get_dynamic_abi() @classmethod def get_dynamic_abi(cls): try: from src.dynamic_compiler import get_contract_interface abi, _ = get_contract_interface() return abi except Exception as e: print(f"⚠️ Dynamic ABI load failed: {e}") return [] # For backward compatibility where code uses AppConfig.CONTRACT_ABI directly # we can initialize it here: try: from src.dynamic_compiler import get_contract_interface AppConfig.CONTRACT_ABI, _ = get_contract_interface() except Exception as e: print(f"⚠️ Startup compilation failed: {e}") AppConfig.CONTRACT_ABI = []