Skip to content

Core — Data Flow

Request Lifecycle

1. Application calls:
   dispatcher.process("chat", text="Hello!")

2. LLMDispatcher looks up builder:
   builder = self._builders["chat"]  # registered via @router.prompt

3. Builder constructs PromptResult:
   prompt = await builder(text="Hello!")
   # → PromptResult(messages=[LLMMessage(role="user", content="Hello!")])

4. Dispatcher calls provider:
   response = await self._provider.answer(prompt, **kw)

5. Provider returns text:
   "Hi there! How can I help?"

Component Interactions

Application
    │
    ▼
LLMDispatcher.process(mode, **kw)
    │
    ├── LLMRouter.builders[mode] ──► PromptBuilder(**kw)
    │                                       │
    │                               PromptResult (frozen)
    │                                       │
    └── LLMProviderProtocol.answer(prompt) ◄┘
                │
                ▼
           Response: str

PromptResult Fields

Field Type Description
messages list[LLMMessage] Ordered message history
system str System instruction (optional)
model str \| None Override model for this request
temperature float \| None Sampling temperature override
max_tokens int \| None Token limit override