Skip to content
ALGOLOGIX

AI engineering

Generative AI products

Copilots, document intelligence and structured extraction, built for the inputs you actually get rather than the ones in the demo. Most generative features fail on the messy 20% of traffic, so that is where we start.

  • Copilots
  • Document intelligence
  • Structured extraction
  • Prompt & context engineering
  • Fine-tuning

What we build

In-product copilots
An assistant that knows your domain, your data and what the user is looking at.
Document intelligence pipelines
Classification, extraction and routing over the documents your business runs on.
Structured extraction
Typed, schema-validated output that downstream systems can consume without a parser.
Prompt and context architecture
Versioned prompts, context assembly and a rollback path when a change regresses.
Fine-tuned and distilled models
Where a smaller tuned model beats a large general one on cost, latency or format.

Problems this solves

  • Problem
    It produces good output on clean inputs and nonsense on the real ones.
    Approach
    Assemble the eval set from real traffic including the malformed tail, and score format, faithfulness and refusal separately.
    Outcome
    The failure modes become visible and fixable rather than anecdotal.
  • Problem
    The output is prose when the system downstream needs a record.
    Approach
    Constrain generation to a schema, validate it, and give the model a defined way to say it could not comply.
    Outcome
    Downstream systems consume the output directly, and a failure is an explicit error rather than a bad row.
  • Problem
    Every prompt change is a gamble nobody can review.
    Approach
    Version prompts in the repository, run them against the eval set in CI, and diff the scores in the pull request.
    Outcome
    Prompt changes get reviewed like code, with evidence attached.

How we approach it

  1. Discover

    We ask for the inputs you are embarrassed by. The messy fifth of your traffic is where generative features fail, and it decides whether this is a prompt, a pipeline or a trained model.

  2. Design

    The context and the output schema are designed before the prompt — what is retrieved, what is summarised, what is left out. The schema is what turns a paragraph into something your code can rely on.

  3. Engineer

    Prompts and context live in version control with the rest of the system. Changing either is a pull request that re-runs the evals, not an edit in a console nobody can diff.

  4. Evaluate & harden

    A scored set built from your real documents gates every release. We report the failure classes alongside the score, because the shape of what it gets wrong is what tells you whether to ship.

  5. Launch & operate

    Low-confidence output goes to a person by design, and that queue is the next training set. The feature improves because it is being used, not because somebody tuned a prompt.

What we build it with

Extraction against a schema, with anything under the confidence threshold routed to a review queue instead of into your database.

extract/invoice.py
"""Extraction against a schema, with a review path when unsure."""

from anthropic import Anthropic
from pydantic import BaseModel, Field

client = Anthropic()


class Invoice(BaseModel):
    supplier: str
    total_cents: int = Field(ge=0)
    currency: str = Field(min_length=3, max_length=3)
    confidence: float = Field(ge=0, le=1)


response = client.messages.create(
    model="claude-sonnet-5",
    max_tokens=1024,
    tools=[
        {
            "name": "record_invoice",
            "description": "Record one invoice exactly as written.",
            "input_schema": Invoice.model_json_schema(),
        }
    ],
    tool_choice={"type": "tool", "name": "record_invoice"},
    messages=[{"role": "user", "content": document_text}],
)

invoice = Invoice.model_validate(response.content[-1].input)

# The messy 20% goes to a person, not to a guess.
if invoice.confidence < 0.85:
    review_queue.add(invoice, source=document_id)

Languages

  • Python

AI models & providers

  • Anthropic Claude
  • OpenAI GPT

Agent & LLM frameworks

  • Vercel AI SDK
  • Pydantic AI

ML & computer vision

  • PEFT / LoRA

Observability & evaluation

  • Langfuse
  • Braintrust
The full inventory

Related work

  • Healthcare · 2026

    A knowledge assistant that shows its sources

    A retrieval assistant over clinical policy and procedure documents, answering staff questions with span-level citations and refusing to answer when the documents do not support one.

    Answers carrying a verifiable citation
    • rag knowledge systems
    • generative ai
    • data engineering analytics
    Read a knowledge assistant that shows its sources
  • Retail · 2026

    Turning supplier documents into records

    A document-extraction pipeline for a retail group, classifying and extracting structured records from supplier invoices and delivery notes arriving in every format a supplier felt like using.

    Documents extracted without human review
    • generative ai
    • data engineering analytics
    • backend apis
    Read turning supplier documents into records

Questions we get asked

Do we need to fine-tune a model?

Usually not first. Better context, a tighter schema and a stronger retrieval step beat fine-tuning on most tasks and cost far less to maintain. We fine-tune when the evals show a specific gap that prompting cannot close — typically format adherence or a narrow domain vocabulary.

How do you keep the output in a format our systems can use?

Generation is constrained to a schema and validated before it leaves the service, with an explicit failure path when the model cannot comply. Downstream code receives a typed record or a handled error, never free text it has to parse.

What does it cost to run?

We set a cost-per-run target during Discover and hold the build to it — through model choice, context trimming, caching and routing cheap requests to smaller models. You get the projected unit economics before the build rather than a surprise on the first invoice.

Can it run on our own infrastructure?

Yes. Open-weight models self-hosted with vLLM, or a provider inside your own cloud account such as Bedrock or Vertex, when data residency or procurement rules that out. We size the trade-off in latency and cost before you commit.

Tell us what you are trying to ship.

A first call is 30 minutes and costs nothing. Bring the problem rather than a spec — the useful part is usually working out whether this is the right shape of solution at all.