Updated readme and added license

This commit is contained in:
2026-05-06 21:54:54 +02:00
parent 136f15d35f
commit e518c21166
2 changed files with 60 additions and 6 deletions
+39 -6
View File
@@ -3,7 +3,26 @@
Bridges a [MeshCore](https://meshcore.io) companion radio to any OpenAI-compatible LLM endpoint
(e.g. `llama-server`, vLLM, Ollama). Listens for direct messages on the device, runs each
conversation through the LLM with full per-sender history stored in SQLite, and replies back
over the mesh — trimmed to the MeshCore packet payload limit.
over the mesh — split into UTF-8-safe chunks within the MeshCore packet payload limit.
## Features
- **LLM-backed DMs** with persistent per-sender chat history; replies are split across multiple
packets when needed.
- **Reliable chunked delivery** via meshcore's `send_msg_with_retry`: each chunk waits for the
recipient ACK (correlated by `expected_ack` code) before the next chunk goes out, with a
configurable retry budget.
- **Contact persistence**: contacts are mirrored from the device into SQLite at connect and
kept in sync via `NEW_CONTACT` events, so resolution is local and survives a flaky or
cleared device contact list.
- **Inbound deduplication**: consecutive identical DMs from the same sender within a short
window are dropped (handles radio retransmits and impatient peers).
- **Slash commands**: `/help`, `/clear` (reset LLM context), `/thinking` (toggle thinking-mode
prompts).
- **LLM tool calling** (when the model supports it): a built-in weather tool (Open-Meteo, no
key); web search and URL fetch via [Tavily](https://tavily.com) when an API key is set.
- **Web UI** (read-only by default): live status, conversations, contact list, manual advert
button. Listens on `127.0.0.1:8080` by default.
## Quick start
@@ -20,13 +39,27 @@ python -m lorabot
Config file path defaults to `./config.toml` and can be overridden with `LORABOT_CONFIG`.
Any field can be overridden via env vars, e.g. `LORABOT_LLM__API_KEY=sk-...`.
The web UI is at <http://localhost:8080> while the bot is running.
## Layout
- `src/lorabot/bot.py` — connect, subscribe to `CONTACT_MSG_RECV`, dispatch each DM.
- `src/lorabot/db.py` — SQLite schema and per-conversation repo functions.
- `src/lorabot/llm.py``AsyncOpenAI` wrapper.
- `src/lorabot/messages.py` — UTF-8-safe byte-length trimming.
- `src/lorabot/config.py`TOML + env-var settings (pydantic-settings).
- [src/lorabot/bot.py](src/lorabot/bot.py) — connect, wire collaborators, subscribe to
`CONTACT_MSG_RECV` and `NEW_CONTACT`.
- [src/lorabot/transport.py](src/lorabot/transport.py)`MeshTransport`: contact resolution
(DB-backed) and reliable chunked sending with per-contact serialization.
- [src/lorabot/handler.py](src/lorabot/handler.py)DM pipeline: dedup → command dispatch
or LLM call → send → persist.
- [src/lorabot/commands.py](src/lorabot/commands.py) — slash-command parser and registry.
- [src/lorabot/llm.py](src/lorabot/llm.py) — `AsyncOpenAI` wrapper with tool-call loop.
- [src/lorabot/tools/](src/lorabot/tools/) — pluggable LLM tools (weather, web search,
fetch URL).
- [src/lorabot/db.py](src/lorabot/db.py) — SQLite schema and repo functions for
conversations, messages, contacts.
- [src/lorabot/messages.py](src/lorabot/messages.py) — UTF-8-safe byte-length splitting.
- [src/lorabot/web.py](src/lorabot/web.py) — aiohttp web UI (status, conversations,
contacts, SSE).
- [src/lorabot/config.py](src/lorabot/config.py) — TOML + env-var settings
(pydantic-settings).
## Docker