{
  "source_file": "0930",
  "source_platform": "研究机构",
  "author": "BAIR Blog (UC Berkeley)",
  "title_listed": "Gradient-based Planning for World Models at Longer Horizons",
  "keywords": "世界模型,规划,机器人",
  "domain": "机器学习",
  "content_type": "深度技术解析",
  "is_paid_flag": "否",
  "url": "https://bair.berkeley.edu/blog/2026/04/20/grasp/",
  "publish_date": "2026-04",
  "corpus_stage": "强化学习/对齐",
  "notes": "基于梯度的长程世界模型规划（GRASP）",
  "id": "d54e0ace9313",
  "collected_at": "2026-10-02T15:23:08",
  "title": "Gradient-based Planning for World Models at Longer Horizons – The Berkeley Artificial Intelligence Research Blog",
  "body_markdown": "GRASP\nis a new gradient-based planner for learned dynamics (a “world model”) that makes long-horizon planning practical by (1) lifting the trajectory into virtual states so optimization is parallel across time, (2) adding stochasticity directly to the state iterates for exploration, and (3) reshaping gradients so actions get clean signals while we avoid brittle “state-input” gradients through high-dimensional vision models.\nLarge, learned world models are becoming increasingly capable. They can predict long sequences of future observations in high-dimensional visual spaces and generalize across tasks in ways that were difficult to imagine a few years ago. As these models scale, they start to look less like task-specific predictors and more like general-purpose simulators.\nBut having a powerful predictive model is not the same as being able to use it effectively for control/learning/planning. In practice, long-horizon planning with modern world models remains fragile: optimization becomes ill-conditioned, non-greedy structure creates bad local minima, and high-dimensional latent spaces introduce subtle failure modes.\nIn this blog post, I describe the problems that motivated this project and our approach to address them: why planning with modern world models can be surprisingly fragile, why long horizons are the real stress test, and what we changed to make gradient-based planning much more robust.\nThis blog post discusses work done with Mike Rabbat, Aditi Krishnapriyan, Yann LeCun, and Amir Bar (* denotes equal advisorship), where we propose GRASP.\nWhat is a world model?\nThese days, the term “world model” is quite overloaded, and depending on the context can either mean an explicit dynamics model or some implicit, reliable internal state that a generative model relies on (e.g. when an LLM generates chess moves, whether there is some internal representation of the board). We give our loose working definition below.\nSuppose you take actions $a_t \\in \\mathcal{A}$ and observe states $s_t \\in \\mathcal{S}$ (images, latent vectors, proprioception). A\nworld model\nis a learned model that, given the current state and a sequence of future actions, predicts what will happen next. Formally, it defines a predictive distribution on a sequence of observed states $s_{t-h:t}$ and current action $a_t$:\n\\[P_\\theta(s_{t+1} \\mid s_{t-h:t},\\; a_t)\\]\nthat approximates the environment’s true conditional $P(s_{t+1} \\mid s_{t-h:t},\\; a_t)$. For this blog post, we’ll assume a Markovian model $P(s_{t+1} \\mid s_{t-h:t},\\; a_t)$ for simplicity (all results here can be extended to the more general case), and when the model is deterministic it reduces to a map over states:\n\\[s_{t+1} = F_\\theta(s_t, a_t).\\]\nIn practice the state $s_t$ is often a learned latent representation (e.g., encoded from pixels), so the model operates in a (theoretically) compact, differentiable space. The key point is that a world model gives you a\ndifferentiable simulator\n; you can roll it forward under hypothetical action sequences and backpropagate through the predictions.\nPlanning: choosing actions by optimizing through the model\nGiven a start $s_0$ and a goal $g$, the simplest planner chooses an action sequence $\\mathbf{a}=(a_0,\\dots,a_{T-1})$ by rolling out the model and minimizing terminal error:\n\\[\\min_{\\mathbf{a}} \\; \\| s_T(\\mathbf{a}) - g \\|_2^2, \\quad \\text{where } s_T(\\mathbf{a}) = \\mathcal{F}_{\\theta}^{T}(s_0,\\mathbf{a}).\\]\nHere we use $\\mathcal{F}^T$ as shorthand for the full rollout through the world model (dependence on model parameters $\\theta$ is implicit):\n\\[\\mathcal{F}_{\\theta}^{T}(s_0, \\mathbf{a}) = F_\\theta(F_\\theta(\\cdots F_\\theta(s_0, a_0), \\cdots, a_{T-2}), a_{T-1}).\\]\nIn short horizons and low-dimensional systems, this can work reasonably well. But as horizons grow and models become larger and more expressive, its weaknesses become amplified.\nSo why doesn’t this just work at scale?\nWhy long-horizon planning is hard (even when everything is differentiable)\nThere are two separate pain points for the more general world model, plus a third that is specific to learned, deep learning-based models.\n1) Long-horizon rollouts create deep, ill-conditioned computation graphs\nThose familiar with backprop through time (BPTT) may notice that we’re differentiating through a model applied to itself repeatedly, which will lead to the\nexploding/vanishing gradients\nproblem. Namely, if we take derivatives (note we’re differentiating vector-valued functions, resulting in Jacobians that we denote with $D_x (\\cdots)$) with respect to earlier actions (e.g. $a_0$):\n\\[D_{a_0} \\mathcal{F}_{\\theta}^{T}(s_0, \\mathbf{a}) = \\Bigl(\\prod_{t=1}^T D_s F_\\theta(s_t, a_t)\\Bigr) D_{a_0}F_\\theta(s_0, a_0).\\]\nWe see that the Jacobian’s conditioning scales exponentially with time $T$:\n\\[\\sigma_{\\text{max/min}}(D_{a_0}\\mathcal{F}_{\\theta}^{T}) \\sim \\sigma_{\\text{max/min}}(D_s F_\\theta)^{T-1},\\]\nleading to exploding or vanishing gradients.\n2) The landscape is non-greedy and full of traps\nAt short horizons, the greedy solution, where we move straight toward the goal at every step, is often good enough. If you only need to plan a few steps ahead, the optimal trajectory usually doesn’t deviate much from “head toward $g$” at each step.\nAs horizons grow, two things happen. First, longer tasks are more likely to require\nnon-greedy\nbehavior: going around a wall, repositioning before pushing, backing up to take a better path. And as horizons grow, more of these non-greedy steps are typically needed. Second, the optimization space itself scales with horizon: $\\mathrm{dim}(\\mathcal{A} \\times \\cdots \\times \\mathcal{A}) = T\\mathrm{dim}(\\mathcal{A})$, further expanding the space of local minima for the optimization problem.\nDistance to goal along the optimal path is non-monotonic, and the resulting loss landscape can be rough.\nA long-horizon fix: lifting the dynamics constraint\nSuppose we treat the dynamics constraint $s_{t+1} = F_{\\theta}(s_t, a_t)$ as a soft constraint, and we instead optimize the following penalty function over both actions $(a_0,\\ldots,a_{T-1})$ and states $(s_0,\\ldots,s_T)$:\n\\[\\min_{\\mathbf{s},\\mathbf{a}} \\mathcal{L}(\\mathbf{s}, \\mathbf{a}) = \\sum_{t=0}^{T-1} \\big\\|F_\\theta(s_t,a_t) - s_{t+1}\\big\\|_2^2,\n\\quad \\text{with } s_0 \\text{ fixed and } s_T=g.\\]\nThis is also sometimes called\ncollocation\nin planning/robotics literature. Note the lifted formulation shares the same\nglobal\nminimizers as the original rollout objective (both are zero exactly when the trajectory is dynamically feasible). But the optimization landscapes are very different, and we get two immediate benefits:\nEach world model evaluation $F_{\\theta}(s_t,a_t)$ depends only on local variables, so all $T$ terms can be computed\nin parallel across time\n, resulting in a huge speed-up for longer horizons, and\nYou no longer backpropagate through a single deep $T$-step composition to get a learning signal, since the previous product of Jacobians now splits into a sum, e.g.:\n\\[D_{a_0} \\mathcal{L} = 2(F_\\theta(s_0, a_0) - s_1).\\]\nBeing able to optimize states directly also helps with exploration, as we can temporarily navigate through unphysical domains to find the optimal plan:\nCollocation-based planning allows us to directly perturb states and explore midpoints more effectively.\nHowever, lunch is never free. And indeed, especially for deep learning-based world models, there is a critical issue that makes the above optimization quite difficult in practice.\nAn issue for deep learning-based world models: sensitivity of state-input gradients\nThe\ntl;dr\nof this section is: directly optimizing states through a deep learning-based $F_{\\theta}$ is incredibly brittle, à la\nadversarial robustness\n. Even if you train your world model in a lower-dimensional state space, the training process for the world model makes unseen state landscapes very sharp, whether it be an unseen state itself or simply a normal/orthogonal direction to the data manifold.\nAdversarial robustness and the “dimpled manifold” model\nAdversarial robustness originally looked at classification models $f_\\theta : \\mathbb{R}^{w\\times h \\times c} \\to \\mathbb{R}^K$, and showed that by following the gradient of a particular logit $\\nabla f_\\theta^k$ from a base image $x$ (not of class $k$), you did not have to move far along $x’ = x + \\epsilon\\nabla f_\\theta^k$ to make $f_\\theta$ classify $x’$ as $k$ (\nSzegedy et al., 2014\n;\nGoodfellow et al., 2015\n):\nDepiction of the classic example from (Goodfellow et al., 2015).\nLater work has painted a geometric picture for what’s going on: for data near a low-dimensional manifold $\\mathcal{M}$, the training process controls behavior in tangential directions, but does not regularize behavior in orthogonal directions, thus leading to sensitive behavior (\nStutz et al., 2019\n). Another way stated: $f_\\theta$ has a reasonable Lipschitz constant when considering only tangential directions to the data manifold $\\mathcal{M}$, but can have very high Lipschitz constants in normal directions. In fact, it often benefits the model to be sharper in these normal directions, so it can fit more complicated functions more precisely.\nAs a result, such adversarial examples are incredibly common even for a single given model. Further, this is not just a computer vision phenomenon; adversarial examples also appear in LLMs (\nWallace et al., 2019\n) and in RL (\nGleave et al., 2019\n).\nWhile there are methods to train for more adversarially robust models, there is a known trade-off between model performance and adversarial robustness (\nTsipras et al., 2019\n): especially in the presence of many weakly-correlated variables, the model\nmust\nbe sharper to achieve higher performance. Indeed, most modern training algorithms, whether in computer vision or LLMs, do not train adversarial robustness out. Thus, at least until deep learning sees a major regime change,\nthis is a problem we’re stuck with\n.\nWhy is adversarial robustness an issue for world model planning?\nConsider a single component of the dynamics loss we’re optimizing in the lifted state approach:\n\\[\\min_{s_t, a_t, s_{t+1}} \\|F_\\theta(s_t, a_t) - s_{t+1}\\|_2^2\\]\nLet’s further focus on just the base state:\n\\[\\min_{s_t} \\|F_\\theta(s_t, a_t) - s_{t+1}\\|_2^2.\\]\nSince world models are typically trained on state/action trajectories $(s_1, a_1, s_2, a_2, \\ldots)$, the state-data manifold for $F_{\\theta}$ has dimensionality bounded by the action space:\n\\[\\mathrm{dim}(\\mathcal{M}_s) \\le \\mathrm{dim}(\\mathcal{A}) + 1 + \\mathrm{dim}(\\mathcal{R}),\\]\nwhere $\\mathcal{R}$ is some optional space of augmentations (e.g. translations/rotations). Thus, we can typically expect $\\mathrm{dim}(\\mathcal{M}_s)$ to be much lower than $\\mathrm{dim}(\\mathcal{S})$, and thus:\nit is very easy to find adversarial examples that hack any state to any other desired state.\nAs a result, the dynamics optimization\n\\[\\sum_{t=0}^{T-1} \\big\\|F_\\theta(s_t,a_t) - s_{t+1}\\big\\|_2^2\\]\nfeels incredibly “sticky,” as the base points $s_t$ can easily trick $F_{\\theta}$ into thinking it’s already made its local goal.\n1\n1.\nThis adversarial robustness issue, while particularly bad for lifted-state approaches, is not unique to them. Even for serial optimization methods that optimize through the full rollout map $\\mathcal{F}^T$, it is possible to get into unseen states, where it is very easy to have a normal component fed into the sensitive normal components of $D_s F_{\\theta}$. The action Jacobian’s chain rule expansion is\n\\[\\Bigl(\\prod_{t=1}^T D_s F_\\theta(s_t, a_t)\\Bigr) D_{a_0}F_\\theta(s_0, a_0).\\]\nSee what happens if any stage of the product has any component normal to the data manifold.\n↩\nOur fix\nThis is where our new planner GRASP comes in. The main observation: while $D_s F_{\\theta}$ is untrustworthy and adversarial, the action space is usually low-dimensional and exhaustively trained, so $D_a F_{\\theta}$ is actually reasonable to optimize through and doesn’t suffer from the adversarial robustness issue!\nThe action input is usually lower-dimensional and densely trained (the model has seen every action direction), so action gradients are much better behaved.\nAt its core,\nGRASP builds a first-order lifted state / collocation-based planner that is only dependent on action Jacobians through the world model.\nWe thus exploit the differentiability of learned world models $F_{\\theta}$, while not falling victim to the inherent sensitivity of the state Jacobians $D_s F_{\\theta}$.\nGRASP: Gradient\nRelAxed\nS\ntochastic\nP\nlanner\nAs noted before, we start with the collocation planning objective, where we lift the states and relax dynamics into a penalty:\n\\[\\min_{\\mathbf{s},\\mathbf{a}} \\mathcal{L}(\\mathbf{s}, \\mathbf{a}) = \\sum_{t=0}^{T-1} \\big\\|F_\\theta(s_t,a_t) - s_{t+1}\\big\\|_2^2,\n\\quad \\text{with } s_0 \\text{ fixed and } s_T=g.\\]\nWe then make two key additions.\nIngredient 1: Exploration by noising the\nstate iterates\nEven with a smoother objective, planning is nonconvex. We introduce exploration by injecting Gaussian noise into the\nvirtual state updates\nduring optimization.\nA simple version:\n\\[s_t \\leftarrow s_t - \\eta_s \\nabla_{s_t}\\mathcal{L} + \\sigma_{\\text{state}} \\xi, \\qquad \\xi\\sim\\mathcal{N}(0,I).\\]\nActions are still updated by non-stochastic descent:\n\\[a_t \\leftarrow a_t - \\eta_a \\nabla_{a_t}\\mathcal{L}.\\]\nThe state noise helps you “hop” between basins in the lifted space, while the actions remain guided by gradients. We found that specifically noising states here (as opposed to actions) finds a good balance of exploration and the ability to find sharper minima.\n2\n2.\nBecause we only noise the states (and not the actions), the corresponding dynamics are not truly Langevin dynamics.\n↩\nIngredient 2: Reshape gradients: stop brittle state-input gradients, keep action gradients\nAs discussed, the fragile pathway is the gradient that flows\ninto the state input\nof the world model,\n\\(D_s F_{\\theta}\\)\n. The most straightforward way to do this initially is to just stop state gradients into\n\\(F_{\\theta}\\)\ndirectly:\nLet $\\bar{s}_t$ be the same value as $s_t$, but with gradients stopped.\nDefine the\nstop-gradient dynamics loss\n:\n\\[\\mathcal{L}_{\\text{dyn}}^{\\text{sg}}(\\mathbf{s},\\mathbf{a})\n= \\sum_{t=0}^{T-1} \\big\\|F_\\theta(\\bar{s}_t, a_t) - s_{t+1}\\big\\|_2^2.\\]\nThis alone does not work. Notice now states only follow the previous state’s step, without anything forcing the base states to chase the next ones. As a result, there are trivial minima for just stopping at the origin, then only for the final action trying to get to the goal in one step.\nDense goal shaping\nWe can view the above issue as the goal’s signal being cut off entirely from previous states. One way to fix this is to simply add a dense goal term throughout prediction:\n\\[\\mathcal{L}_{\\text{goal}}^{\\text{sg}}(\\mathbf{s},\\mathbf{a})\n= \\sum_{t=0}^{T-1} \\big\\|F_\\theta(\\bar{s}_t, a_t) - g\\big\\|_2^2.\\]\nIn normal settings this would over-bias towards the greedy solution of straight chasing the goal, but this is balanced in our setting by the stop-gradient dynamics loss’s bias towards feasible dynamics. The final objective is then as follows:\n\\[\\mathcal{L}(\\mathbf{s},\\mathbf{a}) = \\mathcal{L}_{\\text{dyn}}^{\\text{sg}}(\\mathbf{s},\\mathbf{a}) + \\gamma \\, \\mathcal{L}_{\\text{goal}}^{\\text{sg}}(\\mathbf{s},\\mathbf{a}).\\]\nThe result is a planning optimization objective that does not have dependence on state gradients.\nPeriodic “sync”: briefly return to true rollout gradients\nThe lifted stop-gradient objective is great for\nfast, guided exploration\n, but it’s still an approximation of the original serial rollout objective.\nSo every $K_{\\text{sync}}$ iterations, GRASP does a short refinement phase:\nRoll out from $s_0$ using current actions $\\mathbf{a}$, and take a few small gradient steps on the original serial loss:\n\\[\\mathbf{a} \\leftarrow \\mathbf{a} - \\eta_{\\text{sync}}\\,\\nabla_{\\mathbf{a}}\\,\\|s_T(\\mathbf{a})-g\\|_2^2.\\]\nThe lifted-state optimization still provides the core of the optimization, while this refinement step adds some assistance to keep states and actions grounded towards real trajectories. This refinement step can of course be replaced with a serial planner of your choice (e.g. CEM); the core idea is to still get some of the benefit of the full-path synchronization of serial planners, while still mostly using the benefits of the lifted-state planning.\nHow GRASP addresses long-range planning\nCollocation-based planners offer a natural fix for long-horizon planning, but this optimization is quite difficult through modern world models due to adversarial robustness issues.\nGRASP proposes a simple solution for a smoother collocation-based planner, alongside stable stochasticity for exploration\n. As a result, longer-horizon planning ends up not only succeeding more, but also finding such successes faster:\nPush-T demo: longer-horizon planning with GRASP.\nHorizon\nCEM\nGD\nLatCo\nGRASP\nH=40\n61.4%\n/ 35.3s\n51.0% / 18.0s\n15.0% / 598.0s\n59.0% /\n8.5s\nH=50\n30.2% / 96.2s\n37.6% / 76.3s\n4.2% / 1114.7s\n43.4%\n/\n15.2s\nH=60\n7.2% / 83.1s\n16.4% / 146.5s\n2.0% / 231.5s\n26.2%\n/\n49.1s\nH=70\n7.8% / 156.1s\n12.0% / 103.1s\n0.0% / —\n16.0%\n/\n79.9s\nH=80\n2.8% / 132.2s\n6.4% / 161.3s\n0.0% / —\n10.4%\n/\n58.9s\nPush-T results. Success rate (%) / median time to success. Bold = best in row. Note the median success time will bias higher with higher success rate; GRASP manages to be faster despite higher success rate.\nWhat’s next?\nThere is still plenty of work to be done for modern world model planners. We want to exploit the gradient structure of learned world models, and collocation (lifted-state optimization) is a natural approach for long-horizon planning, but it’s crucial to understand typical gradient structure here: smooth and informative action gradients and brittle state gradients. We view GRASP as an initial iteration for such planners.\nExtension to diffusion-based world models (deeper latent timesteps can be viewed as smoothed versions of the world model itself), more sophisticated optimizers and noising strategies, and integrating GRASP into either a closed-loop system or RL policy learning for adaptive long-horizon planning are all natural and interesting next steps.\nI do genuinely think it’s an exciting time to be working on world model planners. It’s a funny sweet spot where the background literature (planning and control overall) is incredibly mature and well-developed, but the current setting (pure planning optimization over modern, large-scale world models) is still heavily underexplored. But, once we figure out all the right ideas, world model planners will likely become as commonplace as RL.\nFor more details, read the\nfull paper\nor visit the\nproject website\n.\nCitation\n@article\n{\npsenka2026grasp\n,\ntitle\n=\n{Parallel Stochastic Gradient-Based Planning for World Models}\n,\nauthor\n=\n{Michael Psenka and Michael Rabbat and Aditi Krishnapriyan and Yann LeCun and Amir Bar}\n,\nyear\n=\n{2026}\n,\neprint\n=\n{2602.00475}\n,\narchivePrefix\n=\n{arXiv}\n,\nprimaryClass\n=\n{cs.LG}\n,\nurl\n=\n{https://arxiv.org/abs/2602.00475}\n}",
  "metadata": {
    "title": "Gradient-based Planning for World Models at Longer Horizons – The Berkeley Artificial Intelligence Research Blog",
    "description": "The BAIR Blog",
    "keywords": "",
    "author": "C.K. Wolfe",
    "og:locale": "en_US",
    "og:type": "article",
    "og:title": "Gradient-based Planning for World Models at Longer Horizons",
    "og:description": "The BAIR Blog",
    "og:url": "http://bair.berkeley.edu/blog/2026/04/20/grasp/",
    "og:site_name": "The Berkeley Artificial Intelligence Research Blog",
    "og:image": "https://bair.berkeley.edu/static/blog/grasp/pusht_zoomout.gif",
    "og:image:url": "https://bair.berkeley.edu/static/blog/grasp/pusht_zoomout.gif"
  },
  "paywall": {
    "listed_paid": false,
    "detected": false,
    "marker": "",
    "public_only": false,
    "policy": "付费/会员内容只保留页面公开可见部分，不绕过付费墙"
  },
  "crawl": {
    "success": true,
    "status_code": 200,
    "error": ""
  },
  "code_blocks": [
    {
      "file": "attachments/d54e0ace9313/code/body-000.txt",
      "chars": 326,
      "language": "text"
    }
  ],
  "images": [
    {
      "status": "ok",
      "url": "https://bair.berkeley.edu/static/blog/grasp/ballnav_demo.gif",
      "bytes": 272073,
      "reused": true,
      "local_path": "attachments/d54e0ace9313/images/004.gif",
      "src": "https://bair.berkeley.edu/static/blog/grasp/ballnav_demo.gif",
      "alt": "BallNav demo",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://bair.berkeley.edu/static/blog/grasp/pusht_zoomout.gif",
      "bytes": 1804084,
      "reused": true,
      "local_path": "attachments/d54e0ace9313/images/009.gif",
      "src": "https://bair.berkeley.edu/static/blog/grasp/pusht_zoomout.gif",
      "alt": "Push-T demo",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://bair.berkeley.edu/static/blog/grasp/loss-landscape.jpg",
      "bytes": 187081,
      "reused": true,
      "local_path": "attachments/d54e0ace9313/images/003.jpg",
      "src": "https://bair.berkeley.edu/static/blog/grasp/loss-landscape.jpg",
      "alt": "Loss landscape",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://bair.berkeley.edu/static/blog/grasp/adversarial_animated.gif",
      "bytes": 2823492,
      "reused": true,
      "local_path": "attachments/d54e0ace9313/images/005.gif",
      "src": "https://bair.berkeley.edu/static/blog/grasp/adversarial_animated.gif",
      "alt": "Adversarial example",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://bair.berkeley.edu/static/blog/grasp/manifold_adversarial.gif",
      "bytes": 1183628,
      "reused": true,
      "local_path": "attachments/d54e0ace9313/images/006.gif",
      "src": "https://bair.berkeley.edu/static/blog/grasp/manifold_adversarial.gif",
      "alt": "Adversarial perturbations leave the data manifold",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://bair.berkeley.edu/static/blog/grasp/pusht_adversarial.gif",
      "bytes": 590462,
      "reused": true,
      "local_path": "attachments/d54e0ace9313/images/007.gif",
      "src": "https://bair.berkeley.edu/static/blog/grasp/pusht_adversarial.gif",
      "alt": "Adversarial world model example",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://bair.berkeley.edu/static/blog/grasp/network_diagram.jpg",
      "bytes": 30376,
      "reused": true,
      "local_path": "attachments/d54e0ace9313/images/008.jpg",
      "src": "https://bair.berkeley.edu/static/blog/grasp/network_diagram.jpg",
      "alt": "Network diagram showing high-dim state vs low-dim action",
      "downloaded": true
    }
  ],
  "audio": [],
  "videos": [],
  "links": [
    {
      "href": "https://arxiv.org/abs/1312.6199",
      "label": "Szegedy et al., 2014",
      "type": "a"
    },
    {
      "href": "https://arxiv.org/abs/1412.6572",
      "label": "Goodfellow et al., 2015",
      "type": "a"
    },
    {
      "href": "https://arxiv.org/pdf/1812.00740",
      "label": "Stutz et al., 2019",
      "type": "a"
    },
    {
      "href": "https://arxiv.org/abs/1908.07125",
      "label": "Wallace et al., 2019",
      "type": "a"
    },
    {
      "href": "https://arxiv.org/abs/1905.10615",
      "label": "Gleave et al., 2019",
      "type": "a"
    },
    {
      "href": "https://arxiv.org/pdf/1805.12152",
      "label": "Tsipras et al., 2019",
      "type": "a"
    },
    {
      "href": "https://arxiv.org/pdf/2602.00475",
      "label": "full paper",
      "type": "a"
    },
    {
      "href": "https://www.michaelpsenka.io/grasp/",
      "label": "project website",
      "type": "a"
    }
  ],
  "repair_version": 2,
  "repaired_at": "2026-10-14T10:53:19Z",
  "source_url": "https://bair.berkeley.edu/blog/2026/04/20/grasp/",
  "papers": [
    {
      "status": "ok",
      "url": "https://arxiv.org/pdf/1312.6199",
      "bytes": 6565323,
      "reused": true,
      "local_path": "papers/repair/b53916b781e2548d0cf4.pdf"
    },
    {
      "status": "ok",
      "url": "https://arxiv.org/pdf/1412.6572",
      "bytes": 1036360,
      "reused": true,
      "local_path": "papers/repair/1b6f12d7db56a03ce596.pdf"
    },
    {
      "status": "ok",
      "url": "https://arxiv.org/pdf/1812.00740",
      "bytes": 2319729,
      "reused": false,
      "local_path": "papers/repair/e2c0573b9517b601e39d.pdf"
    },
    {
      "status": "ok",
      "url": "https://arxiv.org/pdf/1908.07125",
      "bytes": 442623,
      "reused": true,
      "local_path": "papers/repair/a4d5a42a5cf1b3e48ede.pdf"
    },
    {
      "status": "ok",
      "url": "https://arxiv.org/pdf/1905.10615",
      "bytes": 6349838,
      "reused": true,
      "local_path": "papers/repair/e04ac9eac847fa10de8a.pdf"
    },
    {
      "status": "ok",
      "url": "https://arxiv.org/pdf/1805.12152",
      "bytes": 6191702,
      "reused": false,
      "local_path": "papers/repair/755547078426c56b7eca.pdf"
    },
    {
      "status": "ok",
      "url": "https://arxiv.org/pdf/2602.00475",
      "bytes": 2997113,
      "reused": false,
      "local_path": "papers/repair/d49d5303ac8cfebcc953.pdf"
    }
  ],
  "actual_video_files": [],
  "body_chars": 19023,
  "expected_body_images": 7,
  "discovery_status": "ok",
  "delivery_status": "ok",
  "missing_reason": "",
  "raw_html": "attachments/d54e0ace9313/pages/source.html",
  "local_html": "attachments/d54e0ace9313/pages/article.html",
  "body_base_path": "attachments/d54e0ace9313/pages/",
  "body_markdown_path": "attachments/d54e0ace9313/pages/article.md"
}