universal-math-game / laya_engine.py
arudradey's picture
Refine Laya instinct heuristic
1630831 verified
Raw History Blame Contribute Delete
6.15 kB
import os
import json
import time
from typing import Dict, List, Any, Tuple
# Try importing Laya agent components
_LAYA_AGENT = None
_LAYA_AVAILABLE = False
try:
from rl_agent_api import RLAgent
from huggingface_hub import snapshot_download
MODEL_REPO = os.environ.get("LAYA_MODEL_REPO", "convaiinnovations/laya")
def _get_laya():
global _LAYA_AGENT, _LAYA_AVAILABLE
if _LAYA_AGENT is None:
try:
local_dir = snapshot_download(MODEL_REPO, token=os.environ.get("HF_TOKEN"))
_LAYA_AGENT = RLAgent(local_dir, device="cpu")
_LAYA_AVAILABLE = True
print("✅ Laya System-1 Model successfully loaded on CPU.", flush=True)
except Exception as e:
print(f"⚠️ Laya direct model load deferred/fallback: {e}", flush=True)
_LAYA_AVAILABLE = False
return _LAYA_AGENT
except Exception as e:
print(f"Laya modules import warning: {e}", flush=True)
class LayaDecisionOracle:
"""Laya System-1 Mathematical Decision & Gut-Feeling Oracle."""
@staticmethod
def decide_next_action(
current_equations: List[str],
goals: List[str],
legal_actions: List[Dict[str, Any]],
depth: int = 0,
) -> Tuple[Dict[str, Any], float, str]:
"""
Uses Laya's System-1 typed choice decision to select the optimal mathematical action.
Returns: (selected_action_dict, calibrated_confidence, instinct_reasoning)
"""
if not legal_actions:
return {"type": "finish", "description": "Finish"}, 1.0, "No other actions available."
# If goal is already achieved, pick finish
if any(eq.startswith("x =") or eq.startswith("x=") for eq in current_equations):
for a in legal_actions:
if a["type"] == "finish":
return a, 0.99, "Equations are isolated into solutions; declaring goal reached."
# Formulate System 1 typed decision state
state_repr = {
"current_state": " and ".join(current_equations),
"goal": " or ".join(goals) if goals else "solve for x",
"search_depth": depth,
"domain": "algebra",
}
criteria = {}
action_map = {}
for idx, act in enumerate(legal_actions):
key = f"act_{idx}_{act['type']}"
criteria[key] = act.get("description", act["type"])
action_map[key] = act
questions = {
"math_action": {
"type": "choice",
"instructions": (
f"Given equation state `{state_repr['current_state']}` and goal `{state_repr['goal']}`, "
"which mathematical action will most rapidly reduce polynomial degree and isolate roots?"
),
"criteria": criteria,
}
}
# Try Laya single-forward-pass System 1 inference
agent = None
try:
agent = _get_laya()
except Exception:
pass
if agent is not None and _LAYA_AVAILABLE:
try:
t0 = time.perf_counter()
results = agent.system_one(state_repr, questions)
latency_ms = (time.perf_counter() - t0) * 1000
choice_key = results["math_action"]["value"]
confidence = float(results["math_action"].get("confidence", 0.85))
selected = action_map.get(choice_key, legal_actions[0])
reason = (
f"⚡ Laya System-1 forward pass ({latency_ms:.1f}ms): "
f"Selected [{selected['type']}] with {confidence*100:.1f}% calibrated confidence."
)
return selected, confidence, reason
except Exception as e:
print(f"Laya forward pass fallback: {e}", flush=True)
# High-precision heuristic intuition fallback
selected, conf, reason = LayaDecisionOracle._heuristic_gut_feeling(current_equations, legal_actions)
return selected, conf, reason
@staticmethod
def _heuristic_gut_feeling(equations: List[str], legal_actions: List[Dict[str, Any]]) -> Tuple[Dict[str, Any], float, str]:
"""Mathematical instinct priority heuristic."""
import re
# 1. If all equations are already in isolated form, choose finish
all_isolated = True
for eq in equations:
m = re.match(r'^\s*[a-zA-Z]\s*=\s*[+-]?\d+(?:\.\d+)?(?:\/\d+)?\s*$', eq)
if not m:
all_isolated = False
break
if all_isolated:
for a in legal_actions:
if a["type"] == "finish":
return a, 0.99, "⚡ Laya Instinct: All equation branches are isolated into canonical root forms; proving Q.E.D."
# 2. If factored product exists (e.g. (x-2)*(x-3)=0), zero_product_split is highest priority
for a in legal_actions:
if a["type"] == "zero_product_split":
return a, 0.97, "⚡ Laya Instinct: Factored product (A)(B)=0 detected; zero-product split decomposes problem into independent linear branches."
# 3. If any equation can be factored, factor it
for a in legal_actions:
if a["type"] == "factor":
return a, 0.94, "⚡ Laya Instinct: High-degree polynomial structure detected; factoring collapses nonlinear search space to linear components."
# 4. If any un-isolated linear equation exists, isolate it
for a in legal_actions:
if a["type"] == "isolate":
return a, 0.92, f"⚡ Laya Instinct: Linear term detected in {a.get('description', '')}; isolating directly yields root."
# 5. If needs simplification
for a in legal_actions:
if a["type"] == "simplify":
return a, 0.88, "⚡ Laya Instinct: Redundant algebraic terms detected; simplifying reduces complexity metric."
return legal_actions[0], 0.80, f"⚡ Laya Instinct: Proposing {legal_actions[0]['type']} as optimal geodesic move."