5.9 KiB
5.9 KiB
LocalDiplomacy Implementation Status
Last updated: 2026-04-30
Working / Implemented
Bannerlord Module
- Module folder exists at
module/LocalDiplomacy. SubModule.xmlis present and configured for singleplayer.- Module builds to:
module/LocalDiplomacy/bin/Win64_Shipping_Client/LocalDiplomacy.dll
- Current dependencies:
NativeSandBoxCoreSandboxStoryMode
LocalDiplomacy.SubModuleloads in Bannerlord.- Campaign behavior is registered on campaign game start.
- Dedicated game-side log exists:
Documents/Mount and Blade II Bannerlord/Configs/ModLogs/LocalDiplomacy.log
- Dialogue hook is registered for several conversation tokens:
lord_pretalklord_talklord_talk_speak_diplomacy_2hero_main_optionshero_talkstart
- In-game dialogue option exists:
[LocalDiplomacy] Ask what news they have.
- Selecting the dialogue option sends a compact
ConversationRequestto the local Python agent. - Game client is hardcoded to call:
http://127.0.0.1:8766
- Game client logs outgoing payloads and failed HTTP responses.
- Agent responses are displayed in-game with
InformationManager.DisplayMessage. - Returned game actions are passed through local validation before execution.
- Action executor currently displays accepted actions as messages.
Python Agent
- FastAPI agent exists at
src/LocalDiplomacy.Agent. - Agent runs with
uv. - Main app module:
localdiplomacy_agent.app:app
- Main endpoints implemented:
GET /healthGET /debug/statusPOST /conversation/respondPOST /world/tickPOST /actions/result
- Web dashboard exists:
http://127.0.0.1:8766/ui
- Dashboard shows:
- agent status
- KoboldCpp reachability
- memory status
- last latency
- live logs
- KoboldCpp API address
- model id
- timeout
- Dashboard can update KoboldCpp API settings.
- Dashboard can ping KoboldCpp.
- KoboldCpp API can point at another machine, for example:
http://192.168.1.17:5001
- Agent logs game requests, agent replies, queued actions, warnings, and errors.
- Agent config persists to
config.yaml. - Agent supports
/no_thinkprompt prefixing for Qwen3-style thinking models. - Agent uses focused tool selection for action-looking requests.
- Agent uses narrowed action schemas for small models.
- Agent can force
propose_game_actiontool calls for explicit action requests. - Python contract accepts C#-style nullable
traits. - Memory layer scaffold exists and currently defaults to disabled.
- SQLite event ledger exists.
KoboldCpp / Model Testing
- KoboldCpp OpenAI-compatible
/v1/chat/completionsflow is implemented. - Tool calling uses OpenAI-style
toolsandtool_choice. - Model smoke-test script exists:
scripts/test_kobold_model.py
- Smoke-test script accepts:
- model path
- context size
- KoboldCpp path
- port
- keep-running flag
- stop-existing flag
- extra KoboldCpp args
- Smoke-test script runs:
- normal dialogue test
- auto tool-call test
- forced tool-call test
- LocalDiplomacy action-planner tool-call test
Qwen3-4B-abliterated-q4_k_m.ggufwas tested at40960context and passed smoke tests with/no_think.
Tests / Build
- Python test suite passes.
- Current Python test count:
- 11 tests
- C# module builds successfully with local .NET SDK and Bannerlord references.
- Build command:
$env:PATH="$env:USERPROFILE\.dotnet;$env:PATH" $env:BANNERLORD_REFERENCES="D:\SteamLibrary\steamapps\common\Mount & Blade II Bannerlord\bin\Win64_Shipping_Client" dotnet build src\LocalDiplomacy\LocalDiplomacy.csproj
Partially Implemented / Scaffolded
Bannerlord Gameplay Integration
- Dialogue integration is currently a single debug-style option.
- Player cannot yet type custom dialogue text inside Bannerlord.
- NPC answer is currently displayed as an information message, not as a full custom conversation UI.
- No Gauntlet UI has been built inside the game.
- No confirmation UI exists yet for dangerous actions.
- Local validation exists, but most action-specific validation is still basic.
- Action execution is mostly placeholder behavior.
- World tick endpoint exists, but the game does not yet send rich world diffs.
- Nearby parties, settlements, kingdom state, and recent events are still minimal in the in-game request.
Agent
- Tool registry contains broad AIInfluence-style feature coverage.
- Many tools are declared but backed by placeholder/read-only behavior until the Bannerlord connector supplies richer live data.
- Memory storage is scaffolded but disabled by default.
- Mem0 + Qdrant is planned but not wired as the default runtime path yet.
- No separate desktop UI exists; the current UI is browser-based FastAPI HTML.
Known Issues / Watch Items
- Small models can narrate tool intentions unless
/no_think, narrowed schemas, and forced tool calls are used. - Full tool catalog is too large for reliable 4B model tool choice.
- The Python dashboard updates KoboldCpp settings at runtime, but active in-flight calls use the currently loaded config object.
- Bannerlord must be closed before rebuilding if the DLL is locked.
- The first working in-game path depends on the player selecting the debug dialogue option.
- Returned action execution is intentionally conservative and mostly non-mutating.
Next Recommended Work
- Replace the debug prompt with a small in-game text input or selectable prompt menu.
- Show NPC responses in a proper dialogue/inquiry window instead of only notification messages.
- Expand
BuildDebugConversationRequestwith real nearby parties, settlement, war, clan, and kingdom context. - Add confirmation UI for diplomacy, hostile, and high-impact actions.
- Implement a small set of real Bannerlord mutations:
- follow player
- patrol settlement
- propose peace
- declare war proposal validation only
- Wire world tick diffs from Bannerlord to the agent.
- Enable Mem0 + Qdrant memory once the dialogue loop is stable.