The full system, on your own servers.

The full system,
on your own servers.

Flask, RabbitMQ, Qdrant, Docling and Grafana deployed on your infrastructure. Students use it via web, Telegram or WhatsApp —without a single byte leaving your network.

For CIOs / Rectors

In business terms: your data in your own data centre, integrated with your LMS in weeks, with no dependency on any cloud provider. Your institution owns the technology.

Flask API + JWT
RabbitMQ + Qdrant
Docling OCR
Telegram · WhatsApp · Web
Grafana · Prometheus

Every query follows the same path.
No step without a record.

Click each step to see exactly what happens. From when the student types to when they get the answer, everything is traceable.

How does the answer reach the student?

In under two seconds, a query passes through seven different services. Here's the detail.

Nine pieces that fit together.
No external dependencies in production.

Each service has a clear responsibility and communicates via authenticated contracts. The system scales —and fails— predictably.

React · Vite · i18next

Frontend React + Vite

The platform's web interface: chat, document upload and admin panel, in Spanish, Catalan and English from day one.

Flask · JWT · SQLAlchemy

Backend Flask API

The command centre. Authenticates users, decides which agent handles each query and coordinates with the LMS, Qdrant and the message queue.

Python · OpenAI · Agents

Multi-Agent Orchestrator

Analyses the intent of each query and routes it to the right agent: one for the LMS, one for documents, one for support. Every decision is logged.

Docling · BM25 · Qdrant

RAG Worker

Processes documents uploaded by teachers: applies OCR, extracts text and tables, generates vectors and indexes them in Qdrant for the assistant to query.

Flask · Webhooks · Internal tokens

Telegram & WhatsApp Bots

The messaging entry points. They receive student messages, forward them to the Backend and return the response to the originating channel.

AMQP · Dead-letter queue

RabbitMQ

The queue that makes sure no job is ever lost. If a hundred documents arrive at once, RabbitMQ lines them up and processes them one by one without overloading the system.

Vector DB · BM25 · Collections

Qdrant

The assistant's memory. Stores institutional knowledge as vectors and retrieves it in milliseconds when a document-related query arrives.

SQL · pgvector · History

PostgreSQL

The source of truth. Users, conversation history, the status of every processed document and the audit logs all live here.

Prometheus · Grafana · PromQL

Prometheus + Grafana

The system's eyes. Prometheus collects metrics from every component every 15 seconds; Grafana turns them into dashboards any technical manager can read.

Technology chosen for results,
not for being trendy.

Every tool has years of production use and operates without connecting to external services. This isn't a prototype —it's the stack that handles a real institution's daily load.

Knowledge Retrieval

RAG Engine: Docling + BM25

When a student asks about the topic 3 notes, the system finds them even if they don't use the exact words in the document.

  • Docling converts PDFs, DOCX, HTML and PPTX into structured text, including tables
  • Hybrid BM25: finds results by keyword and by meaning at the same time
  • Each subject has its own Qdrant collection to avoid context mixing
  • Chunking respects document structure, so answers always have real context
  • RabbitMQ smooths out upload spikes: a hundred documents at once won't overload the system
Distributed AI

Multi-Agent Orchestration

The system knows whether a student is asking about their tasks, their grades or the content of a PDF. And it routes the query to the agent that can answer that.

  • An LLM classifies the intent: tasks, exams, schedules, campus events or documents
  • Each query type has its own specialist agent, without overlaps
  • The student's LMS provider (Moodle, Canvas…) is resolved automatically
  • Every orchestrator decision is logged in PostgreSQL for audit
  • If an agent fails, the orchestrator retries or escalates without interrupting the user
Total Observability

Prometheus + Grafana

You know what the system responds, how long it takes and what it costs —all from your own servers, without sending data to any external service.

  • 8 real-time dashboards: LLM, agents, orchestrator, queues, Qdrant and documents
  • Prometheus collects metrics from the Backend, Bots and Workers every 15 seconds
  • Automatic alerts before users notice the problem
  • Immutable interaction history in PostgreSQL for compliance audits
  • Exportable access logs for the privacy team and DPO
Powered by Grafana

Eight panels.
Everything you need to operate with confidence.

From the cost of each LLM call to the state of the document queue. Grafana deployed on your servers, no external data.

LLM Usage

How many calls does the system make and how long do they take? This panel shows P50/P95/P99 latencies by query type so you can control inference spend.

Agents in production

How many queries each agent resolves, what percentage it answers correctly and how long it takes. You spot a degrading agent in seconds.

Orchestrator Accuracy

How many queries arrive ambiguous? How many trigger a fallback? This panel measures whether the LLM classifier is still accurate or needs retuning.

Response Times

HTTP endpoint latency and per-agent latency. Identify whether the bottleneck is in the Backend, the LMS or Qdrant before the user notices.

Activity by Channel

Web, Telegram and WhatsApp compared in the same panel. Messages per minute and error rate per channel at a glance.

RabbitMQ Queue

How many documents are waiting to be processed and whether the dead-letter queue is growing. An alert here means the RAG Worker needs attention.

RAG Engine (Qdrant)

Queries per collection, vector search latency and routing quality. If assistant responses slow down, this panel shows you why.

Document Pipeline

How many documents are processed per hour, which formats and how many fail. Catch OCR issues before the teacher notices.

Your institution already has an LMS.
Witty Boxes connects on day one.

Whether you use Moodle or Canvas: the system detects each student's provider automatically. Switching LMS in the future won't require touching the AI engine.

How does the Provider Factory work?

Each user has their LMS stored in the lms_type field. When they make a query, the system picks the right connector at that moment —without conditional logic scattered across the code.

M
Production

Moodle

REST API + Web Services

The most complete connector. Real-time access to tasks, exams, schedules, events and downloadable resources. In production since the first release.

C
Production

Canvas

Canvas API v1

Same integration depth as Moodle: courses, grades, modules and student profile. The orchestrator doesn't know or care which one is behind it.

B
In development

Blackboard

Blackboard REST API

In active development. The architecture already has the space reserved: adding Blackboard won't require changes to the orchestrator or the agents.

All LMS endpoints are provider-agnostic

Backend endpoints like /lms/events or /lms/subjects work the same regardless of the LMS. The right connector is resolved internally based on the authenticated user.

Request a technical audit
of your infrastructure.

We analyse the feasibility of On-Premise deployment in your environment and design the architecture adapted to your institution.

Back to home