← All work

NenoBrief by Neno Technologies

Archive officers get cited answers inside their live document system, files never copied

Neno Technologies serves government archives with a document-management system already in production. We built NenoBrief, a self-hosted AI gateway that system calls to ask, search and compare documents, with every answer cited and every original left in its system of record.

Government, Legal & DefenseAI gateway for a live DMSAI added to a live product

NenoDoc AI Mode full-page thread (1920x8828): answers grounded in page chips, citation ledger panel, documents sidebar; top 1400px is the clean view

The challenge

Officers needed answers they could trace across sensitive records, and no record could reach an outside AI service or be copied out of its system of record.

What we did

One self-hosted AI gateway on the client's own GPU host: systems of record push approved text, the live document system asks for cited answers, and originals open from their source.

The outcome

The client's live document system now pushes approved documents to the gateway and its Ask AI calls it in production, with every client finding fixed and rechecked.

Live integration
The client's document system, in production
Answers
Cited to the passage, or a clear decline
Files
Originals stay in the systems of record
Models
Self-hosted on the client's own GPU host

The starting point

Neno Technologies builds document-management and knowledge tools for government institutions with large archives. Its document-management system already ran in production for archive indexing and owns its users and its document preview.

What had to change

The client wanted the cited retrieval we had built for its knowledge workspace extended into one shared AI platform. Its live document system and a partner records system had to ask questions over approved documents and get cited answers.

What could not break

  • Self-hosted models only, on the client's own GPU hosts
  • Originals stay in the systems of record, with no second file store
  • Users stay owned by each source system
  • Tenants kept apart by client id
  • Retrieval fails closed when access cannot be confirmed

The calls we made

We treated the vendor's existing systems as the source of truth and built AI once, as a layer they call, not a place documents move to.

  1. 01

    Build AI once, as a platform

    The vendor wanted one AI pipeline that its own document system, a partner records system and customers with no document system could all call, so we built one gateway with tenants separated by client id and users left owned by each source system.

    Ruled out

    Wiring AI separately into each product, with its own pipeline and its own copy of the users.

  2. 02

    Push text, not files

    Systems of record push only approved text, metadata and a source id and keep their files. We settled this push based sync with the client in a working meeting and shipped the new endpoints the same day.

    Ruled out

    Copying every original into a new store, which would duplicate sensitive records and their permissions.

  3. 03

    Cite, or decline

    Every answer points to the passage it came from, figures are checked against the source, and when the documents do not cover a question the system says so rather than describing a similar entity.

    Ruled out

    Fluent answers without a traceable source, or a near match presented as the answer.

  4. 04

    Scope before ranking, fail closed

    Only authorized text enters the index, each tenant is scoped by client id, and retrieval is filtered by tenant, collection and clearance before reranking, so unknown users and failed lookups get nothing.

    Ruled out

    Filtering after generation, where a restricted passage could already have shaped the answer.

  5. 05

    Fix what live use finds, the same day

    Once the client's live system was calling the gateway, issues found in real use were fixed the same day, and each client test round became tracked findings we fixed and rechecked.

    Ruled out

    Waiting for a later release while users worked around wrong answers.

How the system fits together

AI Modepush and askauthorized textdocumentsscanschunksvectorsquestion, scopefiltered firstallowedpassagescited answerOfficers andindexersWork inside theirown document systemClient's documentsystemIn production, ownsusers and filesPartner recordssystemPushes authorizedtext, source idsAI gateway APIAsk, search, ingest,withdraw, previewIngest pipelineText, metadata,source ids, OCRScoped retrievalMeaning and exactsearch, by tenantQwen2.5-14B onvLLMCited answer, or aclear declineSurya OCRShared with theclient's pipelineEmbeddingsSelf-hostedPostgreSQLand pgvectorAuthorized text andmetadata only
PeopleClient's existing systemBuilt by DaticsAI modelData storeOriginals never leave the systems of record and no outside AI service is called. The index holds only authorized extracted text and metadata, on the client's own GPU host.

