Services / AI Engineering

LLM application development.Useful beyond the chat window.

We turn language models into practical software: assistants that use your knowledge, document workflows that produce reviewable outputs, and AI features built into your product. Designed around your users, data and operating constraints.

Explore the tech stack

Custom software. Grounded context. Measurable product behaviour.

The business case

A model response is not a product.

The value comes from helping someone complete a real task, not from adding a chat box. We define the user's workflow, the information they need and how an incorrect result would be detected. Then we build the interface, data connections and controls that make the feature useful.

Where language models fit

Work involving varied text, semantic meaning, document synthesis or drafting can be a good candidate. A useful starting point has representative examples, authorised sources and a business owner who can assess the result.

Where conventional software wins

Exact calculations, fixed business rules and straightforward lookups often belong in deterministic code. We combine those tools with a model where needed, rather than asking a model to perform every step.

What we build

AI features with a defined job.

These are example scopes, not claims of existing customer deployments. We shape the implementation around your source quality, user needs and integration access.

Knowledge assistants

Help staff find answers across policies, product documentation and internal knowledge, with source references and permission-aware retrieval.

Missing or conflicting evidence triggers an explicit limitation, not a fabricated answer.

Measure: Answer usefulness, citation support and time to find information.

Document workflows

Extract, classify and summarise contracts, reports and correspondence into a reviewable record or structured output.

Validate required fields and route ambiguous or high-impact findings to a reviewer.

Measure: Field-level accuracy, reviewer corrections and processing time.

Customer-facing copilots

Add contextual assistance to a product or support experience, grounded in approved content and the customer's authorised records.

Provide a clear human handoff; keep account changes behind normal application controls.

Measure: Resolution quality, escalation quality and repeat contacts.

Drafting & review tools

Create first drafts of proposals, support replies or reports using approved templates and relevant business context.

People remain responsible for approval and publication of consequential communications.

Measure: Editing effort, factual errors and time to an approved draft.

Natural-language interfaces

Turn a user's request into a constrained search, filter or validated query over an existing application.

Do not execute arbitrary model-generated SQL or expose records outside the user's access.

Measure: Correct query interpretation, permission integrity and successful searches.

AI features inside your product

Embed summarisation, comparison, semantic search or writing assistance into the screens your users already work in.

Design a usable non-AI path for unsupported requests and provider failures.

Measure: Feature adoption, completed workflows and cost per useful result.

Application architecture

Context in. A checked result out.

A dependable LLM feature has a clear request lifecycle. Identity and access checks happen outside the model; source context is assembled deliberately; outputs are validated before the application relies on them.

01

Application & identity

Your interface owns sign-in, tenant boundaries, permissions and user feedback. Request context is assembled by application logic, not inferred by the model.

02

Context & retrieval

Ingest authorised sources, preserve provenance and filter retrieval by access. Combine keyword and semantic search where it helps; rerank only when testing shows a benefit.

03

Model gateway & prompts

Use versioned instructions, explicit output contracts and a model chosen against your evaluation set. Centralise provider configuration, timeouts and usage limits.

04

Validation & presentation

Validate structured outputs in code, verify source references and handle refusal or missing evidence. Stream responses where appropriate without presenting partial output as a completed result.

05

Operations & feedback

Track latency, errors, usage and sampled quality within agreed privacy limits. Tie user feedback to reproducible cases and review changes before rollout.

A worked example

An internal policy assistant. With boundaries.

Consider an employee asking which expenses can be reimbursed for a particular trip. The useful outcome is an evidence-backed answer, not a confident interpretation of a policy the model has never seen. This is an illustrative design, not a live demo.

  1. 01

    Identify

    Use the employee's authenticated role and region to determine which policy sources they can access.

  2. 02

    Retrieve

    Find the relevant policy version and passages. Preserve dates and source references; exclude inaccessible documents.

  3. 03

    Respond

    Explain the applicable rules with citations. Ask for missing trip details or acknowledge conflicts in the evidence.

  4. 04

    Review

    Let the employee open the sources or contact finance. The answer does not approve an expense or override company policy.

Test with outdated policies, conflicting clauses, absent information and cross-region access attempts. Measure factual support and escalation quality, not just whether the reply sounds helpful.

Knowledge & data readiness

Better context starts before the prompt.

