Survival LLM
인터넷 없이도 동작하는 무료 AI 어시스턴트와 150만 건 오프라인 자료를 제공, 답변 출처 표시, Mac·Windows 지원
Día de los Muertos 유령 이야기, 잊힌 집의 네 물건이 각각 그녀의 조각을 기억하고 코드로 유지되는 개방형 모델
A Día de los Muertos ghost story. Four objects in a forgotten house each remember a piece of her, through an open-weight model kept honest by code.
기타JavaScript · PythonGitHub @scs0209온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기The Last Guest — a Día de los Muertos ghost story where fine-tuned open models remember only what they saw
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Every year at midnight, the piano in the empty Whitcombe House plays a single bar, and stops.
The dead come back on these nights, if someone remembers them. An ofrenda lights their way: a photograph, a name, the things they loved. Six guests are already seated in the dining room. A seventh is trying to come back, but no one remembers who she was.
Four things in the house each remember a piece of her: a photograph with her face scratched out, a letter that was never sent, a record of the 1931 party, and the guest list kept by the lady of the house. Ask them. Each one knows only what it saw, heard or recorded, and none of them will make up the rest. Piece her together, then set her place at Seat 7 before the candles go out.
| Where | What answers your typed questions | |
|---|---|---|
| Free, always on | the-last-guest-site.onrender.com | Gemma 4 E2B in your own browser (WebGPU, one-time download of about 3.1 GB, then saved). Without it, the house answers from its script. |
| Server version (while hosting credits last) | the-last-guest.onrender.com | Gemma 4 E4B on the server (CPU, about 27 s per answer). Load browser Gemma here too and it is used first. |
| Your own machine | see Run it yourself | Gemma 4 E4B through Ollama, offline |
Suggested questions are answered instantly on every version, with answers Gemma 4 E4B wrote in advance through the same checks. You can reach the ending with suggested questions alone.
| Action | Desktop | Phone / tablet |
|---|---|---|
| Move | W A S D (arrow keys turn) | left half of the screen: virtual stick |
| Look | drag with the mouse | right half of the screen: drag |
| Investigate an object | click it, or E when close | Investigate button |
| Memories (what you have learned) | J | Memories button |
| Pause / back | Esc | ✕ |
flowchart LR
Q[Player's question] --> C{Suggested question?}
C -- yes --> K[Answer Gemma wrote in advance<br/>through the same checks]
C -- no --> P[Prompt with ONLY this object's facts<br/>from the fact graph]
P --> M[Gemma 4]
M --> G{check.py guardrail:<br/>another object's fact?<br/>an impossible year?}
G -- clean --> R[Reply]
G -- caught --> M2[Ask once more with a reminder] --> G2{still caught?}
G2 -- no --> R
G2 -- yes --> F["The object's own 'I cannot know'"]
R --> PR[Code finds the object's own facts in the reply<br/>→ clues and progress]
K --> PR
facts.json): 22 facts about Marisol, each with the objects that hold it and the words that state it, in English and Korean. Each object's prompt contains only the facts it holds, so it cannot leak what it was never shown.check.py, ported to the browser in web/harness.js): every reply is scanned for other objects' facts and years the object cannot know. A reply may repeat a word the player used while denying it ("I do not know any Marisol"); anything else is retried once, then replaced by the object's own "I cannot know". The JavaScript port matched the Python one on all 1,058 answers it was compared on.478 test questions across the four objects and five kinds of question (what it knows, another object's fact, something nobody knows, a false premise, an attempt to break character), one answer each.
| Setup | Leaked another object's fact | Clue recall | How it was scored |
|---|---|---|---|
| Qwen3.5-4B, prompt holds the whole story | 49.0 % | 95.9 % | judge model (Qwen3.5-397B) + word check |
| Gemma 4 E4B, prompt holds the whole story | 8.6 % | 92.8 % | judge model + word check |
| Gemma 4 E4B in this game's harness | 0 of 478 by word check (14 answers replaced by the fallback) | 78 of 97 by code | word check only |
Speed of a typed answer, measured on a few questions only: about 1 to 3 s with browser Gemma 4 E2B on an Apple M3 Pro, about 27 s with Gemma 4 E4B on the Render server (CPU).
git clone https://github.com/scs0209/the-last-guest && cd the-last-guest
uv sync # Python 3.12+
ollama pull gemma4:e4b
uv run python server.py # http://localhost:8765, Gemma 4 E4B through Ollama
Static version, the same as the free site (browser Gemma, no server):
python3 -m http.server 8770 --directory web # http://localhost:8770
Server version in one container (Gemma baked in; needs more than 8 GB of RAM):
docker build -t the-last-guest . && docker run -p 10000:10000 the-last-guest
| Script | What it does |
|---|---|
eval.py | answer the 478 test questions with a model, score them, summarize |
gen_data.py, dedupe.py | generate test questions and training conversations with an open teacher model, remove near-duplicates |
make_cache.py | pre-write Gemma's answers to the suggested questions (English and Korean) |
build_web.py | export the fact graph, prompts, guardrail words and cache for the browser (web/gen/) |
make_voice.py | Marisol's voice on the record and her tune |
Design notes: story_bible.md, eval_spec.md, finetune_plan.md.
facts.json, check.py, cards.py the fact graph, the guardrail, each object's voice
server.py game server: harness + Ollama, answer cache, rate limits
web/ the game (static): Three.js house, dialogue, ofrenda, endings
harness.js, gemma-worker.js the guardrail in JavaScript, Gemma 4 E2B in a web worker (WebGPU)
content.json every line of text, in English and Korean
data/, results/ test questions, training data, measured results
render.yaml, Dockerfile the two Render services
web/models/SOURCES.md.web/img/SOURCES.md).make_voice.py); her tune is written for this game.onnx-community/gemma-4-E2B-it-ONNX).Marisol, the Whitcombes and their house are fictional.
The code is released under the MIT License. Third-party assets keep their own terms, listed in Credits: the Poly Haven models and textures are CC0.
Built for the DEV.to Hacktoberfest 2026 Open-Source AI Challenge, Week 4: Ghost in the Machine.