Deployment Architecture
GamiBot uses Moodle plugins for course integration and separate services for file processing, vector search and language-model generation. The components can be deployed on different hosts; their exact topology and resource requirements depend on the service deployment.
| Component | Responsibility |
|---|---|
Moodle with local_gamibot_manager and block_gamibot | Chat interface, course opt-in, credentials and the durable global ingestion queue |
| Ingestion receiver | Accepts Moodle file-change notifications and retrieves eligible course files |
| Docling | Processes files retrieved by the ingestion receiver |
| Ollama with the nomic-text embedding model | Produces embeddings for indexed course material |
| Qdrant | Stores and searches the course-material index |
| Langflow | Runs the Clarify, Summarize and Quiz workflows |
| vLLM with Qwen3.5 | Serves the language model used by the hosted workflows |
| Gami API | Handles separate gamification functions |
Course-file path
A Moodle course with its own GamiBot block queues eligible File and Folder activity changes. Moodle cron sends bounded JSON notifications to the configured ingestion endpoint. The receiver retrieves file bytes using a Moodle web-service file URL, processes them with Docling, obtains nomic-text embeddings through Ollama and updates Qdrant. A deletion notification asks the receiver to remove a module's indexed content.
The queue limits request starts across all courses and cron workers. Its defaults are five delivery steps per run and at least five seconds between request starts. An HTTP 2xx response acknowledges receipt by the receiver, not completion of file processing or indexing. See Data ingestion for visibility rules, retries and status commands.
Chat path
The Chat block calls a Moodle AJAX service in the Manager plugin. The Manager chooses the Clarify, Summarize or Quiz Langflow purpose and sends the request with the shared Langflow API key. The hosted flows use Qwen3.5 through vLLM; they can use indexed course context from Qdrant according to their configuration. The flow endpoints and input IDs belong to the plugin release, while the API key is set by the site administrator.
The ingestion webhook secret and Gami API secret are separate from the Langflow key. Protect each connection and use HTTPS with certificate verification in production. See Moodle setup and security and privacy.
Deployment decisions
Size and place the Moodle, Docling, Ollama, Qdrant, Langflow and vLLM services according to measured workload. The model variant, supported document formats, embedding dimensions, runtime images, ports and environment variables are specific to the installed services. Confirm them in the deployment configuration before applying infrastructure examples or capacity estimates.
Monitor both Moodle's queue and the receiver's processing backlog. A cleared Moodle queue shows successful delivery acknowledgements, while the remote index may still be processing requests.