CoolFace
Apppublic

bbqddt2/Antigravity

sourceHugging Faceupdated 2mo agoView on Hugging Face
0likes
app.py326 linesDownload Raw Back to root
1# -*- coding: utf-8 -*-2"""3Antigravity V17 — Gradio Web界面4=================================5展示多AI协同进化引擎的实时状态和预测结果。6 7HF Spaces 自动运行: python app.py8本地运行: python app.py --server-name 0.0.0.0 --port 78609"""10import os11import json12import sys13from pathlib import Path14from datetime import datetime15from typing import Optional, Dict, Any16 17sys.stdout.reconfigure(encoding="utf-8") if hasattr(sys.stdout, 'reconfigure') else None18 19try:20    import gradio as gr21except ImportError:22    print("[WARN] gradio未安装,跳过Web界面")23    gr = None24 25try:26    from gradio_spaces import spaces27    HAS_SPACES = True28except ImportError:29    try:30        import spaces31        HAS_SPACES = True32    except ImportError:33        spaces = None34        HAS_SPACES = False35 36if not HAS_SPACES:37    print("[INFO] spaces module not available, running without GPU acceleration")38 39 40# ═══════════════════════════════════════════════════════════41# ZeroGPU 兼容入口 — HF Spaces ZeroGPU 要求至少一个 @spaces.GPU 函数42# ═══════════════════════════════════════════════════════════43 44if HAS_SPACES:45    @spaces.GPU46    def _gpu_init():47        """初始化入口:满足 ZeroGPU 要求,同时触发一次状态加载"""48        return get_latest_state()49 50# 项目根目录: HF Spaces中是 /src,本地是 E:/享中51_BASE_DIR = Path(__file__).resolve().parent52_DATA_DIR = _BASE_DIR53 54def load_json_safe(path: str) -> Optional[Dict]:55    """安全读取JSON文件"""56    try:57        with open(path, "r", encoding="utf-8") as f:58            return json.load(f)59    except (FileNotFoundError, json.JSONDecodeError):60        return None61 62 63def get_latest_state() -> Dict[str, Any]:64    """获取最新进化状态"""65    return {66        "timestamp": datetime.now().isoformat(),67        "state": load_json_safe(str(_DATA_DIR / "evolution_state_v20.json")),68        "best_formulas": load_json_safe(str(_DATA_DIR / "best_formulas_v19.json")),69        "top_candidates": load_json_safe(str(_DATA_DIR / "top_candidates_export.json")),70    }71 72 73def format_state_summary(state: Dict) -> str:74    """格式化状态摘要"""75    if not state:76        return "暂无进化数据\n\n💡 点击「启动进化循环」运行一轮进化后即可查看。"77 78    lines = [79        f"**最后更新**: {state.get('last_updated', '未知')}",80        f"**总周期数**: {state.get('cycle_count', 0)}",81        f"**已生成假设**: {state.get('total_hypotheses_generated', 0)}",82        f"**存活**: {state.get('survived_count', 0)} | 淘汰: {state.get('eliminated_count', 0)}",83        f"**原语数量**: {state.get('n_primitives', 0)}",84    ]85    return "\n".join(lines)86 87 88def format_best_formula(best: Dict) -> str:89    """格式化最佳公式信息"""90    if not best or not best.get("best_formula"):91        return "暂无最佳公式\n\n💡 运行进化循环后自动显示。"92 93    bf = best["best_formula"]94    lines = [95        f"**名称**: {bf.get('name', 'N/A')}",96        f"**来源**: {bf.get('source', 'N/A')}",97        f"**Brier Score**: {bf.get('brier_score', bf.get('fitness_score', 'N/A'))}",98        f"**平均命中**: {bf.get('avg_hits', 0):.2f} ± {bf.get('std_hits', 0):.2f}",99        f"**P值**: {bf.get('p_value', 0):.4f}",100        f"**原语**: {', '.join(bf.get('primitive_names', []))}",101        f"**组合方式**: {bf.get('operators', [])[-1] if bf.get('operators') else 'N/A'}",102    ]103    return "\n".join(lines)104 105 106def format_survival_pool(pool: list) -> str:107    """格式化存活公式池"""108    if not pool:109        return "暂无存活公式\n\n💡 运行进化循环后会显示 Top-10 公式。"110 111    lines = ["| 排名 | 公式名 | Brier Score | 平均命中 | 原语 |",112             "|------|--------|-------------|----------|------|"]113 114    for i, formula in enumerate(pool[:10], 1):115        name = formula.get("name", "N/A")[:15]116        brier = formula.get("brier_score", formula.get("fitness_score", "N/A"))117        hits = formula.get("avg_hits", 0)118        prims = ", ".join(formula.get("primitives", [])[:3])119        lines.append(f"| {i} | {name} | {brier} | {hits:.2f} | {prims} |")120 121    return "\n".join(lines)122 123 124def format_evolution_history(history: list) -> str:125    """格式化进化历史"""126    if not history:127        return "暂无历史记录\n\n💡 运行进化循环后显示代际变化曲线。"128 129    lines = ["| 代数 | 最佳Brier | 平均命中 | 时间 |",130             "|------|-----------|----------|------|"]131 132    for h in history[-10:]:133        gen = h.get("generation", "?")134        fit = h.get("best_fitness", h.get("best_brier", "?"))135        hits = h.get("best_avg_hits", "?")136        ts = h.get("timestamp", "")[:19]137        lines.append(f"| {gen} | {fit:.4f} | {hits:.2f} | {ts} |")138 139    return "\n".join(lines)140 141 142def run_evolution() -> str:143    """触发进化循环"""144    engine_path = _DATA_DIR / "multi_ai_evolution_engine.py"145 146    if not engine_path.exists():147        return (148            "⚠️ 进化引擎文件不存在\n\n"149            "HF Spaces 目前作为可视化面板运行。\n"150            "完整进化引擎在本地 `E:/享中/multi_ai_evolution_engine.py`\n\n"151            "**本地运行命令:**\n"152            "```bash\n"153            "cd E:/享中\n"154            "python multi_ai_evolution_engine.py --generations 10 --candidates 15\n"155            "```\n\n"156            "**云端计划:**\n"157            "- GitHub Actions: 每天8:00 + 每6小时定时进化\n"158            "- 腾讯云: 每2小时守护进程\n"159            "- HF Spaces: 本页面可视化"160        )161 162    # 本地模式:实际运行进化163    import subprocess164    result = subprocess.run(165        [sys.executable, str(engine_path), "--generations", "3", "--candidates", "5"],166        capture_output=True, text=True, timeout=600, cwd=str(_DATA_DIR)167    )168    return f"✅ 进化已启动!\n\n```\n{result.stdout[-2000:]}\n```"169 170 171def show_predictions() -> str:172    """显示预测结果"""173    best = load_json_safe(str(_DATA_DIR / "best_formulas_v19.json"))174    if not best:175        return "暂无预测数据\n\n💡 运行进化循环后自动显示。"176 177    math_preds = best.get("math_engine_predictions", {})178    if not math_preds:179        return "暂无数学引擎预测\n\n💡 运行进化循环后显示 Luckcast V15 + Enhanced V2 输出。"180 181    lines = ["### 当前预测引擎输出\n"]182    for engine, preds in math_preds.items():183        reds = preds.get("red", [])184        blue = preds.get("blue", [])185        lines.append(f"**{engine}**: 红球 {reds} + 蓝球 {blue}")186 187    # 也显示存活公式池188    pool = best.get("survival_pool", [])189    if pool:190        lines.append(f"\n### 存活公式池 ({len(pool)} 个)")191        for f in pool[:5]:192            lines.append(f"- **{f.get('name', '?')}** — Brier {f.get('brier_score', '?')} | "193                         f"原语: {', '.join(f.get('primitives', [])[:3])}")194 195    return "\n".join(lines)196 197 198def show_system_info() -> str:199    """显示系统信息"""200    return """201### 🏗️ Antigravity V17 架构202 203| 组件 | 状态 | 说明 |204|------|------|------|205| 公式语言 Pillar 1 | ✅ 完整 | 33个原语,6大类别 |206| 策略框架 Pillar 2 | ✅ 完整 | 假设生成→验证→进化 |207| LLM创新 Pillar 3 | ✅ 完整 | Gemini/OpenRouter/Gemma2 |208| Multi-AI引擎 V19 | ✅ 完成 | 10代×15候选=195公式 |209| HF Spaces | ✅ 本页面 | Web可视化 |210| GitHub Actions | ⏳ 待推送 | 定时触发进化 |211| 腾讯云 CVM | ⏳ 等IP | 长期守护进程 |212 213### 📊 关键指标214 215- **随机基线 Brier Score**: ~0.139216- **当前最佳**: 0.1723 (比随机差24%)217- **核心瓶颈**: 所有原语在频率统计空间内搜索218- **下一步方向**: 卡方物理偏差检测 / 贝叶斯先验更新 / 新信号源探索219 220### 🔬 三大支柱221 222**Pillar 1 — 公式语言**22333个数学原语覆盖时序、关系、结构、频谱、几何、混沌六大类别。224每个原语是一等公民:有名字、来源、类别、可突变参数。225 226**Pillar 2 — 自研策略框架**227从数据信号自动生成假设 → Walk-Forward验证 → 存活/淘汰 → 进化繁殖。228完整生命周期追踪:诞生→测试→存活→淘汰→变异→重生。229 230**Pillar 3 — LLM驱动创新**231Gemini/OpenRouter/Gemma2 协同提议新原语规格。232失败分析 → 范式转移建议 → 语法演进。233"""234 235 236def create_ui() -> gr.Blocks:237    """创建Gradio界面"""238    if gr is None:239        return None240 241    with gr.Blocks(title="Antigravity V17 - 多AI协同进化引擎") as demo:242        gr.Markdown("""243        # 🚀 Antigravity V17 — 多AI协同进化引擎244 245        **三大支柱架构 · 云端分布式计算 · 实时可视化**246 247        ---248        """)249 250        with gr.Tabs():251            # Tab 1: 实时状态252            with gr.Tab("📊 实时状态"):253                with gr.Row():254                    with gr.Column():255                        state_btn = gr.Button("刷新状态", variant="primary")256                        state_md = gr.Markdown(value=format_state_summary(None))257 258                    with gr.Column():259                        best_btn = gr.Button("查看最佳公式", variant="secondary")260                        best_md = gr.Markdown(value=format_best_formula(None))261 262                with gr.Row():263                    pool_btn = gr.Button("存活公式池", variant="secondary")264                    pool_md = gr.Markdown(value=format_survival_pool([]))265 266                def refresh_all():267                    s = get_latest_state()268                    return (269                        format_state_summary(s.get("state")),270                        format_best_formula(s.get("best_formulas")),271                        format_survival_pool(s.get("state", {}).get("survival_pool", [])),272                    )273 274                state_btn.click(refresh_all, outputs=[state_md, best_md, pool_md])275                pool_btn.click(refresh_all, outputs=[state_md, best_md, pool_md])276 277            # Tab 2: 进化历史278            with gr.Tab("📈 进化历史"):279                history_btn = gr.Button("加载进化历史")280                history_md = gr.Markdown(value=format_evolution_history([]))281 282                def load_history():283                    state = get_latest_state().get("state")284                    history = state.get("evolution_history", []) if state else []285                    return format_evolution_history(history)286 287                history_btn.click(load_history, outputs=[history_md])288 289            # Tab 3: 预测结果290            with gr.Tab("🎯 最新预测"):291                pred_btn = gr.Button("查看预测")292                pred_md = gr.Markdown(value="点击按钮查看最新预测结果...")293                pred_btn.click(show_predictions, outputs=[pred_md])294 295            # Tab 4: 启动进化296            with gr.Tab("🔥 启动进化"):297                ev_btn = gr.Button("启动进化循环", variant="primary")298                ev_md = gr.Markdown(value=(299                    "点击下方按钮触发进化循环。\n\n"300                    "⚠️ HF Spaces 当前作为可视化面板运行。\n"301                    "完整引擎在本地运行,结果会同步到这里。"302                ))303                ev_btn.click(run_evolution, outputs=[ev_md])304 305            # Tab 5: 系统信息306            with gr.Tab("ℹ️ 系统信息"):307                info_btn = gr.Button("加载系统信息")308                info_md = gr.Markdown(value=show_system_info())309                info_btn.click(show_system_info, outputs=[info_md])310 311    return demo312 313 314if __name__ == "__main__":315    demo = create_ui()316    if demo:317        port = int(os.environ.get("SPACE_PORT", 7860))318        demo.launch(319            server_name="0.0.0.0",320            server_port=port,321            share=False,322            show_error=True,323        )324    else:325        print("Gradio未安装,请运行: pip install gradio")326