Project Overview

What GENIE.AI is, its capabilities, technology stack, architecture layers, and where to read deeper.

GENIE.AI is an open-source generative-AI framework for the public sector: a sovereign, Digital Public Good (DPG)-compliant Retrieval-Augmented Generation (RAG) platform with multilingual support. It answers questions strictly from an indexed knowledge base you control, running every model on infrastructure you own. It integrates with OPEA (Open Platform for Enterprise AI) for AI/ML services.

This page is the orientation layer — what GENIE.AI is, how it is built, and where to read deeper. Each area below has a dedicated page; this overview intentionally stays high-level. Newcomers of every role (deployer, integrator, content manager, sovereign reviewer) start here.

Key capabilities

  • Grounded answers — the LLM answers only from retrieved context and abstains when the knowledge base does not contain the answer.
  • Hybrid retrieval — dense-vector search plus lexical search (BM25, keyword scoring) combined with reciprocal-rank fusion, plus optional knowledge-graph traversal. See RAG Pipeline.
  • Sovereign by design — embedding, reranking, generation, and translation models all run on your infrastructure (OPEA / vLLM / TEI). No third-party model API is required for the core path.
  • Multilingual — English is the RAG source of truth; the UI and answer stream are translatable, with config-driven locale availability (VUE_APP_AVAILABLE_LOCALES, KEYCLOAK_SUPPORTED_LOCALES; see Restrict active locales).
  • Observable — OpenTelemetry-native metrics, logs, and traces across the RAG pipeline (when ENABLE_OBSERVABILITY=1). See Observability.
  • Secure — Keycloak OIDC identity, document antivirus scanning (ClamAV), PII-filtered telemetry (shared/lib/tracing-pii.js).

Technology stack

LayerTechnology
Web frontendVue 3, Vuex, vue-i18n, axios, ApexCharts (Vue 3 / Vue CLI)
MobileFlutter 3.10+ (Dart 3.10.8+), Riverpod (flutter_riverpod ^3.0.0)
Backend (BFF)Node.js 22+, Express, JWT (via Keycloak), Winston
AI/MLOPEA, vLLM, TEI (embeddings + reranking)
DatabaseArangoDB 3.12+ (document + graph + vector)
CacheRedis (redis-cache service, ioredis)
IdentityKeycloak (OIDC)
API gatewayKong, NGINX
ObservabilityOTel SDK, VictoriaMetrics / Logs / Traces, Grafana
OrchestrationDocker Swarm
CI/CDGitLab CI

Architecture layers

1. Client Layer      — Vue 3 web app, Flutter mobile
2. API Gateway       — Kong / NGINX
3. Application Layer — Node.js/Express backend (BFF)
4. AI Layer          — OPEA microservices (ChatQnA, Retriever, Reranker, Dataprep)
5. Data Layer        — ArangoDB (graph + vector), Redis, file storage

Each RAG stage emits OpenTelemetry spans (units of work in distributed tracing), propagated across service boundaries with the W3C traceparent header. For the full C4 diagrams, authentication flows, and the service-to-service auth matrix, see Architecture.

Repository structure

GENIE.AI is organised as a multi-component monorepo with seven logical parts:

PartDirectory
Web frontendcomponents/gov-chat-frontend/
Backend (BFF)components/gov-chat-backend/
Shared backend libcomponents/shared/lib/
Document repositorycomponents/document-repository/
AI/ML overlaygenie-ai-overlay/
API gateway configapi-gateway-solution/
Deployment & opsdeploy/, docker-compose.yaml, configs/

For the full source-tree walk-through, see Source tree analysis.

Design principles

  • Sovereignty & data ownership — data and models stay on infrastructure the operator controls.
  • Privacy by design — grounded generation avoids leaking training-data knowledge; telemetry attributes are PII-filtered.
  • Standards-based interoperability — OIDC/OAuth2, OpenTelemetry, OpenAI-compatible model APIs, W3C trace context.
  • Extensibility — pluggable models, configurable prompts and retrieval knobs, locale-whitelisting per deployment (see Restrict active locales).
  • Operational simplicity — single-node storage binaries, one collector per node, a single docker-compose.yaml for both Compose and Swarm.

Where to go next

Want to know about…Read
The RAG pipeline end-to-endRAG Pipeline
Tracing, metrics, logs, dashboardsObservability
C4 diagrams, auth flows, service matrixArchitecture
Deploying (Compose / Swarm / Ansible)Deployment
Identity, Keycloak, external IdPsConfiguration
Backend API contractsReference → API contracts
Setting up a dev environmentBuild and run locally
Frontend theming & componentsFrontend
Mobile appMobile
Managing the knowledge baseKnowledge Base

Quick reference

In Docker Swarm only Nginx (80/443) and ArangoDB (8529) are host-exposed. All other services are inter-container only on the genieai_network overlay.

ServiceContainer portHost-exposed?
Nginx (HTTP / HTTPS)80 / 443Yes
ArangoDB8529Yes
Backend (BFF)3000No — via Kong /api
Frontend8090No — via Nginx on /
ChatQnA8888No — internal OPEA
Retriever7000No — internal OPEA
vLLM8000No — internal OPEA
TEI (embedding / reranker)80No — internal OPEA
Dataprep5000No — internal OPEA
Translation8888No — internal OPEA
Keycloak8080No — via Kong /auth
Kong8000 (proxy) / 8001 (admin, internal only)No
PostgreSQL5432No
Redis6379No
ClamAV3310No
OTel Collector4318 (OTLP HTTP)No
Grafana3000No — via Kong /grafana/

If your browser can’t reach a port, only 80/443 (Nginx) and 8529 (ArangoDB) are reachable from the host — every other port listed above is inter-container only and must be reached through Kong on https://<gateway-host>.