botbook/src/chapter-07-gbapp
2025-12-03 19:56:35 -03:00
..
assets - Split from botserver. 2025-12-03 19:56:35 -03:00
architecture.md - Split from botserver. 2025-12-03 19:56:35 -03:00
building.md - Split from botserver. 2025-12-03 19:56:35 -03:00
containers.md - Split from botserver. 2025-12-03 19:56:35 -03:00
crates.md - Split from botserver. 2025-12-03 19:56:35 -03:00
custom-keywords.md - Split from botserver. 2025-12-03 19:56:35 -03:00
dependencies.md - Split from botserver. 2025-12-03 19:56:35 -03:00
docker-deployment.md - Split from botserver. 2025-12-03 19:56:35 -03:00
example-gbapp.md - Split from botserver. 2025-12-03 19:56:35 -03:00
infrastructure.md - Split from botserver. 2025-12-03 19:56:35 -03:00
keyword-refactoring.md - Split from botserver. 2025-12-03 19:56:35 -03:00
observability.md - Split from botserver. 2025-12-03 19:56:35 -03:00
philosophy.md - Split from botserver. 2025-12-03 19:56:35 -03:00
README.md - Split from botserver. 2025-12-03 19:56:35 -03:00
scaling.md - Split from botserver. 2025-12-03 19:56:35 -03:00
services.md - Split from botserver. 2025-12-03 19:56:35 -03:00

Chapter 07: Extending General Bots

Architecture and deployment reference for developers.

Overview

BotServer is built in Rust with a modular architecture. Extend it by creating custom keywords, services, or entire applications.

Architecture

┌─────────────────────────────────────────┐
│              Web Server (Axum)          │
├─────────────────────────────────────────┤
│         BASIC Runtime (Rhai)            │
├──────────┬──────────┬──────────┬────────┤
│   LLM    │ Storage  │  Vector  │ Cache  │
│ Service  │ (MinIO)  │ (Qdrant) │(Valkey)│
├──────────┴──────────┴──────────┴────────┤
│            PostgreSQL                   │
└─────────────────────────────────────────┘

Deployment Options

Method Use Case Guide
Local Development Installation
Docker Production Docker Deployment
LXC Isolated components Container Deployment

Module Structure

Module Purpose
web_server HTTP/WebSocket handling
basic BASIC language runtime
llm LLM provider integration
drive Object storage
shared Database models

Creating Custom Keywords

// In src/basic/keywords/my_keyword.rs
pub fn my_keyword(context: &mut EvalContext) -> Result<Dynamic, Box<EvalError>> {
    // Your keyword logic
    Ok(Dynamic::from("result"))
}

Register in keywords/mod.rs and rebuild.

Chapter Contents

See Also