Tech stack
Overview
Interface → Orchestration → LLM → Memory/Tools → Infrastructure
Orchestration
- Details →LangGraphStateful agent graphs
Cycles, conditional branches, and cross-call state persistence. Native checkpointing: if the process crashes at 3am, it resumes from the last stable node.
vs. LangChain LCEL: LangGraph for anything requiring cycles or state. LCEL for simple linear pipelines.
- Details →CrewAICollaborative agent teams
When the problem naturally splits into distinct roles: Researcher, Writer, Validator. Higher abstraction than LangGraph, less code for cases without complex cycles.
vs. LangGraph: CrewAI for sequential role-based pipelines. LangGraph when you need cycles or precise state machines.
Memory & search
- Details →pgvector + SupabaseRAG and state persistence
PostgreSQL extension for vector search: no separate infrastructure. The same database handles application state, embeddings, and Row Level Security for tenant isolation.
vs. Pinecone: pgvector for < 10M vectors when transactional consistency matters. Pinecone for extreme volumes (> 100M vectors).
- Details →Tavily SearchReal-time web search
Search API built for LLMs: pre-cleaned snippets, domain filtering. Used in competitive intelligence and document research agents.
vs. SerpAPI: Tavily returns content directly usable by an LLM. Cost per request ~3x lower at equivalent snippet quality.
- Details →LangfuseLLM tracing & cost monitoring
Open source, self-hostable, GDPR-native. Every LLM call is traced: input, output, duration, token cost per model. Cost dashboard per agent, per tenant, per feature.
vs. LangSmith: Langfuse for data sovereignty (self-host on Scaleway). LangSmith if you want to stay 100% cloud Langchain.
Infrastructure
- Details →Scaleway Serverless ContainersSovereign European cloud
Docker-native, fr-par hosting, GDPR and HDS available, per-second billing. Preferred for clients with sovereignty constraints (health, finance, public sector).
vs. AWS/GCP: Scaleway for European sovereignty and cost. AWS for extreme scaling workloads or existing AWS ecosystem.
Frontend & APIs
- Details →Next.js 16 + React 19Web interfaces and APIs
App Router + Server Components: zero client JS on SEO pages. RSC streaming for interfaces with LLM latency.
Server Components make streaming LLM responses natural without useState or useEffect. The Route Handler manages incoming webhooks.
Model strategy
How we reason about models, not which one wins this month. Decision guides on choosing, deploying and sizing models, plus a living catalogue.
- Details →
Choosing a model is a process, not a pick: five steps that end in a routing strategy, not a single winner.
- Details →
Lab API, managed open-weight, or self-hosted: where your model runs, and who pays for what.
- Details →
Frontier, workhorse, small, edge: a capability ladder, and matching the rung to the task is the lever.
- Details →
For an EU buyer, which jurisdiction governs the data is a first-class axis, not an afterthought.
Adjacent landscape
Tools we map but do not run in our production core. We cover where they fit and when to graduate to something more robust.
- Details →
Fair-code workflow automation: visual glue, with a Code node escape hatch.
- Details →
pgvector is the right start. Qdrant earns its place when filtering complexity, corpus scale, or data sovereignty outgrow what a Postgres extension can deliver.
- Details →
Fixed cost, German jurisdiction, no US CLOUD Act lever on eu-central data: EU infrastructure for self-hosted agent stacks.
Architecture principles
Stateful by default. Each agent maintains its state via LangGraph checkpointing. On timeout or network error, the pipeline resumes from the last stable node, without restarting from scratch. Critical for long pipelines (> 2 min of processing).
Explicit fallbacks. Every LLM call has a timeout (defined), a retry count (defined), and a fallback path (defined). If Sonnet times out, we retry on Haiku. If Haiku times out, we escalate to a human. Nothing is implicit.
Model != provider. The LangChain/LangGraph abstraction lets us swap Claude for GPT-4o or Mistral without touching business logic. We code against interfaces (system_message, invoke, stream), not proprietary SDKs.
Controlled cost. Model routing is an architecture decision, not a detail. Each graph node specifies its model. Langfuse calculates the real cost per run. Target: Haiku on 60-70% of calls, Sonnet on the 30-40% that need it.