FSO-Genesis-Space / fso_stabilizer.py
LOOFYYLO's picture
Upload folder using huggingface_hub
2c54126 verified
Raw
History Blame Contribute Delete
6.4 kB
import os
import sys
import subprocess
import asyncio
import hashlib
import json
import time
import inspect
import logging
import base64
import requests
from datetime import datetime
from typing import Dict, Any, Tuple, List
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', handlers=[logging.StreamHandler(sys.stdout)])
logger = logging.getLogger("FSO_SWARM")
class FSOTopology:
def __init__(self, m: int): self.m = m
def get_coords(self, lid: str) -> Tuple[int, int, int]:
h = int(hashlib.sha256(lid.encode()).hexdigest(), 16)
return (h % self.m, (h // self.m) % self.m, (h // (self.m**2)) % self.m)
class DirectConsumer:
def __init__(self, topo: FSOTopology):
self.topo = topo
self.global_registry = {}
self.logic_to_coords = {}
def auto_provision(self, package: str):
logger.info(f"[*] Provisioning {package}...")
try:
import importlib
module = importlib.import_module(package)
except ImportError:
subprocess.run([sys.executable, "-m", "pip", "install", package, "--quiet"])
importlib.invalidate_caches()
module = importlib.import_module(package)
count = 0
for name, obj in inspect.getmembers(module):
if inspect.isfunction(obj) or inspect.isbuiltin(obj):
fid = f"{package}.{name}"
coords = self.topo.get_coords(fid)
self.global_registry[coords] = fid
self.logic_to_coords[fid] = coords
count += 1
logger.info(f"[+] Anchored {count} units for {package}.")
def execute(self, fid: str, **kwargs):
coords = self.logic_to_coords.get(fid) or self.topo.get_coords(fid)
path = self.global_registry.get(coords) or fid
try:
import importlib
parts = path.split('.')
mod_name = ".".join(parts[:-1]) or 'builtins'
mod = importlib.import_module(mod_name)
func = getattr(mod, parts[-1])
return func(**kwargs) if callable(func) else func
except Exception as e: return f"EXEC_ERR: {e}"
class KaggleFSOWrapper:
def __init__(self, repo_url: str, m: int = 31):
parts = repo_url.replace(".git", "").split("/")
self.owner, self.name = parts[-2], parts[-1]
self.m = m
self.token = os.getenv("GITHUB_PAT")
self.api_base = f"https://api.github.com/repos/{self.owner}/{self.name}/contents"
def sync_file(self, filename: str, local_data: dict, mode: str = 'pull'):
if not self.token: return local_data
headers = {"Authorization": f"token {self.token}", "Accept": "application/vnd.github.v3+json"}
url = f"{self.api_base}/{filename}"
if mode == 'pull':
try:
res = requests.get(url, headers=headers)
if res.status_code == 200:
return json.loads(base64.b64decode(res.json()['content']).decode())
except: pass
return local_data
else:
try:
sha = None
curr = requests.get(url, headers=headers)
if curr.status_code == 200: sha = curr.json().get('sha')
data = {"message": f"FSO Sync {filename}: {datetime.now().isoformat()}", "content": base64.b64encode(json.dumps(local_data, indent=4).encode()).decode()}
if sha: data["sha"] = sha
requests.put(url, headers=headers, json=data)
except: pass
return local_data
class FSOTaskHub:
def __init__(self, m: int = 31):
self.m = m
self.tasks = []
def get_pending(self):
p = [t for t in self.tasks if t["status"] == "PENDING"]
p.sort(key=lambda x: (-x.get("priority", 1), x["created_at"]))
return p
def complete(self, tid: str, res: Any):
for t in self.tasks:
if t["id"] == tid:
t["status"], t["result"], t["completed_at"] = "COMPLETED", str(res), time.time()
break
async def main():
role = os.getenv("FSO_ROLE", "STABILIZER")
repo = "https://github.com/hichambedrani/Global-theorem-.git"
m = 31
wrapper = KaggleFSOWrapper(repo, m)
state = wrapper.sync_file("fso_manifold_state.json", {"registry": {}}, 'pull')
hub_data = wrapper.sync_file("fso_task_hub.json", [], 'pull')
topo = FSOTopology(m)
consumer = DirectConsumer(topo)
consumer.global_registry.update(state.get("registry", {}))
hub = FSOTaskHub(m)
hub.tasks = hub_data
end_time = time.time() + 3500
if role == "INGESTOR":
libs = ["transformers", "datasets", "torch", "numpy"]
for lib in libs:
consumer.auto_provision(lib)
await asyncio.sleep(1)
elif role == "EXECUTOR":
while time.time() < end_time:
# Poll remote hub every minute
hub.tasks = wrapper.sync_file("fso_task_hub.json", hub.tasks, 'pull')
pending = hub.get_pending()
if pending:
for task in pending:
logger.info(f"[*] Executing Task {task['id']}: {task['logic_id']}")
res = consumer.execute(task['logic_id'], **task['params'])
hub.complete(task['id'], res)
# Push hub update after each task
wrapper.sync_file("fso_task_hub.json", hub.tasks, 'push')
await asyncio.sleep(60)
elif role == "STABILIZER":
while time.time() < end_time:
state["registry"]["system.health"] = "OK"
state["registry"]["system.last_check"] = datetime.now().isoformat()
state["registry"].update({str(k): v for k, v in consumer.global_registry.items()})
wrapper.sync_file("fso_manifold_state.json", state, 'push')
await asyncio.sleep(300)
# Final Persist
state["registry"].update({str(k): v for k, v in consumer.global_registry.items()})
wrapper.sync_file("fso_manifold_state.json", state, 'push')
wrapper.sync_file("fso_task_hub.json", hub.tasks, 'push')
logger.info(f"--- FSO {role} CYCLE COMPLETE ---")
if __name__ == "__main__":
os.environ["GITHUB_PAT"] = "github_pat_11BKWH6MI0mIzqUWKHyxEX_KO92xoWx25JHq96tT4DK64FlhWr3gOO57S0XBmeg8bNS662LXRE85uyIE5"
asyncio.run(main())