[{"data":1,"prerenderedAt":2390},["ShallowReactive",2],{"knowledge:en:\u002Fknowledge\u002Fgame\u002Fllm\u002Fgame-npc-llm-adoption-boundaries":3,"knowledge-locales:\u002Fknowledge\u002Fgame\u002Fllm\u002Fgame-npc-llm-adoption-boundaries":2389},{"id":4,"title":5,"appliesTo":6,"body":19,"description":2369,"extension":2370,"meta":2371,"navigation":2372,"path":2373,"publishedAt":2374,"seo":2375,"status":2376,"stem":2377,"tags":2378,"technologies":2383,"updatedAt":2387,"__hash__":2388},"knowledge_en\u002Fknowledge\u002Fgame\u002Fllm\u002Fgame-npc-llm-adoption-boundaries.md","A practical path and design boundaries for local LLMs in game NPCs",[7,8,9,10,11,12,13,14,15,16,17,18],"Ollama RC decision GGUFs, Decision 2.0 \u002F 3.0, and EmbeddingGemma 2 CUDA checked on October 13, 2026 JST","WebLLM v0.2.86 Gemma 4 inputs and persistence \u002F recovery boundaries checked on October 12, 2026 (JST)","BehaviorLLM Unity integration and decision-input overflow checked on October 11, 2026","LM Studio decision APIs, Clef backend regression checks, d1, and saved-slot checkpoints checked on October 11, 2026","Busy-slot context protection and NobodyWho Godot v12.1.0 cache management checked on October 11, 2026","wllama 3.8.1, EmbeddingGemma 2, and OpenAI Decisions API checked on October 7, 2026","Clef image input, NobodyWho Godot v12, and saved KV cache compatibility checked on October 6, 2026","Decision APIs, output constraints, PUBG Ally, and Scapegoat checked on October 4, 2026","Ambar Reflex decision-path comparison checked on September 29, 2026","Adaptive Neural Companion and Spark-X2.5 checked on September 18, 2026","Public information available as of 2026-09-03","AI Follower Jessica and K2 Horizon checked on September 6, 2026",{"type":20,"value":21,"toc":2325},"minimark",[22,27,31,34,43,46,50,107,110,114,117,120,130,133,209,216,233,236,240,250,257,313,316,343,347,350,353,370,373,398,413,417,426,487,490,493,499,507,512,543,569,606,637,640,649,683,721,725,758,784,788,816,825,829,850,877,894,908,912,941,966,969,973,994,1036,1044,1047,1050,1054,1077,1100,1114,1126,1130,1133,1159,1162,1171,1175,1184,1187,1193,1199,1202,1268,1271,1274,1277,1281,1309,1313,1321,1330,1333,1344,1347,1351,1360,1363,1366,1370,1391,1394,1397,1401,1409,1412,1415,1431,1434,1441,1445,1448,1456,1459,1505,1513,1517,1526,1530,1543,1552,1560,1569,1573,1590,1594,1602,1609,1613,1616,1694,1703,1707,1710,1730,1733,1758,1761,1765,1785,1788,1792,1811,1820,1824,1845,1864,1868,1871,1874,1891,1894,1898,1901,1904,1927,1930,1947,1950,1954,1963,2005,2029,2032,2036,2039,2057,2060,2063,2067,2070,2073,2079,2082,2102,2105,2109,2144,2148,2321],[23,24,26],"h2",{"id":25},"overview","Overview",[28,29,30],"p",{},"Adding an LLM to game NPCs can support conversations, personalities, memories, and context-sensitive intent proposals that are difficult to express with fixed dialogue alone. If the LLM also controls movement, combat, inventory, and quest progression, however, latency or incorrect output can directly corrupt game state.",[28,32,33],{},"This article does not decide that a particular game should adopt a local LLM. It instead organizes the responsibilities, implementation order, and evaluation criteria that should be separated before adoption. Rather than starting with a model name or parameter count, it focuses on the boundary between conventional game AI and an LLM, interchangeable local and cloud providers, and a practical starting point with one cognitive actor.",[28,35,36,37,42],{},"The models themselves are compared in ",[38,39,41],"a",{"href":40},"\u002Fen\u002Fknowledge\u002Fai\u002Fllm\u002Flocal-llm-landscape-2026","Major local LLMs in 2026",". This article assumes that candidate models exist and concentrates on connecting them to a game safely and deciding adoption through measurement.",[28,44,45],{},"On September 18, 2026, developer material for Adaptive Neural Companion and Spark-X2.5 was checked. The additions cover first-launch inference readiness and another model-evaluation candidate. Earlier examples retain their own information dates; this update is not a new benchmark or a revalidation of every product.",[23,47,49],{"id":48},"conclusions","Conclusions",[51,52,53,57,60,63,66,69,72,75,78,81,84,87,90,93,96,104],"ul",{},[54,55,56],"li",{},"The October 13 check adds the Ollama RC decision-GGUF migration, Decision 2.0 \u002F 3.0, and the EmbeddingGemma 2 CUDA fix. Verify runtime \u002F artifact compatibility, input limits, and rejection fallback; preserve GameState, permission, and expiry checks.",[54,58,59],{},"The October 12 check adds WebLLM v0.2.86 text \u002F audio support and cancellation fixes as a browser evaluation path. Persisting and resuming generation remains separate from validating current GameState and authorizing an action to run again.",[54,61,62],{},"The October 11 check adds LM Studio decision endpoints, d1, and Unity's BehaviorLLM as comparison paths. Numerical output, input overflow, saved-slot restoration, overlapping requests, and SDK cache consistency require distinct tests. Keep game-side state validation and base adoption on measurements.",[54,64,65],{},"The October 7 check adds browser-based wllama and the hosted OpenAI Decisions API as separate ways to evaluate approved options. EmbeddingGemma 2 is a memory-retrieval candidate. Each still requires game-side state and permission checks and workload-specific measurements.",[54,67,68],{},"Ambar Reflex, checked on September 29, is a small author-run experiment in decisions without generated prose. It supports measuring decision accuracy, latency, and game results separately; this update does not revalidate every earlier example.",[54,70,71],{},"AI Follower Jessica is a public mod combining local dialogue, memory, and actions with conventional companion behavior. Its developer guidance makes game\u002FLLM VRAM contention concrete, but is not an independent benchmark.",[54,73,74],{},"Keep game state such as HP, inventory, and position authoritative on the game side.",[54,76,77],{},"Let the LLM propose dialogue or high-level intents, then execute only requests that pass game-side validation.",[54,79,80],{},"Structured output stabilizes the response format, but it does not guarantee that the content is correct for the current game state.",[54,82,83],{},"Handle movement, aiming, collision, and immediate combat with conventional game AI, and invoke the LLM in response to events.",[54,85,86],{},"Put scripted or fake behavior, cloud APIs, and local models behind the same provider boundary.",[54,88,89],{},"Decide adoption from language quality, intent success rate, latency, VRAM, and frame-time impact rather than model size alone.",[54,91,92],{},"A game with many entities does not need an independent LLM actor for every entity.",[54,94,95],{},"Even when an implementation follows sound design principles, measure its performance while the target game is running on the target hardware.",[54,97,98,99,103],{},"Epoch Forge Demo is a downloadable Godot demo whose official Steam page states that it uses a local LLM for NPC dialogue and includes Gemma and ",[100,101,102],"code",{},"llama.cpp",". Public information does not establish the exact checkpoint, quantization, or packaging layout.",[54,105,106],{},"Scapegoat and Cometforge NPC show the shared-small-model and per-NPC-memory pattern reaching an Early Access game. Scapegoat became available as Free To Play on September 29, 2026; availability is not an independent performance evaluation.",[28,108,109],{},"As of the information date, small on-device models can be found in scoped public demos and Early Access games. This does not mean that the same result will hold for every game, an off-the-shelf model, or many simultaneous NPCs.",[23,111,113],{"id":112},"keep-the-game-as-the-sole-authority","Keep the game as the sole authority",[28,115,116],{},"Separate LLM memory from authoritative game state. If the LLM says that an NPC owns a sword, do not treat that statement as inventory truth. Read current inventory, position, HP, relationship values, and quest state from game systems.",[28,118,119],{},"Allow the LLM to propose an intent, not to change state directly.",[121,122,128],"pre",{"className":123,"code":125,"language":126,"meta":127},[124],"language-text","Game Event \u002F Player Input\n  → Context Builder\n  → Cognitive Provider\n      ├─ Scripted \u002F Fake\n      ├─ Cloud API\n      └─ Local Model\n  → Structured Response\n  → Schema Validation\n  → Semantic Validation \u002F Authorization\n  → BT \u002F GOAP \u002F Utility AI, and so on\n  → Game Systems\n","text","",[100,129,125],{"__ignoreMap":127},[28,131,132],{},"For example, suppose the LLM returns this response:",[121,134,138],{"className":135,"code":136,"language":137,"meta":127,"style":127},"language-json shiki shiki-themes github-light github-dark","{\n  \"speech\": \"Please use this weapon.\",\n  \"intent\": \"GiveItem\",\n  \"target\": \"Player\",\n  \"itemId\": \"sword-001\"\n}\n","json",[100,139,140,149,166,179,192,203],{"__ignoreMap":127},[141,142,145],"span",{"class":143,"line":144},"line",1,[141,146,148],{"class":147},"sVt8B","{\n",[141,150,152,156,159,163],{"class":143,"line":151},2,[141,153,155],{"class":154},"sj4cs","  \"speech\"",[141,157,158],{"class":147},": ",[141,160,162],{"class":161},"sZZnC","\"Please use this weapon.\"",[141,164,165],{"class":147},",\n",[141,167,169,172,174,177],{"class":143,"line":168},3,[141,170,171],{"class":154},"  \"intent\"",[141,173,158],{"class":147},[141,175,176],{"class":161},"\"GiveItem\"",[141,178,165],{"class":147},[141,180,182,185,187,190],{"class":143,"line":181},4,[141,183,184],{"class":154},"  \"target\"",[141,186,158],{"class":147},[141,188,189],{"class":161},"\"Player\"",[141,191,165],{"class":147},[141,193,195,198,200],{"class":143,"line":194},5,[141,196,197],{"class":154},"  \"itemId\"",[141,199,158],{"class":147},[141,201,202],{"class":161},"\"sword-001\"\n",[141,204,206],{"class":143,"line":205},6,[141,207,208],{"class":147},"}\n",[28,210,211,212,215],{},"Even if the JSON is valid and ",[100,213,214],{},"intent"," is an allowed enum value, the game must still check the following:",[51,217,218,221,224,227,230],{},[54,219,220],{},"whether the NPC owns the item;",[54,222,223],{},"whether the item can currently be transferred;",[54,225,226],{},"whether the target exists and can receive it;",[54,228,229],{},"whether the request violates quest or game rules; and",[54,231,232],{},"whether the same request has already been processed.",[28,234,235],{},"Reject requests that fail these checks, and fall back to a safe action after the retry limit. Do not write LLM output directly into ECS components or inventory.",[23,237,239],{"id":238},"structured-output-does-not-guarantee-semantic-correctness","Structured output does not guarantee semantic correctness",[28,241,242,243,249],{},"OpenAI's ",[38,244,248],{"href":245,"rel":246},"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fstructured-outputs",[247],"nofollow","Structured Outputs"," can constrain a response to a specified JSON Schema, preventing missing required keys or enum values outside the definition. This is useful for reducing parse failures and strengthening the format-level contract.",[28,251,252,253,256],{},"A schema-compliant ",[100,254,255],{},"GiveItem"," request may still be impossible in the current game state. Separate the following three stages:",[258,259,260,276],"table",{},[261,262,263],"thead",{},[264,265,266,270,273],"tr",{},[267,268,269],"th",{},"Stage",[267,271,272],{},"What it checks",[267,274,275],{},"Primary owner",[277,278,279,291,302],"tbody",{},[264,280,281,285,288],{},[282,283,284],"td",{},"Syntax",[282,286,287],{},"Whether the response is valid JSON",[282,289,290],{},"Serializer",[264,292,293,296,299],{},[282,294,295],{},"Structure",[282,297,298],{},"Whether required fields, types, and enums match",[282,300,301],{},"Structured Output \u002F Schema Validator",[264,303,304,307,310],{},[282,305,306],{},"Semantics and authority",[282,308,309],{},"Whether the action is permitted in the current state",[282,311,312],{},"Game Systems",[28,314,315],{},"Treat function calling the same way: the model proposes a callable operation and its arguments. The game owns the real operation and rechecks arguments and authorization.",[28,317,318,319,324,325,328,329,332,333,338,339,342],{},"Checked on October 4, 2026. Also test whether output constraints were activated successfully. The September 29 prerelease ",[38,320,323],{"href":321,"rel":322},"https:\u002F\u002Fgithub.com\u002Fggml-org\u002Fllama.cpp\u002Freleases\u002Ftag\u002Fb11246",[247],"llama.cpp b11246"," fixes Muse Glimmer ignoring ",[100,326,327],{},"response_format.json_schema"," with ",[100,330,331],{},"--jinja",". Separately, the ",[38,334,337],{"href":335,"rel":336},"https:\u002F\u002Fgithub.com\u002Fgetnamo\u002FLlama-Unreal\u002Fblob\u002Fv1.4.0\u002FREADME.md#grammar-constrained-output-gbnf",[247],"Llama-Unreal v1.4.0 documentation"," says an invalid grammar raises ",[100,340,341],{},"OnError"," code 12 but generation continues unconstrained. Our integration requirement is to reject such responses for state-changing actions and fall back safely. Test invalid constraints and reloads as well as valid JSON; game-state and authorization checks remain necessary. These are proposed regression tests, not tests we performed.",[23,344,346],{"id":345},"separate-reflexive-and-cognitive-processing","Separate reflexive and cognitive processing",[28,348,349],{},"Movement, aiming, avoidance, collision, animation, and damage application must follow frames or fixed ticks and cannot wait for an LLM response. Handle them with predictable game-side systems such as state machines, behavior trees, GOAP, utility AI, or ECS.",[28,351,352],{},"Limit the LLM to high-level decisions whose delay will not stop the simulation:",[51,354,355,358,361,364,367],{},[54,356,357],{},"interpret the player's spoken intent;",[54,359,360],{},"generate dialogue;",[54,362,363],{},"choose a candidate from a set of approved goals;",[54,365,366],{},"summarize important events as memory candidates; and",[54,368,369],{},"request additional observations when needed.",[28,371,372],{},"Invoke the model on events such as conversation start, goal completion, important world events, or relationship changes instead of every frame. Keep conventional AI running while the response is pending, and design timeouts, cancellation, stale-response rejection, and fallback behavior.",[28,374,375,376,381,382,387,388,393,394,397],{},"Checked on October 6, 2026. ",[38,377,380],{"href":378,"rel":379},"https:\u002F\u002Fgithub.com\u002Fnobodywho-ooo\u002Fnobodywho\u002Freleases\u002Ftag\u002Fnobodywho-godot-v12.0.0",[247],"NobodyWho Godot v12.0.0"," is an SDK released on October 5 at 18:21 UTC (October 6 at 03:21 JST). Its ",[38,383,386],{"href":384,"rel":385},"https:\u002F\u002Fgithub.com\u002Fnobodywho-ooo\u002Fnobodywho\u002Fblob\u002Fnobodywho-godot-v12.0.0\u002FCHANGELOG.md",[247],"versioned changelog"," describes a complete Godot API reimplementation, tool calls on the main thread, and asynchronous tools. However, the ",[38,389,392],{"href":390,"rel":391},"https:\u002F\u002Fgithub.com\u002Fnobodywho-ooo\u002Fnobodywho\u002Fblob\u002Fnobodywho-godot-v12.0.0\u002Fdocs\u002Fdocs-godot\u002Ftool-calling.md",[247],"tool documentation"," specifies no tool timeout: ",[100,395,396],{},"stop_generation()"," cannot interrupt an already running tool. A tool that never returns prevents its chat and response stream from completing.",[28,399,400,401,406,407,412],{},"When evaluating this SDK, separate stopping generation from cancelling a game operation. Our proposed design gives tools their own completion deadlines and cancellation handling, then rechecks current GameState, target existence, expiry, cancellation status, authorization, and duplicate processing immediately before a state change, even after a late completion. With one actor, test a tool that never returns, completion after stopping, a removed target, duplicate requests, and fallback. The v12 ",[38,402,405],{"href":403,"rel":404},"https:\u002F\u002Fgithub.com\u002Fnobodywho-ooo\u002Fnobodywho\u002Fblob\u002Fnobodywho-godot-v12.0.0\u002Fnobodywho\u002Fgodot\u002Fnobodywho.gdextension",[247],"manifest"," requires Godot 4.6 or later; distinguish it from the README's 4.5 statement. Check the SDK's ",[38,408,411],{"href":409,"rel":410},"https:\u002F\u002Fgithub.com\u002Fnobodywho-ooo\u002Fnobodywho\u002Fblob\u002Fnobodywho-godot-v12.0.0\u002FLICENSE",[247],"EUPL-1.2"," separately from the chosen GGUF's distribution terms. Main-thread support guarantees neither action validity nor frame time; we have not run the SDK.",[23,414,416],{"id":415},"ambar-reflex-tests-decisions-without-generated-prose","Ambar Reflex tests decisions without generated prose",[28,418,419,420,425],{},"Checked on September 29, 2026. ",[38,421,424],{"href":422,"rel":423},"https:\u002F\u002Fgithub.com\u002Fabxda\u002Fambar-reflex-sistema-1",[247],"Ámbar Reflex \u002F Sistema 1"," is a public experiment using Qwen3.5-4B Q8_0 on an RTX 3060 to evaluate six aspects of game state: movement, jumping, crouching, aiming, shooting, and danger. It uses SemIf-derived logit readout, returns probabilities through a local API, and maps them to controls in game code. It is not evidence of commercial NPC adoption.",[258,427,428,444],{},[261,429,430],{},[264,431,432,435,438,441],{},[267,433,434],{},"Author's real-time evaluation",[267,436,437],{},"Mean stage progress",[267,439,440],{},"Decision latency",[267,442,443],{},"Runs",[277,445,446,460,474],{},[264,447,448,451,454,457],{},[282,449,450],{},"Direct probability readout",[282,452,453],{},"24.9%",[282,455,456],{},"408 ms",[282,458,459],{},"5",[264,461,462,465,468,471],{},[282,463,464],{},"JSON generation with the same 4B model class",[282,466,467],{},"10.3%",[282,469,470],{},"1,041 ms",[282,472,473],{},"3",[264,475,476,479,482,485],{},[282,477,478],{},"Random agent",[282,480,481],{},"4.6%",[282,483,484],{},"—",[282,486,459],{},[28,488,489],{},"The generative baseline runs through Ollama, so matching model size does not make the runtime paths identical. These results depend on a small sample and the question design; they do not establish general NPC performance or model rankings. Static decision accuracy and real-time game progress are separate evaluation dimensions. Even a correct decision can become useless if the state changes before it arrives.",[28,491,492],{},"The following is an architecture proposed in this article for NPC evaluation.",[121,494,497],{"className":495,"code":496,"language":126,"meta":127},[124],"Game state and allowed candidates\n  → Decision model \u002F logit scorer\n  → Candidate evaluations\n  → Game rechecks current state, authorization, and expiry\n  → BT \u002F utility AI executes\n",[100,498,496],{"__ignoreMap":127},[28,500,501,502,506],{},"Removing text generation still leaves input processing, queueing, and GPU contention. Keep stale-response rejection and fallback, and do not authorize actions from probabilities alone. Dialogue can use a separate generative model, but measure the resident memory of multiple models as well. The ",[38,503,505],{"href":504},"\u002Fen\u002Fknowledge\u002Fai\u002Fagents\u002Frepository-centered-agent-harness","agent harness article"," compares decision readouts and runtime paths.",[508,509,511],"h3",{"id":510},"compare-versioned-decision-apis","Compare versioned decision APIs",[28,513,514,515,520,521,524,525,530,531,536,537,542],{},"Checked on October 4, 2026. ",[38,516,519],{"href":517,"rel":518},"https:\u002F\u002Fgithub.com\u002Follama\u002Follama\u002Freleases\u002Ftag\u002Fv0.35.0",[247],"Ollama v0.35.0"," added ",[100,522,523],{},"\u002Fv1\u002Fsystemone"," for Nimble and Tev1. Upstream ",[38,526,529],{"href":527,"rel":528},"https:\u002F\u002Fgithub.com\u002Fggml-org\u002Fllama.cpp\u002Freleases\u002Ftag\u002Fb11361",[247],"llama.cpp b11361",", released on October 2 UTC, added the endpoint for Laya, Julia-1, Lev, OpenJev, and Kev. October 3 builds added ",[38,532,535],{"href":533,"rel":534},"https:\u002F\u002Fgithub.com\u002Fggml-org\u002Fllama.cpp\u002Freleases\u002Ftag\u002Fb11364",[247],"Nimble in b11364"," and ",[38,538,541],{"href":539,"rel":540},"https:\u002F\u002Fgithub.com\u002Fggml-org\u002Fllama.cpp\u002Freleases\u002Ftag\u002Fb11371",[247],"Clef \u002F Clef Flash in b11371",". These llama.cpp releases are prereleases, not new model announcements or evidence that Ambar uses this API.",[28,544,545,550,551,556,557,562,563,568],{},[38,546,549],{"href":547,"rel":548},"https:\u002F\u002Fgithub.com\u002Fggml-org\u002Fllama.cpp\u002Fpull\u002F29831",[247],"Clef support PR #29831"," provided text-only GGUF execution in b11371, with one sequence per batch. The October 6, 2026 check confirms that the October 5 prerelease ",[38,552,555],{"href":553,"rel":554},"https:\u002F\u002Fgithub.com\u002Fggml-org\u002Fllama.cpp\u002Freleases\u002Ftag\u002Fb11418",[247],"b11418"," includes ",[38,558,561],{"href":559,"rel":560},"https:\u002F\u002Fgithub.com\u002Fggml-org\u002Fllama.cpp\u002Fpull\u002F29969",[247],"image-input PR #29969",". The same day's non-prerelease ",[38,564,567],{"href":565,"rel":566},"https:\u002F\u002Fgithub.com\u002Fggml-org\u002Fllama.cpp\u002Freleases\u002Ftag\u002Fv0.6.0",[247],"v0.6.0"," also includes it. This is image support in the runtime path, not a new model announcement.",[28,570,571,572,577,578,581,582,585,586,591,592,597,598,601,602,605],{},"The ",[38,573,576],{"href":574,"rel":575},"https:\u002F\u002Fgithub.com\u002Fggml-org\u002Fllama.cpp\u002Fblob\u002Fb11418\u002Ftools\u002Fserver\u002FREADME.md#post-v1systemone-typesafe-compatible-system-one-api",[247],"b11418 API documentation"," requires a compatible projector loaded through ",[100,579,580],{},"--mmproj"," and images supplied as data URLs. No streaming, no free-text generation, and no guaranteed probability calibration for your data remain important boundaries. Clef evaluates questions jointly, and Clef and Laya require the whole prompt to fit ",[100,583,584],{},"--ubatch-size",". The ",[38,587,590],{"href":588,"rel":589},"https:\u002F\u002Fgithub.com\u002Fggml-org\u002Fllama.cpp\u002Fblob\u002Fb11418\u002Fsrc\u002Fmodels\u002Fclef.cpp",[247],"same build's Clef implementation"," still assumes one sequence. The earlier October 3 prerelease ",[38,593,596],{"href":594,"rel":595},"https:\u002F\u002Fgithub.com\u002Fggml-org\u002Fllama.cpp\u002Freleases\u002Ftag\u002Fb11379",[247],"b11379"," fixed a Laya server abort by limiting ",[100,599,600],{},"n_batch"," to ",[100,603,604],{},"n_ubatch",".",[28,607,608,609,612,613,618,619,624,625,630,631,636],{},"Use a matching ",[100,610,611],{},"llama-server"," build, a GGUF containing the updated template, and a compatible projector. The PR review says older GGUFs need reconversion; the ",[38,614,617],{"href":615,"rel":616},"https:\u002F\u002Fhuggingface.co\u002Fggml-org\u002FClef-Flash-GGUF\u002Fcommit\u002F4a192915ef971886004b5b13294f2b4c7a7fc39d",[247],"Clef Flash distribution diff"," confirms updated model files and added projectors. The ",[38,620,623],{"href":621,"rel":622},"https:\u002F\u002Fhuggingface.co\u002Fggml-org\u002FClef-Flash-GGUF\u002Ftree\u002Fmain",[247],"file listing"," reports a 6.49 GB Q4_K_M model and a separate 624 MB Q8_0 projector, not total required RAM \u002F VRAM. Distinguish the ",[38,626,629],{"href":627,"rel":628},"https:\u002F\u002Fhuggingface.co\u002FCloudflare\u002Fclef-flash",[247],"model card's"," Apache-2.0 statement from the ",[38,632,635],{"href":633,"rel":634},"https:\u002F\u002Fgithub.com\u002Fggml-org\u002Fllama.cpp\u002Fblob\u002Fb11418\u002FLICENSE",[247],"runtime's MIT license",", and check the model's original LICENSE and distribution conditions before bundling it in a product.",[28,638,639],{},"Start with one allowed text intent and compare Japanese inputs, no matching option, stale GameState, timeouts, and fallback. When adding images, compare the same images and text, and test rejection and fallback for images that conflict with GameState, stale images, oversized input, and an unloaded projector. These are proposed tests, not measurements we performed. Runtime support does not establish redistribution permission or incorporation of these specific upstream features into LM Studio; latency, total memory, and concurrent-game performance remain unmeasured. Keep the game-side authority boundary even when the API returns a confident choice.",[28,641,642,643,648],{},"Checked on October 11, 2026. ",[38,644,647],{"href":645,"rel":646},"https:\u002F\u002Fgithub.com\u002Follama\u002Follama\u002Fpull\u002F18776\u002Ffiles",[247],"Ollama PR #18776",", incorporated in the v0.40.0 path, rejects oversized Clef MLX input with HTTP 400 after counting expanded image tokens, without partially preparing question rows. Laya counts state, questions, options, and reserved tokens and rejects overflow rather than truncating it. These particular implementations are not universal backend guarantees. Compare requests just below \u002F above the limit, image expansion, and late invalid questions; the game should reject missing important state and fall back. The upstream tests have not been run by us.",[28,650,651,652,556,657,662,663,668,669,674,675,678,679,682],{},"Checked on October 11, 2026. Test numerical results as well as valid response formats. The October 7 prerelease ",[38,653,656],{"href":654,"rel":655},"https:\u002F\u002Fgithub.com\u002Fggml-org\u002Fllama.cpp\u002Freleases\u002Ftag\u002Fb11475",[247],"llama.cpp b11475",[38,658,661],{"href":659,"rel":660},"https:\u002F\u002Fgithub.com\u002Fggml-org\u002Fllama.cpp\u002Fpull\u002F30100",[247],"PR #30100",", fixing Metal matrix-multiply \u002F add fusion. On the author's M1 Max and Clef Flash Q8_0 question, a probability changed from 0.284 to 0.977, matching CPU. Non-prerelease ",[38,664,667],{"href":665,"rel":666},"https:\u002F\u002Fgithub.com\u002Follama\u002Follama\u002Freleases\u002Ftag\u002Fv0.40.1",[247],"Ollama v0.40.1",", published October 7 at 23:22 UTC (October 8 at 08:22 JST), includes ",[38,670,673],{"href":671,"rel":672},"https:\u002F\u002Fgithub.com\u002Follama\u002Follama\u002Fpull\u002F18777",[247],"PR #18777",", using 64-bit file seeks to fix Windows weight reads past 2 GiB and a ",[100,676,677],{},"non-finite logit"," failure. That author's test used Windows 11 CPU; GPU backends and a separate ",[100,680,681],{},"cannot open model"," failure were unverified. These are upstream observations, not our reproductions or Japanese calibration measurements. Compare choices and probabilities, non-finite values, and errors across CPU and the target backend with identical model artifacts, questions, candidates, and context. Mutual incorporation of the fixes and adoption by LM Studio \u002F game SDKs remain unconfirmed. Preserve game-state validation.",[28,684,685,686,691,692,697,698,700,701,706,707,710,711,716,717,720],{},"Checked on October 13, 2026 JST. Prerelease ",[38,687,690],{"href":688,"rel":689},"https:\u002F\u002Fgithub.com\u002Follama\u002Follama\u002Freleases\u002Ftag\u002Fv0.40.4-rc0",[247],"Ollama v0.40.4-rc0",", published October 12 at 19:00:12 UTC (October 13 at 04:00:12 JST), incorporates ",[38,693,696],{"href":694,"rel":695},"https:\u002F\u002Fgithub.com\u002Follama\u002Follama\u002Fpull\u002F18917",[247],"PR #18917",": GGUF decision requests go directly to llama.cpp's ",[100,699,523],{},", including model-specific prompt construction. ",[38,702,705],{"href":703,"rel":704},"https:\u002F\u002Fgithub.com\u002Follama\u002Follama\u002Fblob\u002Fv0.40.4-rc0\u002Fserver\u002Froutes.go#L889-L903",[247],"Format validation"," rejects old GGUFs missing required decision metadata and Clef in the old ",[100,708,709],{},"qwen35"," format; ",[38,712,715],{"href":713,"rel":714},"https:\u002F\u002Fgithub.com\u002Follama\u002Follama\u002Fblob\u002Fv0.40.4-rc0\u002Fdecision\u002Fsystemone.go#L32-L53",[247],"shared validation"," standardizes ",[100,718,719],{},"score"," at 2–10 levels. Updated models are to be published separately; availability of the complete set remains unconfirmed. Re-pulling is not a guaranteed fix. Pin the runtime and model digest, and verify compatible artifact availability, rejection, and fallback.",[508,722,724],{"id":723},"add-decision-20-30-to-compact-decision-path-comparisons","Add Decision 2.0 \u002F 3.0 to compact decision-path comparisons",[28,726,727,728,733,734,739,740,745,746,751,752,757],{},"Checked on October 13, 2026 JST. ",[38,729,732],{"href":730,"rel":731},"https:\u002F\u002Fhuggingface.co\u002Fvllm-sr\u002FDecision-2.0-Kai-0.6B",[247],"Decision-2.0-Kai-0.6B"," is a 0.60B text \u002F JSON model for choices, yes\u002Fno judgments, and ratings, with 8,192-token context; its ",[38,735,738],{"href":736,"rel":737},"https:\u002F\u002Fhuggingface.co\u002Fvllm-sr\u002FDecision-2.0-Kai-0.6B-GGUF",[247],"official Q4_K_M GGUF"," is 401 MB. ",[38,741,744],{"href":742,"rel":743},"https:\u002F\u002Fhuggingface.co\u002Fvllm-sr\u002Fd3-edge",[247],"Decision 3.0's d3-edge"," totals 0.59B including its vision encoder, with a ",[38,747,750],{"href":748,"rel":749},"https:\u002F\u002Fhuggingface.co\u002Fvllm-sr\u002Fd3-edge\u002Ftree\u002Fmain",[247],"1.19 GB BF16 main weight file",". File sizes are not total RAM \u002F VRAM requirements. Initial model publication timestamps remain unconfirmed. Separate the cards' Apache-2.0 statements from runtime terms; we could not retrieve ",[38,753,756],{"href":754,"rel":755},"https:\u002F\u002Fhuggingface.co\u002Fvllm-sr\u002Fd3-edge\u002Fblob\u002Fmain\u002FLICENSE",[247],"d3's individual LICENSE"," in this check, so verify it before bundling.",[28,759,760,761,536,766,771,772,777,778,783],{},"Runtime support arrives in the October 12 JST prereleases ",[38,762,765],{"href":763,"rel":764},"https:\u002F\u002Fgithub.com\u002Fggml-org\u002Fllama.cpp\u002Freleases\u002Ftag\u002Fb11571",[247],"llama.cpp b11571 (Decision 2)",[38,767,770],{"href":768,"rel":769},"https:\u002F\u002Fgithub.com\u002Fggml-org\u002Fllama.cpp\u002Freleases\u002Ftag\u002Fb11572",[247],"b11572 (d3)",". Prerelease ",[38,773,776],{"href":774,"rel":775},"https:\u002F\u002Fgithub.com\u002Fggml-org\u002Fllama.cpp\u002Freleases\u002Ftag\u002Fb11577",[247],"b11577",", published October 13 at 07:55 JST, fixes d3 with multiple sequences. The ",[38,779,782],{"href":780,"rel":781},"https:\u002F\u002Fgithub.com\u002Fggml-org\u002Fllama.cpp\u002Fblob\u002Fb11577\u002Ftools\u002Fserver\u002FREADME.md",[247],"b11577 API documentation"," requires d3's whole prompt to fit one ubatch and a compatible projector for images; Decision 2 requires a question's options and the prompt ending to fit one batch. The d3 card's video support does not establish video support in this runtime. Compare short allowed Japanese intents, option ordering, stale GameState, oversized input, missing projectors, multiple sequences, and late-result disposal. Preserve state, permission, and expiry checks. We have not run the models or runtime, or measured accuracy, calibration, total memory, latency, or concurrent-game performance.",[508,785,787],{"id":786},"include-lm-studios-local-decision-endpoints","Include LM Studio's local decision endpoints",[28,789,790,791,796,797,799,800,803,804,809,810,815],{},"Checked on October 11, 2026. The October 8 notes for ",[38,792,795],{"href":793,"rel":794},"https:\u002F\u002Flmstudio.ai\u002Fchangelog\u002Flmstudio\u002Flmstudio-v0.4.26",[247],"LM Studio 0.4.26 Build 4"," add Jev-compatible ",[100,798,523],{}," and OpenAI-compatible ",[100,801,802],{},"\u002Fv1\u002Fdecisions","; the ",[38,805,808],{"href":806,"rel":807},"https:\u002F\u002Flmstudio.ai\u002Fdownload",[247],"regular download page"," offers 0.4.26. This adds a local-server comparison path, not local open weights for OpenAI's cloud model or evidence of equal quality and latency. The ",[38,811,814],{"href":812,"rel":813},"https:\u002F\u002Flmstudio.ai\u002Fdocs\u002Fapp\u002Fsystem-requirements",[247],"general requirements"," cover Apple Silicon \u002F macOS 14+, Windows x64 with AVX2 or ARM, and Linux x64 \u002F ARM64 on Ubuntu 20.04+. Match the app, engine, and decision model; the exact supported combinations, images \u002F audio, refusals, streaming, and concurrency remain unverified. Build 2's engine 2.50.0 \u002F upstream b11337 does not establish Build 4's installed configuration.",[28,817,818,819,824],{},"For one allowed intent, pin the app, engine, model, and inputs, then test rejection, oversized input, timeouts, and stale-result disposal. We have not run the binaries or measured Japanese accuracy, total RAM \u002F VRAM, p95 \u002F p99, or rendering contention. Existing build-specific llama.cpp records above remain valid; provision of an endpoint does not prove every newer upstream fix or feature is incorporated. Check ",[38,820,823],{"href":821,"rel":822},"https:\u002F\u002Flmstudio.ai\u002Fapp-terms",[247],"app terms"," separately from model terms; API prototyping does not establish permission to bundle the app with a game.",[508,826,828],{"id":827},"evaluate-d1-3b-as-a-compact-visual-decision-model","Evaluate d1-3B as a compact visual decision model",[28,830,831,832,837,838,843,844,849],{},"Checked on October 11, 2026. Liquid AI's ",[38,833,836],{"href":834,"rel":835},"https:\u002F\u002Fwww.liquid.ai\u002Fblog\u002Fd1-open",[247],"October 7 announcement"," releases d1-3B and d1-omni-600M weights. The ",[38,839,842],{"href":840,"rel":841},"https:\u002F\u002Fhuggingface.co\u002FLiquidAI\u002Fd1-3B",[247],"d1-3B card"," specifies 3.12B total parameters, text \u002F image input, and 32,768-token context for choices, yes\u002Fno judgments, and ratings, rather than dialogue. ",[38,845,848],{"href":846,"rel":847},"https:\u002F\u002Fhuggingface.co\u002FLiquidAI\u002Fd1-3B-GGUF\u002Ftree\u002Fmain",[247],"Official GGUF files"," include a 1.67 GB Q4_K_M model, 2.87 GB Q8_0 model, and a separate 583 MB Q8_0 projector. These are file sizes, not required total RAM \u002F VRAM.",[28,851,852,853,858,859,864,865,870,871,873,874,876],{},"Prerelease ",[38,854,857],{"href":855,"rel":856},"https:\u002F\u002Fgithub.com\u002Fggml-org\u002Fllama.cpp\u002Freleases\u002Ftag\u002Fb11483",[247],"llama.cpp b11483"," adds 3B support on October 8 at 02:45 UTC (11:45 JST); ",[38,860,863],{"href":861,"rel":862},"https:\u002F\u002Fgithub.com\u002Fggml-org\u002Fllama.cpp\u002Freleases\u002Ftag\u002Fb11488",[247],"b11488"," adds omni at 04:16 UTC (13:16 JST). These are runtime release dates, separate from the model launch. Follow the ",[38,866,869],{"href":867,"rel":868},"https:\u002F\u002Fhuggingface.co\u002FLiquidAI\u002Fd1-3B-GGUF",[247],"GGUF usage example"," with a matching ",[100,872,611],{},", exact GGUF, projector for images, and ",[100,875,523],{},". The card's 8 ms figure is the developer's RTX 4090 \u002F BF16 \u002F warm \u002F CUDA-graph median over 20 repetitions, not GGUF latency, p95 \u002F p99, or concurrent-game performance.",[28,878,571,879,884,885,887,888,893],{},[38,880,883],{"href":881,"rel":882},"https:\u002F\u002Fgithub.com\u002Fggml-org\u002Fllama.cpp\u002Fblob\u002Fb11488\u002Ftools\u002Fserver\u002FREADME.md#post-v1systemone-typesafe-compatible-system-one-api",[247],"b11488 API"," does not stream and handles d1 questions independently; do not carry over the Python path's joint-question throughput. Its whole-prompt ",[100,886,584],{}," restriction applies to omni, and omni truncates prompts to 16,384 tokens. Reject oversized input in game code before important state is lost, rather than generalizing another runtime's explicit overflow error. ",[38,889,892],{"href":890,"rel":891},"https:\u002F\u002Fhuggingface.co\u002FLiquidAI\u002Fd1-omni-600M",[247],"d1-omni-600M"," is an experimental 587M checkpoint accepting text plus images or text plus audio, never both media in a single request. With images, state \u002F question text is cut to 896 tokens; audio is cut to 30 seconds and was trained in English. We have not confirmed every omni file size or its individual LICENSE, and defer Japanese-audio adoption.",[28,895,896,897,536,902,907],{},"The cards state LFM Open License v1.0. Check the ",[38,898,901],{"href":899,"rel":900},"https:\u002F\u002Fhuggingface.co\u002FLiquidAI\u002Fd1-3B-GGUF\u002Fblob\u002Fmain\u002FLICENSE",[247],"3B distribution LICENSE",[38,903,906],{"href":904,"rel":905},"https:\u002F\u002Fwww.liquid.ai\u002Flfm-license",[247],"official license text",", including revenue-based commercial conditions, notices, attribution, and redistribution, separately from the runtime's MIT terms. Start with short Japanese inputs and an English control, no matching choice, option reordering, stale GameState, contradictory images, overflow, and late results after timeout. Japanese accuracy, quantized calibration, cold \u002F warm latency, total memory, p95 \u002F p99, and frame time remain unmeasured; neither model is an adoption recommendation.",[508,909,911],{"id":910},"evaluate-wllama-as-an-in-browser-decision-path","Evaluate wllama as an in-browser decision path",[28,913,914,915,920,921,926,927,930,931,936,937,940],{},"Checked on October 7, 2026. The non-prerelease ",[38,916,919],{"href":917,"rel":918},"https:\u002F\u002Fgithub.com\u002Fngxson\u002Fwllama\u002Freleases\u002Ftag\u002F3.8.1",[247],"wllama 3.8.1",", published October 2 at 14:20 UTC (23:20 JST), adds a path for running decision models in the browser without a separate local server. Its ",[38,922,925],{"href":923,"rel":924},"https:\u002F\u002Fgithub.com\u002Fngxson\u002Fwllama\u002Fblob\u002F3.8.1\u002Fsrc\u002Fwllama.ts",[247],"versioned API",", ",[100,928,929],{},"createSystemOne",", returns results from state and typed questions. Image input is unsupported, and the ",[38,932,935],{"href":933,"rel":934},"https:\u002F\u002Fgithub.com\u002Fngxson\u002Fwllama\u002Fblob\u002F3.8.1\u002Fsrc\u002Ftypes\u002Foai-compat.ts",[247],"parameter definition"," has no streaming or ",[100,938,939],{},"AbortSignal"," fields. Do not transfer chat-API features or later llama.cpp Clef image support to this path.",[28,942,571,943,948,949,954,955,960,961,605],{},[38,944,947],{"href":945,"rel":946},"https:\u002F\u002Fgithub.com\u002Fngxson\u002Fwllama\u002Fblob\u002F3.8.1\u002FREADME.md",[247],"same version's README"," describes Wasm SIMD CPU execution, WebGPU, and inference in workers. Multithreading requires COOP \u002F COEP; with a 2 GB per-file limit, splitting files into chunks of 512 MB or less is recommended. The ",[38,950,953],{"href":951,"rel":952},"https:\u002F\u002Fgithub.com\u002Fngxson\u002Fwllama\u002Fblob\u002F3.8.1\u002Fexamples\u002Fdecision\u002Findex.html",[247],"decision example"," marks Kev-4B and Lev as requiring WebGPU. Its ",[38,956,959],{"href":957,"rel":958},"https:\u002F\u002Fhuggingface.co\u002Fconvaiinnovations\u002Flaya",[247],"original Laya model"," is the English version; do not assign it another multilingual checkpoint's capabilities or assume Japanese quality. Check model redistribution terms separately from the ",[38,962,965],{"href":963,"rel":964},"https:\u002F\u002Fgithub.com\u002Fngxson\u002Fwllama\u002Fblob\u002F3.8.1\u002FLICENCE",[247],"SDK's MIT license",[28,967,968],{},"For a web-targeted experiment, start with one intent and compare Japanese inputs with an English control. Separately test initial JS \u002F Wasm \u002F GGUF downloads, cache reuse, interrupted downloads, cache deletion, and offline restarts. Fall back in game code on a timeout and discard stale results that arrive later. In-browser execution alone guarantees neither offline operation after download, cancellation, nor coexistence with rendering on the CPU \u002F GPU. We have not measured Japanese accuracy, total memory, p95 \u002F p99 latency, or frame time.",[508,970,972],{"id":971},"webllm-separates-generation-recovery-from-game-state-recovery","WebLLM separates generation recovery from game-state recovery",[28,974,975,976,981,982,987,988,993],{},"Checked on October 12, 2026 (JST). ",[38,977,980],{"href":978,"rel":979},"https:\u002F\u002Fgithub.com\u002Fmlc-ai\u002Fweb-llm\u002Freleases\u002Ftag\u002Fv0.2.86",[247],"WebLLM v0.2.86",", published October 11 UTC, adds Gemma 4 E2B text \u002F audio input and fixes interrupted conversations, stream cancellation, and model locks. The resumability implementation was merged into main in ",[38,983,986],{"href":984,"rel":985},"https:\u002F\u002Fgithub.com\u002Fmlc-ai\u002Fweb-llm\u002Fpull\u002F859",[247],"PR #859"," on September 13 and shipped in v0.2.86 on October 11. The preceding release, ",[38,989,992],{"href":990,"rel":991},"https:\u002F\u002Fgithub.com\u002Fmlc-ai\u002Fweb-llm\u002Freleases\u002Ftag\u002Fv0.2.85",[247],"v0.2.85",", was published September 8, before that merge. Distinguish integration into main from availability in a published version: resumability is a new release feature in v0.2.86.",[28,995,571,996,1001,1002,1007,1008,1011,1012,1017,1018,1023,1024,1029,1030,1035],{},[38,997,1000],{"href":998,"rel":999},"https:\u002F\u002Fgithub.com\u002Fmlc-ai\u002Fweb-llm\u002Fblob\u002Fv0.2.86\u002Fsrc\u002Fconfig.ts#L1023-L1055",[247],"versioned catalog"," pairs MLC weights, manifests, and compiled WebGPU libraries, rather than GGUF. It points to ",[38,1003,1006],{"href":1004,"rel":1005},"https:\u002F\u002Fhuggingface.co\u002Fmlc-ai\u002Fgemma-4-E2B-it-q4f16_1-MLC",[247],"q4f16_1",", which requires ",[100,1009,1010],{},"shader-f16",", and a separate ",[38,1013,1016],{"href":1014,"rel":1015},"https:\u002F\u002Fhuggingface.co\u002Fmlc-ai\u002Fgemma-4-E2B-it-q4f32_1-MLC",[247],"q4f32_1"," that does not. Both catalog entries set context to 4,096. The ",[38,1019,1022],{"href":1020,"rel":1021},"https:\u002F\u002Fgithub.com\u002Fmlc-ai\u002Fbinary-mlc-llm-libs\u002Fblob\u002F00fe7a40e57e5e8eb9fef87526a4bf28ad5846c0\u002Fweb-llm-models\u002Fv0_2_86\u002Fconfigs\u002Fgemma-4-E2B-it-q4f16_1_cs512-webgpu.json",[247],"release build configuration"," sets audio to 16 kHz and at most 480,000 samples, equivalent to 30 seconds; the q4f32_1 snapshot matches. The release-linked ",[38,1025,1028],{"href":1026,"rel":1027},"https:\u002F\u002Fgithub.com\u002Fakaashrp\u002Fmlc-llm\u002Fblob\u002F42fa855891fcb5825bf0911047d7c91e8234abd1\u002Fpython\u002Fmlc_llm\u002Fmodel\u002Fgemma4\u002Fgemma4_loader.py",[247],"compiler loader"," excludes vision weights. Do not infer image support from Gemma's original modalities. ",[38,1031,1034],{"href":1032,"rel":1033},"https:\u002F\u002Fregistry.npmjs.org\u002F@mlc-ai\u002Fweb-llm\u002F0.2.86",[247],"npm metadata"," confirms this package version and its Apache-2.0 declaration, but the individual model LICENSE and total weight size could not be retrieved. Runtime compatibility establishes neither redistribution permission nor total RAM \u002F VRAM requirements.",[28,1037,571,1038,1043],{},[38,1039,1042],{"href":1040,"rel":1041},"https:\u002F\u002Fgithub.com\u002Fmlc-ai\u002Fweb-llm\u002Fblob\u002Fv0.2.86\u002Fdocs\u002Fuser\u002Fresumable_generation.rst",[247],"v0.2.86 recovery contract"," is opt-in, text-only, and single-choice. Images, grammar \u002F JSON \u002F structural-tag constraints, and custom LogitProcessors are rejected; audio support above is not resumable audio support. Same-origin OPFS stores the prompt, tokens, text patches, and RNG state. Recovery can import compatible KV checkpoints or re-prefill and replay saved tokens. Model \u002F tokenizer \u002F weights \u002F configuration fingerprints are not implemented, so an identical model ID does not verify artifact identity.",[28,1045,1046],{},"WebLLM does not encrypt this journal or automatically delete it by TTL. Deleting a session leaves the active runtime's prefix cache separate. Browser storage eviction can lose data; relaxed durability can lose an unflushed suffix, and best-effort persistence can stop saving while generation continues. Close a started stream explicitly; abandoning its iterator does not reliably release locks.",[28,1048,1049],{},"For an NPC experiment, pin the artifacts and test interruption, tab crashes, explicit cancellation, storage failure, and deletion separately with one actor. Recovered model text is not authoritative GameState or permission to repeat an action. Recheck actor \u002F request identity, current state, permissions, expiry, and whether the action already ran; discard stale proposals or use game-side fallback. This is a proposed integration boundary, not a demonstrated WebLLM game deployment. Japanese quality, recovery latency, total memory, and rendering contention remain unmeasured by us.",[508,1051,1053],{"id":1052},"use-openai-decisions-api-as-a-cloud-comparison-path","Use OpenAI Decisions API as a cloud comparison path",[28,1055,1056,1057,1062,1063,1068,1069,1072,1073,1076],{},"Checked on October 7, 2026. OpenAI's ",[38,1058,1061],{"href":1059,"rel":1060},"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fchangelog",[247],"October 6 changelog"," announced the Decisions API beta. The ",[38,1064,1067],{"href":1065,"rel":1066},"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fdecisions",[247],"official guide"," describes a public beta supporting ",[100,1070,1071],{},"gpt-6-luna",". Send text or images and questions to ",[100,1074,1075],{},"POST \u002Fv1\u002Fdecisions"," to receive typed judgments rather than generated prose. Evaluate it as a hosted API, separately from local inference or downloadable open weights.",[28,1078,571,1079,1084,1085,1088,1089,1092,1093,1095,1096,1099],{},[38,1080,1083],{"href":1081,"rel":1082},"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Freference\u002Fresources\u002Fdecisions\u002Fmethods\u002Fcreate",[247],"API specification"," provides ",[100,1086,1087],{},"predicate"," for an estimated truth probability, ",[100,1090,1091],{},"choice"," for selecting from supplied options, and ",[100,1094,719],{}," for an ordered rubric. A score is the probability-weighted mean of zero-based rubric levels and may be fractional; it is not a contract for generating an arbitrary number or an authoritative GameState fact. Images must be inline base64 data URLs. External image URLs, file IDs, audio, and tool \u002F function calls are unsupported by this endpoint. Individual questions can return ",[100,1097,1098],{},"refusal",", so never assume every answer contains a number or selection.",[28,1101,1102,1103,536,1108,1113],{},"The guide claims approximately 10× faster decisions than Responses API but provides no measurement setup, absolute latency, or p95 \u002F p99 figures. Attribute this comparison to OpenAI rather than converting it into NPC completion latency including network, queues, and validation. At the check date, the base price is US$0.10 per million input tokens, with no cache-read, cache-write, or output-token charges. The ",[38,1104,1107],{"href":1105,"rel":1106},"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fpricing",[247],"pricing conditions",[38,1109,1112],{"href":1110,"rel":1111},"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fmodels\u002Fgpt-6-luna",[247],"model documentation"," double the input rate for the whole request above 272K input tokens and add 10% for supported regional processing. Do not reuse ordinary Responses API prices; recheck current terms before adoption.",[28,1115,1116,1117,1119,1120,1125],{},"An NPC application is a design proposal here. For example, use ",[100,1118,1091],{}," to select an approved goal or evaluate candidates, while keeping dialogue generation and action execution separate. Send only necessary context and include ",[38,1121,1124],{"href":1122,"rel":1123},"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fyour-data",[247],"API data-retention conditions"," in product requirements. Outbound text and images, authentication, spend limits, and connectivity failures also distinguish this path from local execution. Use a rules-based fallback for refusals, timeouts, or network failures, and revalidate GameState, permissions, and expiry when a result arrives. Compare decision quality, p95 \u002F p99, and cost per event using the same candidates and inputs. We have not measured NPC performance with this API.",[23,1127,1129],{"id":1128},"what-pubg-ally-demonstrates","What PUBG Ally demonstrates",[28,1131,1132],{},"KRAFTON's PUBG Ally is a useful example of separating local inference from conventional game AI. NVIDIA's June 2026 article describes the following design:",[51,1134,1135,1138,1141,1144,1147,1150,1153,1156],{},[54,1136,1137],{},"speech recognition, a 2B small language model, and speech synthesis run on device;",[54,1139,1140],{},"inference starts from player speech or a game event;",[54,1142,1143],{},"a behavior tree handles movement, aiming, and immediate combat;",[54,1145,1146],{},"the language model interprets player intent, coordinates, and produces speech;",[54,1148,1149],{},"current game state comes from observation tools;",[54,1151,1152],{},"the scope is limited to one map, one mode, and fixed item categories;",[54,1154,1155],{},"task-specific data is produced with a larger teacher model and distilled into the 2B model; and",[54,1157,1158],{},"the client model is quantized, and NVIDIA reports that the full system can run on GPUs with 8 GB of VRAM.",[28,1160,1161],{},"This is not evidence that any off-the-shelf 2B model is sufficient for NPCs. The result combines a closed game world, task-specific data, distillation, quantization, behavior trees, observation tools, and evaluation with real players. The 8 GB figure is a vendor-reported condition for this example, not a general hardware recommendation for every game or model.",[28,1163,1164,1165,1170],{},"Checked on October 4, 2026. The developer's ",[38,1166,1169],{"href":1167,"rel":1168},"https:\u002F\u002Farxiv.org\u002Fhtml\u002F2609.29837v1",[247],"PUBG Ally paper",", Appendix C, describes non-blocking action dispatch and later completion, failure, or abort events, keeping low-level control in the game. Its RTX 4060-class measurements report about 1.6–2.1 GB for locale-specific 4-bit LM weights plus working KV cache (Table 9), not total game memory. Treat this as evidence for explicit execution feedback and separate memory accounting, not proof of many simultaneous NPCs. We have not reproduced the measurements or established Japanese quality or performance in another game.",[23,1172,1174],{"id":1173},"local-multimodal-llm-turns-the-principles-into-an-implementation","Local Multimodal LLM turns the principles into an implementation",[28,1176,1177,1178,1183],{},"Volley Studios' ",[38,1179,1182],{"href":1180,"rel":1181},"https:\u002F\u002Fgithub.com\u002Fisundahl\u002FLLM_Plugin",[247],"Local Multimodal LLM"," is a beta C++ plugin for Unreal Engine 5.8.1 and Win64, released on August 25, 2026. It processes player speech or text, a local LLM response, and speech synthesis offline. It uses llama.cpp for GGUF inference, bundles CPU and Vulkan runtimes, and distributes a CUDA 12 accelerator separately. It does not require a cloud API or Python runtime during play.",[28,1185,1186],{},"The plugin is useful as an architectural reference because it implements the boundaries described in this article through Blueprint and C++ APIs rather than stopping at a conversation demo.",[121,1188,1191],{"className":1189,"code":1190,"language":126,"meta":127},[124],"Player Speech \u002F Text\n  → STT (for voice input)\n  → Shared Local LLM\n      └─ Character Sheet \u002F Context \u002F Memory Session per NPC\n  → Text Response \u002F Typed, Allow-listed Tool Call\n  → Validation by Game Code\n  → Game Systems\n  → TTS (for voice output)\n",[100,1192,1190],{"__ignoreMap":127},[28,1194,1195,1196,605],{},"One loaded model is shared by multiple character sessions while context, conversational memory, and KV state are separated per NPC. Tool calls are restricted by type and an allow-list; the model is not allowed to execute arbitrary Unreal functions or console commands. Game code validates requests that would change game state before executing them. This is a concrete implementation of ",[100,1197,1198],{},"Shared Model → Per-NPC Context \u002F Memory → Structured Tool Call → Validation → Game System",[28,1200,1201],{},"The starter model pack is about 3.25 GiB including speech input and output. Its documentation lists the following components:",[258,1203,1204,1218],{},[261,1205,1206],{},[264,1207,1208,1211,1214],{},[267,1209,1210],{},"Role",[267,1212,1213],{},"Starter configuration",[267,1215,1217],{"align":1216},"right","Stated size",[277,1219,1220,1235,1246,1257],{},[264,1221,1222,1225,1232],{},[282,1223,1224],{},"LLM",[282,1226,1227,1228,1231],{},"Gemma 4 E2B IT QAT, Unsloth ",[100,1229,1230],{},"UD-Q4_K_XL"," GGUF",[282,1233,1234],{"align":1216},"2.50 GB",[264,1236,1237,1240,1243],{},[282,1238,1239],{},"Speech-to-text",[282,1241,1242],{},"Parakeet Unified English 0.6B INT8, sherpa-onnx export",[282,1244,1245],{"align":1216},"633 MB",[264,1247,1248,1251,1254],{},[282,1249,1250],{},"Text-to-speech",[282,1252,1253],{},"Pocket TTS INT8, sherpa-onnx export",[282,1255,1256],{"align":1216},"194 MB",[264,1258,1259,1262,1265],{},[282,1260,1261],{},"Starter voices",[282,1263,1264],{},"Four Pocket TTS reference voices",[282,1266,1267],{"align":1216},"about 2.8 MiB",[28,1269,1270],{},"The plugin core is about 80.5 MiB, and the optional CUDA 12 accelerator is about 922.1 MiB. The plugin's code and documentation use Apache License 2.0, while models, audio assets, and native runtimes retain their own licenses and notices.",[28,1272,1273],{},"The roughly 3.25 GiB figure is distributed model data, not minimum VRAM, peak inference memory, frame rate while a game is running, or time to first token. Public materials do not provide measurements that can be generalized to co-residency with a rendered game. It is a useful example of packaging a compact voice-conversation stack, but a product evaluation still needs separate CPU, Vulkan, and CUDA measurements for VRAM, CPU Main, GPU Frame, and response time.",[28,1275,1276],{},"The starter configuration also has clear boundaries. The default Gemma manifest disables vision and native audio input to the model; speech is handled through separate STT and TTS components. Image input is a development feature that requires a compatible projector and manifest supplied by the developer. MTP speculative decoding is not yet implemented in the runtime. The provided binaries focus on Win64 and are not a portable solution for other operating systems or Unity.",[508,1278,1280],{"id":1279},"compare-unity-action-boundaries-with-behaviorllm","Compare Unity action boundaries with BehaviorLLM",[28,1282,1283,1284,1289,1290,1295,1296,1298,1299,1302,1303,1308],{},"Checked on October 11, 2026. Unity's non-prerelease ",[38,1285,1288],{"href":1286,"rel":1287},"https:\u002F\u002Fgithub.com\u002Ffaelion\u002FBehaviorLLM\u002Freleases\u002Ftag\u002Fv0.6.0",[247],"BehaviorLLM v0.6.0",", published September 22 at 00:07 UTC (09:07 JST), adds named action arguments, runtime restrictions to an allowed action subset, and argument validation. The ",[38,1291,1294],{"href":1292,"rel":1293},"https:\u002F\u002Fgithub.com\u002Ffaelion\u002FBehaviorLLM\u002Fblob\u002Fv0.6.0\u002Fpackage.json",[247],"package"," targets Unity 6000.0+, a local ",[100,1297,611],{},", and compatible GGUF; samples additionally need AI Navigation \u002F Input System. Existing string-based handlers must account for the breaking change to ",[100,1300,1301],{},"ActionArguments",". This is an integration candidate, not proof of correct GameState semantics. Test one actor with invalid arguments, stale state, timeouts, and fallback. The ",[38,1304,1307],{"href":1305,"rel":1306},"https:\u002F\u002Fgithub.com\u002Ffaelion\u002FBehaviorLLM\u002Fblob\u002Fv0.6.0\u002FLICENSE.md",[247],"package's MIT license"," does not cover model or asset terms. We have not tested a production build, Japanese quality, long sessions, memory, or concurrent rendering.",[23,1310,1312],{"id":1311},"epoch-forge-demo-makes-a-local-llm-part-of-a-public-demos-requirements","Epoch Forge Demo makes a local LLM part of a public demo's requirements",[28,1314,1315,1320],{},[38,1316,1319],{"href":1317,"rel":1318},"https:\u002F\u002Fstore.steampowered.com\u002Fapp\u002F5171320\u002FEpoch_Forge_Demo\u002F",[247],"Epoch Forge Demo"," is a free demo released on Steam on August 31, 2026. According to the developer's Steam description, NPC chat responses are generated by a local LLM that runs alongside the game, with prewritten lines used as well. Responses use personality, past interactions with the player, job, and location. The product description also states that NPCs account for who witnessed events and that information can spread to other NPCs.",[28,1322,1323,1324,1326,1327,1329],{},"The same official Steam page states that the demo was made with Godot Engine, includes Gemma under the Gemma Terms, and includes ",[100,1325,102],{}," under the MIT License. This primary source establishes that a downloadable demo makes local-LLM NPC dialogue a product requirement and uses Gemma with ",[100,1328,102],{},". It does not establish the exact checkpoint name, quantization, file size, runtime packaging, internal call sequence, context management, inter-NPC queue, or game-state validation design.",[28,1331,1332],{},"The developer lists 8 GB of RAM and 2 GB of VRAM as minimum requirements, and 16 GB of RAM with at least 4 GB of VRAM as recommended. It also states that systems without a supported GPU can generate dialogue on the CPU, with a temporary frame-rate drop while a response is generated. This is a concrete example of distributing a local-LLM game for mainstream gaming PCs, but it is not an independent benchmark of model-only VRAM use or stable frame time.",[28,1334,1335,1336,1341,1342,605],{},"The page for the unreleased full version of ",[38,1337,1340],{"href":1338,"rel":1339},"https:\u002F\u002Fstore.steampowered.com\u002Fapp\u002F5062230\u002FEpoch_Forge\u002F",[247],"Epoch Forge"," says that the local LLM will also be used for the global economy, events, NPC dialogue and behavior, and storyteller choices. Those broader functions are not confirmed as implemented in the public demo. What can be established for the demo is the hybrid use of local-LLM NPC chat and prewritten lines, plus the official disclosure that it uses Gemma and ",[100,1343,102],{},[28,1345,1346],{},"Public materials do not provide the model's parameter count or size, time to first token, generation speed, peak inference VRAM, scheduling under simultaneous NPC requests, or long-term memory consistency. Epoch Forge Demo matters not because it proves those problems are solved, but because it makes local-LLM NPC dialogue part of a public demo intended for mainstream PCs.",[23,1348,1350],{"id":1349},"ai-follower-jessica-adds-a-local-cognitive-layer-to-an-existing-game","AI Follower Jessica adds a local cognitive layer to an existing game",[28,1352,1353,1354,1359],{},"Checked on September 6, 2026. ",[38,1355,1358],{"href":1356,"rel":1357},"https:\u002F\u002Fwww.nexusmods.com\u002Ffallout4\u002Fmods\u002F108257",[247],"AI Follower Jessica"," is a public Fallout 4 mod released on August 22 and updated to v0.1.12 on September 3. The author describes local dialogue, speech, persistent memory, and autonomous object interactions, with Qwen3-4B-Instruct-2507 Q6_K GGUF and Vulkan llama.cpp as the default. Conventional companion behavior remains underneath. This supports the design interpretation of an added cognitive layer, but does not establish every validation, authorization, timeout, or fallback mechanism required here.",[28,1361,1362],{},"The author's 8 GB VRAM guidance reduces context or texture use, or offloads layers to system RAM. These are configuration suggestions, not our measurements of stable game performance. The author recommends non-thinking mode for replacement Qwen3.5\u002F3.6 models because of latency and possible think-block leakage into dialogue, speech, or actions. Evaluate output suitability as well as fluency.",[28,1364,1365],{},"This is a mod, not a commercial-game adoption case. Its asset permissions prohibit use in mods\u002Ffiles sold for money; consult the original permissions separately from the model license. Existing examples retain their own information dates and were not all revalidated in this update.",[23,1367,1369],{"id":1368},"adaptive-neural-companion-makes-inference-readiness-explicit","Adaptive Neural Companion makes inference readiness explicit",[28,1371,1372,1373,1378,1379,1382,1383,1386,1387,1390],{},"The developer's ",[38,1374,1377],{"href":1375,"rel":1376},"https:\u002F\u002Fitch.io\u002Fdevlog\u002F1664565\u002Fv3136r56-major-update-local-qwen-auto-install-full-qwen-conversation-pipeline.amp",[247],"September 15 update"," for Adaptive Neural Companion describes a downloadable Windows 3D companion that prepares Ollama, fetches ",[100,1380,1381],{},"qwen2.5:7b-instruct"," if missing, and tests real inference before allowing ",[100,1384,1385],{},"QWEN_READY"," and launching the 3D environment. Missing or invalid model replies are rejected, and unavailable inference is reported as ",[100,1388,1389],{},"QWEN_UNAVAILABLE",". Initial setup requires downloads; local inference does not mean an offline first launch.",[28,1392,1393],{},"The developer assigns memory and conversation to the Qwen pipeline while retaining deterministic control of game authority, battle state, and slash commands in the host. This is useful distribution and startup guidance, not an independently reproduced performance result or an audit of its implementation. The update does not establish minimum VRAM, frame time, or language quality; do not derive a gaming-GPU recommendation from model size alone.",[28,1395,1396],{},"Rejecting canned dialogue presented as a model response is separate from keeping gameplay alive through a fallback. For an integration based on this article, explicitly identify unavailable inference while conventional AI continues, and test interrupted downloads, inference timeouts, and recovery. These are our design requirements, not claims that the companion implements all of them.",[23,1398,1400],{"id":1399},"scapegoat-and-cometforge-npc-reach-early-access","Scapegoat and Cometforge NPC reach Early Access",[28,1402,514,1403,1408],{},[38,1404,1407],{"href":1405,"rel":1406},"https:\u002F\u002Fstore.steampowered.com\u002Fapp\u002F4895860\u002FScapegoat\u002F",[247],"Scapegoat"," is an Unreal Engine mystery game released as Free To Play in Early Access on September 29, 2026. According to its developer's Steam description, the single-player game includes six suspect NPCs. Humans define the characters, crime, evidence, and story, while the LLM generates conversations at runtime. The default is a bundled on-device model, with options to use the player's own local model or a cloud model. Speech recognition also runs locally.",[28,1410,1411],{},"The LLM does not generate the crime or the game rules themselves. It improvises conversation within a human-authored murder, evidence set, personalities, and secrets, separating deterministic game structure from generated content. The public Early Access build can now be evaluated, although we have not installed or tested it. Steam states that multiplayer does not use AI.",[28,1413,1414],{},"The developer lists Windows 10 \u002F 11 64-bit, 8 GB RAM, a DX12 GPU with 4 GB VRAM, and 5 GB storage as minimum requirements. It recommends 6 GB VRAM and describes at least 6 GB as appropriate for the on-device NPC. Example recommended GPUs are the RTX 2060 and RX 5700. These are Steam product requirements, not a published benchmark of model-only VRAM, frame time, time to first token, or long-session stability.",[28,1416,1417,1422,1423,1425,1426,1428,1429,605],{},[38,1418,1421],{"href":1419,"rel":1420},"https:\u002F\u002Ftntholley.com\u002Fcometforge-npc-documentation\u002F",[247],"Cometforge NPC",", presented as the foundation for Scapegoat, is a plugin for Unreal Engine 5.7 and Win64. Its on-device mode bundles Ministral 3 3B Instruct Q4_K_M as an approximately 2 GB GGUF and runs it through embedded ",[100,1424,102],{}," and Vulkan. The model can be replaced with another ",[100,1427,102],{},"-compatible GGUF, while BYOM mode can connect to an OpenAI-compatible local server such as LM Studio or ",[100,1430,611],{},[28,1432,1433],{},"The key design is to share one model across the cast while separating memory by NPC. Cometforge describes working, episodic, semantic, and procedural memory; salience; decay; consolidation; and persistence to disk. Its documentation states that storage, retrieval, and injection of memory into each turn are deterministic system operations, and that autonomous tool choice is not guaranteed for small models.",[28,1435,1436,1437,1440],{},"This is a concrete example of the ",[100,1438,1439],{},"Shared Local LLM → Per-NPC Context \u002F Memory → Deterministic Game Logic"," boundary. Public information does not establish that Scapegoat's current build uses the exact Ministral 3 3B Q4_K_M checkpoint from Cometforge's default on-device configuration. It establishes that Cometforge presents Scapegoat as a real-game example and that the plugin's default on-device configuration uses Ministral 3 3B; the two checkpoints should not be assumed to be identical.",[23,1442,1444],{"id":1443},"gamescom-2026-made-hybrid-architectures-more-concrete","gamescom 2026 made hybrid architectures more concrete",[28,1446,1447],{},"At gamescom dev 2026, Tencent presented a dual-brain FPS agent combining an LLM with reinforcement learning. The LLM handles semantic understanding, tactics, and high-level player commands, while RL handles real-time decisions and controls. This resembles the separation between a cognitive layer and reflexive execution described in this article.",[28,1449,1450,1451,1455],{},"NVIDIA also announced that ",[1452,1453,1454],"em",{},"Aniimo"," is expected to add NVIDIA ACE support in early 2027 and run a fine-tuned Nemotron SLM on the player's GPU. The SLM interprets intent from natural language or speech and calls behavior APIs exposed by the game.",[28,1457,1458],{},"The two examples reinforce this boundary:",[258,1460,1461,1471],{},[261,1462,1463],{},[264,1464,1465,1468],{},[267,1466,1467],{},"Role of AI",[267,1469,1470],{},"Role retained by the game",[277,1472,1473,1481,1489,1497],{},[264,1474,1475,1478],{},[282,1476,1477],{},"Understand the meaning of a situation",[282,1479,1480],{},"Maintain authoritative game state",[264,1482,1483,1486],{},[282,1484,1485],{},"Generate high-level goals or intents",[282,1487,1488],{},"Validate type, range, and current-state constraints",[264,1490,1491,1494],{},[282,1492,1493],{},"Interpret natural-language commands",[282,1495,1496],{},"Execute low-latency movement, combat, and animation",[264,1498,1499,1502],{},[282,1500,1501],{},"Propose candidate actions",[282,1503,1504],{},"Decide whether execution is allowed and its result",[28,1506,1507,1508,1512],{},"Tencent's FPS agent was a conference demo, and Aniimo is a planned integration. They are not evidence for production latency, error rates, concurrent actor counts, or load while sharing a GPU. ",[38,1509,1511],{"href":1510},"\u002Fen\u002Fknowledge\u002Fgame\u002Fresearch\u002Fgamescom-2026-game-ai-landscape","The state of game AI at gamescom 2026"," separately describes their maturity and other AI use cases.",[23,1514,1516],{"id":1515},"define-evaluation-metrics-before-model-size","Define evaluation metrics before model size",[28,1518,1519,1520,1525],{},"Small models are promising for VRAM and latency, but parameter count alone cannot decide adoption. Google's ",[38,1521,1524],{"href":1522,"rel":1523},"https:\u002F\u002Fai.google.dev\u002Fgemma\u002Fdocs\u002Ffunctiongemma",[247],"FunctionGemma"," is a 270M model specialized for function calling, and its documentation targets users with defined APIs who will fine-tune it for a specific task. Being small is not the same as producing suitable NPC dialogue in the required language without additional training.",[508,1527,1529],{"id":1528},"lfm25-26b-is-an-evaluation-candidate-not-evidence-for-adoption","LFM2.5-2.6B is an evaluation candidate, not evidence for adoption",[28,1531,1532,1533,1538,1539,1542],{},"Liquid AI's ",[38,1534,1537],{"href":1535,"rel":1536},"https:\u002F\u002Fhuggingface.co\u002FLiquidAI\u002FLFM2.5-2.6B",[247],"LFM2.5-2.6B"," targets tool use and multi-step tasks. Its official QAD Q4_0 file is about 1.59 GB, making it a concrete small candidate for a ",[100,1540,1541],{},"Local Model"," provider. It also fits the boundary in this article: propose an intent or tool call, validate it, then hand it to a behavior tree or GOAP.",[28,1544,1545,1546,1551],{},"QAD is a way to recover quality that would otherwise be lost through 4-bit quantization, while ",[38,1547,1550],{"href":1548,"rel":1549},"https:\u002F\u002Fwww.liquid.ai\u002Fblog\u002Flfm2.5-dspark",[247],"DSpark"," uses an assistant model to accelerate generation. Neither guarantees that a proposed intent is correct for the current game state or that NPC language, personality, and long-term memory will be good. The official DSpark result used an FP16 GGUF on an M4 Max; it is not a measurement of QAD Q4_0 on Windows while sharing hardware with a rendered game.",[28,1553,1554,1559],{},[38,1555,1558],{"href":1556,"rel":1557},"https:\u002F\u002Flmstudio.ai\u002Fchangelog\u002Flmstudio\u002Flmstudio-v0.4.22",[247],"LM Studio 0.4.22"," added assistant-drafter support for DSpark, DFlash, and MTP with llama.cpp engine 2.29.1 or later. This makes it easier to prototype LFM2.5-2.6B with DSpark from LM Studio's GUI or local server. It does not mean bundling LM Studio with a game, and the published 2.27-times average speedup comes from a different M4 Max configuration. Depending on assistant-model acceptance and hardware, the combination may instead be slower.",[28,1561,1562,1563,1568],{},"An evaluation should compare the intent success rate of QAD Q4_0 with regular Q4_0. Treat the practical quality and speed comparison with Q4_K_M as a separate experiment, and compare p95 and p99 response times with and without DSpark. Do not infer co-residency from weight size alone; measure VRAM, CPU Main, GPU Frame, and queueing while the game runs. LFM Open License v1.0 has commercial terms based on annual revenue, so review the ",[38,1564,1567],{"href":1565,"rel":1566},"https:\u002F\u002Fdocs.liquid.ai\u002Flfm\u002Fhelp\u002Fmodel-license",[247],"official license explanation"," before product use.",[508,1570,1572],{"id":1571},"k2-horizon-is-an-additional-evaluation-candidate","K2 Horizon is an additional evaluation candidate",[28,1574,1575,1576,536,1581,1586,1587,605],{},"As checked on September 6, 2026, ",[38,1577,1580],{"href":1578,"rel":1579},"https:\u002F\u002Fhuggingface.co\u002FIFM\u002FK2-Horizon-3.7B",[247],"K2 Horizon 3.7B",[38,1582,1585],{"href":1583,"rel":1584},"https:\u002F\u002Fhuggingface.co\u002FIFM\u002FK2-Horizon-7B",[247],"7B"," are additional candidates. Agent benchmarks do not establish NPC suitability. Compare Japanese dialogue, persona consistency, intent accuracy, reasoning effort, completion latency, and game co-residency against existing candidates. Model and runtime details are in the ",[38,1588,1589],{"href":40},"local LLM overview",[508,1591,1593],{"id":1592},"spark-x25-and-memory-saving-methods-need-separate-npc-tests","Spark-X2.5 and memory-saving methods need separate NPC tests",[28,1595,1596,1601],{},[38,1597,1600],{"href":1598,"rel":1599},"https:\u002F\u002Fgithub.com\u002FXHToken\u002FSpark-X2.5",[247],"Spark-X2.5 4B \u002F 1.7B"," is another compact Agent candidate as of September 18, 2026. Its developer evaluations use thinking mode. Tool Calling scores alone do not establish Japanese dialogue, persona consistency, correct intent selection, or low latency. Compare with existing candidates under the same game state, schema, context, and output budget, recording reasoning settings and total response time.",[28,1603,1604,1605,1608],{},"Bonsai 2's low-bit weights and Edge0's SSD expert streaming are covered in the ",[38,1606,1607],{"href":40},"local-LLM article",". Lower weight size or active memory does not establish co-residency with a rendered game. Measure queueing under concurrent NPC requests and frame-time impact; for streaming, include storage contention and cold\u002Fwarm cache behavior. These are evaluation directions, not confirmed game integrations.",[508,1610,1612],{"id":1611},"shared-evaluation-metrics","Shared evaluation metrics",[28,1614,1615],{},"Compare candidates with the same scenarios, schema, and game state. Record at least the following:",[258,1617,1618,1628],{},[261,1619,1620],{},[264,1621,1622,1625],{},[267,1623,1624],{},"Area",[267,1626,1627],{},"Example metrics",[277,1629,1630,1638,1646,1654,1662,1670,1678,1686],{},[264,1631,1632,1635],{},[282,1633,1634],{},"Dialogue quality",[282,1636,1637],{},"Natural language, persona consistency, verbosity, prohibited text",[264,1639,1640,1643],{},[282,1641,1642],{},"Intent",[282,1644,1645],{},"Intent success rate, target accuracy, refusal rate, invalid-request rate",[264,1647,1648,1651],{},[282,1649,1650],{},"Output suitability",[282,1652,1653],{},"Think blocks or unexpected text entering dialogue, speech, or actions",[264,1655,1656,1659],{},[282,1657,1658],{},"Grounding",[282,1660,1661],{},"Agreement with observations, stale-state references, unsupported assumptions",[264,1663,1664,1667],{},[282,1665,1666],{},"Latency",[282,1668,1669],{},"Time to first token, completion time including reasoning, and queue p50, p95, and p99",[264,1671,1672,1675],{},[282,1673,1674],{},"Game performance",[282,1676,1677],{},"CPU Main, GPU Frame, VRAM, reserved memory, and frame spikes",[264,1679,1680,1683],{},[282,1681,1682],{},"Operations",[282,1684,1685],{},"Offline behavior, timeout, crash recovery, logging, reproducibility",[264,1687,1688,1691],{},[282,1689,1690],{},"Distribution",[282,1692,1693],{},"Model and runtime licenses, build size, supported GPUs and operating systems",[28,1695,1696,1697,1702],{},"Cloud APIs introduce network latency, usage cost, connection failure, and questions about transmitted data. Local inference introduces VRAM contention, model distribution, initial loading, hardware variability, and update management. The relevant comparison is not the ChatGPT application, but cloud APIs such as the ",[38,1698,1701],{"href":1699,"rel":1700},"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fmodels\u002Fall",[247],"OpenAI API model catalog"," versus models bundled with the game or run in a local process.",[23,1704,1706],{"id":1705},"a-shared-model-does-not-remove-per-npc-costs","A shared model does not remove per-NPC costs",[28,1708,1709],{},"The model weights do not need to be loaded separately for every NPC; one model can be shared while requests enter a queue. Sharing the model does not remove these costs:",[51,1711,1712,1715,1718,1721,1724,1727],{},[54,1713,1714],{},"building context for each NPC or actor;",[54,1716,1717],{},"loading conversation history or memory;",[54,1719,1720],{},"retaining or recomputing KV cache;",[54,1722,1723],{},"waiting in the queue;",[54,1725,1726],{},"inference time for input and output tokens; and",[54,1728,1729],{},"discarding and reissuing responses that become stale.",[28,1731,1732],{},"Evaluate “one model can be shared” separately from “many NPCs can think simultaneously at low cost.” Define maximum concurrent requests, priority, cancellation rules, and per-actor rate limits, and include queue wait in response-time measurements.",[28,1734,1735,1736,1741,1742,1747,1748,1751,1752,1757],{},"Checked on October 6, 2026. Configurations that save and reuse KV \u002F session files also need restoration compatibility tests when changing runtime versions. ",[38,1737,1740],{"href":1738,"rel":1739},"https:\u002F\u002Fgithub.com\u002Fggml-org\u002Fllama.cpp\u002Fpull\u002F28498",[247],"llama.cpp PR #28498",", merged on October 5, is included in that day's prerelease ",[38,1743,1746],{"href":1744,"rel":1745},"https:\u002F\u002Fgithub.com\u002Fggml-org\u002Fllama.cpp\u002Freleases\u002Ftag\u002Fb11411",[247],"b11411"," and non-prerelease ",[38,1749,567],{"href":565,"rel":1750},[247],". It saves KV cache rotation settings and rejects restoration when they differ; the author states that previously saved caches become incompatible. The ",[38,1753,1756],{"href":1754,"rel":1755},"https:\u002F\u002Fgithub.com\u002Fggml-org\u002Fllama.cpp\u002Fblob\u002Fb11411\u002Finclude\u002Fllama.h",[247],"saved-state formats"," also changed from Session 10 to 11 and Sequence 3 to 4.",[28,1759,1760],{},"Only when using this persistence mechanism, pin the GGUF, KV types, rotation settings, and runtime, then test whether a rejected old cache or settings mismatch can be rebuilt from authoritative conversation history to resume safely. Do not keep the old cache as the only persistent data. This compatibility issue is separate from natural-language long-term memory or game save data in general. We have not verified adoption by existing SDKs, restoration time, or concurrent-game performance.",[508,1762,1764],{"id":1763},"check-checkpoint-reuse-and-recovery-after-restoring-a-slot","Check checkpoint reuse and recovery after restoring a slot",[28,1766,642,1767,1772,1773,1778,1779,1784],{},[38,1768,1771],{"href":1769,"rel":1770},"https:\u002F\u002Fgithub.com\u002Fggml-org\u002Fllama.cpp\u002Fpull\u002F26004",[247],"llama.cpp PR #26004",", merged October 8, preserves context checkpoints across slot save \u002F restore for SWA \u002F hybrid models, avoiding full reprocessing of a shared prefix after checkpoint loss. The prerelease ",[38,1774,1777],{"href":1775,"rel":1776},"https:\u002F\u002Fgithub.com\u002Fggml-org\u002Fllama.cpp\u002Freleases\u002Ftag\u002Fb11507",[247],"b11507",", published October 8 at 15:27 UTC (October 9 at 00:27 JST), provides executable distributions containing the change; b11506 was checked as a tag \u002F source only. The ",[38,1780,1783],{"href":1781,"rel":1782},"https:\u002F\u002Fgithub.com\u002Fggml-org\u002Fllama.cpp\u002Fblob\u002Fb11507\u002Ftools\u002Fserver\u002Fserver-context.cpp",[247],"versioned implementation"," adds checkpoint payloads, size checks for damaged data, full reprocessing when checkpoint restoration fails, draft-cache disposal for incompatible draft KV types, and error reporting for incomplete saves. This does not override the earlier saved-format incompatibility described above.",[28,1786,1787],{},"Only for a matching server, checkpoint-based model, and slot-save configuration with enough disk space, test save→another conversation→restart→restore→prefix divergence, damaged files, and changed draft KV types. Compare reprocessed tokens, restoration time, responses, and fallback; retain authoritative history for reconstruction and GameState \u002F permission checks. Upstream timing reports are not our measurements. Persistent natural-language memory accuracy, Japanese quality, total memory, concurrent-game performance, and adoption by SDKs \u002F Ollama \u002F LM Studio remain unverified.",[508,1789,1791],{"id":1790},"protect-the-context-of-a-busy-slot","Protect the context of a busy slot",[28,1793,1794,1795,1800,1801,1806,1807,1810],{},"Checked on October 11, 2026. Prerelease ",[38,1796,1799],{"href":1797,"rel":1798},"https:\u002F\u002Fgithub.com\u002Fggml-org\u002Fllama.cpp\u002Freleases\u002Ftag\u002Fb11552",[247],"llama.cpp b11552",", published October 10 at 19:52 UTC (October 11 at 04:52 JST), includes ",[38,1802,1805],{"href":1803,"rel":1804},"https:\u002F\u002Fgithub.com\u002Fggml-org\u002Fllama.cpp\u002Fpull\u002F30295",[247],"PR #30295",". A later request pinned to a busy ",[100,1808,1809],{},"id_slot"," could load a different RAM prompt-cache match before being deferred, changing the context of an ongoing generation. The fix leaves the busy slot untouched while the request waits. This concerns overlapping requests with explicit slot IDs and RAM prompt caching; it is separate from restoring saved slots.",[28,1812,1813,1814,1819],{},"Using a fixed server build and compatible GGUF, send distinguishable actor \u002F request identifiers to the same slot during a long generation. Check response crossings, queue time, and disposal of late results after a timeout. Even valid structured output does not prove that it was generated from the intended request's context; recheck actor identity, current GameState, permissions, and expiry. Published regression tests and users' limited test reports are not our measurements or guarantees for every model. Japanese quality, p95 \u002F p99, total memory, concurrent-game performance, and adoption by Ollama \u002F LM Studio \u002F game SDKs remain unverified. Check ",[38,1815,1818],{"href":1816,"rel":1817},"https:\u002F\u002Fgithub.com\u002Fggml-org\u002Fllama.cpp\u002Fblob\u002Fb11552\u002FLICENSE",[247],"runtime MIT terms"," separately from model redistribution terms.",[508,1821,1823],{"id":1822},"nobodywho-v121-distinguishes-history-from-inference-cache","NobodyWho v12.1 distinguishes history from inference cache",[28,1825,1826,1827,1832,1833,1838,1839,1844],{},"Checked on October 11, 2026. The non-prerelease ",[38,1828,1831],{"href":1829,"rel":1830},"https:\u002F\u002Fgithub.com\u002Fnobodywho-ooo\u002Fnobodywho\u002Freleases\u002Ftag\u002Fnobodywho-godot-v12.1.0",[247],"NobodyWho Godot v12.1.0",", published October 9 at 11:57 UTC (20:57 JST), provides an SDK ZIP. ",[38,1834,1837],{"href":1835,"rel":1836},"https:\u002F\u002Fgithub.com\u002Fnobodywho-ooo\u002Fnobodywho\u002Fpull\u002F796",[247],"PR #796"," synchronizes the KV cache and its internal record, fixes stale text after replies and images, and distinguishes M-RoPE token counts from position counts. ",[38,1840,1843],{"href":1841,"rel":1842},"https:\u002F\u002Fgithub.com\u002Fnobodywho-ooo\u002Fnobodywho\u002Fpull\u002F803",[247],"PR #803"," reuses end-of-user-message checkpoints for recurrent \u002F hybrid models and supports rollback after rejected MTP drafts. These are in-memory changes within a chat, not proof of actor isolation, disk-slot recovery, or accurate persistent memory.",[28,1846,571,1847,1852,1853,1858,1859,1863],{},[38,1848,1851],{"href":1849,"rel":1850},"https:\u002F\u002Fgithub.com\u002Fnobodywho-ooo\u002Fnobodywho\u002Fblob\u002Fnobodywho-godot-v12.1.0\u002Fnobodywho\u002Fgodot\u002Fnobodywho.gdextension",[247],"pinned manifest"," requires Godot 4.6 or later and lists Windows x86_64, Linux, macOS, and Android arm64. Supply a compatible GGUF, a projector for images, and a supported model configuration for MTP. The ",[38,1854,1857],{"href":1855,"rel":1856},"https:\u002F\u002Fgithub.com\u002Fnobodywho-ooo\u002Fnobodywho\u002Fblob\u002Fnobodywho-godot-v12.1.0\u002FCHANGELOG.md",[247],"changelog"," adds Android OpenCL \u002F Vulkan paths; it does not announce Web or Godot iOS support. Compare v12.0 and v12.1 with the same model and template across image→text, thinking history, tool results→next turn, and MTP on \u002F off. Inspect cache positions, reprocessed tokens, and output consistency. We have not run the SDK or its regression tests, measured Japanese quality, tail latency, total memory, heat \u002F power, or rendering contention, or verified Android backend selection on devices. Keep GameState validation and check ",[38,1860,411],{"href":1861,"rel":1862},"https:\u002F\u002Fgithub.com\u002Fnobodywho-ooo\u002Fnobodywho\u002Fblob\u002Fnobodywho-godot-v12.1.0\u002FLICENSE",[247]," separately from model terms.",[23,1865,1867],{"id":1866},"separate-entity-count-from-cognitive-actor-count","Separate entity count from cognitive actor count",[28,1869,1870],{},"A game can render and update thousands of entities without giving each entity an individual personality and conversation. The unit that uses an LLM can be designed as a cognitive actor distinct from the simulated individual.",[28,1872,1873],{},"Candidate units include:",[51,1875,1876,1879,1882,1885,1888],{},[54,1877,1878],{},"a small number of NPCs who speak directly with the player;",[54,1880,1881],{},"a commander representing a unit;",[54,1883,1884],{},"an actor proposing policy for an entire faction;",[54,1886,1887],{},"a collective consciousness or swarm persona; and",[54,1889,1890],{},"a narrator that interprets only important story events.",[28,1892,1893],{},"This is not a recommendation to use a collective consciousness in every game. It is an untested design option for separating entity count from inference actor count when individual conversation does not create game value.",[23,1895,1897],{"id":1896},"validate-memory-before-storage-and-again-at-retrieval","Validate memory before storage and again at retrieval",[28,1899,1900],{},"Natural-language memory should not replace game state. It can support conversational continuity, but it can also preserve incorrect summaries, contradictions, stale information, or excessive personal information.",[28,1902,1903],{},"Store metadata alongside the memory text:",[51,1905,1906,1909,1912,1915,1918,1921,1924],{},[54,1907,1908],{},"the source event or statement;",[54,1910,1911],{},"the target actor;",[54,1913,1914],{},"creation time and expiry;",[54,1916,1917],{},"salience and visibility scope;",[54,1919,1920],{},"whether it is confirmed fact or the NPC's belief or inference;",[54,1922,1923],{},"what it corrects and what corrected it; and",[54,1925,1926],{},"deletion conditions.",[28,1928,1929],{},"Do not persist an LLM-generated memory candidate without validating its allowed type, length, and provenance. At retrieval, prevent a memory that conflicts with current game state from being used as fact.",[28,1931,1932,1933,1938,1939,1942,1943,1946],{},"Checked on October 6, 2026. The ",[38,1934,1937],{"href":1935,"rel":1936},"https:\u002F\u002Fgithub.com\u002Fnobodywho-ooo\u002Fnobodywho\u002Fblob\u002Fnobodywho-godot-v12.0.0\u002Fdocs\u002Fdocs-godot\u002Fchat.md",[247],"NobodyWho Godot v12 chat documentation"," allows configuring the initial and recent turns retained during context shifting and the target size after shrinking; ",[100,1940,1941],{},"context_shift: false"," instead makes a full context an error. Its ",[38,1944,1857],{"href":384,"rel":1945},[247]," also fixes generated text before a tool call being omitted from history. This manages input history; it guarantees neither persistent-memory accuracy nor authoritative GameState.",[28,1948,1949],{},"Test which turns remain in long conversations, errors and fallback at context overflow, and saving and restoring history containing text, calls, and results around tools. Do not reconstruct omitted history as confirmed fact, and check restored context against current GameState. We have not measured Japanese quality, total memory, latency, or behavior with many NPCs.",[508,1951,1953],{"id":1952},"embeddinggemma-2-is-a-memory-retrieval-candidate","EmbeddingGemma 2 is a memory-retrieval candidate",[28,1955,1956,1957,1962],{},"Checked on October 7, 2026. Google's ",[38,1958,1961],{"href":1959,"rel":1960},"https:\u002F\u002Fblog.google\u002Finnovation-and-ai\u002Ftechnology\u002Fdevelopers-tools\u002Fembeddinggemma-2\u002F",[247],"October 6 announcement of EmbeddingGemma 2"," describes a model that embeds text, images, audio, and video for retrieval. Evaluate it for finding memory candidates to consult, rather than NPC dialogue generation or autonomous actions. Of its 740M total parameters, text-only operation uses a 270M text encoder without loading unneeded vision \u002F audio encoders. This describes modular encoders, not MoE active parameters or a separately distributed 270M checkpoint.",[28,1964,571,1965,1970,1971,1976,1977,1982,1983,1988,1989,1994,1995,1998,1999,2004],{},[38,1966,1969],{"href":1967,"rel":1968},"https:\u002F\u002Fai.google.dev\u002Fgemma\u002Fdocs\u002Fembeddinggemma\u002Fmodel_card_2",[247],"official model card"," specifies a shared 8,192-token context. Do not turn the 262,144 value in the ",[38,1972,1975],{"href":1973,"rel":1974},"https:\u002F\u002Fhuggingface.co\u002Fgoogle\u002Fembeddinggemma-2\u002Fblob\u002Fmain\u002Fconfig.json",[247],"distribution configuration"," into a usage guarantee. Follow the ",[38,1978,1981],{"href":1979,"rel":1980},"https:\u002F\u002Fai.google.dev\u002Fgemma\u002Fdocs\u002Fembeddinggemma\u002Finference-embeddinggemma-with-sentence-transformers",[247],"official Python guide",", using the necessary encoders and libraries, Sentence Transformers 6.1.0 or later as specified by the ",[38,1984,1987],{"href":1985,"rel":1986},"https:\u002F\u002Fhuggingface.co\u002Fgoogle\u002Fembeddinggemma-2\u002Fblob\u002Fmain\u002Fconfig_sentence_transformers.json",[247],"distributed dependency requirements",", and BF16 or FP32; FP16 is unsupported. The ",[38,1990,1993],{"href":1991,"rel":1992},"https:\u002F\u002Fhuggingface.co\u002Fgoogle\u002Fembeddinggemma-2\u002Ftree\u002Fmain",[247],"distributed"," ",[100,1996,1997],{},"model.safetensors"," file is 1.49 GB, not total memory including the index, runtime allocations, and game. Check the ",[38,2000,2003],{"href":2001,"rel":2002},"https:\u002F\u002Fai.google.dev\u002Fgemma\u002Fapache_2",[247],"model's full Apache 2.0 license",", along with runtime-library and product-distribution conditions.",[28,2006,685,2007,2012,2013,2018,2019,2022,2023,2028],{},[38,2008,2011],{"href":2009,"rel":2010},"https:\u002F\u002Fgithub.com\u002Fggml-org\u002Fllama.cpp\u002Freleases\u002Ftag\u002Fb11576",[247],"llama.cpp b11576",", published October 13 at 06:30:50 JST, includes ",[38,2014,2017],{"href":2015,"rel":2016},"https:\u002F\u002Fgithub.com\u002Fggml-org\u002Fllama.cpp\u002Fpull\u002F30416",[247],"PR #30416",", padding no-cache attention K\u002FV and masks to multiples of 256. It addresses input-length-dependent CPU fallback and ",[100,2020,2021],{},"-fa auto"," disabling flash attention on CUDA with head size 512, including EmbeddingGemma 2. This is not a new model announcement. ",[38,2024,2027],{"href":2025,"rel":2026},"https:\u002F\u002Fgithub.com\u002Follama\u002Follama\u002Fblob\u002Fv0.40.4-rc0\u002FLLAMA_CPP_VERSION",[247],"Ollama v0.40.4-rc0 bundles b11521",", which does not establish incorporation of this fix. Pin the build, model, input length, and flash-attention settings; compare the actual backend, embedding agreement, latency, and total memory. We have not measured CUDA behavior ourselves.",[28,2030,2031],{},"A proposed evaluation starts with a small labeled Japanese corpus and text \u002F image retrieval. Test incorrect matches, no match, stale or deleted records, and another actor's private information. Similarity alone establishes neither facts nor access rights: constrain visibility before retrieval, then validate provenance, expiry, and current GameState afterward. Local embedding computation also leaves index storage, correction, and deletion to the application. We have not confirmed NPC deployments or measured Japanese quality, total RAM \u002F VRAM, latency, or concurrent-game load.",[23,2033,2035],{"id":2034},"start-with-one-cognitive-actor","Start with one cognitive actor",[28,2037,2038],{},"Instead of starting with fully autonomous NPCs or many simultaneous conversations, limit the first experiment to one cognitive actor and one intent type. Compare the same request contract behind three providers:",[2040,2041,2042,2045,2048,2051,2054],"ol",{},[54,2043,2044],{},"Use a scripted or fake provider to verify game-side ordering, validation, timeout, and fallback.",[54,2046,2047],{},"Use a cloud API to establish a quality baseline for the target scenarios and request-response design.",[54,2049,2050],{},"Run the same evaluation set with a local model and measure quality, latency, VRAM, and impact on game frames.",[54,2052,2053],{},"Run the game and model together on target hardware, measuring VRAM, CPU Main, GPU Frame, and response time.",[54,2055,2056],{},"Increase actor count and concurrent requests one step at a time only after one cognitive actor works.",[28,2058,2059],{},"The first completion criterion is not richly varied free conversation. It is that the allowed intent is proposed correctly, invalid requests are rejected by validation, timeouts return to conventional AI, and game frame time remains within its budget.",[28,2061,2062],{},"This sequence separates insufficient model capability from defects in the game-side integration. A cloud API need not be the production choice; it can serve only as a quality baseline.",[23,2064,2066],{"id":2065},"current-assessment","Current assessment",[28,2068,2069],{},"The September 18 additions make startup readiness and explicit inference failure more concrete, and add Spark-X2.5 as an evaluation candidate. Neither developer descriptions nor compact weights replace measurements of intent accuracy, queueing, and game frame time.",[28,2071,2072],{},"The September 6 addition of Jessica provides a public mod example of local dialogue, memory, and actions. It strengthens the implementation evidence without establishing performance on the target game and hardware.",[28,2074,2075,2076,2078],{},"As of September 3, 2026, using an LLM for NPC conversation or high-level intent proposals is technically plausible. Small models such as LFM2.5-2.6B and Ministral 3 3B, integration examples such as Local Multimodal LLM and Cometforge NPC, and a public Epoch Forge Demo that officially lists local-LLM NPC dialogue, Gemma, and ",[100,2077,102],{}," all make the implementation path more concrete. By the October 4 check, Scapegoat had released an Early Access build with on-device conversation in its product requirements. Adoption still cannot be decided without measuring the target game on its target hardware.",[28,2080,2081],{},"The stable design principles are:",[51,2083,2084,2087,2090,2093,2096,2099],{},[54,2085,2086],{},"keep game-state authority on the game side;",[54,2088,2089],{},"limit the LLM to a cognitive layer;",[54,2091,2092],{},"perform semantic and authorization checks after structured output validation;",[54,2094,2095],{},"invoke the model from events without stopping conventional AI;",[54,2097,2098],{},"provide timeout and fallback behavior; and",[54,2100,2101],{},"keep providers interchangeable.",[28,2103,2104],{},"The best model, parameter count, runtime, simultaneous actor count, and required VRAM will change over time and between games. Avoid a fixed recommendation based on a model list; reevaluate license, platform support, quality, and performance at implementation time.",[23,2106,2108],{"id":2107},"caveats","Caveats",[51,2110,2111,2114,2117,2120,2123,2126,2132,2135,2138,2141],{},[54,2112,2113],{},"This article derives design boundaries from public information; it is not a measurement report from integrating a local model into a game.",[54,2115,2116],{},"PUBG Ally's architecture and numbers apply only to that product and its published conditions.",[54,2118,2119],{},"FunctionGemma is an example of a function-calling model, not evidence for NPC dialogue quality.",[54,2121,2122],{},"Local Multimodal LLM is a beta Unreal Engine implementation and does not guarantee the same result in Unity, other engines, or other platforms.",[54,2124,2125],{},"Epoch Forge Demo is publicly downloadable, but the AI behavior established by public materials is primarily NPC chat. The full game's description of the global economy, events, NPC behavior, and storyteller is not treated as implemented in the demo.",[54,2127,2128,2129,2131],{},"Epoch Forge Demo's official Steam page establishes the use of Gemma and ",[100,2130,102],{},", but no primary source currently establishes the exact checkpoint, quantization, file size, or runtime packaging. Its Steam system requirements are not benchmarks of the LLM alone or inference while sharing hardware with the game.",[54,2133,2134],{},"Scapegoat is in Early Access as of October 4, 2026. Its on-device behavior and system requirements remain developer-published information; we have not tested the game, and this is not a review of a completed product.",[54,2136,2137],{},"The default Cometforge NPC on-device model and the checkpoint used by Scapegoat's current build are not assumed to be identical.",[54,2139,2140],{},"OpenAI API models, features, prices, and availability can change; consult current official documentation during implementation.",[54,2142,2143],{},"If memory stores player speech or preferences, privacy, deletion, purpose, and retention period must be product requirements.",[23,2145,2147],{"id":2146},"related-resources","Related resources",[51,2149,2150,2154,2161,2168,2174,2180,2187,2194,2200,2206,2213,2219,2225,2232,2239,2245,2251,2257,2263,2269,2276,2282,2287,2294,2301,2305,2310,2315],{},[54,2151,2152],{},[38,2153,41],{"href":40},[54,2155,2156],{},[38,2157,2160],{"href":2158,"rel":2159},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fblog\u002Fhow-krafton-built-pubg-ally-a-co-playable-character-powered-by-nvidia-ace\u002F",[247],"How KRAFTON Built PUBG Ally",[54,2162,2163],{},[38,2164,2167],{"href":2165,"rel":2166},"https:\u002F\u002Fwww.krafton.com\u002Fen\u002Fnews\u002Fpress\u002Fkrafton-reveals-playtest-plans-for-pubg-ally-built-with-nvidia-ace\u002F",[247],"KRAFTON announces PUBG Ally",[54,2169,2170],{},[38,2171,2173],{"href":1522,"rel":2172},[247],"FunctionGemma model overview",[54,2175,2176],{},[38,2177,2179],{"href":1535,"rel":2178},[247],"LFM2.5-2.6B model card",[54,2181,2182],{},[38,2183,2186],{"href":2184,"rel":2185},"https:\u002F\u002Fhuggingface.co\u002FLiquidAI\u002FLFM2.5-2.6B-GGUF\u002Ftree\u002Fmain",[247],"Official LFM2.5-2.6B GGUF files",[54,2188,2189],{},[38,2190,2193],{"href":2191,"rel":2192},"https:\u002F\u002Fhuggingface.co\u002Fblog\u002FLiquidAI\u002Fqad",[247],"LFM2.5 QAD Q4_0",[54,2195,2196],{},[38,2197,2199],{"href":1548,"rel":2198},[247],"LFM2.5-DSpark",[54,2201,2202],{},[38,2203,2205],{"href":1556,"rel":2204},[247],"LM Studio 0.4.22 release notes",[54,2207,2208],{},[38,2209,2212],{"href":2210,"rel":2211},"https:\u002F\u002Flmstudio.ai\u002Fdocs\u002Fapp\u002Fadvanced\u002Fspeculative-decoding",[247],"LM Studio speculative decoding",[54,2214,2215],{},[38,2216,2218],{"href":1565,"rel":2217},[247],"LFM Open License explanation",[54,2220,2221],{},[38,2222,2224],{"href":1180,"rel":2223},[247],"Local Multimodal LLM GitHub repository",[54,2226,2227],{},[38,2228,2231],{"href":2229,"rel":2230},"https:\u002F\u002Fgithub.com\u002Fisundahl\u002FLLM_Plugin\u002Fblob\u002Fmain\u002FPlugins\u002FLocalMultimodalLLM\u002FDocs\u002FStarterModels.md",[247],"Local Multimodal LLM starter models",[54,2233,2234],{},[38,2235,2238],{"href":2236,"rel":2237},"https:\u002F\u002Fforums.unrealengine.com\u002Ft\u002Fvolley-studios-local-multimodal-llm\u002F2746330",[247],"Local Multimodal LLM announcement on Epic Developer Community",[54,2240,2241],{},[38,2242,2244],{"href":1317,"rel":2243},[247],"Epoch Forge Demo on Steam",[54,2246,2247],{},[38,2248,2250],{"href":1338,"rel":2249},[247],"Epoch Forge on Steam",[54,2252,2253],{},[38,2254,2256],{"href":1405,"rel":2255},[247],"Scapegoat on Steam",[54,2258,2259],{},[38,2260,1421],{"href":2261,"rel":2262},"https:\u002F\u002Ftntholley.com\u002Fcometforge\u002F",[247],[54,2264,2265],{},[38,2266,2268],{"href":1419,"rel":2267},[247],"Cometforge NPC documentation",[54,2270,2271],{},[38,2272,2275],{"href":2273,"rel":2274},"https:\u002F\u002Fdocs.mistral.ai\u002Fmodels\u002Fministral-3-3b-25-12",[247],"Ministral 3 3B model overview",[54,2277,2278],{},[38,2279,2281],{"href":245,"rel":2280},[247],"OpenAI Structured Outputs",[54,2283,2284],{},[38,2285,1701],{"href":1699,"rel":2286},[247],[54,2288,2289],{},[38,2290,2293],{"href":2291,"rel":2292},"https:\u002F\u002Fbizcommunity.gamescom.global\u002Fwidget\u002Fevent\u002Fgamescom-biz-2026\u002Fplanning\u002FUGxhbm5pbmdfNDUwMDgzMQ%3D%3D",[247],"Tencent's dual-brain FPS agent",[54,2295,2296],{},[38,2297,2300],{"href":2298,"rel":2299},"https:\u002F\u002Fwww.nvidia.com\u002Fen-us\u002Fgeforce\u002Fnews\u002Fgamescom-2026-dlss-4-5-ray-reconstruction-release-announcements-trailers\u002F",[247],"NVIDIA's gamescom 2026 announcement",[54,2302,2303],{},[38,2304,1511],{"href":1510},[54,2306,2307],{},[38,2308,1358],{"href":1356,"rel":2309},[247],[54,2311,2312],{},[38,2313,1580],{"href":1578,"rel":2314},[247],[54,2316,2317],{},[38,2318,2320],{"href":1583,"rel":2319},[247],"K2 Horizon 7B",[2322,2323,2324],"style",{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":127,"searchDepth":151,"depth":151,"links":2326},[2327,2328,2329,2330,2331,2332,2341,2342,2345,2346,2347,2348,2349,2350,2356,2361,2362,2365,2366,2367,2368],{"id":25,"depth":151,"text":26},{"id":48,"depth":151,"text":49},{"id":112,"depth":151,"text":113},{"id":238,"depth":151,"text":239},{"id":345,"depth":151,"text":346},{"id":415,"depth":151,"text":416,"children":2333},[2334,2335,2336,2337,2338,2339,2340],{"id":510,"depth":168,"text":511},{"id":723,"depth":168,"text":724},{"id":786,"depth":168,"text":787},{"id":827,"depth":168,"text":828},{"id":910,"depth":168,"text":911},{"id":971,"depth":168,"text":972},{"id":1052,"depth":168,"text":1053},{"id":1128,"depth":151,"text":1129},{"id":1173,"depth":151,"text":1174,"children":2343},[2344],{"id":1279,"depth":168,"text":1280},{"id":1311,"depth":151,"text":1312},{"id":1349,"depth":151,"text":1350},{"id":1368,"depth":151,"text":1369},{"id":1399,"depth":151,"text":1400},{"id":1443,"depth":151,"text":1444},{"id":1515,"depth":151,"text":1516,"children":2351},[2352,2353,2354,2355],{"id":1528,"depth":168,"text":1529},{"id":1571,"depth":168,"text":1572},{"id":1592,"depth":168,"text":1593},{"id":1611,"depth":168,"text":1612},{"id":1705,"depth":151,"text":1706,"children":2357},[2358,2359,2360],{"id":1763,"depth":168,"text":1764},{"id":1790,"depth":168,"text":1791},{"id":1822,"depth":168,"text":1823},{"id":1866,"depth":151,"text":1867},{"id":1896,"depth":151,"text":1897,"children":2363},[2364],{"id":1952,"depth":168,"text":1953},{"id":2034,"depth":151,"text":2035},{"id":2065,"depth":151,"text":2066},{"id":2107,"depth":151,"text":2108},{"id":2146,"depth":151,"text":2147},"A step-by-step approach to integrating a local LLM into game NPCs while separating game state, intent proposals, validation, and execution.","md",{},true,"\u002Fknowledge\u002Fgame\u002Fllm\u002Fgame-npc-llm-adoption-boundaries","2026-08-17",{"title":5,"description":2369},"published","knowledge\u002Fgame\u002Fllm\u002Fgame-npc-llm-adoption-boundaries",[2379,2380,2381,2382],"game-ai","npc","local-inference","architecture",[2384,2385,2386],"llm","godot","unreal-engine","2026-10-13","QFl-Gh_Dz2lWOKqLuRnv_X4HlpiF_zksb3fq0Qeu4Gk",{"ja":2372,"en":2372},1791898345514]