What we built

01

Shared AI API

Ask, search, ingest, source withdrawal and document preview endpoints that the client's document-management system and a partner records system call, with tenants separated by client id.

02

AI Mode in the client's interface

Question answering with citations, a brief library, version comparison, agreement intelligence and action points from minutes, opened from inside the document system.

03

Ingest without copying

Systems of record push approved text, metadata and source ids, with ingestion progress and readiness states, and new uploads open before extraction finishes.

04

Retrieval tuned on live use

The same answer for identical questions, unrelated documents filtered out, missing citations restored and exact document titles matched inside questions.

05

Source-owned viewing

Signed, short-lived document viewer links, so a user opens the original from its own system of record.

How it works

Push

The document system pushes approved documents as authorized text, metadata and a source id, and keeps the file.

Index

The gateway reads scans with self-hosted OCR where needed, chunks the text and indexes it.

Ask

A user opens AI Mode inside the document system and asks a question, which arrives scoped to the tenant.

Answer

The self-hosted model answers only from the retrieved passages and cites each one, or says the archive does not cover the question.

Open

A short-lived signed link opens the original from its source system, which checks access again at view time.

A closer look

Two answers from the ask endpointSample data
[
  {
    "question": "Who signed the circular on archive transfers?",
    "answer": "It was signed by the Director of Archives, A. Laurent [1].",
    "citations": [
      {
        "source_id": "doc-48213",
        "title": "Circular on archive transfers",
        "page": 3,
        "passage": "Signed: A. Laurent, Director of Archives"
      }
    ],
    "declined": false
  },
  {
    "question": "Who signed the circular on museum loans?",
    "answer": "The archive does not cover this question.",
    "citations": [],
    "declined": true
  }
]

What changed

The client's live document-management system pushes approved documents to the gateway and calls it from its own Ask AI page in production. Issues found in live use were fixed the same day, and the client's rechecks narrowed its findings round by round.

Under the hood

Datics role
AI added to a live product
Data boundary
Self-hosted models only. The index holds authorized extracted text and metadata in PostgreSQL with pgvector, never the originals.
Access
Tenants separated by client id and users owned by each source system. Retrieval is filtered before reranking and fails closed.
Integrations
The client's document-management system, a partner government records system, and Qwen and Surya services shared with the client's own pipeline.
Deployment
Docker Compose on client-owned AWS EC2 GPU hosts, with vLLM model serving, Redis and Nginx.

Data and retrieval

PostgreSQLpgvectorRedis

Cloud and infrastructure

AWS EC2 GPU

Apps and APIs

FastAPI

Also in the stack

vLLMQwen2.5-14BSurya OCR

How it shipped

  1. AI Mode and the gateway approved

    After the knowledge workspace, the client asked for one shared AI platform, and AI Mode and the gateway were approved with their own milestones.

  2. Staging beside the live system

    The gateway went onto the client's staging GPU host, and the backend was completed for its document system and a partner records system.

  3. Live integration

    Push based sync agreed and shipped the same day, then the client's live system went into production against the gateway, with issues from live use fixed that day.

  4. Client test rounds

    Stress tests and rechecks by the client, each finding tracked, fixed and verified again, while per-user identity was designed and approved.

On the client's own GPU host

Everything runs in Docker Compose on client-owned AWS GPU instances beside the client's existing document system, with models served by vLLM behind Nginx.

Every question answered in writing

We answered each client query in writing, and every finding from the client's test rounds was tracked, fixed and rechecked with them.

Access designed together

The client proposed per-user identity for AI Mode, and together we shaped it into signed launch tokens and live access lookups that filter retrieval before ranking and fail closed.

What this unlocked

Next are per-user identity, roles and tenant administration, approved as a change request, plus a login screen for the AI site. The client has also asked about a third system.

Have a product with the same kind of constraints?

Tell us what already exists and what you want it to do. We will tell you what it takes.

Book a 30-minute Product Review