Retrieval-augmented generation can supply information the model would not otherwise have. It does not automatically make an answer correct. Source ownership, relevance, freshness and access need to be designed and tested together.

Source lifecycle

Define approved sources, update frequency and deletion behaviour. Handle scanned files, parsing failures and duplicate versions; keep a link to the original evidence.

Retrieval quality

Choose chunking and search strategies against real questions. Test whether useful evidence is found before tuning answer generation. A larger context window does not fix poor sources.

Permission continuity

Apply tenant and document permissions during retrieval and source access. Ensure cached results and conversation history do not cross user or organisation boundaries.

Product experience

Design for waiting, uncertainty and correction.

The interface should make evidence and limitations visible without making the user decipher the system. We treat the entire interaction as product engineering, including the moments when the model cannot help.

Useful response states

Show progress, cancellation, missing evidence and retry states. Preserve a user's input after a failure, and make it clear when an answer is incomplete.

Reviewable outputs

Link to source passages, expose editable drafts and separate extracted facts from generated interpretation. Make corrections easy to capture.

Conversation boundaries

Agree how long history persists and what context follows a user. Use explicit reset and deletion behaviour rather than indefinite hidden memory.

Human and non-AI paths

Provide escalation or the underlying search and form workflow. Avoid trapping a user in an endless conversation when a direct action would work better.

Safety & data handling

Controls belong in the application.

Prompts and model guardrails are useful layers, not substitutes for access control or security review. We design controls around the data sensitivity and consequences of the workflow; no single filter eliminates prompt injection or factual error.

Untrusted input

Treat uploaded files, retrieved passages and user text as untrusted data. Test instruction injection, source poisoning and attempts to extract protected context.

Validated outputs

Use schemas, allowlists and deterministic checks for fields and downstream actions. Never execute generated code or queries directly just because an output parses.

Provider and retention review

Agree which data reaches a provider, what is redacted and which traces are retained. Review contractual data terms, residency and operational access with your team.

Explicit human approval

Keep publication, financial commitments and other consequential actions behind a defined reviewer or existing approval flow. A model's confidence does not authorise an action.

Abuse and resource limits

Set request limits, context bounds and usage budgets. Protect file processing and retrieval endpoints as well as model calls; account for unusual traffic and costly requests.

Incident and change controls

Define who can disable a feature, revoke access and roll back prompts or models. Compliance claims require your legal and security assessment, not a framework badge.

Evaluation & economics

Measure quality and cost together.

Agree what a useful result means before choosing a model. Build a representative evaluation set, including difficult and unsupported requests, and repeat it when prompts, sources, retrieval or providers change.

Task quality

Check extraction accuracy, completeness, groundedness and usefulness against human-reviewed cases. Verify whether each citation actually supports the relevant claim.

Safety and boundaries

Test permission isolation, prohibited requests, injection attempts and behaviour when evidence is absent. Refusal and escalation are valid outcomes where appropriate.

Latency and reliability

Track end-to-end response time, time to first content and failure rates. Test timeouts, cancellation and concurrency; fallbacks need their own quality and data-policy checks.

Cost per useful result

Include model calls, embeddings, retrieval, hosting, reviewer time and maintenance. Evaluate smaller models, selective caching or routing only when the quality tradeoff is acceptable.

Automated judges can be useful but need calibration against domain experts. A model's self-reported confidence is not a reliable safety boundary. We agree acceptance criteria for your workflow rather than inventing a universal accuracy target.

Technology stack

Choose the tools around the application.

Relevant options, not a mandatory bundle or a claim that every project uses every tool. We select against your platform, evaluation results, operating requirements and the team's ability to maintain it.

Models & serving

OpenAIAnthropic ClaudeGoogle GeminiOpen-weight modelsvLLM

Evaluate managed APIs or self-hosted inference against quality, data terms, latency and operating cost. Private hosting adds infrastructure and maintenance responsibilities.

Application frameworks

Python / FastAPITypeScriptReactVercel AI SDKPydanticZod

Build application APIs, streaming interfaces and schema validation. Use direct provider SDKs when a lightweight integration is sufficient.

Retrieval & knowledge

LlamaIndexLangChainPostgreSQL / pgvectorQdrantOpenSearch

Source ingestion, metadata filters, semantic and keyword retrieval. Vector search is an option, not a requirement for every LLM feature.

State & background work

