{"about":{"site":"https://codewithpapers.app","non_affiliation":"Code with Papers and Syntology are not affiliated with, endorsed by, or sponsored by Papers with Code, Meta, or the pwc-archive mirror.","licence":"CC BY-SA 4.0","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","attribution":"https://codewithpapers.app/attribution","modified":"archive material modified by Syntology; see the attribution page"},"url":"/paper/nl2plan-robust-llm-driven-planning-from","title":"NL2Plan: Robust LLM-Driven Planning from Minimal Text Descriptions","arxiv_id":"2405.04215","date":"2024-05-07","proceeding":null,"authors":["Elliot Gestrin","Marco Kuhlmann","Jendrik Seipp"],"abstract":"Today's classical planners are powerful, but modeling input tasks in formats such as PDDL is tedious and error-prone. In contrast, planning with Large Language Models (LLMs) allows for almost any input text, but offers no guarantees on plan quality or even soundness. In an attempt to merge the best of these two approaches, some work has begun to use LLMs to automate parts of the PDDL creation process. However, these methods still require various degrees of expert input. We present NL2Plan, the first domain-agnostic offline LLM-driven planning system. NL2Plan uses an LLM to incrementally extract the necessary information from a short text prompt before creating a complete PDDL description of both the domain and the problem, which is finally solved by a classical planner. We evaluate NL2Plan on four planning domains and find that it solves 10 out of 15 tasks - a clear improvement over a plain chain-of-thought reasoning LLM approach, which only solves 2 tasks. Moreover, in two out of the five failure cases, instead of returning an invalid plan, NL2Plan reports that it failed to solve the task. In addition to using NL2Plan in end-to-end mode, users can inspect and correct all of its intermediate results, such as the PDDL representation, increasing explainability and making it an assistive tool for PDDL creation.","url_abs":"https://arxiv.org/abs/2405.04215v1","url_pdf":"https://arxiv.org/pdf/2405.04215v1.pdf","source":{"archive":"pwc-archive (Hugging Face), CC BY-SA 4.0","snapshot":"2025-07-28","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","row_kind":"abstracts"},"code_links":[{"paper_slug":"nl2plan-robust-llm-driven-planning-from","repo_url":"https://github.com/mrlab-ai/NL2Plan","is_official":1,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"none","reach":{"status":"ok","spdx":"GPL-3.0"}}],"tasks":[],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2405.04215","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2405.04215"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-24T18:15:14+00:00","read_at_is":"when the build read Syntology's graph, not when any sample ran","claim":"Per-sample execution status on synthesized fixtures; not a correctness claim about the paper. Samples come from repositories linked to the paper, official or community; repo_kind says which.","repos":[{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/mrlab-ai/NL2Plan","reach":{"status":"ok","spdx":"GPL-3.0"}}],"summary":{"ran":2,"unverified":11},"by_repo_kind":{"official":{"samples":13,"ran":2,"repositories":1}},"repo_kind_vocabulary":{"official":"The archive marks this repository official for the paper","named_in_paper":"The archive records that the paper mentions this repository; it is not marked official","listed":"In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper","found_in_text":"Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted","community":"Not in the archive's code links for this paper; a community repository Syntology harvested"},"n_pointer_only_for_licence":13,"samples":[{"code_sha256_prefix":"bb0361e9be2fd9b1","entry":"error_msg","repo":"mrlab-ai/NL2Plan","repo_kind":"official","path":"NL2Plan/utils/paranthesis_parser.py","file_url":"https://github.com/mrlab-ai/NL2Plan/blob/HEAD/NL2Plan/utils/paranthesis_parser.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"GPL-3.0","inline_ok":false,"mcp_get_code":{"code_sha256":"bb0361e9be2fd9b1"}},{"code_sha256_prefix":"f43310c5b9859c10","entry":"parse_actions","repo":"mrlab-ai/NL2Plan","repo_kind":"official","path":"NL2Plan/action_extraction.py","file_url":"https://github.com/mrlab-ai/NL2Plan/blob/HEAD/NL2Plan/action_extraction.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"GPL-3.0","inline_ok":false,"mcp_get_code":{"code_sha256":"f43310c5b9859c10"}},{"code_sha256_prefix":"c6069203ca313530","entry":"domain_errors","repo":"mrlab-ai/NL2Plan","repo_kind":"official","path":"NL2Plan/utils/cpddl.py","file_url":"https://github.com/mrlab-ai/NL2Plan/blob/HEAD/NL2Plan/utils/cpddl.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"GPL-3.0","inline_ok":false,"mcp_get_code":{"code_sha256":"c6069203ca313530"}},{"code_sha256_prefix":"00909a1d85f42fb2","entry":"domain_errors","repo":"mrlab-ai/NL2Plan","repo_kind":"official","path":"NL2Plan/utils/loki.py","file_url":"https://github.com/mrlab-ai/NL2Plan/blob/HEAD/NL2Plan/utils/loki.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"GPL-3.0","inline_ok":false,"mcp_get_code":{"code_sha256":"00909a1d85f42fb2"}},{"code_sha256_prefix":"3ecf9eecb7f6ecc7","entry":"errors","repo":"mrlab-ai/NL2Plan","repo_kind":"official","path":"NL2Plan/utils/paranthesis_parser.py","file_url":"https://github.com/mrlab-ai/NL2Plan/blob/HEAD/NL2Plan/utils/paranthesis_parser.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"GPL-3.0","inline_ok":false,"mcp_get_code":{"code_sha256":"3ecf9eecb7f6ecc7"}},{"code_sha256_prefix":"e882990aefbe6082","entry":"errors_internal","repo":"mrlab-ai/NL2Plan","repo_kind":"official","path":"NL2Plan/utils/paranthesis_parser.py","file_url":"https://github.com/mrlab-ai/NL2Plan/blob/HEAD/NL2Plan/utils/paranthesis_parser.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"GPL-3.0","inline_ok":false,"mcp_get_code":{"code_sha256":"e882990aefbe6082"}},{"code_sha256_prefix":"1e4b2d02f76da8ec","entry":"get_llm","repo":"mrlab-ai/NL2Plan","repo_kind":"official","path":"NL2Plan/utils/llm_model.py","file_url":"https://github.com/mrlab-ai/NL2Plan/blob/HEAD/NL2Plan/utils/llm_model.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"GPL-3.0","inline_ok":false,"mcp_get_code":{"code_sha256":"1e4b2d02f76da8ec"}},{"code_sha256_prefix":"49365f8743ebaca0","entry":"human_feedback","repo":"mrlab-ai/NL2Plan","repo_kind":"official","path":"NL2Plan/utils/human_feedback.py","file_url":"https://github.com/mrlab-ai/NL2Plan/blob/HEAD/NL2Plan/utils/human_feedback.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"GPL-3.0","inline_ok":false,"mcp_get_code":{"code_sha256":"49365f8743ebaca0"}},{"code_sha256_prefix":"f950d12b67928b57","entry":"parse_hierarchy","repo":"mrlab-ai/NL2Plan","repo_kind":"official","path":"NL2Plan/hierarchy_construction.py","file_url":"https://github.com/mrlab-ai/NL2Plan/blob/HEAD/NL2Plan/hierarchy_construction.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"GPL-3.0","inline_ok":false,"mcp_get_code":{"code_sha256":"f950d12b67928b57"}},{"code_sha256_prefix":"cea022eb8ea06551","entry":"parse_types","repo":"mrlab-ai/NL2Plan","repo_kind":"official","path":"NL2Plan/type_extraction.py","file_url":"https://github.com/mrlab-ai/NL2Plan/blob/HEAD/NL2Plan/type_extraction.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"GPL-3.0","inline_ok":false,"mcp_get_code":{"code_sha256":"cea022eb8ea06551"}},{"code_sha256_prefix":"0ddf2f7a8da73d27","entry":"problem_errors","repo":"mrlab-ai/NL2Plan","repo_kind":"official","path":"NL2Plan/utils/cpddl.py","file_url":"https://github.com/mrlab-ai/NL2Plan/blob/HEAD/NL2Plan/utils/cpddl.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"GPL-3.0","inline_ok":false,"mcp_get_code":{"code_sha256":"0ddf2f7a8da73d27"}},{"code_sha256_prefix":"b91adb1364f93010","entry":"problem_errors","repo":"mrlab-ai/NL2Plan","repo_kind":"official","path":"NL2Plan/utils/loki.py","file_url":"https://github.com/mrlab-ai/NL2Plan/blob/HEAD/NL2Plan/utils/loki.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"GPL-3.0","inline_ok":false,"mcp_get_code":{"code_sha256":"b91adb1364f93010"}},{"code_sha256_prefix":"fce3d3b6f6271c93","entry":"shorten_messages","repo":"mrlab-ai/NL2Plan","repo_kind":"official","path":"NL2Plan/utils/llm_model.py","file_url":"https://github.com/mrlab-ai/NL2Plan/blob/HEAD/NL2Plan/utils/llm_model.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"GPL-3.0","inline_ok":false,"mcp_get_code":{"code_sha256":"fce3d3b6f6271c93"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}