Skip to contentNO

»» 4 parts · updated på norsk

Services

  1. 1Local AI and on-premise inference
  2. 2Data structuring and digitalisation of operations
  3. 3AI agents
  4. 4Web development and applications

1Local AI and on-premise inference

We implement and adapt open language models (open weights) directly on the company's own servers. The solution fits where strict requirements on sensitive data, intellectual property (IPR) or regulation rule out external cloud services.

ops@srv-ai-01⌘1ollama serve⌘2ssh · 4 ms
ops@srv-ai-01:~$ nvidia-smi -L
GPU 0: NVIDIA L40S (UUID: GPU-3f1c9a0e-7d42-4b8e-9c15-2a6e0b7d4f81)
ops@srv-ai-01:~$ curl -fsSL https://ollama.com/install.sh | sh
>>> Installing ollama to /usr/local
[sudo] password for ops:
>>> Downloading ollama-linux-amd64.tar.zst
################################################################################# 100.0%
>>> Creating ollama user...
>>> Adding ollama user to render group...
>>> Adding ollama user to video group...
>>> Adding current user to ollama group...
>>> Creating ollama systemd service...
>>> Enabling and starting ollama service...
Created symlink /etc/systemd/system/default.target.wants/ollama.service → /etc/systemd/system/ollama.service.
>>> NVIDIA GPU installed.
ops@srv-ai-01:~$ ollama -v
ollama version is 0.40.15
ops@srv-ai-01:~$ ollama pull mistral-small3.2
pulling manifest
pulling 41a5b0c36a28 100% ▕███████████████████████████▏ 15 GB
pulling 706c4d1164f7 100% ▕███████████████████████████▏ 699 B
pulling 9c810f69c610 100% ▕███████████████████████████▏ 2.3 KB
pulling 43070e2d4e53 100% ▕███████████████████████████▏ 11 KB
pulling e0daf17ff83e 100% ▕███████████████████████████▏ 21 B
verifying sha256 digest
writing manifest
success
ops@srv-ai-01:~$ sudo ufw default deny outgoing
Default outgoing policy changed to 'deny'
(be sure to update your rules accordingly)
ops@srv-ai-01:~$ ss -tln | grep 11434
LISTEN 0 4096 127.0.0.1:11434 0.0.0.0:*
ops@srv-ai-01:~$ ollama run mistral-small3.2 "What is the deadline? $(cat tender/fjellvegen-skole.txt)"
The tender deadline is 14 January at 12:00, and the tender is submitted electronically.
ops@srv-ai-01:~$
Ubuntu 24.04 LTSGPU 4%VRAM 15.9 / 48 GBollama 0.40.15
LLocal
New chat
Today3
Fjellvegen skole, checklist
Deviation 7, draft reply
Timesheet week 45
This week12
Summary, meeting with the client
HSE procedure, scaffolding
MMistral Small 3.2 24Bsrv-ai-01 · 41 tok/s
IH
Ingrid H.09:14
Make a checklist for the submission.
PDFfjellvegen-skole-tender.pdf38 pages · 2.4 MB
M
Mistral Small 3.209:14
Read 38 pages in 4.2 s
The deadline is 14 January at 12:00. This must be included:
  • Signed tender letterp. 4
  • Completed price form, appendix 3p. 11
  • O&M manual for the boards, fire class A2p. 23
  • HSE self-declarationp. 31

Ask about your documents

Answers are made on srv-ai-010 B sent out

2Data structuring and digitalisation of operations

We turn unstructured operational and product data into reliable, searchable and machine-readable datasets. The data can be connected to systems and AI, and delivered through APIs. On top of that we can build process automation and workflows that replace manual data handling.

