Tech stack
Languages, frameworks, and the LLM backend configuration behind Vessios.
Backend services
wiki-worker— Python, FastAPI. Owns all domain and business logic. Dependencies are pinned exactly (==, not^/>=) to avoid dependency-confusion risk.wiki-gateway— Rust, Axum. A thin, type-unaware passthrough reverse proxy; it forwards request bodies without parsing them, so API type generation targetswiki-front, not the gateway.unsafeRust is disallowed project-wide.wiki-front— Next.js, TypeScript. Consumes the API described in the API reference.
Infrastructure
- Firestore — tenant, page, source, and knowledge-graph data, with per-tenant subcollection isolation.
- Vertex AI — embeddings and Vector Search; also hosts Claude when routed through Vertex.
- Redis — caching, rate limiting, and the semantic query cache.
- Pub/Sub — asynchronous pipelines (file ingest, export).
- BigQuery — a three-tier logging system (
query_logs, usage logs, audit logs). - Cloud Run — hosts both
wiki-workerandwiki-gateway; deployed via GitHub Actions, with infrastructure managed as code through OpenTofu across dev/staging/prod environments.
Embeddings
Production uses text-embedding-005 (Vertex AI, 768 dimensions, Japanese-capable). Local development uses multilingual-e5-small (384 dimensions). Because the dimensionality differs, local and production vector indexes are not interchangeable.
LLM backend selection
wiki-worker selects its LLM client through a factory, controlled by the LLM_BACKEND environment variable. Container wiring and api/main.py depend only on the factory — never on a concrete client — keeping the dependency direction inward per Clean Architecture.
LLM_BACKEND |
Implementation | Auth |
|---|---|---|
gemini |
GeminiClient (Vertex AI Gemini) |
ADC / IAM — no API key |
vertex |
ClaudeClient (Claude via Vertex AI) |
ADC |
anthropic (default) |
ClaudeClient (direct Anthropic API) |
API key |
Testing
wiki-worker:pytest, with all external services mocked by default (no live API calls or charges in CI).wiki-gateway:cargo testpluscargo clippy --all-targets -- -D warnings(zero warnings tolerated).- Evaluation harness (
wiki-worker/eval/): offline and mock-backed by default; a--liveflag opts into real Claude calls for golden-query regression and mode A/B testing.