Private AI · RAG + LLM in a closed environment

    Private AI that runs on your servers and never sees the internet

    A corporate assistant for your documents, databases and code. Models, index and logs stay inside your perimeter, outbound traffic is closed — and every answer cites its source.

    Request a technical consultation
    The perimeter: the AI server inside your infrastructure, the route to the internet blockedYour server roomAI servermodels · index · logsStaffbrowser · IDEYour systemsfiles · ERP · PDMoutbound traffic blockedInternetno route
    • Runs without the internet
    • No licence fee per user or per token
    • Source code and indexes belong to you
    • Permissions are checked before the model sees any text
    Who it is for

    When documents must not go to a cloud AI

    Engineering documentation and drawings

    Specifications, protocols, drawings and technical requirements that a contract or internal policy does not allow to be uploaded to cloud services.

    ISO, audits and traceability

    Every answer has a source — document, revision, status, page — and every question is written to the audit log.

    Defence, dual-use and restricted projects

    A separate collection, denied by default. We, as the developer, have no access to it at all.

    Knowledge in heads and folders

    What was designed years ago, and how, is known to a few people. Search by meaning finds it for a new colleague too.

    What the system does

    Answers from your documents and systems

    Answers from documentation, with a citation

    A question in plain words, an answer with a citation: document, revision, status, page. Where there is no source, the system says so.

    Similar earlier solutions

    Finds where and how a similar task was already solved in earlier projects.

    Comparing technical solutions

    Compares solutions from the documentation, each claim with its own source.

    Live values from ERP and PDM

    Stock, approved revision, BOM — exact, from the source system at the moment the question is asked, not “approximately”.

    Documents from your Word templates

    The system prepares a draft in your template; an engineer reviews and signs it.

    An assistant for developers

    In VS Code and JetBrains through existing open extensions, with the context of your Git repository; changes across several files, reviewed by the developer. The model is local — code does not leave your network.

    Search in Latvian, Russian and English

    A question in Russian finds a document in English: one embedding model for all three languages.

    Typical sources, for example: Windows file shares, SOLIDWORKS PDM, HansaWorld Standard ERP, 1C, Horizon, SharePoint, Git.

    Architecture

    One server in your infrastructure

    No component needs outbound internet access at runtime. Staff work in a browser or in their IDE; the sources stay in their own systems. Everything is run by the orchestrator (a control service that checks permissions and prepares the material).

    Topology: staff, the AI server and its components, source systems and the blocked internetStaffbrowserVS Code / JetBrainsAI server — in your infrastructureGPU · vLLMmodels — no network, no credentialsOrchestrator — code owned by youidentity · permissions · auditdocument generationPostgreSQLpgvector · index · ACLrevisions · auditIndexerparsing · OCRscheduled, no LLMKeycloakSSO · users, groupsMonitoringlocal, sends nothingPDMlive, at question timeread-onlyERPlive, at question timeread-onlyFile sharesindexed on scheduleread-onlyInternetblocked at firewallquery — live trafficscheduled indexingThe model is isolated: no network, no credentials, no database connection.It receives text and returns text. Only the orchestrator checks permissions.

    The orchestrator is the only component with access to your systems. Identity, permissions, revision rules and audit live in one place — code you receive as source.

    ERP and PDM data are not copied into the platform: they are read at the moment they are asked for.

    The interface is replaceable: retrieval is a separate service, not a feature of the chat UI.

    Two circuits

    Documents are searched, values are fetched

    Knowledge

    1
    Specifications, test protocols, manuals, project correspondence, earlier solutions.
    2
    Parsed once, indexed, retrieved by meaning.
    3
    The model summarises the retrieved passages and cites document and revision.
    ∅
    If there is no source: “No approved source found”.
    Example with invented data

    How did we handle fastening under vibration load in project P-17?

    With elastic mounts and a second fastening point.

    Source: TA-017 “Fastening calculation”, rev. B, Approved, p. 4.

    Draft TA-017 rev. C is not approved and was not used in this answer.

    Authoritative values

    1
    Stock, approved revision, current BOM, invoice status.
    2
    A function fetches the value from the source system at question time.
    3
    The model places the value in a sentence — unchanged.
    ∅
    If there is no value: an explicit error, never a substituted number.
    Example with invented data

    Part A-102: approved revision and free stock?

    PDM: revision C, status Approved.

    ERP: on hand 12, reserved 4, free 8.

    Values read from the systems at question time, not calculated.

    If a value has a source system, we ask that system. The model neither calculates nor remembers numbers.

    The answer path

    How a question is answered

    The path of one question from the moment an employee presses Enter to the answer with its sources — simplified to seven steps.

    The answer path in seven steps: user, orchestrator, model, data1UserQuestion + the user's identitysign-in via SSO; the question reaches the orchestrator2OrchestratorThe orchestrator collects permissionsgroups and access profiles constrain everything that follows3ModelThe model chooses functions1st call: a plan only; it executes nothing, holds no credentials4DataIndex searchpermissions inside the queryeach passage with its revisionPDM · ERP functionsas the userread-onlyin parallel5OrchestratorAssemblyapproved revisions first, obsolete ones excludedeach passage labelled: document, revision, status, page6ModelThe model writes the answer from this material only2nd call: every claim carries a citationno source: “No approved source found”7OrchestratorCitation check and audit recordwho asked, which sources and revisions, what was withheldThe model is called twice (steps 3 and 6) and holds no credentials at either point.
    Access control

    Permissions in the query, not after it

    Permissions are applied inside the retrieval query, not as a filter over the results. The difference is not cosmetic: content removed after retrieval has already been read by the model — and can surface in a paraphrase even without a citation.

    Two ways to filter permissions: after retrieval (rejected) and inside the query (adopted)Filter after retrieval — rejectedSearch → 40 passagesincl. restricted onesThe model reads all of themCitations stripped afterwardsRestricted content already “seen”Filter in the query — adoptedUser's permissions → SQLinside the queryRestricted rows never selectedThe model gets only permitted textNothing to leak

    Access profiles per folder

    Each passage carries an access profile. Access profiles are assigned to folders and shared, so a permission change updates one row rather than re-indexing content.

    Permissions at question time

    Permissions are determined at the moment a question is asked: adding or removing a person takes effect immediately.

    Restricted projects — a separate collection

    Denied by default: reachable only through explicit assignment.

    Second line — the source system

    Calls into ERP and PDM carry the user's identity, so the source system applies its own permissions as well.

    At acceptance we run queries as the user with the fewest permissions: we check that they see nothing they should not see — and that they get answers rather than silence.

    No Active Directory? Users and groups are kept in the platform (Keycloak), and the source of groups can later be switched to a directory without redesign.

    Indexing

    How documents are indexed

    Indexing is done by a scheduled service, not by the language model. It is cataloguing: the model is not trained, and its weights never change.

    The indexing pipeline from scan to PostgreSQLScanchanges by hashRoutetext layeror OCRParsetables, structure,pagesIdentifyno., revision,statusChunk~1 page,overlappingEmbedBGE-M3LV · RU · ENPostgreSQLchunk + vector+ revision + accessNo trainingmodel weightsnever changeChanges every 10–15 min · full reconciliation weekly · only modified files are processed

    Why we do not train the model on your documents

    Knowledge absorbed into model weights cannot be permission-scoped, cannot be deleted per document and cannot be cited. That is why knowledge lives in a versioned index.

    Revision and status — from six sources, in order of reliability

    1. 1PDM card
    2. 2File properties
    3. 3File name
    4. 4Folder (e.g. an archive)
    5. 5Document content (title block)
    6. 6Administrator override

    If no source yields a reliable value, the document is indexed and marked “status undetermined”, ranked below approved material and reported to the administrator for review. It is never silently treated as current.

    Security

    The closed environment — how it is ensured

    This section is about the solution you receive: how data and models are kept inside your perimeter.

    1. 01

      Outbound traffic closed at the firewall

      No component requires the internet or an online licence check. Open-weight models (Apache 2.0) — no licence server, no usage reporting.

    2. 02

      Proof at acceptance

      A traffic-capture test shows that nothing leaves the server.

    3. 03

      The model has no network and no credentials

      Only the orchestrator checks permissions. The model cannot bypass permissions because there is nothing for it to bypass.

    4. 04

      ERP and PDM — read-only

      In the first phase no function writes to your systems. Writing comes only as a separate module with approval.

    5. 05

      Audit log

      Who asked, which functions ran with which parameters, which documents and revisions were used, what was withheld.

    6. 06

      No cache across users

      Answers are never reused for another user: a cache would leak content across permission boundaries.

    7. 07

      Supply chain

      Versions pinned by cryptographic digest, nothing downloaded inside the perimeter, a bill of materials (SBOM) with every release, updates only after review.

    8. 08

      Monitoring — on site

      GPU, response times, indexing errors — collected and shown locally, sent nowhere. Query traces have restricted access; for restricted collections — metadata only.

    9. 09

      Disk encryption and backups

      Agreed with your security policy.

    Development and support

    How we work without seeing your data

    Development happens outside your perimeter on synthetic data. Inside the perimeter we deploy, configure, operate and diagnose — but we do not write code.

    Three environments: development and staging identical to production on our side, production inside your perimeterOur side — synthetic data onlyDevelopmentsynthetic documentssame structureStagingidentical to productionversions by checksumboundaryYour perimeterProductionno developmentrollback possiblesigned release → inanonymised diagnostics → outOnly two things cross the boundary: a signed release inwards, anonymised diagnostics outwards.Nothing else, in either direction. No development inside your perimeter.

    Access

    • Sessions only, through your jump host
    • Time-limited, recorded, revocable at any moment
    • No clipboard transfer, no drive mapping

    Restricted projects

    • A separate collection we have no access to at all
    • Initial loading is done by your administrator following our written procedure
    • Diagnostics — metadata only
    • If a defect cannot be reproduced from metadata, we come on site

    Log anonymisation

    • The utility runs inside your perimeter
    • File names → hashes, content removed
    • Types, sizes, processing stages and error codes retained
    • Your security team can review the output

    Immutable releases

    • A defect means a new version, not a patched file
    • The previous version is kept for rollback
    • Your administrator can apply a release without us
    Options

    How to start

    A

    Pilot on a rented dedicated server in the EU

    Where it runs
    A physical server in an ISO 27001 EU data centre; the whole server is yours alone
    Hardware
    Nothing to buy: the server with an NVIDIA RTX PRO 6000 96 GB is rented
    When it fits
    To test on your own documents before capital expenditure; can be stopped at any time
    How to move on
    Moves into your server room without a rebuild — the same containers

    Not for restricted or defence data — options B or C only.

    B

    One GPU in your server

    Where it runs
    Your server room, no internet
    Hardware
    1× NVIDIA RTX PRO 6000 96 GB; a chassis for 2–4 cards
    When it fits
    Minimum production configuration: one large model (gpt-oss-120b) for both chat and code; embeddings on CPU
    How to move on
    A second GPU can be added later without changing the architecture

    Honestly: the large model and a separate coding model cannot both be loaded into GPU memory at once; embeddings run on CPU, so mass re-indexing is slower; for code the large model is slightly weaker than a dedicated coding model.

    C

    Two GPUs in your server

    Where it runs
    Your server room, no internet
    Hardware
    2× NVIDIA RTX PRO 6000 96 GB
    When it fits
    Room on the second card: a separate coding model, embeddings on GPU (faster mass re-indexing), a public chatbot, later voice
    How to move on
    New modules on the second card, without taking memory from the main model

    The second card does not speed up chat: in both options the main model runs on one card, so speed at 5 and 10 sessions is the same in B and C.

    Indicative speed: 1× RTX PRO 6000 96 GB, gpt-oss-120b

    Indicative — we measure on your hardware during the pilot. The same for options B and C: in both, the main model runs on one card.

    Concurrent sessionsSpeed per sessionFirst token
    590–140 tokens/s0.4–1.0 s
    1060–100 tokens/s0.7–1.5 s

    What fits in 96 GB

    • gpt-oss-120b: ≈65 GB of weights + cache for ≈20 sessions at 32K context
    • or two 30B-class models in FP8
    • does not fit: models above 200B, and 70B models in FP16

    We fix the price after the pilot measurements.

    Request a technical consultation
    Option A in detail

    Pilot on a rented server — how it is built

    Eight weeks, two working functions and a limited set of documents. Inside — the same architecture as in the full phase, only with fewer functions.

    What server

    A dedicated physical server — not a virtual machine and not a shared cloud GPU — in an EU data centre with ISO 27001 certification. The whole server is rented; one graphics card, used by you alone.

    GPU
    NVIDIA RTX PRO 6000 Blackwell, 96 GB
    CPU
    Intel Xeon, 24 cores
    Memory
    256 GB DDR5 ECC
    Storage
    NVMe

    Why this card

    The main model takes ~65 GB, plus room for the documents being processed. A smaller card fits only a markedly weaker model — and the pilot would show a different quality from what you would get later.

    Encryption on the server

    Documents, templates and reference sets are kept on an encrypted LUKS volume; you enter or hand over the key when the server starts.

    Server network

    Outbound internet closed. Inbound only from your addresses and two social.tech engineers; everything else is rejected. The absence of outbound traffic is verified by traffic capture and shown to you.

    Alternatives we assessed

    EU cloud GPU
    Cheaper, but shared infrastructure: other customers run on the same hardware at the same time
    A smaller card
    Fits only a markedly weaker model
    Your existing servers
    They lack the required graphics card
    US clouds
    Data outside EU jurisdiction

    Scope

    • 8 weeks
    • 2–3 completed projects — roughly 500–2,000 files
    • 2–3 users and one observer
    • Function 1: a document set from your template and a reference project — a draft the engineer reviews and signs
    • Function 2: archive search by meaning, citing “document, revision, page”; where there is no source — a refusal, not an invented answer
    • ERP/PDM integration is a separate option, read-only, over the same channel. Without it we work with file exports: for example, the assembly structure and parts list are exported with built-in CAD tools, no extra licences

    Week by week

    1. 1Infrastructure and channel, isolation check
    2. 1–2Bottleneck analysis, templates and formatting rules, choice of material, typical questions
    3. 3Document transfer and indexing
    4. 4Archive search
    5. 5–7The document-set function, iterations with engineers
    6. 8Demonstration, review of results, proposal for the full phase

    From you: an NDA, 2–3 projects, a list of users, a channel administrator and IP addresses, about half a day a week from two engineers.

    What stays with you after the pilot

    • A working installation on your projects
    • Clarity on what the system does well, partly, and not at all
    • Templates and formatting rules analysed and written down
    • An estimate of the full phase based on what was seen, not on assumptions

    If it does not suit you, the work ends and the analysis stays with you.

    Moving into your perimeter

    The platform is built as containers that are identical on the rented server and on yours. Moving means the same containers on the purchased server, restoring the configuration and re-indexing the whole archive — inside your network. No code is rewritten; status rules, template mappings and prompt wording travel with it. After the pilot the data is deleted with confirmation — or moves to you.

    Pilot channel

    The channel to your perimeter

    On a rented server, an agreed set of documents leaves your network — and, if an integration option is taken, requests to your systems travel the same way. Everything goes through a single channel.

    The channel from your perimeter to the rented EU server through a session tunnelYour perimeterAdministrator selectsyou decide whichprojects leaveEncrypted containerAES-256the key stays with youERP · PDMonly if the option is takenread-onlySession tunnelWireGuardopened on your requestclosed by defaultsessions are loggedRented server · EUEncrypted volumeLUKSkey entered at start-upChecksum verificationexactly what was senthas arrivedIndexing and operationonly the set you sentServer access — only from your addresses and two social.tech engineersoutbound internet blocked · inbound by address list · everything else rejected

    How it works

    1. 01

      Documents

      Your administrator selects the agreed set, packs it into an encrypted container and sends it through the tunnel. The key stays with you. On the server the content lands on an encrypted volume and is verified against checksums.

    2. 02

      Integrations

      If the option is taken — through the same tunnel, read-only, within an agreed set of data. The account is issued and revoked by you.

    3. 03

      The tunnel

      Closed by default, opened from your side. Sessions are logged.

    4. 04

      No outbound route

      The server has no route to the internet. Verified by traffic capture and shown to you.

    5. 05

      At the end

      The data is deleted with confirmation — or moved into your perimeter if the project continues.

    Which projects and which data leave is decided by you.

    Project stages

    Two paths

    a

    Start with a pilot on a rented server

    1. 8 weeks

      Pilot on a rented server — as described above

    2. Decision

      Continue or stop — based on the result you have seen

    3. Full phase

      Inside your perimeter: the same containers, the whole archive, the integrations you need

    b

    Straight into your perimeter

    1. Stage 0 · ~6 weeks

      A pilot with measurable acceptance criteria: a golden set of questions, a permission-leak test as the user with the fewest permissions, a concurrent-session measurement, an outbound-traffic test

    2. Decision gate

      Continue or stop, paying for Stage 0 only

    3. Phase 1 · 14–16 weeks

      Two production releases

    4. 4 weeks

      Post-launch support

    5. Phase 2 · optional

      PDM/ERP writing with approval, agents, voice, a public chatbot, further integrations

    The pilot work is credited to Phase 1 in full if you continue within 3 months.

    What stays yours

    What you receive

    • Source code, configurations, indexes and templates — yours from day one
    • No licence fee per user or per token
    • The system keeps working if support ends — there are no licence keys
    • A trained administrator on your side
    • Documentation

    Support is optional: a subscription with a fixed number of hours, or on request.

    Honestly

    What the system does not do

    • It does not interpret drawing geometry: it reads title blocks, parts lists and technical requirements, but does not verify dimensions or fit.
    • Generated documents are drafts — an engineer reviews and signs them.
    • The first phase only reads from your systems.
    • We do not guarantee complete recall — we measure it against your set of questions with an agreed threshold.
    • Open models write less well in Latvian than in English or Russian — we measure this in the pilot and report the results.
    • Poor scans are the least predictable part — we assess them in Stage 0.

    The system inherits your document discipline; it does not repair it.

    Technology

    Technology and why

    The components and why we chose them (14)
    vLLM
    Several users on one card without queueing; a standard API, so the model can be replaced without touching the application. Ollama is built for a single user.
    gpt-oss-120b · gpt-oss-20b
    Apache 2.0: no licence server, no usage reporting, no expiry date. 120b answers at the speed of a small model (~5B active parameters per token); 20b handles classification and routing.
    LiteLLM
    Which model serves which task is one configuration line. Replacing the model is not a project.
    PostgreSQL + pgvector
    Vectors, permissions, revisions and audit in one database and one transaction. A separate vector store would mean two stores to keep in step.
    BGE-M3
    Latvian, Russian and English in one model: a question in Russian finds a document in English.
    bge-reranker-v2-m3
    A second pass: of ~50 candidates, the best 10–15 passages reach the model.
    Docling
    Keeps table structure and reading order in technical PDFs; OCR for scans.
    Keycloak
    Local accounts today, a directory later — with no change to the application.
    Open WebUI
    The interface only. Its built-in document search has no permission model, which is why retrieval is our separate service with permissions.
    MCP
    Each function is a small, separately testable service with a declared signature.
    docxtpl + LibreOffice
    Fills your own Word templates instead of inventing a layout.
    Docker Compose
    Versioned, checksummed images. Kubernetes on a single server is needless complexity.
    Prometheus · Grafana · DCGM
    GPU, response times, indexing errors — local, sent nowhere.
    Langfuse
    Shows which passages and function results produced an answer. Restricted access; metadata only for restricted collections.
    Funding

    Co-funding

    We help prepare the technical part of an application to Latvian and EU programmes: scope, justification, work packages, budget and plan. The project stages map well onto work packages.

    Costs are usually eligible only after the application is submitted or decided — so we align the choice of programme with your procurement timeline.

    Questions

    Frequently asked questions

    Does our data ever leave our network?

    From your server — no: outbound traffic is closed at the firewall, and a traffic-capture test proves it at acceptance. Only a signed release crosses the boundary inwards and anonymised diagnostics outwards — if your security team allows it. In a pilot on a rented server, only the document set you choose leaves: encrypted, through a tunnel you open.

    What happens if you stop supporting it?

    The system keeps working. Source code, configurations and indexes are yours, there are no licence keys, and your administrator can apply a release without us.

    Can it work without Active Directory?

    Yes. Users, groups and permissions are kept in the platform (Keycloak). The permission model is built so that the source of groups can later be switched to a directory without redesign.

    Does the model learn from our documents?

    No. Documents are indexed; the model's weights do not change. Knowledge in weights could not be permission-scoped, deleted per document or cited — in an index it can.

    What about classified projects?

    They go into a separate collection, denied by default, that we have no access to at all. Initial loading is done by your administrator following our procedure, diagnostics are metadata only, and if a defect cannot be reproduced we come on site. A pilot on a rented server is not suitable for such data.

    What hardware is needed?

    At minimum, one server with 1× NVIDIA RTX PRO 6000 96 GB in a chassis for 2–4 cards; a second card can be added later. We measure speed under your load during the pilot.

    Can we start without buying hardware?

    Yes — with an 8-week pilot on a rented physical server in the EU. If you continue, the same containers move to your server without a rebuild.

    Request

    Request a technical consultation

    Tell us what documents and systems you have. We will reply with clarifying questions and suggest where to start — a pilot on a rented server or straight inside your perimeter.