Artificial Intelligence
Generative AI Development
We build generative-AI products that hold up in production — because the model is the easy part, and the retrieval, evaluation and guardrails around it are where these projects live or die.
Overview
This is the service for building a generative-AI product on top of large language models — an assistant or copilot your staff or customers actually use, a retrieval-augmented search over your own knowledge, a document- or data-extraction pipeline, or content, code and summarisation features embedded in a wider system. The part people underestimate is that calling the model is trivial; a prompt and an API key gets you a demo in an afternoon. Turning that demo into something a business can put in front of users, and depend on, is the entire job — and almost none of it is the model.
The hard, valuable engineering sits around the model: retrieval that fetches the right context so the system answers from your data rather than from the model’s half-remembered training; an evaluation harness that tells you whether a change made the thing better or worse instead of you guessing from a handful of hopeful examples; guardrails and fallbacks for when the model returns nonsense, refuses, or times out; and a cost and latency budget that survives real traffic rather than looking fine on ten test queries. We build that surrounding system, and we treat the model itself as one replaceable component inside it.
We will also be blunt with you, because the field rewards bluntness. Generative AI is not a source of truth — it hallucinates confidently and will keep doing so — and the projects that fail almost always fail for the same two reasons: the scope was vague ("add an AI assistant") so nothing could be evaluated or shipped, or there were no evals at all, so nobody could tell whether it worked until users found out for them. The value in this technology is real, but it comes from narrow, well-scoped, well-evaluated applications, not from a general-purpose oracle you point at your business and hope.
Who it’s for — Teams who want a generative-AI feature that holds up with real users and real data — and who would rather hear where it will and will not work than be sold an oracle.
What you get
- An evaluation harness built for your use case — a real test set of inputs and graded outputs, run on every change, so quality is measured rather than felt
- Retrieval engineered as first-class architecture — chunking, embeddings, a vector or hybrid search layer, and the reranking that decides whether the right context actually reaches the model
- Guardrails, validation and fallbacks — output checked against a schema or policy, and a defined path for when the model refuses, hallucinates or fails
- A model choice made on your constraints — hosted frontier model or self-hosted open-weight, chosen on data handling, cost and latency, and abstracted so it can be swapped
- Cost and latency budgeted, cached and monitored against real traffic — token spend and response times that stay viable at volume, not just in a demo
- Human-in-the-loop review on any consequential action, with an audit trail — the AI drafts or proposes, a person approves anything that matters
- A working product handed over in your accounts, with the prompts, evals, retrieval and monitoring documented so your team can operate and extend it
What Generative AI Development does for you
A system that grounds its answers instead of inventing them
A raw model answers from its training and will fabricate a confident, wrong answer when it does not know. Retrieval changes the game: the system fetches the relevant passages from your own documents, hands them to the model as context, and answers from those — with a citation you can check. Done properly it also declines gracefully when the answer is not in the source material, which is the honest behaviour that separates a knowledge tool people rely on from a plausible-sounding liability.
Evaluation that turns "seems better" into a number
Most gen-AI work is tuned by vibes — someone rewords the prompt, tries three queries, decides it feels improved, and ships a regression they cannot see. An evaluation harness ends that. With a real test set of inputs and graded outputs, every change to a prompt, a model, a retrieval strategy or a chunking scheme is scored against the same cases, so you can tell whether it genuinely helped, and catch the regression before a user does. This is the single highest-leverage thing you can build, and it is the thing failed projects skipped.
The model as a component you can replace, not a dependency you are married to
This field moves fast: a better or cheaper model ships every few months, prices fall, and a provider you depend on can change terms overnight. We build so the model sits behind an abstraction, with your prompts, evals, retrieval and guardrails owned by you — which means swapping the underlying model is a change you test against your evals and roll out, not a rewrite. You are buying a system that outlives whichever model is best this quarter.
Why teams choose us for Generative AI Development
- You want the engineering around the model — retrieval, evaluation, guardrails, caching, cost control — built by seniors who have run these systems in production, not a thin wrapper over an API call that falls apart the moment real users hit it.
- You want an evaluation harness from the outset, so quality is measured on your real inputs and every change is judged against it — because you have learnt, or would rather not learn the hard way, that gen-AI work without evals is guesswork.
- You want a straight answer on whether generative AI even fits your problem, and an honest split between the tasks where it genuinely helps and the ones where a boring deterministic approach would be cheaper, faster and more reliable.
- You care about data handling and prompt-injection risk from the first design, not after a security review — and you want consequential actions kept behind human approval rather than handed to a model that will occasionally get them wrong.
What Generative AI Development includes
The concrete pieces of work this covers — scoped to what your problem actually needs.
Assistants and copilots grounded in your systems
Conversational assistants and in-product copilots that help staff or customers with a defined task — answering from your knowledge, drafting in your domain, or guiding a workflow. The engineering is in scoping the assistant narrowly enough to be reliable, grounding it in retrieval so it answers from your data, and constraining what it can do. A copilot that drafts and suggests, with a person deciding, is far more useful and far safer than one turned loose to act on its own.
Retrieval-augmented knowledge search (RAG)
Search over your own documents, wikis, tickets and records that answers in plain language and cites its sources. The quality lives almost entirely in the retrieval, not the model: how documents are chunked, which embedding model is used, whether hybrid keyword-plus-semantic search beats pure vector search on your content, and whether a reranking step is earning its cost. Get retrieval right and a modest model gives excellent answers; get it wrong and the best model in the world confidently answers from the wrong passage.
Document and data extraction
Pulling structured data out of unstructured documents — invoices, contracts, forms, emails, reports — into a schema your systems can use. Generative models are genuinely good at this, but the engineering is in validating every extraction against the expected schema, measuring accuracy per field on a real evaluation set, and routing the low-confidence cases to a human rather than letting a plausible-looking hallucinated total flow silently into your accounts. The value is a pipeline that knows when it is unsure.
Content, code and summarisation features
Drafting, rewriting, summarising and code-generation features embedded inside a larger product — a first draft a person edits, a summary of a long thread, a suggested code change a developer reviews. These work best as assistance under human control, not as an autopilot that publishes or commits unreviewed. We build the prompts, the output validation and the review step, and we are honest that the model’s output is a starting point for a person, not a finished artefact to trust unread.
Evaluation harnesses and prompt engineering
The discipline that makes everything else improvable: a test set of representative inputs with graded expected outputs, automated scoring — exact-match, schema checks, or a model-graded rubric where the task is subjective — run on every change so quality is tracked over time. Prompt engineering done against that harness is real engineering; prompt engineering done by eyeballing three examples is superstition. We build the harness first and tune against it, so improvements are demonstrable and regressions are caught before release.
Guardrails, caching and cost-latency engineering
The operational layer that decides whether a gen-AI product survives contact with real traffic: output validation against a schema or policy, input filtering against prompt injection, and defined fallbacks for when the model refuses, times out or returns garbage. Alongside it, caching of repeated calls and embeddings, prompt-size discipline, and choosing a smaller model where it suffices — so token cost and latency stay within a budget you set, and a feature that was viable at ten queries is still viable at ten thousand.
Where it fits
An internal knowledge assistant over scattered documents
Staff waste hours hunting through policies, wikis, past tickets and shared drives for answers that already exist somewhere. We build retrieval-augmented search over that corpus: it answers questions in plain language, cites the source document so the answer can be verified, and says it does not know when the material does not cover it. The engagement is mostly retrieval quality and evaluation — the honest, well-cited "I don’t know" is what earns the trust that makes staff actually use it.
A document-extraction pipeline with a confidence threshold
A team keys data from thousands of invoices, contracts or forms by hand, or maintains brittle rules that break on every new format. We build a pipeline that extracts the fields into a validated schema, scores its own confidence, passes the clear-cut cases straight through, and routes the uncertain ones to a human queue. The measured outcome is throughput with an accuracy you can prove per field, and a system that defers rather than guesses when a document is unusual.
A customer-facing copilot with a human in the loop
A copilot inside your product that drafts replies, suggests next steps, or assembles a response for a support agent — but proposes rather than sends. A person reviews and approves anything that reaches a customer or changes a record, with the exchange logged for audit. This is deliberately not an autonomous agent acting unsupervised; for anything consequential and customer-facing, human-in-the-loop is the design that lets you ship at all, because the model will sometimes be wrong and the review step is what catches it.
An honest feasibility assessment before you commit a budget
Sometimes the most valuable engagement is a short, unglamorous one: you have been told to "add AI", and what you actually need is a senior engineer to define the problem, prototype the risky part, build a small evaluation set, and tell you plainly whether generative AI fits — or whether a search index, a rules engine or a bit of classical ML would be cheaper, faster and more reliable. We would rather run that assessment and talk you out of a poorly-fitting project than take the budget for one that was always going to fail.
How we approach Generative AI Development
We start by narrowing the scope until it is something that can actually be built, evaluated and trusted. "An AI assistant for our business" cannot be shipped or measured; "an assistant that answers policy questions from these forty documents, cites its source, and says it does not know when the answer is not there" can be. Before we build the pipeline we build the evaluation set that defines what good looks like on your real inputs, because without it every later decision — a new model, a cheaper one, a different retrieval strategy, a reworded prompt — is a guess dressed up as progress.
From there we build the engineering around the model, not the model itself: retrieval that grounds answers in your data, guardrails that catch the failures generative models reliably produce, caching and budgeting that keep it affordable, and human review wherever a wrong output would actually cost something. The model sits behind all of it as a component we can replace when a better or cheaper one ships — which, in this field, is roughly every few months — without rebuilding the product around it.
How the engagement runs
We open by narrowing the scope and building the evaluation set, in that order, because they are what most projects skip and most failures trace back to. We agree exactly what the system should do on which inputs, what a good output looks like, and how it should behave when it does not know — then we turn that into a real test set drawn from your own data. That evaluation harness is the ground truth for the whole engagement: from here on, no change ships on a hunch, because every prompt, model, retrieval and chunking decision is scored against the same cases.
From there we build the pipeline in thin, measurable slices — retrieval first where retrieval matters, then the model integration behind an abstraction, then the guardrails, validation and fallbacks, then caching and cost-latency tuning against realistic traffic. You see progress as numbers moving on the evaluation harness and a working product you can try, not a demo on cherry-picked inputs. Human-in-the-loop review and the audit trail go in wherever an action is consequential, from the first slice rather than bolted on before launch, and the whole thing runs in your accounts throughout.
How we architect it
The organising principle is that the LLM is one replaceable component, not the centre of the system. Around it we build the parts that carry the real weight: a retrieval layer that fetches grounding context, a prompt-assembly layer that is versioned and testable, an output-validation layer that checks what came back against a schema or policy, and a fallback path for refusals, timeouts and nonsense. The model sits behind an abstraction so that swapping a hosted frontier model for a self-hosted open-weight one, or upgrading to whatever ships next, is a change you validate against your evals rather than a rewrite of the product.
The hosted-versus-self-hosted decision is made on your constraints, not on fashion. A hosted frontier model is usually the fastest path to good quality and needs no infrastructure, at the cost of sending data to a third party and depending on their pricing and availability. A self-hosted open-weight model keeps data on your own infrastructure and fixes your cost per token, at the cost of running and tuning the serving stack yourself and generally accepting somewhat lower ceiling quality. We often use hosted to prove the product works and reserve self-hosting for where data residency, cost at volume or latency genuinely demand it — and because the model is abstracted, that choice can change without the rest of the system caring.
Security and data handling
Data handling is the first question, because using a generative model means deciding what data leaves your control and where it goes. With hosted models we are explicit about what is sent in a prompt, what a provider retains and for how long, and whether the terms permit your data being used for training — and we design retrieval so that only the minimum necessary context is sent, with sensitive fields redacted or kept out entirely. Where data residency or confidentiality rules a hosted model out, we self-host an open-weight model so nothing leaves your infrastructure. Either way, access control on the underlying documents is enforced before retrieval, so the assistant can never surface a passage the asking user was not allowed to see.
Prompt injection is the vulnerability class specific to this technology and it has no clean fix, so it must be designed around. Any text the model reads — a user message, a retrieved document, a web page, an email — can carry instructions that try to hijack its behaviour, and you cannot fully sanitise your way out of it. So we treat the model as untrusted: its output is validated before it is used, it is never given the authority to take a consequential action on its own, and anything that matters is gated behind human approval or a deterministic check the model cannot talk its way past. We constrain tool access to the minimum, keep secrets and privileged operations out of the model’s reach, and log the inputs and outputs so a bad response can be traced. Security here is the assumption that the model will sometimes be manipulated or simply wrong, and a system built so that neither is catastrophic.
Signs it’s time
- You have a promising gen-AI prototype that impresses in a demo but nobody trusts enough to put in front of real users, because you have no way to tell how often it is wrong
- Staff burn hours searching scattered documents, wikis and tickets for answers that exist somewhere, and you want grounded retrieval over your own knowledge rather than a generic chatbot
- You are extracting structured data from unstructured documents — invoices, contracts, forms, emails — by hand or with brittle rules, and want a pipeline that is accurate enough to rely on and knows when to defer to a human
- You are being pushed to "add AI" with no defined problem — and what you actually need first is an honest read on whether generative AI fits the task at all, before anyone spends a budget on it
Our working method
Our method is built on two convictions the failures in this field keep confirming. First, scope narrowly: a generative-AI feature that does one well-defined thing reliably is worth more than a general assistant that does everything unreliably, and a scope tight enough to evaluate is a scope tight enough to ship. Second, evaluate everything: we build the evaluation harness before we tune anything, and we treat prompt and model changes as experiments scored against it, not as edits shipped on a good feeling. These two disciplines are exactly what vague, eval-free projects lack, which is why they stall in the gap between demo and production.
The third conviction is honesty about the technology. Generative AI is not a source of truth; it hallucinates, and a system that hides that behind a confident tone is worse than one that admits uncertainty. So we design for graceful "I don’t know", ground answers in retrieval, keep humans in the loop on consequential actions, and are willing to tell you when the right answer is not generative AI at all. We would rather scope you a smaller, reliable thing — or talk you out of a poorly-fitting one — than ship an impressive demo that quietly loses your users’ trust the first week they depend on it.
Technologies we build it with
Chosen per problem, not per fashion — this is the stack we most often reach for on this work.
How we deliver
- 01
Discover
We map the system, the constraints and the business it serves — including the parts nobody documented.
Architecture brief
- 02
Architect
Decisions get made, written down and defended before a line of production code exists.
Decision records
- 03
Build
Short cycles against working software. You see progress in the product, not in a status deck.
Shipping increments
- 04
Operate
Monitoring, incident response and iteration. The system is alive, so the engagement is too.
Runbooks & SLOs
What changes
Quality you can measure
An evaluation harness on your real inputs, so you know how often the system is right before your users do — and every change is judged against it rather than a hopeful glance.
Grounded, not guessed
Retrieval that answers from your data with a citation, and the discipline to say "I don’t know" instead of inventing — the difference between a tool people trust and one they quietly stop using.
Affordable at volume
Token cost and latency budgeted, cached and monitored, so the feature that looked fine on ten queries is still viable at ten thousand — and the model is swappable when a cheaper one ships.
Industries we serve
Domain knowledge changes what gets built. A few of the sectors we know before the first meeting.
How pricing works
- A scoped build for a well-defined generative-AI product — an internal knowledge assistant, an extraction pipeline, a specific copilot — quoted once the scope is narrowed and the shape of the evaluation set is agreed, so you are not paying for an open-ended "AI project" nobody has pinned down.
- A short feasibility and evaluation engagement — narrowing the problem, prototyping the risky part, building a small evaluation set, and an honest read on whether generative AI fits — priced as a fixed piece of work, and deliberately cheaper than discovering the answer after a full build.
- A monthly senior engagement for gen-AI work that keeps evolving — new sources added to retrieval, evals extended, models swapped as better or cheaper ones ship, cost and latency tuned as traffic grows — where you want continuity and someone accountable for quality over time.
- A focused rescue or audit of an existing gen-AI feature that impresses in a demo but is not trusted in production — usually building the evaluation harness that was skipped, fixing retrieval, and adding the guardrails and fallbacks — priced by the assessment.
Typical timeline
- 01
Scoping and evaluation set
One to two weeks narrowing the problem to something buildable, agreeing what good and "I don’t know" look like, and constructing a real evaluation set from your own data — the ground truth every later decision is scored against.
- 02
Retrieval and first working slice
Two to three weeks building the retrieval layer where it matters, integrating the model behind an abstraction, and getting a working slice answering real inputs, with quality tracked as numbers on the evaluation harness rather than a demo.
- 03
Guardrails, human-in-the-loop and cost tuning
Output validation, prompt-injection defences, fallbacks for refusals and failures, human approval on consequential actions, and caching and model choice tuned so token cost and latency stay within budget under realistic traffic.
- 04
Hardening and handover
Data-handling review, monitoring of cost, latency and quality in production, and documentation of the prompts, evals, retrieval and guardrails so your own team can operate, evaluate and extend the system without us.
Why teams choose us for Generative AI Development
We build the hard part, not a wrapper over an API
Anyone can call a model; the value and the difficulty are in the retrieval, evaluation, guardrails and cost engineering around it. That surrounding system is what we build, and it is what decides whether your product works with real users and real data or falls over the first week it meets them.
Evals first, always
We build the evaluation harness before we tune anything, because gen-AI work without measurement is guesswork and the projects that fail are the ones that skipped it. With us, every prompt and model change is scored on your real inputs, so quality is demonstrable and regressions are caught before your users find them.
Honest about where AI does and does not belong
Generative AI hallucinates and is not a source of truth, and plenty of "AI projects" are better served by search, rules or classical ML. We will tell you which parts of your problem genuinely fit, keep humans in the loop where a wrong output would cost something, and talk you out of a poorly-scoped build rather than bill you for one.
We operate what we build
Because we run these systems in production, the operational realities — token cost, latency, prompt injection, provider changes, the model swapped for a better one — are designed in from the start rather than discovered after launch. We optimise for a feature that stays viable and trustworthy at volume, not a demo that looks clean on a handful of queries.
How to engage us
Three ways to work with us on this — chosen to fit the problem, not our margin.
- Dedicated teamA standing team that works only on your product, in your rituals and your tooling. Best when the roadmap outlives the project.Ongoing product development
- Staff augmentationNamed senior engineers embedded into your existing team, reporting into your leads. Best when you know what to build and need capacity.Filling a capability gap
- Software outsourcingA defined outcome delivered end-to-end by an accountable team. Best when you want the result owned, not just the hours filled.Outcome-owned delivery
Related services
Part of AI Development. Other work we do alongside this.
Related terms
Common questions
Will the AI make things up, and what do you do about it?
Yes — generative models hallucinate, and any vendor who tells you otherwise is selling something. It is inherent to how they work: they produce plausible text, not verified fact, and they are not a source of truth. We do not pretend to eliminate it; we engineer around it. Retrieval grounds answers in your actual documents with a citation you can check, output is validated against a schema or policy, the system is designed to say "I don’t know" rather than invent, and anything consequential is gated behind a human. The goal is a system where a wrong answer is rare, catchable and never catastrophic — not a mythical model that is always right.
Why do you insist on evaluations before building the actual feature?
Because without them you are flying blind, and blind is how most gen-AI projects crash. If you cannot measure whether the system is right on your real inputs, you cannot tell whether a reworded prompt, a new model or a different retrieval strategy helped or quietly made things worse — you just ship changes on a feeling and let users find the regressions. The evaluation harness is a test set of representative inputs with graded outputs, run on every change. It is the single highest-leverage thing in the whole engagement, it is exactly what failed projects skipped, and it is why we build it first.
Should we use a hosted model like a frontier API, or self-host an open one?
It depends on your constraints, and we decide it on them rather than on fashion. A hosted frontier model gives you the best quality fastest with no infrastructure to run, but sends data to a third party and ties you to their pricing and availability. A self-hosted open-weight model keeps data on your own infrastructure and fixes your cost per token, but you run and tune the serving stack and generally accept a somewhat lower quality ceiling. We often prove the product on a hosted model and reserve self-hosting for where data residency, cost at volume or latency genuinely require it — and because we abstract the model, that decision can change later without rewriting the product.
Can the AI just take actions for us — send the email, update the record, place the order?
It can draft and propose them, and for anything consequential we deliberately keep a human in the loop to approve before it happens. This is not caution for its own sake: the model will sometimes be wrong, and it can be manipulated through prompt injection by text it reads, so handing it unsupervised authority over things that touch customers, money or records is how you get an expensive incident. A copilot that prepares an action for a person to approve, with an audit trail, is more useful and far safer than an autonomous agent turned loose. Where an action is genuinely low-stakes and reversible we will automate it — but that is a deliberate decision, not a default.
We were told to "add AI" but do not have a specific problem — can you help?
Yes, and the most useful thing we can do first is not build anything. A vague brief like "add an AI assistant" is the single most common reason these projects fail, because nothing that broad can be scoped, evaluated or shipped. We run a short engagement to define the actual problem, prototype the risky part, build a small evaluation set, and give you a straight answer on whether generative AI fits — or whether a search index, a rules engine or a bit of classical machine learning would be cheaper, faster and more reliable. Sometimes the honest outcome is that gen-AI is the wrong tool, and we would far rather tell you that before you commit a budget than after.
Let’s talk about Generative AI Development.
Tell us what you’re building or fixing. A senior engineer reads every enquiry and replies within a business day.