PostgreSQLRedisObject storageTemporal

Store application records, manage controlled caching and run durable ingestion or processing jobs. Add workflow orchestration only where recovery requirements justify it.

Evaluation & monitoring

promptfooLangfuseOpenTelemetryRagas

Version test cases, compare changes and trace failures. Automated RAG metrics and model judges complement, rather than replace, human review.

Deployment & access

DockerAWS / Azure / Google CloudOIDC / OAuthCI/CD

Fit your infrastructure and identity platform; define secret management, access, monitoring and rollback. Kubernetes is considered when the operational scale warrants it.

Provider and framework capabilities change. We review licensing, maintenance, security and data terms during design. Switching models still requires regression testing, even when an integration layer makes the API change straightforward.

Delivery & handover

Build a narrow slice. Earn the rollout.

We work with your product owner, domain experts and technical team. Each phase produces evidence you can review, with a clear decision about scope, readiness and what happens next.

  1. 01

    Scope the product behaviour

    Map the user's task, source systems and failure consequences. Compare the proposed feature with search, templates or deterministic automation.

    Output: An agreed first slice, baseline and acceptance criteria.

  2. 02

    Test data and model fit

    Use authorised representative examples to check retrieval quality, model behaviour and edge cases before investing in a broad interface.

    Output: A feasibility assessment, initial evaluation set and architecture choices.

  3. 03

    Build the end-to-end slice

    Connect the interface, identity, context, model calls and output validation. Include missing-evidence and unavailable-provider states from the start.

    Output: A reviewable feature running against the agreed sources.

  4. 04

    Evaluate and harden

    Test permissions, injection attempts, unsupported requests, concurrency and cost. Review representative outputs with your domain experts.

    Output: Release evidence, documented limitations and a rollout decision.

  5. 05

    Roll out and transfer

    Start with a bounded audience, monitor performance and define change control. Document deployment, evaluation, support and ownership.

    Output: Agreed source access, operating runbooks and a maintenance plan.

A bounded first engagement

Start with a paid two-week sprint and an agreed first slice. Deliverables, required access and review points are defined before starting. No long-term commitment is required; a production release may need additional work.

What we need from your team

A product or process owner, representative examples, authorised source access and a domain reviewer. We also need a contact for integrations and someone accountable for security requirements and ongoing operation.

Related engineering

When your application needs more.

Explore tool-using agents and practical evaluation or oversight patterns when the workflow justifies them.

Questions before you build

The practical details.

How is an LLM application different from an AI agent?

An LLM application might answer a question, draft text or extract fields in a defined request-response flow. An agent can decide a sequence of steps and invoke tools toward a goal. Many useful products do not need that autonomy. We choose the simplest design that meets the task.

Do we need retrieval, fine-tuning or both?

Retrieval helps provide current, permissioned source information. Fine-tuning may help a specific recurring behaviour or output format when there is suitable training data. Neither is an automatic starting requirement; we test prompting, retrieval and validation first, then assess whether additional training is justified.

Can it work with our existing software?

Usually through authorised APIs, document stores or approved data exports. Feasibility depends on your interfaces, source quality and access policies. We identify those constraints before committing to scope, and avoid replacing systems unnecessarily.

Can you guarantee that it will never hallucinate?

No. Language models can produce incorrect answers, even with retrieval. We reduce exposure through evidence checks, constrained outputs, evaluation and appropriate review. Workflows need explicit handling for uncertainty and failure; a prompt alone is not a guarantee.

Can our data stay private or be self-hosted?

We can assess private deployments and provider configurations against your access, residency and retention requirements. Hosting location alone does not establish compliance. Provider terms, logging, backups, operational access and your legal and security assessment all matter.

How long does development take and what does it cost?

Scope, integration access, data readiness and risk determine the plan. A paid two-week sprint can establish feasibility and build an agreed first slice; it is not a promise of a complete production launch. We agree deliverables and commercial terms before starting.

Who maintains the application after launch?

We agree the handover and ongoing support responsibilities in the engagement. This can include repository access, deployment configuration, evaluation cases and operator guidance. Model updates, changing sources and provider dependencies still need an owner and a maintenance budget.

Build something useful

Bring the task.
We'll shape the application.

Tell us who the feature is for, what information it needs and where the current process falls short. We'll work through feasibility and a sensible first scope.