OTakeover /Platform B0 of 3 decided
XLSsap-pm-export.xlsx 4,812 tagsXLStag-register.xlsx 4,790PDFvendor manuals 212 filesSPIRspir.xlsx 1,106 parts
Deviations 4All tags 4,812Decisions 0
TagDescriptionClassConsequenceStatus
20PA001ACrude booster pump APUHHMdeviation
20-PA-001ACrude booster pump APU???duplicate
71PA003Fire pump, dieselSCECEHMLdeviation
82CR001Main deck craneCR???no class
27PA001A-M01Motor, export pump AEMMHMclear
24VE001Glycol contactorVEHHHclear
21PA002BMetering pump BPUMMMclear
43VE002Flare knockout drumVEHMLclear
27CO001Export compressorCOHHHclear
20HE003Crude oil coolerHEMHLclear
71PA004Fire pump, electricSCEPUHMLclear
Interval in two units1 of 3
20PA001A · seal inspection · PU · H / H / M
PDFVendor manualbooster-pump-manual.pdf · p. 418,000running hours
XLSSAP PMmaintenance plan · row 1,20412months
XLSSAP PM, measuring pointrunning hours, last 12 months7,640hours

The pump runs about 7,600 hours a year, so 12 months is not the same as 8,000 hours. No source wins on date.

Decided: 8,000 running hours, source the manual p. 41.
Same pump, two tags2 of 3
20-PA-001A · tag format · serial number
XLSTag register20PA001A · row 88S/N 4471-22
XLSSAP PM20-PA-001A · row 3,377empty field
SPIRSPIR20PA001A · seal kit2 in stock

The hyphens make SAP see two tags. The serial number exists only in the tag register.

Decided: merged. 20-PA-001A now points to 20PA001A.
Safety-critical, longer interval than the vendor3 of 3
71PA003 · oil change · CE · SCE · H / M / L
PDFVendor manualdiesel-engine-manual.pdf · p. 112250running hours
XLSSAP PMmaintenance plan · row 2,018500running hours

The equipment is a safety barrier. An interval longer than the vendor's requires a justification, and there is none.

Decided: 250 running hours. SAP PM gets the change at the next transfer.
GET/api/tag/20PA001A12 ms
{
  "tag": "20PA001A",
  "class": "PU",
  "consequence": "H/H/M",
  "interval": null,
  "source": null,
  "decided": null
}

3AI agents

We implement AI agents fitted to the company's tasks and security requirements, and develop task-specific layers on top of Gemini, Claude or GPT.

BVaktlogg /Deviation agent· architectureBRIH100%Share
Report from Vaktlogg14:02
Leak at the mechanical seal on booster pump A. Dripping steadily.
Equipment20PA001A
Task layer · deviation agentthe layer is unchanged
Tools3
  • find_equipment in SAP PM
  • check_stock spare parts
  • create_draft work order
Rules2
  • Safety-critical equipment requires approval
  • Never sends an order itself
Context3
  • The maintenance programme
  • ISO 14224 codes
  • History, 24 months
Claudemodelin use
Geminimodelin use
GPTmodelin use
Draft work order#40021876
Failure modeELP
CriticalityH / H / M
Spare partSeal kit, 2 in stock
awaiting approval
IH
Ingrid H.now
Can we run this on Gemini?
BR
Yes. The layer is the same.

4Web development and applications

We develop simple websites (HTML/CSS/JS) and complex web applications with integrated AI functionality. We fit the technology to the purpose, whether that is a simple company site or advanced internal and external tools.

Vaktlogg› iPhone 17 ProBuild Succeeded14:32
NewReport✕SuggestionCard
Vaktlogg › Report › NewReport › Pbody
import SwiftUI
struct NewReport: View {
@State private var report = Report.new("20PA001A")
@Environment(VaktloggAI.self) private var ai
var body: some View {
Form {
EquipmentCard(report.equipment)
ImagePicker($report.images)
TextField("What do you see?",
text: $report.text)
if let f = ai.suggestion(report) {
SuggestionCard(f)
}
}
.navigationTitle("New report")
.toolbar { SendButton(report) }
}
}
#Preview {
NavigationStack { NewReport() }
.environment(VaktloggAI.local)
}
9:41
20PA001ACrude booster pump AModule M12 · deck 2HHM
drip at seal
What do you see?Leak at the mechanical seal. Dripping steadily.
Suggestionlocal
Failure modeELP
PriorityH · due in 5 days
Spare part2 seal kits
Use suggestion
Reports3OrdersEquipmentMe