{"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/sequential-monte-carlo-steering-of-large","title":"Sequential Monte Carlo Steering of Large Language Models using Probabilistic Programs","arxiv_id":"2306.03081","date":"2023-06-05","proceeding":null,"authors":["Alexander K. Lew","Tan Zhi-Xuan","Gabriel Grand","Vikash K. Mansinghka"],"abstract":"Even after fine-tuning and reinforcement learning, large language models (LLMs) can be difficult, if not impossible, to control reliably with prompts alone. We propose a new inference-time approach to enforcing syntactic and semantic constraints on the outputs of LLMs, called sequential Monte Carlo (SMC) steering. The key idea is to specify language generation tasks as posterior inference problems in a class of discrete probabilistic sequence models, and replace standard decoding with sequential Monte Carlo inference. For a computational cost similar to that of beam search, SMC can steer LLMs to solve diverse tasks, including infilling, generation under syntactic constraints, and prompt intersection. To facilitate experimentation with SMC steering, we present a probabilistic programming library, LLaMPPL (https://github.com/probcomp/hfppl), for concisely specifying new generation tasks as language model probabilistic programs, and automating steering of LLaMA-family Transformers.","url_abs":"https://arxiv.org/abs/2306.03081v2","url_pdf":"https://arxiv.org/pdf/2306.03081v2.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":"sequential-monte-carlo-steering-of-large","repo_url":"https://github.com/probcomp/hfppl","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"none","reach":{"status":"ok","spdx":"Apache-2.0"}},{"paper_slug":"sequential-monte-carlo-steering-of-large","repo_url":"https://github.com/probcomp/llamppl","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"none","reach":null}],"tasks":[{"task_slug":"language-modeling","task_name":"Language Modeling"},{"task_slug":"language-modelling","task_name":"Language Modelling"},{"task_slug":"probabilistic-programming","task_name":"Probabilistic Programming"},{"task_slug":"text-generation","task_name":"Text Generation"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2306.03081","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2306.03081"}},"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/probcomp/llamppl","reach":null},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/probcomp/hfppl","reach":{"status":"ok","spdx":"Apache-2.0"}}],"summary":{"ran_fixture":2,"unverified":5},"by_repo_kind":{"official":{"samples":7,"ran":2,"repositories":2}},"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":0,"samples":[{"code_sha256_prefix":"010f2215d772a34e","entry":"find_c","repo":"probcomp/llamppl","repo_kind":"official","path":"llamppl/inference/smc_steer.py","file_url":"https://github.com/probcomp/llamppl/blob/HEAD/llamppl/inference/smc_steer.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"010f2215d772a34e"}},{"code_sha256_prefix":"cf0b16980037dd8d","entry":"resample_optimal","repo":"probcomp/llamppl","repo_kind":"official","path":"llamppl/inference/smc_steer.py","file_url":"https://github.com/probcomp/llamppl/blob/HEAD/llamppl/inference/smc_steer.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":"deterministic","behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"cf0b16980037dd8d"}},{"code_sha256_prefix":"7025f498d82408eb","entry":"log_softmax","repo":"probcomp/hfppl","repo_kind":"official","path":"llamppl/util.py","file_url":"https://github.com/probcomp/hfppl/blob/HEAD/llamppl/util.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"7025f498d82408eb"}},{"code_sha256_prefix":"4aa1e61f6833bddb","entry":"logsumexp","repo":"probcomp/hfppl","repo_kind":"official","path":"llamppl/util.py","file_url":"https://github.com/probcomp/hfppl/blob/HEAD/llamppl/util.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"4aa1e61f6833bddb"}},{"code_sha256_prefix":"f0ccf6490adcbcb1","entry":"smc_steer","repo":"probcomp/llamppl","repo_kind":"official","path":"llamppl/inference/smc_steer.py","file_url":"https://github.com/probcomp/llamppl/blob/HEAD/llamppl/inference/smc_steer.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"f0ccf6490adcbcb1"}},{"code_sha256_prefix":"20d709d931c06147","entry":"softmax","repo":"probcomp/hfppl","repo_kind":"official","path":"llamppl/util.py","file_url":"https://github.com/probcomp/hfppl/blob/HEAD/llamppl/util.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"20d709d931c06147"}},{"code_sha256_prefix":"22a3190321a45a49","entry":"submodel","repo":"probcomp/hfppl","repo_kind":"official","path":"llamppl/modeling.py","file_url":"https://github.com/probcomp/hfppl/blob/HEAD/llamppl/modeling.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"22a3190321a45a49"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}