*** demo link below, use code: devpost **

Elevator pitch

AI characters that live on without running. Nemotron on Nebius generates the past on demand; code keeps shared history consistent.

Project description

Inspiration

Ask an AI character what it did while you were away. Its answer should fit its own past, the people it knows, and the world they share. For developers building recurring game NPCs, that becomes difficult as the cast grows: continuous simulation spends inference on unobserved time, while independently invented backstories can contradict each other.

Game engines render what the camera sees. What if a character runtime applied the same idea to time?

LIFEBORN lets a character persist without continuously simulating its life. When someone asks about the missing past, NVIDIA Nemotron on Nebius Token Factory proposes it. Deterministic code checks what could have happened before anything becomes permanent history.

What it does

LIFEBORN is an open-source runtime for persistent, autonomous AI characters. You pay for decisions, not for time passing.

In a small head-to-head test of a LIFEBORN decision, Nemotron 3.5 Lightning on Nebius averaged 2.32 seconds per request versus 2.07 seconds for Gemini 3 Flash Preview, with an estimated 91% lower model-token cost for this sample. Both made the expected search decisions in all 21 trials. The test and its limits are described below.

Each character has an identity, goals, subjective memories, and a place in one shared, append-only history. Unobserved time stays explicitly undetermined. A conversation or meaningful trigger wakes the character; only the history needed for that interaction is generated. Ordinary time can remain ordinary, and a character can decide to stay quiet.

Two working interfaces let you inspect the same runtime:

  • The Character Observatory: skip two weeks for three characters. That is 1,008 character-hours with zero model calls. Ask Mira what happened, then watch the proposed events become established history or get refused. Invite Edison, and his own model call can say no.
  • The Timeline: five characters inhabit a social feed. Schedules and world news wake them; each decides whether to post, reply, keep or break a commitment, or stay quiet. Open “How this post happened” to trace the trigger, proposal, checks, delivery, and model cost.

Shared history has consequences. A seeded demo scenario gives Mira an account of meeting Luna at 7 p.m., but Luna was busy until 7:30, twenty minutes away. The engine rejects that time, finds 7:50 within the proposal's allowed flexibility, and commits one event to both timelines. This reconciliation uses no model call. Luna's consent comes from her recorded prior agreement; an empty calendar alone never counts as consent.

Tavily connects characters to the real world without rewriting their fictional lives. The video shows Mira researching Banksy news with a functional Tavily runtime search and page extraction. The filmed search returned sources for one credit. Results retain source URLs and retrieval times and become sourced beliefs. History generation and consent decisions exclude those research memories. This integration runs in the full runtime; web research is disabled in the public sandbox.

Try it: https://lifeborn.vox.gold — access code: devpost. Start with the guided demo, then explore /timeline.

How we built it

NVIDIA Nemotron 3.5 Lightning, served through Nebius Token Factory, proposes missing history, makes character decisions, evaluates invitations, and writes replies. Its role is central: the code supplies constraints, while the model supplies choices and language. Lightning keeps these frequent, bounded calls responsive and inexpensive.

Python, FastAPI, and LangGraph run the wake lifecycle. PostgreSQL stores canonical events, memories, timeline coverage, durable jobs, checkpoints, and usage records. Before a proposed event becomes history, code checks time, location, travel, commitments, causality, and consent. Row locks, commit-time revalidation, and exclusion constraints protect the stored timeline when requests arrive concurrently.

Model output passes JSON-schema and Pydantic validation, with bounded repair attempts. The full runtime supports escalation to Nemotron 3 Ultra; the public sandbox uses Lightning only. Inference budgets reserve capacity before a call and settle against recorded usage.

Tavily's official SDK powers bounded search and extraction tools inside the LangGraph workflow. Permissions, quotas, caching, and URL checks are enforced in code. The web app is hosted on Google Cloud Run with PostgreSQL; model inference runs on Nebius Token Factory.

Challenges we ran into

The hardest problem was making independently generated histories agree. A plausible paragraph is insufficient: two characters cannot occupy incompatible places or silently acquire each other's consent. We separated what a character believes from what the world has established, then made shared events transactional.

Small-model behavior also needed measurement. Early research prompts sometimes produced invented current news; a later prompt searched too often, even for questions about the character's own life. We tested both kinds of question, improved the decision prompt, and bounded unnecessary searches with daily quotas. Research results remain outside canonical history even when the model mishandles them.

Short structured calls exposed another practical issue: reasoning could consume the output budget before an answer appeared. Disabling thinking for routine decisions and validating every result made those calls usable. A refused proposal, declined invitation, or quiet wake is shown with its reason.

Accomplishments that we're proud of

  • A measurable demonstration of demand-driven history. The recorded Observatory tour covers 1,044 character-hours using 8 model calls costing $0.00100. An hourly simulator making one call per character per simulated hour would require an estimated 1,044 calls: 130.5 times as many. That baseline is an explicit estimate, not a measured competing system; the actual figures come from this run's usage log and exclude hosting and Tavily costs.
  • A direct model comparison. We tested the same LIFEBORN research-decision instructions on Nemotron 3.5 Lightning on Nebius and Gemini 3 Flash Preview on Vertex AI: seven questions, repeated three times per model. Both produced 21/21 Pydantic-valid decisions, proposing search for 9/9 current-information questions and 0/12 personal-life questions. Average end-to-end request times were 2.32 seconds for Nemotron and 2.07 seconds for Gemini. Applying published standard, uncached token rates to each model's reported usage, the estimated inference costs were $0.00217 and $0.02417, respectively: about 91% lower for Nemotron in this sample. This tests the decision prompt, not full character wakes or Tavily execution; network paths and thinking settings differed. Actual costs vary with token usage, caching, and pricing.
  • A product you can inspect. The Chronicle shows when an event happened and when it became established. Rejections, model calls, database records, and workflow checkpoints are visible alongside the story.
  • Real integrations and repeatable checks. The project has 543 automated tests, plus documented live browser runs with 69 Observatory checks and 37 Timeline checks. Real Nemotron and Tavily calls, production Compose startup, and restart recovery were exercised.
  • An open foundation. The Apache-2.0 repository includes the runtime, both interfaces, setup instructions, architecture, and documented limitations: https://github.com/yosun/lifeborn.

What we learned

Character continuity needs a distinction between identity, belief, and fact. Memory retrieval alone cannot make two independently generated lives agree; shared events need a shared commit boundary.

We also learned to measure what the user actually experiences: inference spent, time waiting, why an action happened, and whether a character can decline. The two-week jump makes the cost model visible; the event inspector makes the consistency model visible.

The current system enforces stored temporal and consent constraints, but arbitrary generated prose can still invent details. Research decisions are imperfect, and sustained production scale remains unproven. Those are concrete targets for evaluation.

What's next for LIFEBORN

Our first target is developers building recurring NPC casts: characters whose relationships and history survive long gaps between player visits. AI companions and streaming characters are adjacent uses of the same runtime.

Next, we want to test an actual game integration, measure continuity across longer sessions and larger casts, reduce unnecessary research, and compare Lightning with larger Nemotron variants on the same evaluation set. The public Observatory and Timeline already demonstrate the core benefit: persistent characters, shared continuity, and inference spent on the moments that matter.

Built With

Share this project:

Updates

Submission history