Our AI stack
What we build with, and why. We choose tools for your constraints, not ours — this is our default starting point.
Models
Anthropic Claude — long documents, careful reasoning, coding and agentic work
OpenAI GPT — broad ecosystem, also available through Azure OpenAI
Google Gemini — multimodal work and teams already on Google Cloud
Open-weight models (Llama, Mistral, Qwen) — when data must never leave your infrastructure
We are model-agnostic. We pick per task on evaluation results, cost and your data constraints, and design so a model can be swapped without a rewrite.
Orchestration & agents
Plain Python services with the providers' official SDKs
Tool calling and structured output for reliable integration
Model Context Protocol (MCP) for reusable tool and data connectors
We keep orchestration thin and readable. Frameworks are used where they earn their place, not by default.
Retrieval & data
PostgreSQL with pgvector as the default vector store
Hybrid keyword + semantic search with re-ranking
Permission-aware retrieval that respects your existing access rules
Most retrieval problems are solved by better chunking and ranking, not a new database. We add a dedicated vector engine only when scale demands it.
Quality, evals & observability
Evaluation sets built from your real cases, run in CI
Request tracing, cost and latency tracking per feature
Prompt and model versioning with regression checks
If you cannot measure it, you cannot safely change it. Every system ships with evals and tracing.
Application & infrastructure
Python / FastAPI back ends, React / TypeScript front ends
Docker; deployed to AWS, Azure or GCP — in your account where required
CI/CD, infrastructure as code, audit logging
Boring, well-understood infrastructure your team can own after handover.
Already have a stack?
We work inside your existing cloud, models and tooling. See how we handle your data on our security page.