Clean em-dashes and smart quotes from markdown files
This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
# SkyrimNet Architecture — High-Level Model
|
||||
# SkyrimNet Architecture - High-Level Model
|
||||
|
||||
## What SkyrimNet is
|
||||
|
||||
A multi-agent LLM orchestrator that hijacks vanilla Skyrim NPC behavior — replacing static dialogue topics and idle routines with context-aware, LLM-driven scenes. NPCs talk to each other and the player through generated dialogue; their world-affecting actions are picked from a registry of "actions" contributed by SkyrimNet itself and any cooperating mod.
|
||||
A multi-agent LLM orchestrator that hijacks vanilla Skyrim NPC behavior - replacing static dialogue topics and idle routines with context-aware, LLM-driven scenes. NPCs talk to each other and the player through generated dialogue; their world-affecting actions are picked from a registry of "actions" contributed by SkyrimNet itself and any cooperating mod.
|
||||
|
||||
`[verified]` from `SkyrimNet.log:14123-14266` (action library initialization), `Source/Scripts/SkyrimNetApi.psc` (public API), `prompts/gamemaster_action_selector.prompt` (GM orchestrator prompt).
|
||||
|
||||
@@ -63,20 +63,20 @@ SkyrimNet ships alongside a sibling SKSE plugin called **IntelEngine**. They're
|
||||
└─────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
`[verified]` All layers exist. The closed-source DLL is the only piece we cannot read directly — we infer behavior from logs, headers, Papyrus callbacks, and traces.
|
||||
`[verified]` All layers exist. The closed-source DLL is the only piece we cannot read directly - we infer behavior from logs, headers, Papyrus callbacks, and traces.
|
||||
|
||||
## The four agent families
|
||||
|
||||
Each agent maps to a "variant" in `OpenRouter.yaml`, which maps to a model/endpoint. See `agent-pipelines.md` for the full table.
|
||||
|
||||
1. **Gamemaster (GM)** — scene-level orchestrator. Decides "should anything happen now, and if so what?" Polls every ~30s in continuous mode + fires on player input. Emits one `ACTION:` line.
|
||||
2. **Dialogue** — generates the actual NPC speech. Triggered by GM actions like `StartConversation` / `ContinueConversation` or by player dialogue input. Can optionally append an `ACTION:` line for inline action firing.
|
||||
3. **Meta** — classifiers and helpers (mood eval, memory query generation, dialogue speaker selection). Capped at ~100 tokens per call.
|
||||
4. **Vision (OmniSight)** — describes the current scene from a screenshot. Uses a local Qwen3-VL model. Fires on `player_text_input` and `player_direct_input_voice` events.
|
||||
1. **Gamemaster (GM)** - scene-level orchestrator. Decides "should anything happen now, and if so what?" Polls every ~30s in continuous mode + fires on player input. Emits one `ACTION:` line.
|
||||
2. **Dialogue** - generates the actual NPC speech. Triggered by GM actions like `StartConversation` / `ContinueConversation` or by player dialogue input. Can optionally append an `ACTION:` line for inline action firing.
|
||||
3. **Meta** - classifiers and helpers (mood eval, memory query generation, dialogue speaker selection). Capped at ~100 tokens per call.
|
||||
4. **Vision (OmniSight)** - describes the current scene from a screenshot. Uses a local Qwen3-VL model. Fires on `player_text_input` and `player_direct_input_voice` events.
|
||||
|
||||
Plus a fifth implicit agent type:
|
||||
|
||||
5. **Native Action Selector** — *post-dialogue* classifier that asks "what in-game action does this NPC's spoken line imply?" Two-stage: category → leaf. Distinct from the GM's scene-level action selection.
|
||||
5. **Native Action Selector** - *post-dialogue* classifier that asks "what in-game action does this NPC's spoken line imply?" Two-stage: category → leaf. Distinct from the GM's scene-level action selection.
|
||||
|
||||
## End-to-end orchestration trace
|
||||
|
||||
@@ -130,7 +130,7 @@ if action == StartConversation or ContinueConversation:
|
||||
|
||||
`[hypothesis]` based on the trace structure and log volumes:
|
||||
|
||||
- **GM `max_tokens: 256`** is a hard ceiling. With three contributor mods registering ~105 actions total, the GM has to reason over a large `eligible_actions` list and emit one ACTION line — the two-stage drilldown and category wrapper exist precisely to compress this cognitive load.
|
||||
- **GM `max_tokens: 256`** is a hard ceiling. With three contributor mods registering ~105 actions total, the GM has to reason over a large `eligible_actions` list and emit one ACTION line - the two-stage drilldown and category wrapper exist precisely to compress this cognitive load.
|
||||
- **`wait_eligibility_results` blocks for up to 2500ms.** Slow Papyrus eligibility callbacks shrink the available action set. This is a Skyrim-VM-side performance dependency that no LLM tuning can fix.
|
||||
- **OmniSight vision** runs locally on a Qwen3-VL model. Image capture + inference adds latency before any text generation can begin.
|
||||
|
||||
@@ -138,8 +138,8 @@ if action == StartConversation or ContinueConversation:
|
||||
|
||||
- **whisper.cpp** for local STT (`SKSE/Plugins/SkyrimNet/libs/whisper.dll` + `ggml*.dll` for CPU/CUDA/Vulkan/OpenCL backends).
|
||||
- **all-MiniLM-L6-v2** sentence-transformer for semantic embedding of NPC memories (`SKSE/Plugins/SkyrimNet/models/all-MiniLM-L6-v2-tokenizer.json`).
|
||||
- **ONNX runtime** (`onnxruntime_skyrimnet.dll`) — likely VAD or auxiliary model inference.
|
||||
- **espeak-ng** voice data (`SKSE/Plugins/SkyrimNet/models/espeak-ng-data/`) — TTS phoneme tables for Piper/PocketTTS.
|
||||
- **ONNX runtime** (`onnxruntime_skyrimnet.dll`) - likely VAD or auxiliary model inference.
|
||||
- **espeak-ng** voice data (`SKSE/Plugins/SkyrimNet/models/espeak-ng-data/`) - TTS phoneme tables for Piper/PocketTTS.
|
||||
- **Spriggit** to git-track the .esp content as JSON.
|
||||
|
||||
## Cross-references
|
||||
|
||||
Reference in New Issue
Block a user