Spaces:
Running on Zero
Running on Zero
| from pydantic import BaseModel, Field | |
| import json | |
| import re | |
| from enum import Enum | |
| import os | |
| class HabitabilityStatus(str, Enum): | |
| STERILE = "STERILE" | |
| PREBIOTIC = "PREBIOTIC" | |
| HABITABLE = "HABITABLE" | |
| THRIVING = "THRIVING" | |
| class Era(str, Enum): | |
| PRIMORDIAL = "PRIMORDIAL" | |
| PRE_FORMATION = "PRE_FORMATION" | |
| HADEAN = "HADEAN" | |
| ARCHEAN = "ARCHEAN" | |
| PROTEROZOIC = "PROTEROZOIC" | |
| PALEOZOIC = "PALEOZOIC" | |
| MESOZOIC = "MESOZOIC" | |
| CENOZOIC = "CENOZOIC" | |
| ANTHROPOCENE = "ANTHROPOCENE" | |
| MICROBIAL = "MICROBIAL" | |
| COMPLEX_LIFE = "COMPLEX_LIFE" | |
| MEGAFAUNA = "MEGAFAUNA" | |
| PRIMATE = "PRIMATE" | |
| TRIBAL = "TRIBAL" | |
| ANCIENT_MEDIEVAL = "ANCIENT_MEDIEVAL" | |
| INDUSTRIAL = "INDUSTRIAL" | |
| MODERN = "MODERN" | |
| ADVANCED = "ADVANCED" | |
| class PlanetState(BaseModel): | |
| narrative: str = Field(default="The planet holds stable under observation.") | |
| metric_name: str = Field(default="Atmospheric Harmony") | |
| metric_value: float = Field(default=50.0) | |
| button_a_label: str = Field(default="Observe") | |
| button_b_label: str = Field(default="Analyze") | |
| planet_color_hex: str = Field(default="#1e7050") | |
| atmosphere_color_hex: str = Field(default="#40d0a0") | |
| population: int = Field(default=0) | |
| cloud_density: float = Field(default=0.0) | |
| storm_intensity: float = Field(default=0.0) | |
| lava_intensity: float = Field(default=0.0) | |
| ice_coverage: float = Field(default=0.0) | |
| vegetation: float = Field(default=0.0) | |
| ocean_level: float = Field(default=0.0) | |
| land_mass: float = Field(default=0.0) | |
| habitability: "HabitabilityStatus" = Field(default=HabitabilityStatus.STERILE) | |
| evolution_age: int = Field(default=0) | |
| tech_level: float = Field(default=0.0) | |
| civilization_scale: float = Field(default=0.0) | |
| biosphere_richness: float = Field(default=0.0) | |
| current_era: "Era" = Field(default=Era.PRIMORDIAL) | |
| entities: list = Field(default_factory=list) | |
| class PlanetStateDelta(BaseModel): | |
| lava_intensity: float = Field(default=None) | |
| ice_coverage: float = Field(default=None) | |
| planet_color_hex: str = Field(default=None) | |
| atmosphere_color_hex: str = Field(default=None) | |
| vegetation: float = Field(default=None) | |
| ocean_level: float = Field(default=None) | |
| land_mass: float = Field(default=None) | |
| cloud_density: float = Field(default=None) | |
| storm_intensity: float = Field(default=None) | |
| tech_level: float = Field(default=None) | |
| narrative: str = Field(description="Explain what happened. Put this string LAST.") | |
| def compute_era(age: int) -> tuple[str, float]: | |
| if age < 0: return ("PRE_FORMATION", 0.0) | |
| if age < 50_000_000: return ("HADEAN", 0.0) | |
| elif age < 150_000_000: return ("ARCHEAN", 0.0) | |
| elif age < 250_000_000: return ("PROTEROZOIC", 0.1) | |
| elif age < 350_000_000: return ("PALEOZOIC", 0.2) | |
| elif age < 450_000_000: return ("MESOZOIC", 0.3) | |
| elif age < 550_000_000: return ("CENOZOIC", 0.5) | |
| else: return ("ANTHROPOCENE", 1.0) | |
| def tick_planet(state: PlanetState, delta_t: float) -> PlanetState: | |
| return state | |
| def check_habitability(state: PlanetState) -> HabitabilityStatus: | |
| if state.lava_intensity > 0.6 or state.ice_coverage > 0.8: return HabitabilityStatus.STERILE | |
| elif state.ocean_level > 0.3 and state.vegetation < 0.1: return HabitabilityStatus.PREBIOTIC | |
| elif state.vegetation >= 0.1 and state.population < 1000: return HabitabilityStatus.HABITABLE | |
| else: return HabitabilityStatus.THRIVING | |
| # --- ZeroGPU Architecture Hook --- | |
| try: | |
| import spaces | |
| except ImportError: | |
| # Dummy mock for local CPU testing | |
| class spaces: | |
| def GPU(*args, **kwargs): | |
| if len(args) == 1 and callable(args[0]): return args[0] | |
| return lambda fn: fn | |
| from huggingface_hub import snapshot_download | |
| def init_llm(): | |
| """ | |
| Pre-downloads the model weights onto the CPU host's cache to completely | |
| avoid eating into the strict 60s ZeroGPU quota! | |
| """ | |
| print("[AeroSphere] Pre-flight CPU model download initiating...") | |
| snapshot_download("nvidia/Mistral-NeMo-Minitron-8B-Instruct", ignore_patterns=["*.msgpack", "*.h5", "*.ot", "*.safetensors.index.json"]) | |
| print("[AeroSphere] Pre-flight CPU model downloaded successfully!") | |
| llm_pipeline = None | |
| def infer_llm(messages: list) -> str: | |
| from transformers import pipeline | |
| import torch | |
| global llm_pipeline | |
| if llm_pipeline is None: | |
| llm_pipeline = pipeline("text-generation", model="nvidia/Mistral-NeMo-Minitron-8B-Instruct", device_map="auto", torch_dtype=torch.bfloat16) | |
| resp = llm_pipeline(messages, max_new_tokens=400, return_full_text=False, temperature=0.7) | |
| return resp[0]["generated_text"].strip() | |
| def get_next_planet_state(user_input: str, history: list, core_state_dict: dict = None) -> PlanetState: | |
| state = core_state_dict or {} | |
| # 0 ms Regex Matching for absolute parametric overrides (Genesis Spark and Buttons) | |
| i_str = user_input.lower() | |
| fast_path_used = False | |
| color_match = re.search(r"planet_color_hex to .+?\((#[0-9a-fA-F]{6})\)", i_str) | |
| if color_match: | |
| state["planet_color_hex"] = color_match.group(1) | |
| fast_path_used = True | |
| atmos_match = re.search(r"atmosphere_color_hex to .+?\((#[0-9a-fA-F]{6})\)", i_str) | |
| if atmos_match: state["atmosphere_color_hex"] = atmos_match.group(1) | |
| veg_match = re.search(r"vegetation to ([0-9]+(?:\.[0-9]+)?)", i_str) | |
| if veg_match: state["vegetation"] = float(veg_match.group(1)) | |
| ocean_match = re.search(r"ocean_level to ([0-9]+(?:\.[0-9]+)?)", i_str) | |
| if ocean_match: state["ocean_level"] = float(ocean_match.group(1)) | |
| land_match = re.search(r"land_mass to ([0-9]+(?:\.[0-9]+)?)", i_str) | |
| if land_match: state["land_mass"] = float(land_match.group(1)) | |
| cloud_match = re.search(r"cloud_density to ([0-9]+(?:\.[0-9]+)?)", i_str) | |
| if cloud_match: state["cloud_density"] = float(cloud_match.group(1)) | |
| storm_match = re.search(r"storm_intensity to ([0-9]+(?:\.[0-9]+)?)", i_str) | |
| if storm_match: state["storm_intensity"] = float(storm_match.group(1)) | |
| ice_match = re.search(r"ice_coverage and lava_intensity to ([0-9]+(?:\.[0-9]+)?)", i_str) | |
| if ice_match: | |
| state["ice_coverage"] = float(ice_match.group(1)) | |
| state["lava_intensity"] = float(ice_match.group(1)) | |
| if fast_path_used: | |
| state["narrative"] = f"COMMAND EXECUTED: GENESIS SPARK. Optimal planetary conditions reached. Biological boom imminent." | |
| final_state = PlanetState.model_validate(state) | |
| final_state.habitability = check_habitability(final_state) | |
| return final_state | |
| # LLM Fallback for Natural Generation | |
| SYSTEM = """You are the AeroSphere Tectonic Evolution Engine. Control physical state based on user interventions. | |
| Output MUST be a single JSON block containing EVERY parameter listed in the valid keys. | |
| CRITICAL LOGIC & SEMANTIC GROUNDING: | |
| - "Mars" / "Red Planet": Use deep red/brown/orange colors, extremely dry (ocean_level: 0.0, ice_coverage: 0.0), zero vegetation. | |
| - "Death Star" / "Machine": Dark grey/metallic colors, extremely high tech_level, zero vegetation, barron. | |
| - "Ice Planet" / "Hoth": Bright white/cyan colors, ice_coverage: 1.0. | |
| - "Specific Colors" / "Surreal": If the user requests extreme colors (purple, neon, gold), strongly generate blazing, highly saturated hex codes. | |
| IMPORTANT: NEVER literally copy Hex Codes! Always mathematically synthesize radically UNIQUE and dynamic hex colors for every generation! | |
| Force your physics engine to understand literal, pop-culture, and abstract concepts perfectly! | |
| Valid keys: "lava_intensity", "ice_coverage", "planet_color_hex", "atmosphere_color_hex", "vegetation", "ocean_level", "land_mass", "cloud_density", "storm_intensity", "tech_level", "narrative". | |
| Example Format: | |
| { | |
| "lava_intensity": 0.0, | |
| "ice_coverage": 0.0, | |
| "planet_color_hex": "#113355", | |
| "atmosphere_color_hex": "#446688", | |
| "vegetation": 0.0, | |
| "ocean_level": 0.8, | |
| "land_mass": 0.2, | |
| "cloud_density": 0.5, | |
| "storm_intensity": 0.4, | |
| "tech_level": 0.0, | |
| "narrative": "A massive flood covers the continent." | |
| }""" | |
| history_text = "\n".join([f"User: {t['content']}" if t['role']=='user' else f"Narrative: {t['content']}" for t in history[-6:]]) if history else "No previous interventions." | |
| user_msg = f"Recent History:\n{history_text}\n\nCurrent State:\n{json.dumps(state)}\n\nUser Intervention: {user_input}\n\nEvolve logically! Do NOT add unrequested JSON fields. Output ONLY JSON." | |
| messages = [ | |
| {"role": "system", "content": SYSTEM}, | |
| {"role": "user", "content": user_msg} | |
| ] | |
| try: | |
| raw_output = infer_llm(messages) | |
| except Exception as e: | |
| import traceback | |
| state["narrative"] = f"> CRITICAL ZEROGPU FAILURE: {str(e)} | TRACE: {traceback.format_exc()[-200:]}" | |
| final_state = PlanetState.model_validate(state) | |
| final_state.habitability = check_habitability(final_state) | |
| return final_state | |
| start_idx = raw_output.find('{') | |
| if start_idx != -1: | |
| raw_output = raw_output[start_idx:] | |
| delta = {} | |
| try: | |
| delta, _ = json.JSONDecoder().raw_decode(raw_output) | |
| except Exception as e: | |
| fast_path_used = False # trigger absolute heuristics | |
| # Fallback robust regex extraction from raw unescaped strings! | |
| nar_match = re.search(r'"narrative"\s*:\s*"([^"]*)', raw_output) | |
| if nar_match: delta["narrative"] = nar_match.group(1).rstrip(", \n}") | |
| for k in ["planet_color_hex", "atmosphere_color_hex"]: | |
| m = re.search(fr'"{k}"\s*:\s*"(#[0-9a-fA-F]{{6}})', raw_output) | |
| if m: delta[k] = m.group(1) | |
| for k in ["lava_intensity", "ice_coverage", "vegetation", "ocean_level", "land_mass", "cloud_density", "storm_intensity", "tech_level"]: | |
| m = re.search(fr'"{k}"\s*:\s*([0-9.]+)', raw_output) | |
| if m: delta[k] = max(0.0, min(1.0, float(m.group(1)))) | |
| if delta: | |
| valid_keys = PlanetStateDelta.model_fields.keys() | |
| for k, v in delta.items(): | |
| if k in valid_keys and v is not None: | |
| state[k] = v | |
| fast_path_used = True | |
| # --- Python Physical Integrity Safeguards for 8B LLM Limitations --- | |
| if "ice_coverage" in delta and delta["ice_coverage"] > 0.1: | |
| state["lava_intensity"] = 0.0 | |
| if "planet_color_hex" not in delta: state["planet_color_hex"] = "#5a6b7c" | |
| if "atmosphere_color_hex" not in delta: state["atmosphere_color_hex"] = "#80b0c0" | |
| elif "lava_intensity" in delta and delta["lava_intensity"] > 0.5: | |
| state["ice_coverage"] = 0.0 | |
| state["vegetation"] = 0.0 | |
| if "planet_color_hex" not in delta: state["planet_color_hex"] = "#151010" | |
| elif "vegetation" in delta and delta["vegetation"] > 0.1: | |
| state["lava_intensity"] = 0.0 | |
| if "planet_color_hex" not in delta: state["planet_color_hex"] = "#1e7050" | |
| # Absolute Fallback if LLM generated an empty dict or crashed | |
| if not fast_path_used and state.get("narrative", "") == core_state_dict.get("narrative", ""): | |
| if 'flood' in i_str or 'water' in i_str or 'ocean' in i_str: | |
| state["lava_intensity"] = 0.0 | |
| state["ocean_level"] = min(1.0, state.get("ocean_level", 0.0) + 0.6) | |
| state["planet_color_hex"] = "#113355" | |
| state["narrative"] = "> Tectonic flooding initiated. Oceanic levels critical." | |
| elif 'nuke' in i_str or 'fire' in i_str or 'destroy' in i_str or 'core' in i_str: | |
| state["vegetation"] = 0.0 | |
| state["lava_intensity"] = min(1.0, state.get("lava_intensity", 0.0) + 0.8) | |
| state["planet_color_hex"] = "#ff3300" | |
| state["narrative"] = "> Core temperatures rising. Exterminatus cascade triggered." | |
| elif 'seed' in i_str or 'life' in i_str or 'plant' in i_str or 'extract' in i_str: | |
| state["vegetation"] = min(1.0, state.get("vegetation", 0.0) + 0.5) | |
| state["planet_color_hex"] = "#1e7050" | |
| state["narrative"] = "> Biosphere seeded. Vegetation rapidly spreading." | |
| else: | |
| state["narrative"] = f"> ZERO-SHOT ABORT: Model output unparseable text instead of JSON: {raw_output[:100]}" | |
| final_state = PlanetState.model_validate(state) | |
| final_state.habitability = check_habitability(final_state) | |
| return final_state | |