Stell: LLM-Powered Conversational Bot Framework

Stell Complex
Taken to
  1. Seed
  2. PoC
  3. MVP
  4. Production
  5. Chasing perfect

Framework for teams that need production-grade bots with deterministic YAML scenarios. LLM handles intent recognition and entity extraction without model training.

zero-training
NLU approach
YAML-native
Scenario format
agnostic
LLM provider
multilingual
Languages

What we ingest

What we ingest

Stell runs on files you write. The dialogue flows and intents live in YAML, with an optional FAQ module as a separate knowledge source.

For years these bots were built on Rasa, which needed labeled example phrases per intent to train a classifier. Stell drops that input: you describe the scenarios, and the live user message arrives through any connector. Chatwoot plugs in too, so a human operator can take over a dialogue at any point.

What we do with it

How we build it

An LLM does the language understanding, so there is no model to train. It recognizes the intent and pulls out the entities through PydanticAI, which keeps the provider swappable.

The processing chain below runs in a fixed order. Story resolution is the hard part: one story can branch into another, and an action can trigger a new intent, which creates recursive dialogue paths.

Dialogue history sits in PostgreSQL through JIMS, e8's data framework, and the storage layer stays loosely coupled, so another database can take its place.

  1. 01 Message intake
  2. 02 Intent recognition (LLM)
  3. 03 Entity extraction (LLM)
  4. 04 History lookup
  5. 05 Action dispatch
  6. 06 Story resolution
  7. 07 Response

Stack

PydanticAIJIMSPostgreSQLYAML

What comes out

How it answers

Stell was tested against a large production scenario that previously ran on Rasa, and it handled the same dialogue flows with equivalent coverage. The operational difference is the training step: there is no longer one.

Teams write and update YAML scenarios without collecting labeled phrases, running training jobs, or managing model versions. Multilingual support comes from the underlying LLM.

One caveat: this was a working test against the old scenario. It was not an exhaustive benchmark, so read the parity as directional.

Who built this

Want this on your line?